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
相关产品推荐
相关产品推荐

