Discord.js运行deploy-commands.js报Expected token present错误
Discord.js部署斜杠命令报token未设置错误排查方案
错误现象
执行部署命令node deploy-commands.js时抛出如下错误:
Error: Expected token to be set for this request, but none was present at _RequestManager.resolveRequest (D:\github\TAD\Alienbot-2.0\node_modules\@discordjs\rest\dist\index.js:876:15) at _RequestManager.queueRequest (D:\github\TAD\Alienbot-2.0\node_modules\@discordjs\rest\dist\index.js:849:46) at REST.raw (D:\github\TAD\Alienbot-2.0\node_modules\@discordjs\rest\dist\index.js:1003:32) at REST.request (D:\github\TAD\Alienbot-2.0\node_modules\@discordjs\rest\dist\index.js:999:33) at REST.put (D:\github\TAD\Alienbot-2.0\node_modules\@discordjs\rest\dist\index.js:993:17) at Object.<anonymous> (D:\github\TAD\Alienbot-2.0\deploy-commands.js:19:6) at Module._compile (node:internal/modules/cjs/loader:1103:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1155:10) at Module.load (node:internal/modules/cjs/loader:981:32) at Function.Module._load (node:internal/modules/cjs/loader:822:12)
控制台输出的cmd1 active/cmd2 active属于命令文件加载日志,说明命令文件读取环节无异常,问题完全出在请求鉴权环节。
排查步骤(按优先级排序)
- 校验
config.json文件合法性
首先确认config.json和deploy-commands.js在同一目录下,文件内容严格符合JSON语法:- 所有字段名、字符串值必须用双引号包裹,JSON不支持单引号
- 字段名严格区分大小写,必须是小写
token、clientId、guildId,不能写成大写开头的Token - 最后一个配置项末尾不能加多余逗号,token值前后不要留多余空格、换行
正确配置示例:
{ "clientId": "你的机器人应用ID", "guildId": "测试服务器ID", "token": "从Discord开发者面板复制的机器人令牌" } - 确认token值有效
打开Discord开发者面板进入对应机器人的Bot页,点击重置Token生成新的有效令牌,完整复制后替换config.json里的旧token:旧token一旦重置、泄露就会直接失效,哪怕字符差一个也会鉴权失败。注意不要把clientId、guildId的值错填到token字段。 - 调试确认配置读取结果
在deploy-commands.js的配置导入行下方加一行调试代码,确认实际读到的配置值:
重新运行部署命令,如果打印出来的tokenLength是const { clientId, guildId, token } = require('./config.json'); // 新增调试行 console.log('配置读取结果:', { clientId, guildId, tokenLength: token?.length });undefined或者0,说明config.json的字段/路径/语法还是有问题,修正到能读到正确的token长度为止。 - 修复版本兼容问题
如果你使用的是v14及以上版本的discord.js,原有代码引用v9版本API会存在兼容问题,直接修改两行代码即可:// 删除原有的discord-api-types导入语句,改成从discord.js引入Routes const { Routes } = require('discord.js'); // REST实例初始化时API版本改成10 const rest = new REST({ version: '10' }).setToken(token);
内容的提问来源于stack exchange,提问作者Ava
相关产品推荐
相关产品推荐

