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
相关产品推荐
相关产品推荐

