forked from epita/ruche-manager
refactor split board update
This commit is contained in:
parent
dbbc99dab7
commit
d876b1f3b4
2 changed files with 28 additions and 14 deletions
|
@ -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<boolean>, 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: "" });
|
||||
}
|
||||
|
|
|
@ -50,6 +50,7 @@ export class Storage {
|
|||
}
|
||||
|
||||
export type Devoir = z.infer<Storage["devoirs"]["parser"]>;
|
||||
export type Feed = z.infer<Storage["feeds"]["parser"]>;
|
||||
|
||||
class Manager<T> {
|
||||
db;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue