所以基本上发生的事情是,当一个命令运行时,这段代码正在运行。如果用户的字符串(UserID)适合数组,它将响应为true并将访问级别设置为6。如果为false,它将检查角色并设置访问级别(如果角色名称具有特定角色)。但是,角色名称部分不起作用。例如,具有版主角色(通常为访问级别3/ perms.three)的用户显示为访问级别0,我不知道原因。
它的工作方式是检查用户的ID。如果该ID位于.json文件中的预定义数组中,它将通过提供访问级别6来覆盖所有其他访问级别。如果该数组不存在,它将转到roles函数,并搜索该角色是否存在于persons角色列表中。
这是我用来检查角色/用户is的代码。
if (command.accessLevel > perms.getAccess(message.member.roles) || command.accessLevel > perms.getAccess(message.member.id)){
return message.channel.send("``Error: Access Denied.``");
}这是permissions.js文件:
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,
};发布于 2019-06-01 04:00:48
在第一个if语句中,应该在内部if语句之后返回值。否则,对于将失败的字符串,您将继续执行以下代码roles.forEach (roles.forEach is not a function)
或者将非字符串逻辑放在else语句中:
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;
}发布于 2019-06-01 22:00:40
在您的函数getAccess()中,您设置了access变量,但从未实际返回值。试试这个修订过的版本。
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;
}https://stackoverflow.com/questions/56401015
复制相似问题