better timeout

This commit is contained in:
Histmy 2023-06-05 14:36:03 +02:00
parent 6f1f79d058
commit f0d86bd1f0

View File

@ -8,7 +8,7 @@ import fetch from "node-fetch";
import { adminLog, formatCas, log, sendDM } from "../utils/utils"; import { adminLog, formatCas, log, sendDM } from "../utils/utils";
import { emouty } from "../utils/emotes"; import { emouty } from "../utils/emotes";
const zpravy = new Map<string, number[]>(); const zpravy = new Map<string, Map<string, number[]>>();
const dobaOmezení = 20_000; const dobaOmezení = 20_000;
let client: Client; let client: Client;
@ -52,17 +52,24 @@ const exp: Modul = {
pos: 1, pos: 1,
fun: (mes: Message) => { fun: (mes: Message) => {
const ted = Date.now(); const ted = Date.now();
const timestampy = zpravy.get(mes.content) || []; const autor = mes.author.id;
if (!zpravy.has(autor)) {
zpravy.set(autor, new Map());
}
const uzivatel = zpravy.get(mes.author.id)!;
const timestampy = uzivatel.get(mes.content) ?? [];
const aktualni = timestampy.filter(timestamp => ted - timestamp < dobaOmezení); const aktualni = timestampy.filter(timestamp => ted - timestamp < dobaOmezení);
aktualni.push(ted); aktualni.push(ted);
zpravy.set(mes.content, aktualni); uzivatel.set(mes.content, aktualni);
const pocet = aktualni.length; const pocet = aktualni.length;
if (pocet < 7) return false; if (pocet < 7) return false;
(async () => { (async () => {
if (mes.author.id == client.user?.id) return; if (mes.author.id == client.user?.id) return mes.channel.send("uz nechci");
const adminRole = mes.member?.roles.cache.find(r => r.name == "admin"); const adminRole = mes.member?.roles.cache.find(r => r.name == "admin");
if (adminRole) { if (adminRole) {
await mes.member?.roles.remove(adminRole).catch(e => log("nejde odebrat admin", e)); await mes.member?.roles.remove(adminRole).catch(e => log("nejde odebrat admin", e));
@ -114,9 +121,12 @@ const exp: Modul = {
// Garbage-colector na `zpravy` // Garbage-colector na `zpravy`
setInterval(() => { setInterval(() => {
const ted = Date.now(); const ted = Date.now();
zpravy.forEach((val, key) => { zpravy.forEach((mapa, uzivatel) => {
const aktualni = val.filter(timestamp => ted - timestamp < dobaOmezení); mapa.forEach((pocet, zprava) => {
if (!aktualni.length) zpravy.delete(key); const aktualni = pocet.filter(timestamp => ted - timestamp < dobaOmezení);
if (!aktualni.length) mapa.delete(zprava);
});
if (!mapa.size) zpravy.delete(uzivatel);
}); });
}, 60_000); }, 60_000);
}, },