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

Discord.js v14:非构建器设置服务器斜杠命令及权限配置疑问

在Discord.js v14中为服务器级斜杠命令设置角色权限

在Discord.js v14中,斜杠命令的权限配置需要单独通过ApplicationCommandPermissionsManager操作,无法直接在client.application.commands.set的命令定义中完成。以下是实现仅允许指定角色使用服务器级命令的完整代码:

export default async function(client) {
    // 定义命令列表
    const commands = [
        {
            name: 'start',
            description: '启动服务',
        },
        {
            name: 'stop',
            description: '停止服务',
        },
    ];

    // 批量创建服务器级斜杠命令
    const createdCommands = await client.application.commands.set(commands, process.env.GUILD);
    const guildId = process.env.GUILD;
    // 替换为你要授权的目标角色ID
    const allowedRoleId = '目标角色ID';

    // 为每个命令设置权限
    for (const command of createdCommands) {
        // 构造权限规则:允许指定角色使用,拒绝服务器所有普通成员
        const permissionSettings = [
            {
                id: allowedRoleId,
                type: 2, // 类型2代表角色
                permission: true,
            },
            {
                id: guildId, // @everyone角色的ID等于服务器ID
                type: 2,
                permission: false,
            },
        ];

        // 应用权限配置
        await command.permissions.set({ permissions: permissionSettings, guild: guildId });
    }
}

关键说明

  • 必须先创建命令,再通过command.permissions.set()设置权限,因为需要依赖创建后的命令对象
  • 权限对象的type取值:1=用户,2=角色,3=频道
  • @everyone角色的ID就是服务器本身的ID,设置它的权限为false可以确保只有指定角色能触发命令
  • 机器人账号需要拥有ManageGuild或ManageRoles权限,才能修改命令权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 07:45:16