import { Client, EmbedBuilder } from "npm:discord.js"; import { fetch_feed_channel, format_devoir_title } from "./lib.ts"; import { Devoir, Feed, Storage } from "./storage.ts"; import { Channel, collect, log_from } from "./utils.ts"; const log = log_from(import.meta); export async function update_loop(bot: Client, storage: Storage, update_display: Channel) { log("Waiting for updates."); while (true) { await update_display.receive(); log("Updating board."); const sorted_devoirs = await get_devoirs_sorted(storage); for await (const [_, feed] of storage.feeds.list()) await update_feed(bot, feed, sorted_devoirs); } } async function get_devoirs_sorted(storage: Storage) { const devoirs = await collect(storage.devoirs.list()); const sorted_devoirs = devoirs .map(([_, d]) => d) .toSorted((a, b) => a.date > b.date ? 1 : -1); return sorted_devoirs; } async function update_feed(bot: Client, feed: Feed, sorted_devoirs: Devoir[]) { const embed = new EmbedBuilder() .setTitle("`📚` Devoirs") .setFooter({ text: "Mise à jour " + Date.now() }); for (const devoir of sorted_devoirs) { embed.addFields({ name: format_devoir_title(devoir), value: devoir.description, }); } const feed_channel = await fetch_feed_channel(bot, feed); const board_message = await feed_channel.messages.fetch(feed.board_message_id); board_message.edit({ embeds: [embed], content: "" }); }