Discord.js V12 单命令增减角色 特定角色权限不生效问题求解
问题根因
你的权限判断语句逻辑运算符使用错误,导致权限校验规则和预期不符:
- 当前使用的是逻辑或运算符
||,!有指定角色 || !有管理频道权限的等价判断逻辑是「用户没有同时满足持有指定角色+拥有MANAGE_CHANNELS权限」就直接拒绝访问,完全不符合你要的「满足任意一个条件即可使用」的需求。 - 举例:如果用户只持有指定角色、没有MANAGE_CHANNELS权限,
!有指定角色为假,!有管理频道权限为真,逻辑或运算结果为真,就会触发无权限提示,这就是你现在遇到的问题。
修复代码
仅需把权限判断行的||替换为&&即可,修改后的权限校验逻辑为「用户既没有指定角色,也没有MANAGE_CHANNELS权限」时才会触发拒绝,只要满足其中一个条件就能正常调用命令:
// 修复后的权限判断行 if (!message.member.roles.cache.has('845453361008476190') && !message.member.hasPermission('MANAGE_CHANNELS')) return message.channel.send("sorry, you do not have permission to use command.")
完整修复后的代码如下:
const prefix = process.env.PREFIX; module.exports = { name: 'vip', category: 'moderation', aliases: ['v'], description : 'Used give VIP to a User ', usage: `${prefix}vip <@user>`, run : async(client, message, args) => { // 已修复权限判断逻辑 if (!message.member.roles.cache.has('845453361008476190') && !message.member.hasPermission('MANAGE_CHANNELS')) return message.channel.send("sorry, you do not have permission to use command.") const guild = client.guilds.cache.get("842019142118014996"); const role = guild.roles.cache.get("845453369564856361"); const aUser = message.mentions.users.first(); if (!aUser) return message.channel.send("Can't find user!"); const member = await guild.members.fetch(aUser.id); if (member.roles.cache.get(role.id)) { return ( member.roles.remove(role), message.channel.send(`Removed VIP role from ${aUser.tag}`) ); } else { await member.roles.add(role), message.channel.send(`${aUser.tag} Sucessfully got VIP role.`); } } };
内容的提问来源于stack exchange,提问作者hero
相关产品推荐
相关产品推荐

