如何在特定日期之前获取消息?

j2datikz  于 2021-09-23  发布在  Java
关注(0)|答案(1)|浏览(355)

如何从文本频道从最新/最新消息开始直到特定日期获取消息。例如,直到两天前的日期。
所需的结果是有一个函数,该函数将执行此任务并返回一个消息数组,其日期范围为:now->end date,指定为函数的参数。

j8yoct9x

j8yoct9x1#

这将是我的方法,请随意发布您自己更好的答案:3

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(message.channel, end)).forEach(x => console.log(x.content));

相关问题