Discord Bot问题:使用.addChoice选择问题后无法显示对应问题与答案
Discord Bot 选择问题后无法正确展示内容的解决方法
问题现象
使用SlashCommandBuilder的.addChoice方法添加问题选项后,选择问题仅输出your question: ${name},变量未被解析,且对应答案也无法展示,期望输出格式如下:
your question: How old are you? answer: 21
错误原因
- 模板字符串使用错误:用单引号
'包裹字符串时,${name}会被当作纯文本输出,无法解析变量,需使用反引号` - 未获取交互选项数据:没有从
interaction对象中提取用户选择的问题名称和对应答案 - 重复回复错误:连续调用两次
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}` }); } }
修改说明
- 模板字符串替换:将单引号替换为反引号,让
${}变量能被正确解析 - 获取选项数据:通过
interaction.options.getString获取用户选择的答案value,再遍历命令的choices找到对应的问题name - 合并回复内容:将问题和答案合并到同一次
interaction.reply中,避免重复回复的错误,同时满足格式要求
内容的提问来源于stack exchange,提问作者emjay.dev
相关产品推荐
相关产品推荐

