如何检测被 ping 的用户是否具有特定角色?

时间:2021-05-27 19:49:57

标签: javascript discord discord.js

因此,我正在创建一个命令,当用户 ping 命令具有特定角色时,我需要在其中发送特定消息。我唯一能想到的是:

if(message.mentions.users.first().roles.cache.some(r => r.name === "Admin" || "Mod")) {
            message.channel.send('This user has a role!')  
        }

我被困在原地,找不到解决方法。答案可能很明显,但凭借我的 JavaScript 技能,我对所做的每一项更改都越来越感到沮丧。

另外,这是我得到的错误:“TypeError:无法读取未定义的属性‘缓存’”

2 个答案:

答案 0 :(得分:1)

您的提及访问一个 User 对象,这是一个全局的 Discord 用户表示。您需要 Member 对象 - 它是每个服务器的用户表示 - 代替。

const mentionedMember = message.mentions.members.first();

// Use Array#includes for cleaner syntax
if (mentionedMember.roles.cache.some(role => ["Admin", "Mod"].includes(role.name)) {
   message.channel.send('This member has a role!')  
}

有关用户与会员的更多信息,请参阅This Answer

答案 1 :(得分:0)

您不能在这样的文字上使用 || 运算符,只能在布尔值上使用。

if(message.mentions.users.first().roles.cache.some(r => r.name === "Admin" || r.name === "Mod")) {
        message.channel.send('This user has a role!')  
}

r.name === "Admin" || "Mod" 中实际发生的是 r.name === "Admin" 首先评估为 truefalse,具体取决于 r.name 值。然后在 true || "Mod"false || "Mod" "Mod" 字符串被转换为布尔值(true 用于非空字符串)所以你得到 true || truefalse || true其计算结果始终为 true