Discord.js v13[EEMBED_FIELD_VALUE]:MessageEmbed字段值必须为非空字符串


const key = `${message.guild.id}|${message.channel.id}|${message.id}`;
if (MESSAGE_CACHE.has(key)) {
const cachedMessage = MESSAGE_CACHE.get(key);
const logChannel = message.guild.channels.cache.get(settings.log_channel);
if (!logChannel) return;
const embed = new MessageEmbed()
.setAuthor("Ghost ping detected")
.setDescription(
`**Message**:
${cachedMessage.content}

**Author:** ${cachedMessage.author.tag} `${cachedMessage.author.id}`
**Channel:** <#${cachedMessage.channelId}>
`
)
.addField("Members", cachedMessage.mentions.members, true)
.addField("Roles", cachedMessage.mentions.roles, true)
.addField("Everyone?", cachedMessage.mentions.everyone, true)
.setFooter("Sent at: " + cachedMessage.createdAt);
sendMessage(logChannel, { embeds: [embed] });
}

如果我删除了一条带有重影ping的消息,它会返回错误Unhandled Rejection at: RangeError [EMBED_FIELD_VALUE]: MessageEmbed field values must be non-empty strings.知道为什么会发生这种情况吗,因为油田有价值

你放在那里的所有值都不是字符串,所以它会抛出这个错误。另外,请注意,.mentions.members.mentions.rolesCollection,而不是数组,因此需要对它们进行转换。

.addField("Members", `${Array.from(cachedMessage.mentions.members.values()).join(", ") || "None"}`, true)
.addField("Roles", `${Array.from(cachedMessage.mentions.roles.values()).join(", ") || "None"}`, true)
.addField("Everyone?", `${cachedMessage.mentions.everyone}`, true)
.setFooter("Sent at: " + `${cachedMessage.createdAt}`);

.addField创建错误时,为了防止此错误,

.addField("Members", `${cachedMessage.mentions.members || "Your word"}`, true)
.addField("Roles", `${cachedMessage.mentions.roles || "Your word"}`, true)
.addField("Everyone?", `${cachedMessage.mentions.everyone || "Your word"}`, true)
.setFooter("Sent at: " + cachedMessage.createdAt);

解释:如果你的机器人没有得到任何ping到某人的成员,而不是抛出错误,它将发送一个string

最新更新