discord.js v13如何在roleDelete事件中获取删除角色的操作人信息
discord.js v13 roleDelete事件获取角色删除操作人方案
discord官方的roleDelete事件原生payload不会携带操作人信息,你需要主动拉取服务器审计日志来获取对应记录,具体实现如下:
前置条件
- 你的bot已经被授予服务器的
查看审计日志(VIEW_AUDIT_LOG)权限 - 客户端初始化时已经开启
GUILDS网关意图
实现代码
const { Client, Intents, Permissions } = require('discord.js'); // 客户端初始化示例,确保开启GUILDS意图 const client = new Client({ intents: [Intents.FLAGS.GUILDS] }); client.on('roleDelete', async (role) => { // 校验权限 if (!role.guild.me.permissions.has(Permissions.FLAGS.VIEW_AUDIT_LOG)) { return console.log('缺少查看审计日志权限,无法获取删除操作人信息'); } try { // 可选:如果出现拉不到日志的情况,可以加短延时再执行 // await new Promise(resolve => setTimeout(resolve, 150)); // 拉取最近1条角色删除类型的审计日志 const auditLogs = await role.guild.fetchAuditLogs({ type: 'ROLE_DELETE', limit: 1 }); const latestLog = auditLogs.entries.first(); // 匹配日志对应的角色ID,避免获取到更早的删除记录 if (latestLog && latestLog.target.id === role.id) { const operator = latestLog.executor; console.log(`删除角色的操作人信息:`, { 用户名: operator.tag, 用户ID: operator.id }); } } catch (error) { console.error('拉取审计日志出错:', error); } });
注意事项
- 审计日志存在毫秒级的同步延迟,若偶现拉不到对应记录的情况,可以增加100~200ms的延时后再拉取
- 若角色删除操作为bot自身执行,审计日志返回的操作人会是bot自身的账号
内容的提问来源于stack exchange,提问作者Kaito
相关产品推荐
相关产品推荐

