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 { log } from "../utils/utils";
let client: CClient;
const najdiClanek = /href="(?<odkaz>.+?)">\n *<h2>(?<nazev>.+?)<\/h2>/;
const odkaz = "https://histmy.eu/BUM/clanky";
let posledniNazev: string;
let posledniOdkaz: string;
const najdiClanky = /href="clanek-(?<id>.+?)">\n *<h2>(?<nazev>.+?)<\/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) {
clanky = [...stranka.matchAll(najdiClanky)];
}
if (!nazevAOdkaz || !nazevAOdkaz.groups) return false;
if (!clanky || clanky.length === 0) {
log("No articles found");
return 0;
}
const nazevClanku = nazevAOdkaz.groups.nazev;
const odkazClanku = "https://histmy.eu/BUM/" + nazevAOdkaz.groups.odkaz;
const clanek = clanky[0];
if (!clanek || !clanek.groups) {
log("pici");
return 0;
}
if (!nazevClanku) {
log(new Error("neni nazev clanku"));
return false;
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();
}