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

Discord.js v14报错:interaction.options.getString不是函数求助

问题分析与解决办法

核心错误原因

  1. 动态选项名称逻辑完全错误
    你用Date.now()生成选项名称,部署命令时的时间戳和用户触发命令时的时间戳完全不一致,导致永远找不到对应选项。Slash命令的选项名称必须是固定的静态字符串,不能动态生成。

  2. 交互类型判断缺失
    console.log(interaction.options)输出客户端配置,说明你在interactionCreate事件中没有判断交互类型就直接执行命令模块。如果触发的不是Slash命令交互(比如按钮、菜单),interaction.options的结构就不是CommandInteractionOptionResolver,自然没有getString()方法。

分步解决

1. 修正选项名称为静态字符串

修改SlashCommandBuilder的选项定义,使用固定名称替代动态时间戳:

const { SlashCommandBuilder } = require('discord.js');

module.exports = {
  data: new SlashCommandBuilder()
    .setName('你的命令名')
    .addStringOption(option =>
      option.setName('faction') // 固定名称,禁止动态生成
        .setDescription('选择阵营')
        .setRequired(true)),
  async execute(interaction) {
    // 后续逻辑
  },
};

2. 在interactionCreate事件中判断交互类型

确保只对Slash命令交互执行对应模块:

// bot.js中的interactionCreate事件处理
client.on('interactionCreate', async interaction => {
  // 先过滤非Slash命令的交互
  if (!interaction.isChatInputCommand()) return;

  const command = client.commands.get(interaction.commandName);
  if (!command) return;

  try {
    await command.execute(interaction);
  } catch (error) {
    console.error(error);
    await interaction.reply({ content: '命令执行出错!', ephemeral: true });
  }
});

3. 修正execute模块的选项获取逻辑

用固定的选项名称获取值:

async execute(interaction) {
  // 直接使用固定的"faction"名称获取选项值
  const faction = interaction.options.getString('faction');
  // 后续业务逻辑...
}

额外注意事项

  • 每次修改命令结构(比如选项名称、类型)后,必须重新部署命令到Discord服务器,否则旧的命令定义依然生效。
  • discord.js v14要求Node.js版本至少为16.9.0,确保你的运行环境符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:45:34