Discord.js v14报错:期望对象却收到字符串的解决求助
错误详情
执行/update命令时触发以下验证错误:
ValidationError > s.object(T) Expected the value to be an object, but received string instead Received: | 'Recon#6749' at ObjectValidator.handle (C:\Users\Avtandil Rusishvili\Desktop\rbx\node_modules\@sapphire\shapeshift\dist\index.js:1202:25) at ObjectValidator.parse (C:\Users\Avtandil Rusishvili\Desktop\rbx\node_modules\@sapphire\shapeshift\dist\index.js:207:88) at EmbedBuilder.setAuthor (C:\Users\Avtandil Rusishvili\Desktop\rbx\node_modules\@discordjs\builders\dist\index.js:278:26) at Object.run (C:\Users\Avtandil Rusishvili\Desktop\rbx\slashCommands\moderation\update.js:87:8) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async Client.<anonymous> (C:\Users\Avtandil Rusishvili\Desktop\rbx\events\interactionCreate.js:59:6)
问题原因
Discord.js v14对EmbedBuilder.setAuthor()的参数格式做了强制修改:不再支持直接传入字符串(如用户标签),必须传入一个配置对象,包含name、iconURL等可选属性。你的代码第87行直接传入了字符串'Recon#6749',触发了类型验证失败。
解决方案
将setAuthor的参数改为对象格式,示例如下:
基础写法(仅设置作者名)
embed.setAuthor({ name: 'Recon#6749' });
结合你的代码场景(设置目标用户信息)
如果要将目标用户的信息作为Embed作者,可直接使用guildMember的属性构建对象:
// 示例:构建角色更新成功提示Embed const successEmbed = new EmbedBuilder() .setTitle('角色更新完成') .setDescription(`已成功更新 ${guildMember.user.tag} 的角色`) .setAuthor({ name: guildMember.user.tag, iconURL: guildMember.user.displayAvatarURL() // 可选:添加用户头像 }) .setColor('#00ff00'); await interaction.reply({ embeds: [successEmbed] });
额外检查
- 排查代码中所有使用
setAuthor的位置,确保全部采用对象格式传参,不要直接传字符串。 - 若不需要头像,仅保留
name属性即可,无需额外配置其他字段。
内容的提问来源于stack exchange,提问作者Xeffort
相关产品推荐
相关产品推荐

