Войдите в систему человека, который удалил сообщение в Discord.py бот

#python #discord.py

Вопрос:

Я регистрирую удаленные сообщения о разногласиях, используя on_message_delete событие примерно так:

 @commands.Cog.listener()
    async def on_message_delete(self, message):
        if not message.author.bot:
            channel = db.field("SELECT LogID FROM guilds WHERE GuildID = ?", message.guild.id)

            if channel != 0: #If this guild wants to log deleted messages

                embed = discord.Embed(title="Message Deleted",
                                      color=discord.Color.red(),
                                      timestamp=getTime())
                embed.add_field(name="Member: ", value=message.author.mention, inline=False)
                embed.add_field(name="Deleter: ", value="What do I put here", inline=False)
                embed.set_footer(text=f"User ID: {message.author.id}")
                embed.set_thumbnail(url=message.author.avatar_url)
                fields = [("Message:", message.content, True),
                          ("Channel:", message.channel.mention, False)]

                for name, value, inline in fields:
                    embed.add_field(name=name, value=value, inline=inline)

                await self.bot.get_channel(channel).send(embed=embed)

 

Есть ли способ получить идентификатор человека, удалившего сообщение, чтобы, даже если мод удалит чужое сообщение, вы все равно могли получить его идентификатор?

(Я также просмотрел другие источники, такие как эта страница Reddit, и API для сообщений, но ни один из них не дал никакого представления)

Комментарии:

1. вам придется использовать журнал аудита разногласий, что является кошмаром

2. Тогда я займусь этим, иг

3. Журналы аудита будут вашим ответом. Но я понятия не имею, как получить доступ к журналам аудита с помощью discord.py лол

Ответ №1:

Наконец-то я смог зарегистрировать их, учитывая комментарий @yotam rec об использовании журналов аудита Discord.

Я сделал это с помощью:

  1. Повторное использование моего on_message_delete слушателя
 @commands.Cog.listener()
    async def on_message_delete(self, message):
        if not message.author.bot:
 
  1. Создание логической переменной, чтобы гарантировать, что я не буду публиковать одно и то же вложение дважды
 modDeleted = False
 
  1. Проверка того, было ли сообщение об удалении события журнала аудита подано одновременно с этой функцией
 async for entry in message.guild.audit_logs(limit=1, action=discord.AuditLogAction.message_delete):
    if entry.created_at.now(timezone("US/Eastern")) == getTime(): #Custom time function
        modDeleted = True
        embed = discord.Embed(title="Message Deleted By Mod")
        embed.add_field(name="Member: ", value = message.author.mention, inline=True)
        embed.add_field(name = "Mod: ", value = entry.user.mention, inline=True)
        embed.add_field(name = "Message: ", value = message.content, inline=False)
        embed.add_field(name = "Channel: ", value = message.channel.mention, inline=False)

        await self.bot.get_channel(channel).send(embed=embed)
 
  1. Проверяя, не смог ли он найти его в журнале аудита, и если нет, создал другое вложение, зная, что пользователь удалил свое собственное сообщение
 if modDeleted == False:

    embed = discord.Embed(title="Message Deleted")
    embed.add_field(name="Member: ", value=message.author.mention, inline=False)
    embed.add_field(name="Message: ", value=message.content, inline=True)
    embed.add_field(name="Channel: ", value=message.channel.mention, inline=False)

    await self.bot.get_channel(channel).send(embed=embed)
 

Надеюсь, это поможет кому-нибудь еще, у кого тоже есть проблемы с этим!