async def quita_destacados(client, reaction, user): BD_URL = os.getenv("DATABASE_URL") base_de_datos = psycopg2.connect(BD_URL, sslmode='require') bd = base_de_datos.cursor() bd.execute( tabla_destacados.format( '"' + reaction.message.server.id + '_destacados"', )) bd.execute( f'SELECT id_canal, emoji, minimo, ids_destacados, ids_destaque FROM "{reaction.message.server.id}_destacados"' ) canal, emoji, minimo, ids_destacados, ids_destaque = bd.fetchone() ids_destacados = ids_destacados.split(",") ids_destaque = ids_destaque.split(",") if reaction.emoji == emoji or str(reaction.emoji) == emoji: if reaction.message.id in ids_destacados and reaction.count < minimo: i = ids_destacados.index(reaction.message.id) canalObjeto = discord.utils.get(reaction.message.server.channels, id=canal) mensaje = await client.get_message(canalObjeto, ids_destaque[i]) ids_destacados.remove(reaction.message.id) del ids_destaque[i] await client.delete_message(mensaje) bd.execute( f'UPDATE "{reaction.message.server.id}_destacados" SET ids_destacados = %s, ids_destaque = %s WHERE id_canal=%s', (",".join(ids_destacados), ",".join(ids_destaque), canal)) base_de_datos.commit() bd.close() base_de_datos.close()
async def minimo_destacado(client, message, nick_autor, avatar_autor, mensaje_separado, prefijo): BD_URL = os.getenv("DATABASE_URL") base_de_datos = psycopg2.connect(BD_URL, sslmode='require') bd = base_de_datos.cursor() bd.execute( tabla_destacados.format('"' + message.server.id + '_destacados"')) bd.execute(f'SELECT minimo FROM "{message.server.id}_destacados"') minimo_destacados = bd.fetchone() if len(mensaje_separado) < 2: if minimo_destacados == None: await client.send_typing(message.channel) await client.send_message( message.channel, "No se ha establecido la cantidad de reacciones necesarias para " + "destacar mensajes.") else: await client.send_typing(message.channel) await client.send_message( message.channel, "La cantidad de reacciones necesarias para destacar un mensaje es " + "de: **" + str(minimo_destacados[0]) + "**.") elif len(mensaje_separado) > 3: await client.send_typing(message.channel) await client.send_message( message.channel, "Para hacerte llamar profesional creo que necesitas demasiada " + "suerte. Sólo dime el número y nada más.") elif message.author.server_permissions.manage_channels or message.author.server_permissions.manage_messages: try: mensaje_separado[1] = int(mensaje_separado[1]) if minimo_destacados == None: bd.execute( f'INSERT INTO "{message.server.id}_destacados"(minimo) VALUES(%s)', (mensaje_separado[1], )) else: bd.execute( f'UPDATE "{message.server.id}_destacados" SET minimo = %s WHERE minimo = %s', (mensaje_separado[1], minimo_destacados)) await client.send_typing(message.channel) await client.send_message( message.channel, "**¡Ding ding ding!** La cantidad de reacciones necesarias para " + "destacar un mensaje es, ahora, de: **" + str(mensaje_separado[1]) + "**.") base_de_datos.commit() except ValueError: await client.send_typing(message.channel) await client.send_message( message.channel, "No necesitas suerte para saber que eso no " + "es un número entero.") else: await client.send_typing(message.channel) await client.send_message( message.channel, "Claro, ya lo hago**...\n...\n...\n...**\n" + "¡TE LA CREÍSTE! Sólo hago favores a los **profesionales**.")
async def emoji_destacado(client, message, nick_autor, avatar_autor, mensaje_separado, prefijo): emojis = [str(emoji) for emoji in message.server.emojis] emojis += UNICODE_EMOJI BD_URL = os.getenv("DATABASE_URL") base_de_datos = psycopg2.connect(BD_URL, sslmode='require') bd = base_de_datos.cursor() bd.execute( tabla_destacados.format('"' + message.server.id + '_destacados"')) bd.execute(f'SELECT emoji FROM "{message.server.id}_destacados"') emoji_destacados = bd.fetchone() if len(mensaje_separado) < 2: if emoji_destacados == None: await client.send_typing(message.channel) await client.send_message( message.channel, "No se ha seleccionado ningún emoji para mensajes destacados.") else: await client.send_typing(message.channel) await client.send_message( message.channel, "Ya puedes destacar mensajes con el emoji: " + emoji_destacados[0]) elif len(mensaje_separado) > 3: await client.send_typing(message.channel) await client.send_message( message.channel, "Dime sólo el emoji, no me cuentes tu vida.") elif mensaje_separado[1] in emojis: if message.author.server_permissions.manage_channels or message.author.server_permissions.manage_messages: if emoji_destacados == None: bd.execute( f'INSERT INTO "{message.server.id}_destacados"(emoji) VALUES(%s)', (mensaje_separado[1], )) else: bd.execute( f'UPDATE "{message.server.id}_destacados" SET emoji = %s WHERE emoji = %s', (mensaje_separado[1], emoji_destacados)) await client.send_typing(message.channel) await client.send_message( message.channel, "Ya puedes reaccionar con " + mensaje_separado[1] + " para destacar mensajes.") base_de_datos.commit() else: await client.send_typing(message.channel) await client.send_message( message.channel, "Ni lo creas, no tienes permiso de eso. No encenderé mi MAC por ti." ) else: await client.send_typing(message.channel) await client.send_message( message.channel, "Mira chico, estoy ocupado con mi juego de Star Wars, " + "así que no me molestes. Háblame cuando tengas el emoji.") bd.close() base_de_datos.close()
async def canal_destacado(client, message, nick_autor, avatar_autor, mensaje_separado, prefijo): BD_URL = os.getenv("DATABASE_URL") base_de_datos = psycopg2.connect(BD_URL, sslmode='require') bd = base_de_datos.cursor() bd.execute( tabla_destacados.format('"' + message.server.id + '_destacados"')) bd.execute(f'SELECT id_canal FROM "{message.server.id}_destacados"') canal_destacados = bd.fetchone() if len(message.channel_mentions) == 0: if canal_destacados == None: await client.send_typing(message.channel) await client.send_message( message.channel, "No han seleccionado ningún canal para mensajes destacados.") else: canalDestacado = discord.utils.get(message.server.channels, id=canal_destacados[0]) await client.send_typing(message.channel) await client.send_message( message.channel, "El canal para mensajes destacados es: " + canalDestacado.mention) else: if not message.author.server_permissions.manage_channels: error = "¡Todo listo! Espera... Tú no tienes permisos para hacer eso. Mejor cómprate una MAC, {}." await client.send_typing(message.channel) await client.send_message(message.channel, error.format(nick_autor)) elif len(message.channel_mentions) > 1: await client.send_typing(message.channel) await client.send_message( message.channel, "ERROR: Tienes que elegir un solo canal.") return else: canal_agregar = message.channel_mentions[0] exito = "Has elegido el canal {} para los mensajes destacados" if canal_destacados == None: estrella = "⭐" agregar_bd = "INSERT INTO {}(id_canal, emoji, minimo) VALUES(%s, %s, %s)" bd.execute( agregar_bd.format('"' + message.server.id + '_destacados"'), (canal_agregar.id, estrella, 1)) else: bd.execute( f'UPDATE "{message.server.id}_destacados" SET id_canal = %s WHERE id_canal = %s', (canal_agregar.id, canal_destacados)) await client.send_typing(message.channel) await client.send_message(message.channel, exito.format(canal_agregar.mention)) base_de_datos.commit() bd.close() base_de_datos.close()
async def crear_tabla(client, message, nick_autor, avatar_autor, mensaje_separado, prefijo): if message.author.id in whitelist and whitelist[ message.author.id] == "franco": BD_URL = os.getenv("DATABASE_URL") base_de_datos = psycopg2.connect(BD_URL, sslmode='require') bd = base_de_datos.cursor() bd.execute( tabla_destacados.format('"' + message.server.id + '_destacados"')) base_de_datos.commit() bd.close() base_de_datos.close() await client.send_typing(message.channel) await client.send_message(message.channel, "Tarea finalizada.") else: await client.send_typing(message.channel) await client.send_message( message.channel, "Buen intento pero sólo el profesional que me creó puede hacer eso." )
async def servidor_entro(client, servidor): """Al unirse al server, crea una base de datos.""" if hasattr(servidor, "id"): #Si tiene id, es un servidor #Conecta a la BD o la crea si no existe BD_URL = os.getenv("DATABASE_URL") base_de_datos = psycopg2.connect(BD_URL, sslmode='require') bd = base_de_datos.cursor() bd.execute(tabla_mute.format( '"' + servidor.id + '_silenciados"', )) #Crea la tabla de silenciados si no existe bd.execute(tabla_encuestas.format('"' + servidor.id + '_encuestas"', )) bd.execute(tabla_prefijos.format('"' + servidor.id + '_prefijos"', )) bd.execute( tabla_destacados.format('"' + servidor.id + '_destacados"', )) bd.execute( tabla_confiables.format('"' + servidor.id + '_confiables"', )) bd.execute( f'INSERT INTO "{servidor.id}_prefijos"(prefijo) VALUES(%s);', (default_prefix, )) base_de_datos.commit() bd.close() base_de_datos.close() #Cierra la conexión
async def pone_destacados(client, reaction, user): channel = reaction.message.channel BD_URL = os.getenv("DATABASE_URL") base_de_datos = psycopg2.connect(BD_URL, sslmode='require') bd = base_de_datos.cursor() bd.execute( tabla_destacados.format( '"' + reaction.message.server.id + '_destacados"', )) bd.execute( f'SELECT id_canal, emoji, minimo, ids_destacados, ids_destaque FROM "{reaction.message.server.id}_destacados"' ) id_canal, emoji, minimo, ids_destacados, ids_destaque = bd.fetchone() if reaction.emoji == emoji or str(reaction.emoji) == emoji: if user == reaction.message.author or user.bot: await client.send_message( channel, "Ni tú ni los bots pueden destacar tus mensajes, " + user.display_name + ".") elif id_canal == None: await client.send_message( channel, "Aún no han seleccionado ningún canal para mensajes destacados." ) elif emoji == None: await client.send_message( channel, "No se ha seleccionado ningún emoji para mensajes destacados.") elif minimo == None: await client.send_message( channel, "No se ha establecido la cantidad necesaria de reacciones " + "para destacar mensajes.") elif reaction.count >= minimo: canal = discord.utils.get(channel.server.channels, id=id_canal) if canal == None: await client.send_message( channel, "El canal elegido no es válido. Por favor cámbialo con " + "el comando *dcanal*.") elif canal != channel: if message.id not in ids_destacados: embed = discord.Embed( title=u"\U0001F4CC" + reaction.message.author.display_name + " en #" + channel.name, description=reaction.message.content, colour=0xFFFF00) embed.set_thumbnail(url=reaction.message.author.avatar_url) if len(reaction.message.attachments) == 1: if re.search("https://.+\.png|jpg|jpeg|bmp|gif", reaction.message.attachments[0]['url']): embed.set_image( url=reaction.message.attachments[0]['url']) else: embed.description += "\n**__Adjunto__**"+"\n["+message.attachments[0]['filename']+"]("+\ message.attachments[0]['url']+")" elif len(reaction.message.attachments) > 1: imagenes = 0 adjuntos = 0 for adjunto in reaction.message.attachments: if re.search("https://.+\.png|jpg|jpeg|bmp|gif", adjunto['url']): if imagenes == 0: embed.description += "\n**__Imágenes__**" imagenes += 1 embed.description += "\n" + str( imagenes) + ") " + adjunto['url'] else: if adjuntos == 0: embed.description += "\n**__Adjuntos__**" adjuntos += 1 embed.description += "\n"+str(cuenta)+") ["+adjunto['filename']+"]("+\ adjunto['url']+")" if len(reaction.message.embeds) == 1: if 'author' in reaction.message.embeds[0]: if 'url' in reaction.message.embeds[0]['author']: embed.description += "\n\n[**"+reaction.message.embeds[0]['author']['name']+"**]("+\ reaction.message.embeds[0]['author']['url']+")" else: embed.description += "\n\n**" + reaction.message.embeds[ 0]['author']['name'] + "**" if 'title' in reaction.message.embeds[0]: embed.description += "\n\n**__" + reaction.message.embeds[ 0]['title'] + "__**" if 'description' in reaction.message.embeds[0]: embed.description += "\n\n" + reaction.message.embeds[ 0]['description'] if 'fields' in reaction.message.embeds[0]: for campo in reaction.message.embeds[0]['fields']: embed.add_field(name=campo['name'], value=campo['value']) if 'image' in reaction.message.embeds[0]: embed.set_image( url=reaction.message.embeds[0]['image']['url']) if 'footer' in reaction.message.embeds[0]: embed.add_field(name="Footer", value=reaction.message.embeds[0] ['footer']['text']) fecha = datetime.datetime.strftime( reaction.message.timestamp, "%d/%m/%Y %H:%M:%S") embed.set_footer(text=reaction.message.id + " | " + fecha, icon_url=client.user.avatar_url) mensaje = await client.send_message(canal, embed=embed) ids_destacados += reaction.message.id + "," ids_destaque += mensaje.id + "," bd.execute( f'UPDATE "{reaction.message.server.id}_destacados" SET ids_destacados = %s, ids_destaque = %s' + 'WHERE minimo = %s', (ids_destacados, ids_destaque, minimo)) base_de_datos.commit() bd.close() base_de_datos.close()