我将如何从特定频道获取嵌入消息? [Discord.js V12]

时间:2021-07-11 17:53:00

标签: discord.js

我试图从特定频道中所有嵌入的嵌入字段值中获取一个数字,并将这些数字组合成一个大数字

目前正在像这样从特定频道获取消息

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()

但将其记录到控制台时嵌入为空

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以查看文档中的 hereMessage 类具有许多属性。 Message.content 可以为空,但消息对象可能包含其他属性,例如 Message.embedsMessage.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 变量。