首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >roles.forEach不是函数

roles.forEach不是函数
EN

Stack Overflow用户
提问于 2019-06-01 03:52:58
回答 2查看 847关注 0票数 0

所以基本上发生的事情是,当一个命令运行时,这段代码正在运行。如果用户的字符串(UserID)适合数组,它将响应为true并将访问级别设置为6。如果为false,它将检查角色并设置访问级别(如果角色名称具有特定角色)。但是,角色名称部分不起作用。例如,具有版主角色(通常为访问级别3/ perms.three)的用户显示为访问级别0,我不知道原因。

它的工作方式是检查用户的ID。如果该ID位于.json文件中的预定义数组中,它将通过提供访问级别6来覆盖所有其他访问级别。如果该数组不存在,它将转到roles函数,并搜索该角色是否存在于persons角色列表中。

这是我用来检查角色/用户is的代码。

代码语言:javascript
复制
if (command.accessLevel > perms.getAccess(message.member.roles) || command.accessLevel > perms.getAccess(message.member.id)){
      return message.channel.send("``Error: Access Denied.``");
    }

这是permissions.js文件:

代码语言:javascript
复制
const bot = require('./bot').skynet;
const config = require('./config.json');
const perms = require('./permissions.json').access;

function arrayHas(arr, val){
    var result = false;

    for (var item in arr){
        if (arr[item] == val){
            result = true;
            break;
        }
    }

    return result;
}

function getAccess(user){
    var access = 0;

    if (typeof(user) == 'string'){
        if (arrayHas(perms.six, user)){
            return 6;
        }
    }

    var roles = user;
    roles.forEach(function(role){
        if (arrayHas(perms.five, role.name)){
            access = 5;
            return;
        }
        else if (arrayHas(perms.four, role.name)){
            access = 4;
            return;
        }
        else if (arrayHas(perms.three, role.name)){
            access = 3;
            return;
        }
        else if (arrayHas(perms.two, role.name)){
            access = 2;
            return;
        }
        else if (arrayHas(perms.one, role.name)){
            access = 1;
            return;
        }
    });

    return access;
}

bot.on('message', message => {
    console.log(getAccess(message.member.id));
    console.log(getAccess(message.member.roles));
})

module.exports = {
    arrayHas: arrayHas,
    getAccess: getAccess,
};
EN

回答 2

Stack Overflow用户

发布于 2019-06-01 04:00:48

在第一个if语句中,应该在内部if语句之后返回值。否则,对于将失败的字符串,您将继续执行以下代码roles.forEach (roles.forEach is not a function)

或者将非字符串逻辑放在else语句中:

代码语言:javascript
复制
function getAccess(user){
    var access = 0;

    if (typeof(user) == 'string'){
        if (arrayHas(perms.six, user)){
            return 6;
        }
    } else {

        var roles = user;

        roles.forEach(function(role){
            if (arrayHas(perms.five, role.name)){
                access = 5;
                return;
            }
            else if (arrayHas(perms.four, role.name)){
                access = 4;
                return;
            }
            else if (arrayHas(perms.three, role.name)){
                access = 3;
                return;
            }
            else if (arrayHas(perms.two, role.name)){
                access = 2;
                return;
            }
            else if (arrayHas(perms.one, role.name)){
                access = 1;
                return;
            }
        });
    }

    return access;
}
票数 0
EN

Stack Overflow用户

发布于 2019-06-01 22:00:40

在您的函数getAccess()中,您设置了access变量,但从未实际返回值。试试这个修订过的版本。

代码语言:javascript
复制
const Discord = require('discord.js');
const { skynet: bot } = require('./bot');
const config = require('./config.json');
const { access: perms } = require('./permissions.json');

/**
 * Return the access level of a member.
 * @param {Discord.GuildMember} member
*/
function getAccess(member) {
  if (!(member instanceof Discord.GuildMember)) return new TypeError('Expected a GuildMember.');

  if (arrayHas(perms.six, member.user.id)) return 6;

  const roles = member.roles;

  for (const role of roles) {
    if (arrayHas(perms.five, role.name)) return 5;
    if (arrayHas(perms.four, role.name)) return 4;
    if (arrayHas(perms.three, role.name)) return 3;
    if (arrayHas(perms.two, role.name)) return 2;
    if (arrayHas(perms.one, role.name)) return 1;
  }

  return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56401015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档