示例#1
0
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()
示例#2
0
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**.")
示例#3
0
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()
示例#4
0
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()
示例#5
0
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."
        )
示例#6
0
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
示例#7
0
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()