Discord.js EmbedBuilder.addFields报ExpectedConstraintError错误的解决方法
修复Discord.js中EmbedBuilder.addFields的ExpectedConstraintError错误
错误信息
ExpectedConstraintError: Invalid number value at Object.run (/home/runner/project/node_modules/@sapphire/shapeshift/dist/index.js:702:72) at /home/runner/project/node_modules/@sapphire/shapeshift/dist/index.js:113:66 at Array.reduce (<anonymous>) at NumberValidator.parse (/home/runner/project/node_modules/@sapphire/shapeshift/dist/index.js:113:29) at validateFieldLength (/home/runner/project/node_modules/@discordjs/builders/dist/index.js:133:24) at EmbedBuilder.addFields (/home/runner/project/node_modules/@discordjs/builders/dist/index.js:243:5) at /home/runner/project/prefixCommands/viewBoard.js:22:18 { constraint: 's.number.lessThanOrEqual', given: NaN, expected: 'expected <= 25' }
问题根源
错误核心是addFields方法的调用语法出错,导致Discord.js无法正确解析要添加的字段数量,最终validateFieldLength函数收到的amountAdding参数为NaN,触发数值验证失败。你的代码存在两处明显问题:
- 调用
addFields时误用大括号{}包裹参数,而非方法要求的小括号(),属于语法错误。 - 字段对象格式异常:比如重复定义
value键({value:"there is nothing here",value:"/u200b"}),会导致对象属性被覆盖,破坏字段结构。
修复方案
1. 修正addFields调用语法
addFields是类方法,必须用小括号()包裹参数,不能用大括号{}。
2. 规范字段对象格式
每个字段对象必须包含name和value属性,禁止重复定义同一键名,可选添加inline属性控制是否行内显示。
3. 正确传递字段参数
addFields支持两种传参方式:
- 单个字段对象
- 多个字段对象组成的数组
正确代码示例
client.on(Events.ClientReady, async () => { const embed = new Discord.EmbedBuilder() // 添加单个字段 .addFields({ name: 'Inline field title', value: 'Some value here', inline: true }) // 批量添加多个字段(数组包裹) .addFields([ { name: '空占位字段', value: '\u200b' }, // 零宽空格写法为\u200b,注意转义符 { name: '常规字段', value: '这里是字段内容' } ]); });
额外注意事项
- 零宽空格的正确写法是
\u200b,不是/u200b,否则会被识别为普通文本。 - Discord Embed最多支持25个字段,即使语法正确,超过数量也会触发类似的验证错误。
内容的提问来源于stack exchange,提问作者gabegad123
相关产品推荐
相关产品推荐

