有没有办法检查谁做了这个动作(例如删除频道)

Is there a way to check who did the action (e.g deleted channel)

我正在开发一个机器人,我想知道有没有办法检查谁做了这个事件?就像有人删除了一个 channel/role,我怎么知道谁是背后的用户?

我试过 async def on_guild_channel_delete(ctx, member):,但是 returns TypeError: on_guild_channel_delete() missing 1 required positional argument: 'member'

如有任何帮助,我们将不胜感激!

编辑 要解析通道删除事件上的 audit logs,请尝试以下操作(您的机器人将需要查看审核日志的权限):

@client.event
async def on_guild_channel_delete(channel):
    entry = await channel.guild.audit_logs(action=discord.AuditLogAction.channel_delete, limit=1).get()
    print("User {} deleted channel {} at time {}".format(entry.user.name, channel.name, entry.created_at))

频道删除事件的输出: User MyDeleter deleted channel my-test-channel at time 2020-09-22 03:08:11.638000
发生了什么:guild.audit_logs() returns 条目进入公会的审计日志(我们从 channel.guild 获得公会)。
.get() return 是该迭代器中的第一项,这将是最新的条目。
action=discord.AuditLogAction.channel_delete 只会查找删除频道的条目。 limit=1 将最多 return 1 个事件。对于编写迭代器很有用,但如果使用 .get(),这就没有必要了,但无论如何我都会保留它以防有效率上的好处(事实上,在我写这篇文章之前我忘了它在那里)。

关于从频道删除事件中获取删除器(原回答): 来自 docs

>  discord.on_guild_channel_delete(channel)  
>    Called whenever a guild channel is deleted or created  
>  Parameters  
>     channel (abc.GuildChannel) – The guild channel that got created or deleted.  

唯一可用的参数是 channel
同样的限制适用于角色,唯一的参数是 role.
如果您出于审核目的需要此信息,Discord 会将此信息存储在“服务器设置”>“审核日志”中

进一步: 我注意到您正在使用参数 ctx(上下文)调用它,事件通过具体参数引用参数是一种很好的做法,因为它不像命令的第一个参数那样携带大量信息(上下文)。 像这样称呼它:

@client.event
async def on_guild_channel_delete(channel):
   print("A channel was deleted")