Discord.js v13使用数组作为Embed字段值报错,如何复现v12相同效果?
报错根因
RangeError [EMBED_FIELD_VALUE]: MessageEmbed field values must be non-empty strings
该报错是因为Discord.js v13调整了Embed字段的校验规则:v12版本会隐式把传入的value数组自动拼接为换行分隔的字符串,v13及以上版本不再支持数组作为value参数的输入,要求必须传入显式的非空字符串。
解决方法
仅需要把数组手动用join('\n')方法拼接为换行分隔的字符串即可,实现的视觉效果和v12版本完全一致。
修改后的完整代码如下:
const embed = new Discord.MessageEmbed() .setTitle("Embed Title") .setColor("DC143C") .addFields( { name: "\u200B", value: "\u200B" }, { name: "Field 1:", value: `Value`, inline: true }, { name: "Field 2:", value: `Value`, inline: true }, { name: "Field 3:", value: `Value`, inline: true }, { name: "\u200B", value: "\u200B" }, { name: `Column 1`, value: ["word", "word", "word", "word", "word"].join('\n'), inline: true, }, { name: `Column 2`, value: ["word", "word", "word", "word", "word"].join('\n'), inline: true, }, { name: `Column 3`, value: ["word", "word", "word", "word", "word"].join('\n'), inline: true, } );
实现效果与v12版本完全一致,参考效果图:
补充注意事项
如果你的数组存在为空的可能性,拼接后可以加零宽空格兜底,避免触发空字符串报错,示例写法:value: yourArray.join('\n') || '\u200B'
内容的提问来源于stack exchange,提问作者KraftaN
相关产品推荐
相关产品推荐

