diff --git a/src/modules/magazin.ts b/src/modules/magazin.ts new file mode 100644 index 0000000..7229739 --- /dev/null +++ b/src/modules/magazin.ts @@ -0,0 +1,79 @@ +import { TextChannel } from "discord.js"; +import { CClient, Modul } from "../utils/types"; +import { log } from "../utils/utils"; + +let client: CClient; + +let najdiClanek = /href="(?.+?)">\n *

(?.+?)<\/h2>/; + +let posledniNazev: string; +let posledniOdkaz: string; + +async function zkontrolovatNovinky() { + const stranka = await fetch("https://histmy.eu/BUM/clanky") + .then(r => r.text()) + .catch(e => log("chyba pri accessovani BUM stránky", e)); + + let nazevAOdkaz = najdiClanek.exec(stranka || ""); + + if (!nazevAOdkaz || !nazevAOdkaz.groups) return false; + + const nazevClanku = nazevAOdkaz.groups.nazev; + const odkazClanku = "https://histmy.eu/BUM/" + nazevAOdkaz.groups.odkaz; + + if (!nazevClanku) { + log(new Error("neni nazev clanku")); + return false; + } + + // Při spuštění bota + if (!posledniNazev) { + posledniNazev = nazevClanku; + posledniOdkaz = odkazClanku; + return false; + } + + // Pokud vyšel nový článek + if (posledniNazev !== nazevClanku) { + posledniNazev = nazevClanku; + posledniOdkaz = odkazClanku; + return true; + } + + return false; +} + +async function naplanovat() { + setTimeout(urobit, 5 * 1000 * 60); +} + +async function urobit() { + const guilda = client.guilds.cache.get("555779161067749446"); + + if (!guilda) return log(new Error("dobytcarna nenalezena")); + + const novyClanek = await zkontrolovatNovinky(); + + if (!novyClanek) { + naplanovat(); + return; + } + + const zprava = `Vyšel nový článek v kvalitním magazínu BUM: **${posledniNazev}**\nPřečtěte si ho zde: ${posledniOdkaz}`; + + const general = guilda.channels.cache.get("555779161067749448") as TextChannel; + if (!general) return log(new Error("general nenalezen")); + general.send(`<@&1313491870231564318>\n${zprava}`); + + naplanovat(); +} + +const exp: Modul = { + on_ready: () => { + client = module.exports.client; + + urobit(); + } +}; + +module.exports = exp;