Discord.js v12角色成员数统计异常:仅统计命令发送者角色
Discord机器人角色成员数统计错误修复
问题出在这两点
- 你代码里遍历了机器人加入的所有服务器角色,不是发命令的那个服务器的,容易搞混重名角色。
- 统计成员数用的是本地缓存的成员列表——如果机器人没开全量成员缓存,
role.members只会存和机器人有过互动的人(比如发命令的你),其他角色自然显示0。
改好的代码
// 直接拿当前服务器的角色,排除@everyone const roles = msg.guild.roles.cache .filter(role => role.name !== '@everyone') .sort((a, b) => b.position - a.position); // 按角色权限高低排序,可选 let roles_as_list = ''; // 逐个处理角色,确保拿到完整成员数 for (const role of roles.values()) { // 主动拉取角色的全部成员,绕过缓存不全的问题(需要机器人有GUILD_MEMBERS权限) const members = await role.members.fetch(); roles_as_list += `🔘 ${role.name} - ${members.size}\n`; } msg.channel.send(roles_as_list);
关键改动说明
- 只从
msg.guild(发命令的服务器)取角色,避免跨服务器数据乱套。 - 用
role.members.fetch()主动获取完整成员列表,解决缓存不全导致的计数错误。 - 加了可选的角色排序,让列表和服务器里的角色层级一致,看着更舒服。
注意事项
要确保你的机器人在Discord开发者后台的Bot权限里开了*GUILD_MEMBERS*权限,不然拿不到完整的成员数据。
内容的提问来源于stack exchange,提问作者Jose Pedraza
相关产品推荐
相关产品推荐

