You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js v14报错:期望对象却收到字符串的解决求助

Discord.js v14中EmbedBuilder.setAuthor报错:Expected the value to be an object, but received string instead

错误详情

执行/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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:23:20