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

Discord机器人TypeError求助:无法读取'extracustomdesc'属性

问题分析与解决方案

报错原因

报错TypeError: Cannot read properties of undefined (reading 'extracustomdesc')的核心逻辑是:

  • 执行client.commands.filter((cmd) => cmd.category === "🎤 Voice").first()时,未找到任何属于🎤 Voice分类的命令,返回了undefined
  • 后续代码直接读取undefined的extracustomdesc属性,触发了空值读取异常

排查步骤

  1. 校验命令分类配置:检查所有标注🎤 Voice分类的命令,确认category字段的符号、空格完全匹配(比如是否误写为Voice而非🎤 Voice)
  2. 检查命令加载逻辑:确认该分类下的命令文件是否被正确加载到client.commands集合中,文件路径、导出格式是否符合机器人的加载规则

代码修复方案

两段代码都存在相同隐患:未对first()返回值做空值校验,且重复调用filter和first()浪费性能。建议修改如下:

第一段代码(Custom Queue(s) 部分)

// 缓存分类命令,避免重复执行过滤逻辑
const customQueueCmd = client.commands.filter((cmd) => cmd.category === "⚜️ Custom Queue(s)").first();
// 仅当找到有效命令时创建embed
if (customQueueCmd) {
  var embed5 = new MessageEmbed()
    .setTitle(`[\`${customQueueCmd.extracustomdesc?.length || 0}\`] ⚜️ Custom Queue(s) Commands ⚜️ | ${settings.CUSTOMQUEUE ? "<a:yes:833101995723194437> ENABLED" : "<:no:833101993668771842> DISABLED"}`)
    .setDescription(`> *${customQueueCmd.extracustomdesc?.split(",").map(i => i?.trim()).join("︲") || "暂无分类描述"}*`)
    .addField("\u200b", "\u200b")
    .addField("<a:yes:833101995723194437>  **Usage**", "> "+(customQueueCmd.usage || "暂无使用说明"));
  if(!filterdisabled || settings.CUSTOMQUEUE || settings.showdisabled) embeds.push(embed5);
}

第二段代码(Voice 部分,报错位置)

// 缓存分类命令,避免重复执行过滤逻辑
const voiceCategoryCmd = client.commands.filter((cmd) => cmd.category === "🎤 Voice").first();
// 仅当找到有效命令时创建embed
if (voiceCategoryCmd) {
  var embed13 = new MessageEmbed()
    .setTitle(`[\`${voiceCategoryCmd.extracustomdesc?.length || 0}\`] 🎤 Voice Commands 🎤 | ${settings.VOICE ? "<a:yes:833101995723194437> ENABLED" : "<:no:833101993668771842> DISABLED"}`)
    .setDescription(`> *${voiceCategoryCmd.extracustomdesc?.split(",").map(i => i?.trim()).join("︲") || "暂无分类描述"}*`)
    .addField("\u200b", "\u200b")
    .addField("<a:yes:833101995723194437>  **Usage**", "> "+(voiceCategoryCmd.usage || "暂无使用说明"));
  if(!filterdisabled || settings.VOICE || settings.showdisabled) embeds.push(embed13);
}

修复核心要点

  • 用可选链操作符?.避免属性不存在时触发报错
  • 添加默认值(如|| 0、|| "暂无描述")保证界面正常渲染
  • 提前缓存过滤结果,减少重复运算
  • 仅在找到有效命令时执行embed创建逻辑,避免无效操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:55:43