如何检测被ping的用户是否拥有指定角色?Discord.js开发问题
报错原因与修复方案
- 对象类型调用错误
message.mentions.users.first()获取到的是全局User对象,该对象不存储服务器内的角色相关数据,只有服务器成员GuildMember对象才有roles属性。需要改为调用message.mentions.members.first()获取被@用户的服务器成员实例。 - 边界判断缺失
如果用户发送指令时没有@任何人,first()会返回undefined,直接调用属性会触发同类型报错,需要先判断是否存在被@的目标用户再执行后续逻辑。 - 条件判断逻辑错误
原有代码中r.name === "Admin" || "Mod"的写法逻辑错误,该表达式会恒返回真值"Mod",无法正确匹配两个角色。可改为数组匹配写法简化逻辑,降低出错概率。
修复后代码
const targetMember = message.mentions.members.first() if (targetMember) { if(targetMember.roles.cache.some(r => ["Admin", "Mod"].includes(r.name))) { message.channel.send('This user has a role!') } }
内容的提问来源于stack exchange,提问作者Galgan
相关产品推荐
相关产品推荐

