我开发的Discord机器人ban命令正常 但kick命令无法运行
Discord机器人kick命令失效问题修复方案
现有代码存在的问题
- 权限校验逻辑错误:当前仅校验了命令触发者的踢人权限,既没有校验机器人自身是否拥有
KICK_MEMBERS权限,错误提示文本也和校验逻辑不匹配 - 踢人调用逻辑不符合discord.js版本规范:discord.js v12及以上版本中,
message.guild.members.kick需要传入用户ID字符串,若getUserFromMention返回的是User对象而非ID,会导致调用失效 - 缺少实例转换步骤:若
getUserFromMention返回的是全局User对象,需要先转换为当前服务器的GuildMember实例才能正常执行踢人操作
修正后代码
const { getUserFromMention } = require("../userinfo/getuser.js"); module.exports = { name: "kick", description: "踢出指定用户", async execute(message, client) { const split = message.content.split(/ +/); const args = split.slice(1); const user = getUserFromMention(args[0], client); if (!user) { return message.reply("请@指定要踢出的用户!"); } // 校验命令发送者是否有踢人权限 if (!message.member.permissions.has("KICK_MEMBERS")) { return message.reply("你没有踢出用户的权限"); } // 校验机器人自身是否有踢人权限 if (!message.guild.me.permissions.has("KICK_MEMBERS")) { return message.reply("我没有踢出用户的权限,请先给我授权"); } try { // 先获取当前服务器内的成员实例 const member = await message.guild.members.fetch(user.id); await member.kick(); return message.reply(`${user.username} 已被踢出服务器`); } catch (error) { // 可自行打印error查看具体报错原因,比如目标用户权限比机器人高 return message.reply("无法踢出该用户,对方权限等级高于我"); } }, };
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

