我正在研究一个机器人,我想知道是否有办法检查谁参加了活动?就像有人删除频道/角色一样,我怎么能看到背后的用户呢?
我尝试过async def on_guild_channel_delete(ctx, member):
,但它返回了TypeError: on_guild_channel_delete() missing 1 required positional argument: 'member'
。
任何帮助将不胜感激!
答案 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")