有没有办法检查是谁做的(例如删除频道)

时间:2020-09-22 02:26:49

标签: python discord discord.py-rewrite

我正在研究一个机器人,我想知道是否有办法检查谁参加了活动?就像有人删除频道/角色一样,我怎么能看到背后的用户呢?

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

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

修改 要解析频道删除事件中的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()将条目返回公会的审核日志中(我们从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(上下文)来调用它,对于事件而言,按其具体含义来引用该参数是个好习惯,因为它不像命令的第一个参数那样携带很多信息(上下文)。 像这样称呼它:

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