【问题标题】:Discord.js: Is there a function that can check whether the user has a rank from the array of ranksDiscord.js:是否有一个函数可以检查用户是否从排名数组中获得排名
【发布时间】:2021-05-12 06:29:39
【问题描述】:

我目前正在开发一个不和谐的机器人,它有多个只针对特定角色的命令。 我目前拥有允许使用数组中的命令的所有角色,并且我的以下代码有效。

        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")
        }

【问题讨论】:

    标签: javascript arrays discord.js


    【解决方案1】:

    对于这种特定情况,我们希望使用.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() 方法同样适用,而是检查数组的所有元素是否符合条件 - 在我们的例子中,如果用户具有上述所有角色。

    【讨论】:

    • 最终的代码有一些错误,但经过一些修补,它终于可以工作了。请参阅问题以获取正确的代码。
    • 不小心错过了),woopsie。
    猜你喜欢
    • 2022-11-29
    • 1970-01-01
    • 2021-04-28
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 2012-04-08
    相关资源
    最近更新 更多