diff --git a/src/modules/magazin.ts b/src/modules/magazin.ts index 7c0c091..4d321b7 100644 --- a/src/modules/magazin.ts +++ b/src/modules/magazin.ts @@ -1,46 +1,77 @@ -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 (!stranka) { + return 0; + } - 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; + 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 poslatZpravu(pocetNovychClanku: number) { + log(idClanku); + const guilda = client.guilds.cache.get("555779161067749446"); + + if (!guilda) return log(new Error("dobytcarna nenalezena")); + + let zprava; + + 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("555779161067749448") as TextChannel; + if (!general) return log(new Error("general nenalezen")); + general.send(`<@&1313491870231564318>\n${zprava}`); + } } async function naplanovat() { @@ -48,22 +79,14 @@ async function naplanovat() { } async function urobit() { - const guilda = client.guilds.cache.get("555779161067749446"); + const pocetNovychClanku = await zkontrolovatNovinky(); - if (!guilda) return log(new Error("dobytcarna nenalezena")); - - const novyClanek = await zkontrolovatNovinky(); - - if (!novyClanek) { + 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(); }