有没有办法检查谁做了这个动作(例如删除频道)
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")
我正在开发一个机器人,我想知道有没有办法检查谁做了这个事件?就像有人删除了一个 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")