You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止具备权限的管理员互相使用 moderation 管理命令

你现有代码有两个核心问题导致无法实现禁止管理员互操作的效果:

  1. 被操作用户的许可校验逻辑错误:member是Discord.js的GuildMember对象,你直接用member.includes(permitted)的写法完全不生效,需要取成员的ID与许可列表比对
  2. 成功提示的位置错误:放在异步的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 00:21:01