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

Discord Bot问题:使用.addChoice选择问题后无法显示对应问题与答案

Discord Bot 选择问题后无法正确展示内容的解决方法

问题现象

使用SlashCommandBuilder的.addChoice方法添加问题选项后,选择问题仅输出your question: ${name},变量未被解析,且对应答案也无法展示,期望输出格式如下:

your question: How old are you?

answer: 21

错误原因

  1. 模板字符串使用错误:用单引号'包裹字符串时,${name}会被当作纯文本输出,无法解析变量,需使用反引号`
  2. 未获取交互选项数据:没有从interaction对象中提取用户选择的问题名称和对应答案
  3. 重复回复错误:连续调用两次interaction.reply会触发Discord的交互限制,一次交互仅允许初始回复一次,后续需用followUp

修正后的代码

const { SlashCommandBuilder } = require("@discordjs/builders")

module.exports = {
    data: new SlashCommandBuilder()
        .setName("question")
        .setDescription("what do you want to ask me?")
        .addStringOption(option =>
            option.setName('question')
                .setDescription('Your question')
                .setRequired(true)
                .addChoices(
                    { name: 'How old are you', value: '21' },
                    { name: 'When is your birthday?', value: 'September 8, 2003' },
                    { name: 'What is your favorite color?', value: 'Violet' },
                )),
    execute: async ({ interaction }) => {
        // 获取用户选择的选项value
        const selectedValue = interaction.options.getString('question', true);
        // 从choices中找到对应的name
        const selectedChoice = interaction.command.options.find(opt => opt.name === 'question').choices.find(choice => choice.value === selectedValue);
        
        // 使用反引号包裹模板字符串,一次回复完成内容输出
        await interaction.reply({ 
            content: `your question: ${selectedChoice.name}

answer: ${selectedChoice.value}` 
        });
    }
}

修改说明

  1. 模板字符串替换:将单引号替换为反引号,让${}变量能被正确解析
  2. 获取选项数据:通过interaction.options.getString获取用户选择的答案value,再遍历命令的choices找到对应的问题name
  3. 合并回复内容:将问题和答案合并到同一次interaction.reply中,避免重复回复的错误,同时满足格式要求

内容的提问来源于stack exchange,提问作者emjay.dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:10:11