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

Discord.js v13 斜杠指令Ban命令失效:无法封禁指定提及成员

Discord.js v13 斜杠指令Ban命令失效:无法封禁指定提及成员

嘿,我仔细检查了你的Ban命令代码,发现了几个关键问题导致它没法正常封禁成员,咱们一个个来搞定:

问题1:错误的异步操作执行逻辑

你在代码最后用了return ((await member.ban()) + message.reply(...)),这种写法完全错误——member.ban()是异步Promise操作,和message.reply()的结果直接相加没有任何意义,甚至会导致ban操作没有被正确执行就提前返回了。

问题2:自定义表情格式错误

你的错误提示里用了:failed:1050462335556386846>,正确的自定义表情格式应该是<:failed:1050462335556386846>,不然表情显示不出来,虽然这不是ban失效的核心原因,但会影响用户体验。

修复后的完整代码

我调整了代码逻辑,确保ban操作先执行,再发送回复,同时修正了表情格式:

const Discord = require('discord.js')
const fs = require('fs');

//Ban.js
module.exports = {
  name: "ban",
  description: "This command ban's someone",
  category: "moderation",
  example: ["!ban @member"],
  callback: async ({ message, args }) => {
    try {
      const member = message.mentions.members.first();
      const permission = message.member.permissions.has(Discord.Permissions.FLAGS.BAN_MEMBERS)

      if (!permission)
        return message.reply({
          content: "<:failed:1050462335556386846> | You don't have permission to use this command"
        });

      if (!args[0]) return message.reply({ content: `<:failed:1050462335556386846> | Please specify someone` });
      if (!member) return message.reply({ content: `💤 | Cannot find that member...` });
      if (member.id === message.author.id)
        return message.reply({ content: `<:failed:1050462335556386846> | You cannot ban yourself!` });
      if (message.member.roles.highest.position < member.roles.highest.position)
        return message.reply({
          content: `<:failed:1050462335556386846> | You cannot ban user who have higher role than you...`
        });
      if (!member.bannable) return message.reply({ content: `<:failed:1050462335556386846> | I cannot ban that member`});

      // 先执行封禁操作
      await member.ban();
      // 再发送回复消息
      const msg = await message.reply({
        content: `:anger: | User ${member} has been banned`
      });
      // 定时删除回复
      setTimeout(() => msg.delete(), 5000);
    } catch(err) {
      message.reply({ content: `<:failed:1050462335556386846> There was an error: ${err}` })
    }
  },
};

额外提示

另外注意,你的代码是前缀命令(例子是!ban),但标题提到了“斜杠指令”,如果是想做Slash Command的话,写法会不一样——斜杠指令需要用interaction而不是message,获取成员的方式也会变成interaction.options.getMember('member'),如果之后要转成斜杠指令,记得调整这部分逻辑哦。

备注:内容来源于stack exchange,提问作者kno

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:02:58