我目前正在开发一个不和谐的机器人,它有多个仅适用于特定 Angular 色的命令。 我目前拥有允许使用数组中的命令的所有 Angular 色,并且下面的代码有效。
for (var i = 0; i < Config.AllowedRanks.length; i++) {
if (message.member.roles.cache.has(Config.AllowedRanks[i])){
console.log("Access Granted")
}
}
但是我该如何让其他没有该 Angular 色的人收到访问被拒绝的消息呢?下面的代码执行了我想要的操作,但当某人拥有该 Angular 色且该 Angular 色不是数组中的第一个 Angular 色时,它也会执行此操作。
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()
方法,该方法循环遍历整个数组并检查是否至少有一个元素匹配一定的条件。
例如,让我们创建一个 Angular 色 ID 数组:
const roles = ['id1', 'id2', 'id3'];
从这里我们可以做的是获取我们创建的数组,并使用 .some 检查作者是否至少拥有 一个 具有上述 ID 之一的 Angular 色()
方法。
最终代码
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()
方法,该方法检查数组的所有元素是否符合条件 - 在我们的例子中,如果用户拥有所有上述 Angular 色。
关于javascript - Discord.js:是否有一个函数可以检查用户是否具有排名数组中的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66105210/