diff --git a/src/modules/magazin.ts b/src/modules/magazin.ts index 7c0c091..9b10de8 100644 --- a/src/modules/magazin.ts +++ b/src/modules/magazin.ts @@ -1,69 +1,90 @@ -import { TextChannel } from "discord.js"; +import { TextChannel, Utils } from "discord.js"; import { CClient, Modul } from "../utils/types"; import { log } from "../utils/utils"; let client: CClient; -const najdiClanek = /href="(?.+?)">\n *

(?.+?)<\/h2>/; +const odkaz = "https://histmy.eu/BUM/clanky"; -let posledniNazev: string; -let posledniOdkaz: string; +const najdiClanky = /href="clanek-(?.+?)">\n *

(?.+?)<\/h2>/g; +let clanky: RegExpExecArray[]; + +let idClanku: number = 0; +let posledniId: number = 0; async function zkontrolovatNovinky() { - const stranka = await fetch("https://histmy.eu/BUM/clanky") + const stranka = await fetch(odkaz) .then(r => r.text()) .catch(e => log("chyba pri accessovani BUM stránky", e)); - const 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; + if (stranka) { + clanky = [...stranka.matchAll(najdiClanky)]; + } + + if (!clanky || clanky.length === 0) { + log("No articles found"); + return 0; + } + + const clanek = clanky[0]; + if (!clanek || !clanek.groups) { + log("pici"); + return 0; + } + + idClanku = Number(clanek.groups.id); + if (!idClanku) { + log(new Error("neni id clanku")); + return 0; } // Při spuštění bota - if (!posledniNazev) { - posledniNazev = nazevClanku; - posledniOdkaz = odkazClanku; - return false; + if (!posledniId) { + posledniId = idClanku; + return 0; } // Pokud vyšel nový článek - if (posledniNazev !== nazevClanku) { - posledniNazev = nazevClanku; - posledniOdkaz = odkazClanku; - return true; + if (posledniId !== idClanku) { + const pocetNovychClanku = idClanku - posledniId; + posledniId = idClanku; + return pocetNovychClanku; } - return false; + return 0; } -async function naplanovat() { - setTimeout(urobit, 5 * 1000 * 60); -} - -async function urobit() { - const guilda = client.guilds.cache.get("555779161067749446"); +async function poslatZpravu(pocetNovychClanku: number) { + log(idClanku); + const guilda = client.guilds.cache.get("1326675528710881280"); if (!guilda) return log(new Error("dobytcarna nenalezena")); - const novyClanek = await zkontrolovatNovinky(); + let zprava; - if (!novyClanek) { + for (let i = 0; i < pocetNovychClanku; i++) { + if (!clanky[i].groups) return 0; + zprava = `Vyšel nový článek v kvalitním magazínu BUM: **${clanky[i].groups?.nazev}**\nPřečtěte si ho zde: ${odkaz}/${clanky[i].groups?.id}`; + + const general = guilda.channels.cache.get("1326675528710881283") as TextChannel; + if (!general) return log(new Error("general nenalezen")); + general.send(`<@&1313491870231564318>\n${zprava}`); + } +} + +async function naplanovat() { + setTimeout(urobit, 1000 * 10); +} + +async function urobit() { + const pocetNovychClanku = await zkontrolovatNovinky(); + + if (pocetNovychClanku === 0) { 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}`); + poslatZpravu(pocetNovychClanku); naplanovat(); }