Discord.js 服务器机器人数量统计异常问题求助
Discord机器人统计成员/机器人数量异常的解决方案
问题原因
你用message.guild.members.cache统计的结果不对,是因为Discord.js默认只会缓存部分成员(比如当前在线、最近有互动的成员),而非服务器的全部成员,所以才会出现实际14个机器人只返回1、5个真实用户也只返回1的情况。
解决方案
要获取服务器的完整成员列表,必须手动调用fetch()方法拉取所有成员,再进行统计。同时需要确保机器人配置了正确的权限和意图。
1. 开启成员意图(Discord开发者端)
登录Discord开发者门户,找到你的机器人应用:
- 进入「Bot」页面
- 拉到「Privileged Gateway Intents」区域
- 开启「Server Members Intent」开关
- 保存更改
2. 修正代码(异步处理)
因为fetch()是异步方法,需要在异步函数中执行:
// 假设在命令处理的异步函数内 async function countMembers(message) { // 获取服务器所有成员 const allMembers = await message.guild.members.fetch(); // 统计机器人数量 const botCount = allMembers.filter(member => member.user.bot).size; // 统计真实用户数量 const humanCount = allMembers.filter(member => !member.user.bot).size; console.log(`机器人数量:${botCount}`); console.log(`真实用户数量:${humanCount}`); }
3. 权限检查
确保你的机器人在目标服务器中拥有「查看服务器成员」的权限,否则无法拉取完整成员列表。
内容的提问来源于stack exchange,提问作者Glandorf
相关产品推荐
相关产品推荐

