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

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 也会出错。

修复方案

  1. 正确初始化 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);
      
  2. 保证分号正确
    修正后完整代码示例:

    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:15:31