我目前正在研究一个不和谐机器人,它有多个命令,仅适用于特定角色。我目前有允许在数组中使用命令的所有角色,我的代码下面工作。
for (var i = 0; i < Config.AllowedRanks.length; i++) {
if (message.member.roles.cache.has(Config.AllowedRanks[i])){
console.log("Access Granted")
}
}
但是我如何使其他没有该角色的人得到拒绝访问的消息呢?下面的代码做了我想要的事情,但当有人拥有角色时,当角色不在数组中的第一个时,也会这样做。
for (var i = 0; i < Config.AllowedRanks.length; i++) {
if (message.member.roles.cache.has(Config.AllowedRanks[i])){
console.log("Access Granted")
} else{
console.log("Access Denied")
}
}
答案感谢Bqre:
if (Config.AllowedRanks.some(role => message.member.roles.cache.get(role))){
console.log("Access Granted")
} else{
console.log("Access Denied")
}
对于这种特殊情况,我们希望使用.some()
方法,该方法循环遍历整个数组并检查是否至少有一个
const roles = ['id1', 'id2', 'id3'];
我们可以从这里做的是,取我们创建的数组,并检查作者是否至少有一个使用.some()
方法查找具有上述id之一的角色。
最终代码
const roles = ['id1', 'id2', 'id3'];
if (roles.some(role => message.member.roles.cache.get(role))) console.log('Access Granted.');
else console.log('Access Denied.');
分别适用于.every()
方法,它检查数组的所有元素是否符合条件——在我们的例子中,用户是否具有上述所有角色。