我试图从特定频道中所有嵌入的嵌入字段值中获取一个数字,并将这些数字组合成一个大数字
目前正在像这样从特定频道获取消息
async function fetchMessagesUntil(channel, endDate, lastID) {
let messages = [];
try {
messages = (await channel.messages.fetch({ limit: 100, before: lastID })).array();
for (let i = 0; i < messages.length; i++) {
if (messages[i].createdAt.getTime() < endDate.getTime()) {
return messages.slice(0, i);
}
}
return messages.concat(await fetchMessagesUntil(channel, endDate, messages[messages.length - 1].id));
} catch {
return messages;
}
}
let end = new Date();
end.setDate(end.getDate() - 2); // Subtract two days from now
(await fetchMessagesUntil(channel, end)).forEach(x => console.log(x.content));
message.delete()
但将其记录到控制台时嵌入为空
有什么想法吗?
答案 0 :(得分:1)
您可以查看文档中的 here。 Message
类具有许多属性。 Message.content 可以为空,但消息对象可能包含其他属性,例如 Message.embeds、Message.attachments 等。
因此,在您的代码中,您将像这样访问嵌入:
let result = 0;
(await fetchMessagesUntil(channel, end)).forEach((message) => {
message.embeds.forEach((embed) => {
console.log(embed);
// result += ...
});
});
另请查看文档中的 MessageEmbed。在那里你可以看到它拥有的所有方法和属性,访问它们并从嵌入中获得你想要的。
当从 embed 的字段中获取值时,我会检查它是否是您要从中提取值的字段,例如通过检查其 name。如果您知道它是通缉字段,则可以从那里获取 value。首先使用!isNaN(fieldValue)
,这样您就知道字段值is a number。然后我会使用 parseInt(fieldValue)
到 parse the string into an integer。最后使用 +=
运算符,将字段的数值 add 到最终的 result
变量。