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

如何在Discord.js v13.12.0中获取SlashCommand的option参数值?

问题描述

我正在使用Discord.js v13.12.0开发Discord机器人,已创建名为info的SlashCommand,该命令包含必填的steam64字符串选项,代码如下:

const data = new SlashCommandBuilder() // </> command
  .setName('info')
  .setDescription('информация об админе')
  .addStringOption(option =>
    option.setName('steam64')
      .setDescription('numbers')
      .setRequired(true));
//code 
client.on('interactionCreate', async interaction => {
  if (interaction.commandName === 'убитьбота') {
    interaction.reply("Успешно!");
    client.destroy();
  }
  else if (interaction.commandName === 'info'){ // Problem
    console.log("here");
    id = interaction.options.string; // over here //
    console.log(id) // undefined
    console.log(admins[id]) // undefined
    const embed = new MessageEmbed()
      .setColor('#77dd77')
      .setTitle('Информация')
      .setDescription(`Имя: ${admins[id].NAME} \n **Описание:** ${admins[id].DIS} \n **Звание:** ${admins[id].ADMINLVL} \n **Наказание** - ***Выговоров:*** ${admins[id].PUNS.VARN} | ***Предов:*** ${admins[id].PUNS.PRED}`); // error
    await interaction.reply({ content: 'Вот!', ephemeral: true, embeds: [embed]});
    console.log(interaction.option);
    interaction.reply(`debug - {admins} в conlose)`);
  }    
});

触发info命令时,尝试通过interaction.options.string获取传入的steam64参数值,结果返回undefined,无法读取对应的管理员JSON数据(如下),进而导致后续代码报错:

{
    "76561198887558606": {
        "NAME": "Пельмень",
        "DIS": "Вы хотите знать что-то обо мне? Хи-Хи [NO DATA] ooops!",
        "ADMINLVL": "GOD XD",
        "PUNS":
        {
            "VARN": 0,
            "PRED": 0
        }
    },
    "76561199037779891":{
        "NAME": "Senko Number ₲ne",
        "DIS": "[NO DATA] ooops!",
        "ADMINLVL": "Технарь",
        "PUNS":
        {
            "VARN": 0,
            "PRED": 0
        }
    }
}
解决方案

问题出在获取选项值的方式错误。Discord.js v13中,interaction.options没有直接的string属性,必须调用getString()方法并传入选项名称来获取对应值。

修正步骤:

  1. 替换错误的参数获取代码为标准方法
  2. 增加参数有效性校验,避免无效ID导致后续报错
  3. 修复重复调用interaction.reply()的问题(同一交互只能调用一次reply(),后续消息需用followUp())

修正后的完整代码:

const data = new SlashCommandBuilder()
  .setName('info')
  .setDescription('информация об админе')
  .addStringOption(option =>
    option.setName('steam64')
      .setDescription('numbers')
      .setRequired(true));

client.on('interactionCreate', async interaction => {
  if (interaction.commandName === 'убитьбота') {
    interaction.reply("Успешно!");
    client.destroy();
  } else if (interaction.commandName === 'info') {
    console.log("here");
    // 正确获取steam64参数值
    const id = interaction.options.getString('steam64');
    console.log(id);

    // 校验管理员数据是否存在
    if (!admins[id]) {
      return await interaction.reply({ content: 'Администратор с таким Steam ID не найден!', ephemeral: true });
    }

    const embed = new MessageEmbed()
      .setColor('#77dd77')
      .setTitle('Информация')
      .setDescription(`Имя: ${admins[id].NAME} \n **Описание:** ${admins[id].DIS} \n **Звание:** ${admins[id].ADMINLVL} \n **Наказание** - ***Выговоров:*** ${admins[id].PUNS.VARN} | ***Предов:*** ${admins[id].PUNS.PRED}`);

    // 发送主回复,后续用followUp发送调试信息
    await interaction.reply({ content: 'Вот!', ephemeral: true, embeds: [embed] });
    console.log(interaction.options);
    await interaction.followUp({ content: 'debug - данные админов выведены в консоль', ephemeral: true });
  }    
});

关键说明:

  • interaction.options.getString('选项名称')是Discord.js v13获取字符串类型选项的标准方法,同理还有getInteger()、getUser()等方法对应不同类型选项
  • 增加参数校验可避免Cannot read properties of undefined类型的错误
  • 同一交互只能调用一次reply(),后续消息必须使用followUp()发送

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:26:05