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

Discord.js v14设置命令权限遇OAuth2 Bearer Token缺失错误求解决

解决Discord.js v14设置命令权限时的Bearer Token错误

出现Editing application command permissions requires an OAuth2 bearer token, but none was provided错误的核心原因是:Discord.js v14中修改应用命令权限需要通过官方REST API传递机器人令牌(作为Bearer Token),你当前使用的commands.permissions.set()方法未正确处理令牌注入,或调用方式不符合v14的要求。

以下是两种可行的解决方案:

方案一:使用REST API直接请求(官方推荐)

这是最可靠的方式,直接调用Discord的REST接口来设置权限:

  1. 导入Discord.js的REST模块和路由:
const { REST, Routes } = require('discord.js');
  1. 初始化REST实例并传入机器人令牌:
const rest = new REST({ version: '10' }).setToken('你的机器人令牌');
  1. 构造权限数据并发送请求:
// 注意:v14中type需要用数值,USER=2,ROLE=1,不要用字符串
const fullPermissions = [
    {
        id: "目标命令ID",
        permissions: [{
            id: "目标用户/角色ID",
            type: 2,
            permission: false
        }]
    }
];

try {
    // 替换占位符:服务器ID、机器人应用ID(开发者门户里获取)
    await rest.put(
        Routes.guildApplicationCommandPermissions('服务器ID', '机器人应用ID'),
        { body: { fullPermissions } }
    );
    console.log('命令权限已成功更新');
} catch (err) {
    console.error('设置权限失败:', err);
}

如果仅需修改单条命令的权限,可使用这条路由:

Routes.guildApplicationCommandPermission('服务器ID', '机器人应用ID', '单条命令ID')

此时body直接传{ permissions: [...] }即可,无需外层的fullPermissions数组。

方案二:修正客户端调用方式(需确保令牌配置正确)

若坚持使用客户端对象调用,需确保客户端初始化时已正确传入令牌,且调用时明确指定应用ID:

const guild = client.guilds.cache.get('服务器ID');
await guild.commands.permissions.set({
    fullPermissions,
    // 必须传入机器人的应用ID
    applicationId: '你的机器人应用ID'
});

不过这种方式仍可能因环境或版本问题出现令牌传递异常,因此更推荐方案一。

关键注意事项

  • 机器人令牌和应用ID必须正确,可在Discord开发者门户的机器人页面获取。
  • type参数必须用数值:USER对应2,ROLE对应1,v14不再支持字符串类型的type值。
  • 确保机器人拥有ManageGuild或相关权限,否则会返回权限不足错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:15:40