discord.js v14.0.3中.setToken(...)不是函数报错求助
Discord.js v14.0.3 应用命令注册报错解决
你遇到的 TypeError: (intermediate value).setToken(...) is not a function 报错,是两个问题叠加导致的:
- 自动分号解析异常:JavaScript 在特定场景下不会自动插入分号,比如当前一行结尾是函数调用、下一行开头是
(时,会把两行代码合并解析。你的代码中const rest = ...行末尾未加分号,导致后面的立即执行函数被当成setToken返回值的调用参数,触发报错。 - setToken 不支持链式调用:
@discordjs/rest中的setToken方法没有返回实例本身(返回值为void),链式赋值后rest变量会变成undefined,后续调用rest.put也会出错。
修复方案
正确初始化 REST 实例
两种可选方式:- 构造时直接传入 token:
const rest = new REST({ version: '10', token: process.env.BOT_TOKEN }); - 先创建实例再单独设置 token:
const rest = new REST({ version: '10' }); rest.setToken(process.env.BOT_TOKEN);
- 构造时直接传入 token:
保证分号正确
修正后完整代码示例:require("dotenv").config(); const { REST } = require('@discordjs/rest'); const { Routes } = require('discord.js'); const commands = [ { name: 'ping', description: 'Replies with Pong!', }, ]; // 选择其中一种初始化方式即可 const rest = new REST({ version: '10', token: process.env.BOT_TOKEN }); // const rest = new REST({ version: '10' }); // rest.setToken(process.env.BOT_TOKEN); (async () => { try { console.log('Started refreshing application (/) commands.'); await rest.put(Routes.applicationGuildCommands(process.env.BOT_CLIENT_ID, process.env.DC_GUILD_ID), { body: commands }); console.log('Successfully reloaded application (/) commands.'); } catch (error) { console.error(error); } })();
内容的提问来源于stack exchange,提问作者Yuu
相关产品推荐
相关产品推荐

