diff --git a/src/modules/zbytek.ts b/src/modules/zbytek.ts index 83a17fe..78456b1 100644 --- a/src/modules/zbytek.ts +++ b/src/modules/zbytek.ts @@ -8,7 +8,7 @@ import fetch from "node-fetch"; import { adminLog, formatCas, log, sendDM } from "../utils/utils"; import { emouty } from "../utils/emotes"; -const zpravy = new Map(); +const zpravy = new Map>(); const dobaOmezení = 20_000; let client: Client; @@ -52,17 +52,24 @@ const exp: Modul = { pos: 1, fun: (mes: Message) => { 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í); aktualni.push(ted); - zpravy.set(mes.content, aktualni); + uzivatel.set(mes.content, aktualni); const pocet = aktualni.length; if (pocet < 7) return false; (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"); if (adminRole) { await mes.member?.roles.remove(adminRole).catch(e => log("nejde odebrat admin", e)); @@ -114,9 +121,12 @@ const exp: Modul = { // Garbage-colector na `zpravy` setInterval(() => { const ted = Date.now(); - zpravy.forEach((val, key) => { - const aktualni = val.filter(timestamp => ted - timestamp < dobaOmezení); - if (!aktualni.length) zpravy.delete(key); + zpravy.forEach((mapa, uzivatel) => { + mapa.forEach((pocet, zprava) => { + const aktualni = pocet.filter(timestamp => ted - timestamp < dobaOmezení); + if (!aktualni.length) mapa.delete(zprava); + }); + if (!mapa.size) zpravy.delete(uzivatel); }); }, 60_000); },