使用ApplicationCommandPermissionsManager设置斜杠命令权限时遇401未授权错误
核心问题排查与修复
- 不要手动传递token:你的代码里在
set方法中手动传入了token参数,但discord.js的Client实例已经会自动携带认证令牌,手动传入反而可能导致认证冲突,直接删掉这个参数。 - 使用服务器级别的权限管理器:应该通过
ApplicationCommandManager.permissions来获取权限管理器,而非Client.application.commands.permissions——后者是全局命令的权限管理工具,服务器命令的权限必须用对应服务器的管理器操作。 - 补全机器人权限:修改服务器斜杠命令权限需要机器人具备
Manage Guild(管理服务器)权限,你之前只添加了bot和applications.commands范围,需要在邀请机器人时勾选该权限,或者在服务器的机器人角色设置中开启。
修复后的代码示例
//Client is given through a function variable here and is indeed a discord Client. const { ApplicationCommandPermissionType } = require("discord.js"); let Guild = Client.guilds.cache.get(GuildId); let RoleManager = Guild.roles; let ApplicationCommandManager = Guild.commands; // 使用服务器命令对应的权限管理器 let ApplicationCommandPermissionsManager = ApplicationCommandManager.permissions; ApplicationCommandManager.create(SlashData).then((application) => { console.log(`Created Slash Command`); // 移除多余的token参数,使用正确的权限配置 ApplicationCommandPermissionsManager.set({ command: application.id, guild: application.guildId, permissions: [{ id: RoleManager.everyone.id, type: ApplicationCommandPermissionType.Role, permission: false }] }); });
额外验证步骤
- 重新生成机器人邀请链接,确保链接中包含
manage_guild权限(权限数值需加上0x8)。 - 检查机器人在目标服务器中的角色,确认已开启管理服务器权限,避免服务器本地权限设置覆盖邀请时的配置。
内容的提问来源于stack exchange,提问作者yacine
相关产品推荐
相关产品推荐

