Discord.js中用Role Name替代Role ID统计角色成员数报错求解
错误原因
GuildRoleManager.cache.get()方法仅接受角色ID作为查询参数,你传入角色名称无法匹配到结果,返回undefined,访问undefined.members就触发了对应的类型错误。- 你已经通过
find()方法按名称匹配到了目标角色对象,不需要二次查询角色缓存,属于冗余操作。
修复后代码
else if(parts[0] == 't!Verified') { // 按角色名称匹配目标角色 const verifiedRole = message.guild.roles.cache.find(role => role.name === "Verified"); // 先判空,避免服务器不存在对应角色时触发报错 if (!verifiedRole) return message.channel.send("当前服务器未配置Verified角色"); // 直接调用已获取的角色对象的成员计数属性 message.channel.send(`当前Discord服务器共有 ${verifiedRole.members.size} 名已验证成员`); }
多服务器统计适配说明
如果需要统计两个不同服务器的持有指定角色的总人数,分别获取两个服务器的Guild实例,各自执行上述角色查询逻辑后对计数做累加即可,注意确认两个服务器的目标角色名称完全一致,也可以单独配置不同服务器对应的目标角色名称,避免名称不匹配导致查询失败。
内容的提问来源于stack exchange,提问作者I need Help
相关产品推荐
相关产品推荐

