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

Discord机器人Kick系统如何添加使用权限校验

Discord机器人踢人功能权限管控实现

你现有的代码未做任何权限拦截,所有用户只要触发+kick命令就能触发踢人逻辑,在执行踢人操作前补三层校验即可实现合规的权限管控:

  • 命令发起者权限校验:校验执行命令的用户是否拥有服务器的「踢出成员」权限,无权限直接拦截返回提示
  • 机器人自身权限校验:校验机器人本身在当前服务器是否被授予「踢出成员」权限,避免权限不足导致接口报错
  • 角色层级校验:对比被踢成员的角色层级,确保发起命令的用户、机器人的角色位置都高于被踢成员,避免出现低权限用户踢管理员、机器人无法踢高角色成员的异常情况

修改后的完整可运行代码如下:

client.on('message', message => {
    if (!message.guild) return;

    if (message.content.startsWith('+kick')) {
        // 校验发起命令用户的踢人权限
        if (!message.member.permissions.has('KICK_MEMBERS')) {
            return message.channel.send('你没有踢出成员的管理权限,无法执行该操作');
        }
        // 校验机器人自身的踢人权限
        if (!message.guild.me.permissions.has('KICK_MEMBERS')) {
            return message.channel.send('我当前没有被授予踢出成员的权限,无法执行操作');
        }

        const user = message.mentions.users.first();
        if (!user) {
            return message.channel.send("你没有@需要踢出的目标用户");
        }

        const member = message.guild.members.resolve(user);
        if (!member) {
            return message.channel.send("该用户不在当前服务器内");
        }

        // 校验角色层级,禁止踢角色层级高于/等于操作者、机器人的成员
        if (
            member.roles.highest.position >= message.member.roles.highest.position ||
            member.roles.highest.position >= message.guild.me.roles.highest.position
        ) {
            return message.channel.send("目标成员角色层级不低于你或我,无法执行踢出操作");
        }

        member
            .kick({
                reason: 'They were bad!',
            })
            .then(() => {
                message.channel.send(`已成功踢出用户 ${user.tag}`);
            })
            .catch(err => {
                message.channel.send('踢出成员时出现未知错误');
                console.error(err);
            });
    }
});

补充说明:如果需要自定义踢人原因,可以扩展命令参数解析逻辑,把+kick @用户 自定义原因里的原因字段提取后,传入kick方法的reason参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:39:51