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

Discord Bot调用嵌入时报错:LIST_ITEM_VALUE_REQUIRED

Discord斜杠命令返回Embed时LIST_ITEM_VALUE_REQUIRED错误修复

报错信息:
data.embeds[0][LIST_ITEM_VALUE_REQUIRED]: List item values of ModelType are required

问题代码

特性查询函数

import { EmbedBuilder } from "discord.js"
import fetch from "node-fetch"


export const traitDescription = async (trait) => {
    console.log('here')
    let result
    let json = await fetch('https://temtem-api.mael.tech/api/traits').then()
    try { result = await json.json(); } catch (err) { result = null }
        
    console.log(result)
    var traitDes = false
    if (trait.toLowerCase() === 'traits') {
        return 0
    }


    result.forEach((item) => {
        if (trait.toLowerCase() === item.name.toLowerCase()) {
            traitDes = item
            console.log(traitDes)
        }
    })

    if (traitDes != false) {
        traitDes = new EmbedBuilder()
                .setTitle(`${traitDes.name}`)
                .setDescription(`${traitDes.effect}`)
                .setURL(`${traitDes.wikiUrl}`)
    } else {
        return 0
    }
    console.log(traitDes)
    return traitDes
}

index.js中interactionCreate事件调用代码

else if (commandName === 'trait') {
        let traitName = options.getString('traitname')
        const traitEmbed = traitDescription(traitName)
        if (traitEmbed === 0) {
            interaction.reply({
                content: 'This is not a trait <:bruhvel:1100574618110132255>',
                ephemeral: true,
            })
        } else {
            const messageId = interaction.reply({ embeds: [ traitEmbed ] })

        }
    }

核心问题与修复方案

关键错误:未等待异步函数结果

traitDescription是异步函数,但调用时没有加await,导致traitEmbed拿到的是Promise对象,而非预期的EmbedBuilder实例或0。Discord.js无法识别Promise作为Embed参数,因此抛出ModelType相关错误。

修正后的代码

特性查询函数(优化版)

import { EmbedBuilder } from "discord.js"
import fetch from "node-fetch"

export const traitDescription = async (trait) => {
    console.log('here')
    let result = null;
    try {
        // 修正fetch调用,添加响应状态检查
        const response = await fetch('https://temtem-api.mael.tech/api/traits');
        if (!response.ok) throw new Error(`API请求失败,状态码:${response.status}`);
        result = await response.json();
    } catch (err) {
        console.error('查询特性时出错:', err);
        return 0;
    }
        
    console.log(result)
    if (trait.toLowerCase() === 'traits') {
        return 0
    }

    // 用Array.find替代forEach,逻辑更简洁高效
    const traitItem = result.find(item => trait.toLowerCase() === item.name.toLowerCase());

    if (traitItem) {
        return new EmbedBuilder()
                .setTitle(traitItem.name)
                .setDescription(traitItem.effect)
                .setURL(traitItem.wikiUrl);
    } else {
        return 0
    }
}

index.js调用代码(修正版)

else if (commandName === 'trait') {
    let traitName = options.getString('traitname')
    // 必须添加await,等待异步函数返回实际结果
    const traitEmbed = await traitDescription(traitName)
    if (traitEmbed === 0) {
        interaction.reply({
            content: 'This is not a trait <:bruhvel:1100574618110132255>',
            ephemeral: true,
        })
    } else {
        // interaction.reply也是异步操作,建议添加await避免潜在问题
        await interaction.reply({ embeds: [ traitEmbed ] })
    }
}

其他优化点

  1. 完善API请求错误处理,避免result为null时遍历报错
  2. 用Array.find替代forEach查找特性,减少不必要的遍历
  3. 移除模板字符串的冗余使用(如${traitItem.name}可直接用traitItem.name)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:37:03