You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:54:11