因此,我正在创建一个命令,当用户 ping 命令具有特定角色时,我需要在其中发送特定消息。我唯一能想到的是:
if(message.mentions.users.first().roles.cache.some(r => r.name === "Admin" || "Mod")) {
message.channel.send('This user has a role!')
}
我被困在原地,找不到解决方法。答案可能很明显,但凭借我的 JavaScript 技能,我对所做的每一项更改都越来越感到沮丧。
另外,这是我得到的错误:“TypeError:无法读取未定义的属性‘缓存’”
答案 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"
首先评估为 true
或 false
,具体取决于 r.name
值。然后在 true || "Mod"
或 false || "Mod"
"Mod"
字符串被转换为布尔值(true
用于非空字符串)所以你得到 true || true
或 false || true
其计算结果始终为 true
。