如何阻止具备权限的管理员互相使用 moderation 管理命令
你现有代码有两个核心问题导致无法实现禁止管理员互操作的效果:
- 被操作用户的许可校验逻辑错误:
member是Discord.js的GuildMember对象,你直接用member.includes(permitted)的写法完全不生效,需要取成员的ID与许可列表比对 - 成功提示的位置错误:放在异步的fetch操作外部,会提前返回操作成功的错误提示
修正后完整代码
// 顶部先引入许可列表,如果你已经引入可以忽略这行 const permitted = require('./Permitted.json') module.exports.run = async (client, message, args) => { if (!permitted.includes(message.author.id)) return if (!args[0]) return message.reply('you need to mention someone', { allowedMentions: { repliedUser: false } }); const member = message.mentions.members.first(); // 校验被@的用户是不是在许可列表里 if (member && permitted.includes(member.id)) return message.channel.send("no") if (!member) return message.reply('invalid user mention', { allowedMentions: { repliedUser: false } }); message.guild.roles.fetch('881981815232008274') .then(role => { member.roles.add(role).catch(console.error); message.channel.send(`<@${message.author.id}> Done.`) }) .catch(console.error); }
核心修改点
- 提前获取被@的成员对象,先做有效性校验,避免空值报错
- 修正许可校验逻辑:判断被操作的成员ID是否在
permitted数组内,命中就直接返回禁止提示 - 把成功提示挪到了角色添加操作的异步回调内,保证只有操作正常执行才会返回成功提示
内容的提问来源于stack exchange,提问作者user14425468
相关产品推荐
相关产品推荐

