(discord.py) Сохранять несколько экземпляров банов в ожидании - PullRequest
0 голосов
/ 25 мая 2020

Я разрабатываю бота Discord, который выполняет следующие действия: 1) перехватывает ссылку в определенных текстовых каналах и удаляет ее 2) отправляет встраивание в канал «журнала», предоставляющее информацию о нарушении. 3) Затем бот отправляет второе встраивание, к которому он добавляет две реакции, встраивание спрашивает, хотите ли вы заблокировать пользователя или нет. 4) Реагирование с помощью эмодзи: успех: пользователь забанен, реакция: отказано: пользователь не забанен. В обоих случаях второе встраиваемое сообщение модифицируется результатом выполненного действия.

Все это работает идеально только в том случае, если в канале «журнал» находится только один запрос подтверждения бана. Если есть несколько ожидающих запросов, все перестает работать должным образом. I wi sh может быть несколько запросов на подтверждение блокировки. Как я могу это сделать?

Код начинается с функции on_message, внутри я вспоминаю две функции, которые выполняют то, что я описал выше:

@commands.Cog.listener()
    async def on_message(self, message):
        await self.bot.process_commands(message)

        if re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', message.content.lower()):
            if str(message.channel.id) not in channel_id:
                await message.delete()
                await filter_logs(message, "**MESSAGGIO FILTRATO**", None, message.author, message.channel.mention, message.content, "**BAN**", message.author.id, "**LINK**")
                await emoji_react(message, "ban", message.author.id, "SPAM", self.bot)

Ниже приведены две функции, вызываемые в on_message :

channel_id = ["713828556374802512", "713828588071157812"]


async def filter_logs(message, title, motivation, user, channel, content, action, user_id, filter):
    embed = discord.Embed(title=title, color=0xe74c3c)
    embed.add_field(name="Utente:", value=user.mention+" ({})".format(user_id), inline=False)
    embed.add_field(name="Canale:", value=channel, inline=False)
    embed.add_field(name="Filtro:", value=filter, inline=False)
    embed.add_field(name="Messaggio:", value=content, inline=False)
    embed.add_field(name="Provvedimento:", value=action, inline=False)
    for channels in message.guild.channels:
        if str(channels) == "log":
            await channels.send(embed=embed)


async def emoji_react(message, action, user, reason, bot):
    embed = discord.Embed(title="**Effettuare il**"+" **{}**?".format(action), color=0xe74c3c)
    success = bot.get_emoji(714190878641619084)
    denied = bot.get_emoji(714190866465685525)
    bot_id = bot.get_user(635136137966387210)
    guild = bot.get_guild(701228747495309312)
    for channels in message.guild.channels:
        if str(channels) == "log":
            if(success != None):
                global msg
                msg = await channels.send(embed=embed)
                await msg.add_reaction(success)
                await msg.add_reaction(denied)
            else:
                print("error")

            def check(reaction, user_12):
                if (user_12 != bot_id):
                    return (reaction.emoji == success) or (reaction.emoji == denied)

            try:
                reaction, user_12 = await bot.wait_for('reaction_add', check=check)
                if reaction.emoji == success:

                    await msg.clear_reactions()
                    await guild.ban(discord.Object(id=user), reason = reason)
                    embed_ban = discord.Embed(title="**UTENTE BANNATO**", color=0xe74c3c)
                    await msg.edit(embed=embed_ban)
                elif reaction.emoji == denied:
                    embed_null = discord.Embed(title="**BAN UTENTE ANNULLATO**", color=0xe74c3c)
                    await msg.edit(embed=embed_null)
                    await msg.clear_reactions()




            except asyncio.TimeoutError:
                return

Спасибо тем, кто потратит свое время, чтобы помочь мне решить эту проблему.

Вот изображение вставок, отправленное в «лог»: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...