Discord.js:是否有一个函数可以检查用户是否从排名数组中获得排名



我目前正在研究一个不和谐机器人,它有多个命令,仅适用于特定角色。我目前有允许在数组中使用命令的所有角色,我的代码下面工作。

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()方法,该方法循环遍历整个数组并检查是否至少有一个

例如,让我们创建一个角色id数组:
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()方法,它检查数组的所有元素是否符合条件——在我们的例子中,用户是否具有上述所有角色。

相关内容

最新更新