diff --git a/src/lib/board.ts b/src/lib/board.ts index 0ca2180..99be946 100644 --- a/src/lib/board.ts +++ b/src/lib/board.ts @@ -1,7 +1,7 @@ import { Client, EmbedBuilder } from "npm:discord.js"; import { fetch_feed_channel, format_devoir_title } from "./lib.ts"; -import { Storage } from "./storage.ts"; +import { Devoir, Feed, Storage } from "./storage.ts"; import { Channel, collect, log_from } from "./utils.ts"; const log = log_from(import.meta); @@ -9,19 +9,32 @@ const log = log_from(import.meta); export async function update_loop(bot: Client, storage: Storage, update_display: Channel) { log("Waiting for updates."); while (true) { - const _trigger = await update_display.receive(); + await update_display.receive(); log("Updating board."); - for await (const [_, feed] of storage.feeds.list()) { - const feed_channel = await fetch_feed_channel(bot, feed); - const embed = new EmbedBuilder().setTitle("`📚` Devoirs") - .setFooter({ text: "Mise à jour " + Date.now() }); - const sorted_devoirs = (await (collect(storage.devoirs.list()))) - .map(([_, d]) => d).toSorted((a, b) => a.date > b.date ? 1 : -1); - for (const devoir of sorted_devoirs) { - embed.addFields({ name: format_devoir_title(devoir), value: devoir.description }); - } - const board_message = await feed_channel.messages.fetch(feed.board_message_id); - board_message.edit({ embeds: [embed], content: "" }); - } + 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: "" }); +} diff --git a/src/lib/storage.ts b/src/lib/storage.ts index 5dba7ad..06e5f31 100644 --- a/src/lib/storage.ts +++ b/src/lib/storage.ts @@ -50,6 +50,7 @@ export class Storage { } export type Devoir = z.infer; +export type Feed = z.infer; class Manager { db;