bot 命令的角色权限

Posted

技术标签:

【中文标题】bot 命令的角色权限【英文标题】:Role permission for bot command 【发布时间】:2020-08-09 10:21:51 【问题描述】:

我必须定义一些东西或其他东西吗?我在网上某处看到了具有角色权限的那个东西。

message.member.roles.some is not a function

execute(message, args) 
        if(message.member.roles.some(role => role.name === 'Community Manager')) 
            if (!args.length) return message.channel.send(You didn't pass any command to reload, $message.author!);
            const commandName = args[0].toLowerCase();
            const command = message.client.commands.get(commandName)
                || message.client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName));

            if (!command) return message.channel.send(There is no command with that name or alias `$commandName`, $message.author!);    

            delete require.cache[require.resolve(./$command.name.js)];

            try 
                const newCommand = require(./$command.name.js);
                message.client.commands.set(newCommand.name, newCommand);
                message.channel.send(Command `$command.name` was reloaded!);
             catch (error) 
                console.log(error);
                message.channel.send(There was an error while reloading a command `$command.name`:\n`$error.message`);
            
        else
            message.channel.send(You don't have the permission to execute that command.);
          
    

【问题讨论】:

【参考方案1】:

他们将其更改为 message.member.roles.cache,您也可以使用 find 代替(可能会更好的性能,如果不是,它会相等,在这种情况下它仍然具有更好的可读性),

messsage.member.roles.cache.find(r => r.name === "Community Manager");

【讨论】:

你说得对,谢谢,但现在唯一的问题是,没有错误了,但是没有角色的测试帐户仍然可以执行重新加载命令,这应该是不可能的吧?你知道为什么吗? 看到其他代码我没看,为什么要重新加载命令?你有另一个命令来更新命令吗?至于为什么代码仍然在没有角色的测试帐户下运行,我不确定,您可以发送其余相关的代码吗? 啊抱歉我忘记了,已经修好了,我只是不小心使用了我的正常重载命令而不是有权限的命令

以上是关于bot 命令的角色权限的主要内容,如果未能解决你的问题,请参考以下文章

Discord bot 不返回角色成员

PostgreSQL的用户,角色跟权限管理怎么解决

Oracle命令:授权-收回权限-角色

oracle管理权限和角色

oracle管理角色和权限

DiscordAPIError:缺少权限