【问题标题】:javascript how to fill a return from values of arrayjavascript如何填充数组值的返回值
【发布时间】:2020-03-19 12:47:48
【问题描述】:

我不知道如何提出问题(标题),所以我就在这里说一下,也许有人可以帮助或提供一个新的观点。 我正在使用discord.js,我想检查用户是否具有来自消息的角色

client.on('message', message => {
    if (message.member.roles.find(r => r.name === 'ADMIN')) {
        console.log('I am admin');
    }
});

现在我的想法是让它成为一个多态函数,因为如果我想检查两个角色,我必须这样做:

client.on('message', message => {
    if (message.member.roles.find(r => r.name === 'ADMIN') || message.member.roles.find(r => r.name === 'Other')) {
        console.log('I am admin');
    }
});

我想将此if 条件移动到一个函数中,即使我想检查一个或多个`权限,它也会检查它。

目前我已经尝试处理它,但没有任何效果,并停在这里......也许有人可以给我一些建议或其他观点。这个想法是为了防止重复代码和if,只要我的显示器的宽度。

function hasRole(msg, permissions, condition = 'or') {
    if (Array.isArray(permission)) {
        if (condition === 'or') {
            permissions.forEach(function (element) {

            });
//            permission.join('||');
            return msg.member.roles.find(r => r.name === permissions) ||
                msg.member.roles.find(r => r.name === permissions);
        } else if (condition === 'and') {

        }
    }

    return msg.member.roles.find(r => r.name === permissions);
}

如果你想查看DiscordJS DOCS

回复:

function checkPermissions(msg, permissions, condition = 'or') {
    if (condition === 'or') {
        return msg.member.roles.some(r => permissions.includes(r.name));
    } else if (condition === 'and') {
        return msg.member.roles.every(r => permissions.includes(r.name));
    }
}

【问题讨论】:

    标签: javascript arrays discord.js


    【解决方案1】:
    function checkPermissions(msg, permissions, condition = 'or') {
        if (Array.isArray(permissions)) {
            if (condition === 'or') {
                return msg.member.roles.some(r => permissions.includes(r.name));
            } else if (condition === 'and') {
                let value = false;
                permissions.forEach(permission => {
                    value = !!msg.member.roles.find(r => r.name === permission);
                });
                return value;
            }
        }
        return !!msg.member.roles.find(r => r.name === permissions);
    }
    

    【讨论】:

      【解决方案2】:

      这样的?

      function hasRole(msg, permissions, condition = 'or') {
      
          //harmonise @permissions to array, if isn't already one
          permissions = Array.isArray(permissions) ? permissions : [permissions];
      
          //if or, at least 1 member role must be present in @permissions
          if (condition === 'or')
              return msg.member.roles.some(role => permissions.includes(role));
      
          //if and, all member roles must be found in @permissions
          else
              return permissions.every(perm => msg.member.roles.includes(perm));
      
      }
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-12
      • 1970-01-01
      • 2020-12-02
      • 2016-04-21
      相关资源
      最近更新 更多