Discord.js中EmbedBuilder报Missing Property 'name'错误求助
问题场景
我尝试创建一个展示消息内容、作者及评分的Embed,但运行时抛出缺少'name'属性的错误。相关代码如下:
const suggestionEmbed = new EmbedBuilder() .setTitle('Suggestion') .setDescription(`A suggestion from ${message.author}`) .setAuthor(message.author) .setThumbnail(suggestionSender.displayAvatarURL()) .addFields( { name: 'Suggestion', value: `${message.content}` }, { name: 'Score', value: `${score}` }, ) .setColor(0xffcc00);
报错信息
errors: [ [ 'name', MissingPropertyError: A required property is missing at ObjectValidator.handleIgnoreStrategy (/home/container/node_modules/@sapphire/shapeshift/dist/index.js:1243:27) at ObjectValidator.handleStrategy (/home/container/node_modules/@sapphire/shapeshift/dist/index.js:1121:47) at ObjectValidator.handle (/home/container/node_modules/@sapphire/shapeshift/dist/index.js:1221:17) at ObjectValidator.parse (/home/container/node_modules/@sapphire/shapeshift/dist/index.js:212:88) at EmbedBuilder.setAuthor (/home/container/node_modules/@discordjs/builders/dist/index.js:291:26) at Client.<anonymous> (/home/container/functions.js:64:127) at Client.emit (node:events:513:28) at MessageCreateAction.handle (/home/container/node_modules/discord.js/src/client/actions/MessageCreate.js:28:14) at module.exports [as MESSAGE_CREATE] (/home/container/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32) at WebSocketManager.handlePacket (/home/container/node_modules/discord.js/src/client/websocket/WebSocketManager.js:354:31) { property: 'name' } ] ]
解决方案
问题出在setAuthor方法的参数上。Discord.js v14及以后版本中,setAuthor不再支持直接传入User/GuildMember对象,必须传入包含必填name属性的配置对象。
修改后的代码如下:
const suggestionEmbed = new EmbedBuilder() .setTitle('Suggestion') .setDescription(`A suggestion from ${message.author}`) // 替换原setAuthor为对象格式,指定name和头像链接 .setAuthor({ name: message.author.tag, iconURL: message.author.displayAvatarURL() }) .setThumbnail(message.author.displayAvatarURL()) // 若suggestionSender就是message.author,直接替换避免变量混淆 .addFields( { name: 'Suggestion', value: `${message.content}` }, { name: 'Score', value: `${score}` }, ) .setColor(0xffcc00);
关键说明
setAuthor的配置对象中,name是必填项,需传入字符串(比如用户标签message.author.tag)- 如需显示作者头像,额外指定
iconURL属性,值为头像URL(通过displayAvatarURL()获取)
内容的提问来源于stack exchange,提问作者RedstoniaYT
相关产品推荐
相关产品推荐

