a4p-bot/src/events/onReady.ts

46 lines
1.8 KiB
TypeScript

import { scheduleJob } from "node-schedule";
import { ExtendedClient } from "../interface/ExtendedClient";
import { checkAirtableRecords } from "../modules/checkAirtableRecords";
import { fetchMessages } from "../modules/messages/fetchMessages";
import { sendUnclaimedArt } from "../modules/reminders/sendUnclaimedArt";
import { sendUnclaimedDistros } from "../modules/reminders/sendUnclaimedDistros";
import { sendUnfinishedArt } from "../modules/reminders/sendUnfinishedArt";
import { sendUnfinishedDistros } from "../modules/reminders/sendUnfinsihedDistros";
import { getNewsFeed } from "../utils/getNewsFeed";
import { serve } from "../server/serve";
/**
* Handles the logic when the bot is ready to receive Discord events.
*
* @param {ExtendedClient} bot The bot's Discord instance.
*/
export const onReady = async (bot: ExtendedClient) => {
try {
await bot.debug.send("Bot is online and ready to help!");
// donor channel
await fetchMessages(bot, "1172568787330019340");
// delivery channel
await fetchMessages(bot, "1173061747737903315");
await bot.debug.send("Fetching initial news feed...");
await getNewsFeed(bot);
await bot.debug.send("Fetching news posts every 10 minutes.");
setInterval(async () => await getNewsFeed(bot), 1000 * 60 * 10);
await bot.debug.send("Fetching new airtable submissions every 60 minutes.");
setInterval(async () => await checkAirtableRecords(bot), 1000 * 60 * 60);
scheduleJob("0 9 * * 1,3,5", async () => {
await sendUnclaimedArt(bot);
await sendUnclaimedDistros(bot);
});
scheduleJob("0 9 * * 6", async () => {
await sendUnfinishedArt(bot);
await sendUnfinishedDistros(bot);
});
await serve(bot);
} catch (err) {
await bot.debug.send(`Error on ready event: ${(err as Error).message}`);
}
};