bot删除消息Discord.py python 3.9.2时的日志记录问题

Posted

技术标签:

【中文标题】bot删除消息Discord.py python 3.9.2时的日志记录问题【英文标题】:Logging problem when bot deletes messsage Discord.py python 3.9.2 【发布时间】:2021-08-11 23:08:49 【问题描述】:

我的 Discord 机器人有一个烦人的问题。我的机器人名为 R3NAUT,它是一个使用 python 3.9.2 和 discord.py 1.6.0 编程的单服务器审核机器人。

问题是,当机器人记录消息删除时,即使我禁止它,它也会记录机器人删除的消息。代码如下:

@Cog.listener()
async def on_message_delete(self, message):
    if not message.author.bot:
        embed = Embed(title="Message deletion",
                    description=f"Deleted by message.author.display_name in message.channel.",
                    colour=0xff6f00,
                    timestamp=datetime.utcnow())

        fields = [("Content", message.content, False)]

        embed.set_thumbnail(url="https://cdn.discordapp.com/attachments/629382706299666432/837723544863244338/unnamed_3.png")

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

        await self.logs_channel.send(embed=embed)

当有人键入帮助命令并且机器人被编程为在 60 秒后删除帮助命令时,就会出现此问题。奇怪的是,在日志中,写的是成员删除了消息而不是机器人。 Image how the logged embed looks。如果你想要完整的代码,这里是https://github.com/Guard-SK/R3NAUT/ 谢谢回复。

Guard_SK

【问题讨论】:

您必须添加一个条件。添加:if message.author == client.user: returnclient 这里是 bot 变量。 它到底在哪里显示被删除的机器人消息?,在您提供的图像中,它仅显示您的消息已被删除,而不是机器人的 【参考方案1】:

if not message.author.bot: 检查邮件作者是否是机器人,而不是检查邮件是否被机器人删除。因此,使用此代码,将跳过的唯一消息将是机器人发送的消息

据我所知,跳过机器人删除的消息的唯一方法是从审核日志中获取它们,您可以在下面的审核日志中阅读:

https://discordpy.readthedocs.io/en/latest/api.html#discord.AuditLogEntry https://discordpy.readthedocs.io/en/latest/api.html#discord.AuditLogAction.message_delete

【讨论】:

没有完全按照你的方式做,因为我不知何故做不到,但我用 if message.author.id == BotID: 替换了 if not message.autor.bot:但对于某人来说可能会有所帮助,尤其是当您在 on_message 中按照自己的方式进行操作但我正在执行 cog 命令时

以上是关于bot删除消息Discord.py python 3.9.2时的日志记录问题的主要内容,如果未能解决你的问题,请参考以下文章

discord.py bot 找到要删除的频道消息,但显示其客户端 ID 与我的相同

{discord.py} 删除特定用户的特定信息

(Discord.py)如何让机器人在一段时间后删除自己的消息?

如何删除 discord.py 中的消息信息?

用户执行命令后,如何删除 discord.py 中的消息?

在for循环中发送多条消息discord python bot