Discord.js创建Embed函数报错求助:ValidationError类型错误
问题解决与方案
错误原因
Discord.js v14+ 的 EmbedBuilder.setAuthor() 方法要求传入对象参数,而非直接传入字符串。你当前传入的 username.username 是字符串类型(如报错中的'Moon Wolf'),不符合方法的参数规范,因此触发了ValidationError。
修正后的函数实现
完全可以通过封装函数来生成Embed,无需在每个代码块中重复编写。以下是修正后的通用函数示例:
const { EmbedBuilder } = require('discord.js'); // 通用Embed生成函数 function generateEmbed(color, user, message, userAvatarURL) { const embed = new EmbedBuilder() .setColor(`#${color}`) // 传入包含name和可选iconURL的对象给setAuthor .setAuthor({ name: user.username, iconURL: userAvatarURL // 用用户头像作为作者图标 }) .setThumbnail(userAvatarURL) .setDescription(message); return embed; } // 使用示例(假设message是Discord的Message对象) const myEmbed = generateEmbed('FFFFFF', message.author, '这里是Embed的描述内容', message.author.displayAvatarURL()); // 发送生成好的Embed message.channel.send({ embeds: [myEmbed] });
关键说明
setAuthor()的参数必须是对象,支持的属性包括:name:作者名称(必填)iconURL:作者头像链接(可选)url:点击作者名称跳转的外部链接(可选)
- 封装函数后,每次需要生成Embed时,只需传入对应参数即可,大幅提升代码复用性。
内容的提问来源于stack exchange,提问作者Moon Wolf
相关产品推荐
相关产品推荐

