是否有办法检查是谁执行了该操作(例如,已删除的频道)

2024-04-19 16:16:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个机器人,我想知道有没有办法检查是谁干的?就像有人删除一个频道/角色一样,我怎么知道谁是幕后的用户

我尝试了async def on_guild_channel_delete(ctx, member):,但它返回TypeError: on_guild_channel_delete() missing 1 required positional argument: 'member'

任何帮助都将不胜感激


Tags: 用户角色asyncondefchannel机器人delete
1条回答
网友
1楼 · 发布于 2024-04-19 16:16:02

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

@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()将条目返回到公会的审核日志中(我们从channel.guild获取公会)。
.get()返回该迭代器中的第一项,它将是最新的条目。
action=discord.AuditLogAction.channel_delete将只查找删除频道的条目。 limit=1将在最大返回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(context)调用它,对于事件来说,按参数的具体内容引用参数是一种很好的做法,因为它不像命令的第一个参数那样携带大量信息(context)。 可以这样称呼:

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

相关问题 更多 >