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

Discord.js中如何统计指定moderator执行的封禁总次数?

Discord 公开接口不会在封禁列表里直接返回封禁执行人信息,你通过message.guild.bans.fetch()拿到的每条封禁记录仅包含被封禁用户、封禁原因两个核心字段,要查执行人必须额外拉取服务器审计日志匹配。

你需要先保证你的机器人已经被授予查看审计日志权限,之后可以参考下面的代码实现:

// 取被提及的目标管理人员
const targetMod = message.mentions.users.first();
if (!targetMod) return message.reply('请@指定要查询的管理人员');

let banCount = 0;

// 先拉取服务器全部封禁列表
message.guild.bans.fetch().then(async (bans) => {
  // 拉取类型为「成员被封禁」的审计日志,最多拉100条,可根据需要调整上限
  const auditLogs = await message.guild.fetchAuditLogs({
    type: 'MEMBER_BAN_ADD',
    limit: 100
  });
  const banLogs = auditLogs.entries;

  // 遍历每条封禁记录做匹配
  bans.forEach(ban => {
    // 找和当前被封禁用户对应的审计日志条目
    const correspondingLog = banLogs.find(log => log.target.id === ban.user.id);
    // 匹配到且执行人是目标mod的话计数+1
    if (correspondingLog && correspondingLog.executor.id === targetMod.id) {
      banCount++;
    }
  });

  message.reply(`该管理人员累计执行封禁次数:${banCount}`);
}).catch(err => {
  console.error('操作失败:', err);
  message.reply('查询失败,请确认机器人已拥有查看审计日志的权限');
});

注意事项

  • 审计日志有存储上限,Discord 服务器默认仅保留最近90天的审计日志,超出时间范围的封禁操作无法追溯
  • 如果要查询更早的记录,需要调整fetchAuditLogs的limit参数,最高单次可拉取100条,超过100条需要分页拉取
  • 由Discord官方系统执行的封禁不会被统计到管理人员的执行次数中

内容的提问来源于stack exchange,提问作者user12586914

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:45:04