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

我开发的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 10:45:02