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

discord.js中interaction.client.commands.get is not a function错误排查求助

解决discord.js中interaction.client.commands.get is not a function错误

问题背景

之前一直使用discord.py,现按照discord.js官方文档创建首个机器人,实现命令处理功能时遇到错误。使用的代码如下(错误行已标注):

client.on(Events.InteractionCreate, async interaction => {
    if (!interaction.isChatInputCommand()) return;
//////////////////////////////////////////////////////////////////////////////////
    const command = interaction.client.commands.get(interaction.commandName);
//////////////////////////////////////////////////////////////////////////////////
    if (!command) {
        console.error(`No command matching ${interaction.commandName} was found.`);
        return;
    }

    try {
        await command.execute(interaction);
    } catch (error) {
        console.error(error);
        if (interaction.replied || interaction.deferred) {
            await interaction.followUp({ content: 'There was an error while executing this command!', ephemeral: true });
        } else {
            await interaction.reply({ content: 'There was an error while executing this command!', ephemeral: true });
        }
    }
});

报错信息:interaction.client.commands.get is not a function

解决步骤

  • 初始化commands集合
    必须先给client实例创建一个Collection来存储命令,这是官方文档流程里的前置步骤,你大概率漏掉了这一步:

    const { Client, Collection, Events, GatewayIntentBits } = require('discord.js');
    const client = new Client({ intents: [GatewayIntentBits.Guilds] });
    
    // 关键:初始化commands为Collection类型
    client.commands = new Collection();
    

    没有这一步的话,interaction.client.commands只是一个未定义或普通对象,自然没有get方法。

  • 正确加载命令文件到集合
    还要确保把commands文件夹里的命令文件加载到client.commands中,示例代码如下:

    const fs = require('node:fs');
    const path = require('node:path');
    
    const commandsPath = path.join(__dirname, 'commands');
    const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js'));
    
    for (const file of commandFiles) {
      const filePath = path.join(commandsPath, file);
      const command = require(filePath);
      // 验证命令结构后添加到集合
      if ('data' in command && 'execute' in command) {
        client.commands.set(command.data.name, command);
      } else {
        console.log(`[WARNING] 命令文件 ${filePath} 缺少必填的"data"或"execute"属性`);
      }
    }
    
  • 检查代码执行顺序
    确保执行顺序为:初始化client → 创建commands集合 → 加载命令文件 → 调用client.login()。顺序错误会导致集合未被正确初始化或填充。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:22:54