You need to enable JavaScript to run this app. Discord.js使用MessageEmbed时报inspect().addField非函数错误的修复方法
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js使用MessageEmbed时报inspect().addField非函数错误的修复方法

报错根因

该报错完全由链式调用的括号匹配错位导致,和Discord.js API、Node.js内置inspect模块的功能逻辑无关。
逐行拆解原代码的语法解析流程:

  • 原代码对应'Evaled'字段的第二个.addField方法,在写完第二个参数(由inspect结果拼接的代码块字符串)后,未添加闭合右括号,直接衔接了第三个.addField(对应'Type Of'字段)的链式调用
  • JS解析器会将后续的.addField(...)调用,判定为对inspect返回值(字符串类型)发起addField方法调用。字符串不存在该原型方法,因此直接触发类型报错
修复方案
  • 严格对齐链式调用的括号规则,每个.addField方法调用完成后立即闭合括号,不得将整段链式调用的所有闭合括号堆在代码末尾。该修改可直接解决当前触发的类型报错
  • 可选优化1:对eval执行结果的字符串长度做截断处理,避免超过Discord单字段最大1024字符的限制,导致嵌入消息发送失败
  • 可选优化2:如果使用Discord.js v14+版本,原有Discord.MessageEmbed构造方式依然兼容,无需强制切换到新的EmbedBuilder API
修正后可直接运行的代码
// 确保从util模块引入inspect
const { inspect } = require('util');
// Discord单字段允许的最大字符数
const MAX_FIELD_LIMIT = 1024;

var embed = new Discord.MessageEmbed()
  .setColor('#f03824')
  .setTitle('Evaluated')
  .addField('To Eval', `\`\`\`${command.slice(0, MAX_FIELD_LIMIT)}\`\`\``)
  .addField('Evaled', `\`\`\`js\n${inspect(evaled, { depth: 0 }).slice(0, MAX_FIELD_LIMIT)}\`\`\``)
  .addField('Type Of', `\`\`\`${typeof evaled}\`\`\``);

message.channel.send(embed);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 15:45:01