magazín - oznámení pro více článků

This commit is contained in:
Danesh 2025-01-09 01:18:02 +01:00
parent ac57039a3a
commit a69c261a4d

View File

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