允许两个角色执行命令

时间:2021-04-13 06:58:36

标签: javascript discord.js

我有一个 discord.js bot,只能由具有特定角色的人使用。我有实际服务器和测试服务器,我想知道是否可以允许 两个 角色执行命令。

我目前正在代码中手动更改角色,这对用户不是特别友好。

代码如下:

const { role1, role2 } = require('./config.json');
const role = role1

client.on('message', message => {

    if (!message.content.startsWith(prefix) || message.author.bot) return;

    if (message.member.roles.cache.has(role)) {
        const args = message.content.slice(prefix.length).trim().split(/ +/);
        const commandName = args.shift().toLowerCase();

        if (!client.commands.has(commandName)) return;

        try {
            client.commands.get(commandName).execute(message, args);
        } catch (error) {
            console.error(error);
            message.reply(`There was an error`);
    }

    } else {
        message.reply('You don't have access to this command!')
    }
    
})

我尝试使用逻辑 OR (||) 但似乎不起作用,因为它只允许编写的第一个角色执行命令。

2 个答案:

答案 0 :(得分:0)

我在 message event 中是这样解决的:

// This is for demonstration because I'm defining 'requiredRoles' in every command file
    let roleCount = 0;
    let missingRole = '';

    // Ensure the user has the required roles
    for (const requiredRole of requiredRoles) {
        const role = guild.roles.cache.find(
            r => r.name === requiredRole,
        );

        if (role && member.roles.cache.has(role.id)) {
            roleCount++;
        }
        else {
            missingRole = requiredRole;
        }
    }
    
    if(roleCount === 0 && requiredRoles.length > 0) {
        return message.reply(
            `You are missing the "${requiredRole}" role to use this command!`,
        );
    }

说明:

开始一个循环,它贯穿所有 roles。如果 user 属于 role,则 roleCount 加 1。如果它属于当前运行的 role,此 role 已写入 missingRole

当循环结束时,它会检查用户是否至少具有所需的 roles 之一。如果不是,则返回错误 message

答案 1 :(得分:0)

允许用户执行命令,如果他有 Role1 OR Role2 message.member.roles.cache.has(role) 可以像这样替换为 message.member.roles.cache.some(r=>[Role1, Role2].includes(r.id))(假设 Role1Role2 是 ID,而不是角色的名称)。

const { role1, role2 } = require('./config.json');

client.on('message', message => {

    if (!message.content.startsWith(prefix) || message.author.bot) return;

    if (message.member.roles.cache.some(r=>[role1, role2].includes(r.id))) {
        const args = message.content.slice(prefix.length).trim().split(/ +/);
        const commandName = args.shift().toLowerCase();

        if (!client.commands.has(commandName)) return;

        try {
            client.commands.get(commandName).execute(message, args);
        } catch (error) {
            console.error(error);
            message.reply(`There was an error`);
    }

    } else {
        message.reply('You don't have access to this command!')
    }
    
})