【问题标题】:Log person who deleted message in Discord.py bot在 Discord.py 机器人中记录删除消息的人
【发布时间】:2021-08-15 06:02:07
【问题描述】:

我正在使用on_message_delete 事件记录已删除的 Discord 消息,如下所示:

@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)

有没有办法获取删除消息的人的 id,这样即使 mod 删除了其他人的消息,您仍然可以获得他们的 id?

(我查看了其他资源,例如 Reddit pageAPI 消息,但都没有提供任何见解)

【问题讨论】:

  • 你将不得不使用不和谐 audit log 这是一场噩梦
  • 我会调查一下然后 ig
  • 审核日志将是您的答案。但我不知道如何使用 discord.py 访问审计日志 lol

标签: python discord.py


【解决方案1】:

鉴于@yotam rec 关于使用Discord Audit Logs的评论,我终于能够记录它们。

我是这样做的:

  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)

希望这也能帮助其他遇到此问题的人!

【讨论】:

    猜你喜欢
    • 2018-08-16
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 2020-08-24
    相关资源
    最近更新 更多