Discord.js v14报错:期望对象却收到字符串的问题求助
Discord.js v14 服务器信息命令报错「Expected the value to be an object, but received string instead」修复方案
问题根源
- 错误修改
Guild实例内置属性:直接给interaction.guild.owner赋值会破坏Discord.js内部对象结构,且后续拼接字符串的方式不符合addFields的参数要求。 addFields调用格式错误:Discord.js v14中,EmbedBuilder.addFields()要求传入包含name和value的对象数组,而非直接传入拼接好的字符串,这是导致类型不匹配报错的核心原因。
修复代码
run: async (client, interaction, args) => { let msg = await interaction.reply(`Checking..`); let boosts = interaction.guild.premiumSubscriptionCount; const ar = "<a:yes:962966293764505620>"; // 用独立变量存储所有者信息,不修改Guild内置属性 const owner = await interaction.guild.fetchOwner().then(m => m.user).catch(() => "Unknown Owner"); var boostlevel = "0"; if (boosts >= 14) boostlevel = "3 / ∞"; else if (boosts >= 7) boostlevel = "2"; else if (boosts >= 2) boostlevel = "1"; let maxbitrate = 96000; if (boosts >= 14) maxbitrate = 384000; else if (boosts >= 7) maxbitrate = 256000; else if (boosts >= 2) maxbitrate = 128000; const emb = new EmbedBuilder() .setColor("Aqua") .setTitle(`Server info of ${interaction.guild.name}`) .setImage(interaction.guild.bannerURL({ size: 4096 })) // 按要求传入字段对象数组,每个字段包含name和value .addFields( { name: `${ar} Server Owner`, value: owner === "Unknown Owner" ? owner : `<@${owner.id}>` }, { name: `${ar} Boost Level`, value: boostlevel }, { name: `${ar} Max Bitrate`, value: `${maxbitrate}bps` } ) .setThumbnail(client.user.displayAvatarURL({ dynamic: true })) .setFooter({ text: `Command Requested by: ${interaction.user.tag}`, iconURL: interaction.user.displayAvatarURL(), }); setTimeout(() => { msg.edit({ content: ` `, embeds: [emb] }); }, 500); }, };
关键修改说明
- 移除
interaction.guild.owner的赋值操作,改用owner变量存储获取到的用户对象或错误提示 - 调整
boostlevel和maxbitrate的判断逻辑为else if,避免重复覆盖值 addFields传入多个字段对象,每个对象明确包含name(字段标题)和value(字段内容)- 处理
fetchOwner失败的情况,返回友好提示
内容的提问来源于stack exchange,提问作者Udayana
相关产品推荐
相关产品推荐

