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

Open
banan wants to merge 2 commits from banan/Denim-Bot:main into main

View File

@ -1,46 +1,77 @@
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) {
return 0;
}
if (!nazevAOdkaz || !nazevAOdkaz.groups) return false; clanky = [...stranka.matchAll(najdiClanky)];
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 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() { async function naplanovat() {
@ -48,22 +79,14 @@ async function naplanovat() {
} }
async function urobit() { async function urobit() {
const guilda = client.guilds.cache.get("555779161067749446"); const pocetNovychClanku = await zkontrolovatNovinky();
if (!guilda) return log(new Error("dobytcarna nenalezena")); if (pocetNovychClanku === 0) {
const novyClanek = await zkontrolovatNovinky();
if (!novyClanek) {
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();
} }