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

使用discord.js 12开发Discord机器人时ban指令对所有用户开放求助

修复方案

你只需要在$ban指令的逻辑入口处添加权限校验逻辑即可,discord.js 12.0版本中可通过GuildMember.hasPermission()方法校验用户是否拥有服务器封禁权限:

  1. 首先在校验message.content.startsWith('$ban')为真后,第一行添加权限判断:如果触发指令的用户没有BAN_MEMBERS权限,直接终止逻辑返回提示
  2. 你还可以额外添加校验逻辑,避免用户封禁权限/角色等级高于自身的对象,也可以补充校验机器人自身是否拥有封禁权限避免报错

修改后的$ban指令代码片段

if (!message.guild) return;

// 匹配$ban指令
if (message.content.startsWith('$ban')) {
  // 核心校验:仅拥有封禁成员权限的用户可触发指令
  if (!message.member.hasPermission("BAN_MEMBERS")) {
    return message.channel.send("你没有权限使用封禁指令");
  }
  // 可选补充:校验机器人自身是否拥有封禁权限
  if (!message.guild.me.hasPermission("BAN_MEMBERS")) {
    return message.channel.send("机器人没有封禁成员的权限,请先配置服务器权限");
  }
  // 可选补充:禁止封禁服务器所有者
  if (member.id === message.guild.ownerID) {
    return message.channel.send("无法封禁服务器所有者");
  }
  // 可选补充:禁止封禁角色等级高于自己的用户
  if (member.roles.highest.position >= message.member.roles.highest.position && message.member.id !== message.guild.ownerID) {
    return message.channel.send("你无法封禁角色等级高于或等于你的用户");
  }

  // 原有业务逻辑保持不变
  const user = message.mentions.users.first();
  if (user) {
    const member = message.guild.members.resolve(user);
    if (member) {
      member
        .ban({
          reason: 'They were bad!',
        })
        .then(() => {
          message.channel.send(`Successfully banned ${user.tag}`);
        })
        .catch(err => {
          message.channel.send('I was unable to ban the member');
          console.error(err);
        });
    } else {
      message.channel.send("That user isn't in this guild!");
    }
  } else {
    message.channel.send("You didn't mention the user to ban!");
  }
}

额外注意事项

  • 现有代码中的~mute指令逻辑存在复制错误:当前逻辑为拥有KICK_MEMBERS权限的用户触发~mute指令时,会收到将被封禁的提示,你可以根据实际需求调整该部分逻辑
  • 你当前配置的普通指令前缀为~,封禁指令前缀为$,如果需要统一前缀可自行调整匹配规则

内容的提问来源于stack exchange,提问作者CaptainBeast123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:18:04