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

Discord.js中判断题型Quiz命令触发Cannot read properties of undefined错误

解决Discord.js Quiz命令判断题型的TypeError问题

问题根源

错误 TypeError: Cannot read properties of undefined (reading 'question') 说明 randomQuestion 变量为undefined,核心原因是:
当你请求OpenTDB API获取判断题时,部分分类+难度+题型的组合没有足够(甚至没有)题目资源,导致返回的data.results是空数组。后续执行Math.floor(Math.random() * length)时,若length为0会生成NaN,最终data.results[random]无法取到有效数据。

解决方案

在处理API返回数据前,先校验请求状态和结果数组长度,避免访问undefined的属性:

  1. 检查OpenTDB的response_code:API返回的response_code为0表示请求成功,非0值说明无结果或参数错误。
  2. 校验data.results的长度,为空时直接提示用户更换选项。

修改后的关键代码片段:

const response = await fetch(`https://opentdb.com/api.php?amount=12&category=${category}&difficulty=${difficulty}&type=${type}`);
const data = await response.json();

// 检查API请求状态
if (data.response_code !== 0) {
    return interaction.reply({ 
        content: '无法获取题目,请检查分类、难度和题型的组合是否合理。', 
        ephemeral: true 
    });
}

const length = data.results.length;
// 检查是否有可用题目
if (length === 0) {
    return interaction.reply({ 
        content: '该组合下没有可用题目,请更换选项重试。', 
        ephemeral: true 
    });
}

const random = Math.floor(Math.random() * length);
const randomQuestion = data.results[random];

console.log(randomQuestion);

let question = randomQuestion.question;
const correctAnswer = randomQuestion.correct_answer;

可选优化

判断题型的按钮标签应改为实际选项,提升用户体验:

const booleanAnswersRow = new ActionRowBuilder()
    .addComponents(
        new ButtonBuilder()
            .setCustomId('true')
            .setLabel('True')
            .setStyle(ButtonStyle.Primary),
        new ButtonBuilder()
            .setCustomId('false')
            .setLabel('False')
            .setStyle(ButtonStyle.Primary),
        new ButtonBuilder()
            .setCustomId('stop')
            .setLabel('Stop')
            .setStyle(ButtonStyle.Danger)
    );

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:05:26