Discord.js v13 [EMBED_FIELD_VALUE]: MessageEmbed 字段值必须是非空字符串
Discord.js v13 [EMBED_FIELD_VALUE]: MessageEmbed field values must be non-empty strings
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] });
}
如果我删除了一条带有 ghost ping 的消息,它 returns 错误
Unhandled Rejection at: RangeError [EMBED_FIELD_VALUE]: MessageEmbed field values must be non-empty strings.
知道为什么会发生这种情况,因为字段具有值
关于.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
你放在那里的所有值都不是字符串,所以它会抛出那个错误。另外注意,.mentions.members
和.mentions.roles
是Collection
,不是数组,所以需要转换
.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}`);
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] });
}
如果我删除了一条带有 ghost ping 的消息,它 returns 错误
Unhandled Rejection at: RangeError [EMBED_FIELD_VALUE]: MessageEmbed field values must be non-empty strings.
知道为什么会发生这种情况,因为字段具有值
关于.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
你放在那里的所有值都不是字符串,所以它会抛出那个错误。另外注意,.mentions.members
和.mentions.roles
是Collection
,不是数组,所以需要转换
.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}`);