135 lines
4.3 KiB
TypeScript
135 lines
4.3 KiB
TypeScript
// Komandy nebo handelery který se nikam jinam nehodí
|
|
|
|
import { getVoiceConnections } from "@discordjs/voice";
|
|
import { Client, Message, Presence, TextChannel, User } from "discord.js";
|
|
import { createServer } from "http";
|
|
import { Modul } from "../utils/types";
|
|
import fetch from "node-fetch";
|
|
import { formatCas, log, sendDM } from "../utils/utils";
|
|
import { emouty } from "../utils/emotes";
|
|
|
|
const zpravy = new Map<string, number[]>();
|
|
const dobaOmezení = 20_000;
|
|
let client: Client;
|
|
|
|
const exp: Modul = {
|
|
more_komandy: {
|
|
|
|
debug_log: {
|
|
hidden: true,
|
|
run: (_, arg) => {
|
|
log("log:", arg);
|
|
return "je to v konzoli";
|
|
}
|
|
},
|
|
|
|
update: {
|
|
als: ["apdejt"],
|
|
run: async mes => {
|
|
const sudo = mes.channel.id == process.env.adminChannel || mes.author.id == process.env.adminID;
|
|
if (!sudo) {
|
|
const verze = await fetch("https://denim3001.deadfish.cz/version.txt")
|
|
.then(r => r.text());
|
|
if (verze == require("../../package.json").version) return `ale ja se nemam co priucit vole kkte ${mes.author}`;
|
|
}
|
|
|
|
getVoiceConnections().forEach(con => con.destroy());
|
|
client.user?.setStatus("invisible");
|
|
mes.react("👋")
|
|
.then(() => process.exit());
|
|
}
|
|
},
|
|
|
|
lastuptime: () => {
|
|
const index = process.argv.length > 3 ? 3 : 2;
|
|
const sekundy = Number(process.argv[index]);
|
|
if (!sekundy) return "aj forgor 💀";
|
|
return `naposled jsem jel ${formatCas(sekundy)}`;
|
|
}
|
|
},
|
|
|
|
super_on_messageCreate: {
|
|
pos: 1,
|
|
fun: (mes: Message) => {
|
|
const ted = Date.now();
|
|
const timestampy = zpravy.get(mes.content) || [];
|
|
|
|
const aktualni = timestampy.filter(timestamp => ted - timestamp < dobaOmezení);
|
|
aktualni.push(ted);
|
|
zpravy.set(mes.content, aktualni);
|
|
|
|
const pocet = aktualni.length;
|
|
if (pocet < 7) return false;
|
|
|
|
(async () => {
|
|
if (mes.author.id == client.user?.id) return;
|
|
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));
|
|
}
|
|
|
|
await mes.member?.timeout(60_000, "spamer zasranej").catch(e => log("nejde timeoutnout zmrd", e));
|
|
if (adminRole) setTimeout(() => {
|
|
mes.member?.roles.add(adminRole);
|
|
}, 60_000);
|
|
mes.channel.send(emouty.fu);
|
|
})();
|
|
|
|
return true;
|
|
}
|
|
},
|
|
|
|
on_ready: () => {
|
|
// Nastavení clienta
|
|
client = module.exports.client;
|
|
|
|
// Server na navrhy
|
|
createServer((req, res) => {
|
|
res.statusCode = 400;
|
|
if (req.socket.remoteAddress != "::1") return res.end("di doprdele dyk ne more");
|
|
|
|
const sp = new URL(req.url!, `http://${req.headers.host}`).searchParams;
|
|
const { userID, content } = Object.fromEntries(sp.entries());
|
|
if (!userID || !content) return res.end("gde mas userID a content????");
|
|
|
|
const user = client.users.cache.get(userID);
|
|
if (!user) return res.end("takovyho kkta neznam");
|
|
|
|
user.createDM().then(async dm => {
|
|
await dm.send(content);
|
|
res.statusCode = 200;
|
|
res.end("OK");
|
|
}).catch((e: Error) => {
|
|
if (e.message.search("2000 or fewer")) return res.end("content je moc dlouhej");
|
|
log("error pri posilani upozorneni", e);
|
|
res.statusCode = 500;
|
|
res.end("neco se posralo");
|
|
});
|
|
}).listen(1298);
|
|
|
|
// 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);
|
|
});
|
|
}, 60_000);
|
|
},
|
|
|
|
on_userUpdate: (bef: User, aft: User) => {
|
|
if (bef.avatar == aft.avatar) return;
|
|
|
|
sendDM(aft, "cus bracho vydim ze sis zmenim profilofku na dalsi mrdku estli chces abi se ukazovala na na v3ech sr4kach kterz sou na dedfis.cy tak se tam prosymte prihlas haby se mohla zmnenit syk");
|
|
},
|
|
|
|
on_userPresenceUpdate: (bef: Presence | null, aft: Presence) => {
|
|
if (aft.user?.id != "355053867265818635" || bef?.status == "online" || aft.status != "online") return;
|
|
|
|
(client.channels.cache.get("555779161067749448") as TextChannel)
|
|
.send("https://tenor.com/view/pavel-is-online-gif-21604335");
|
|
}
|
|
};
|
|
|
|
module.exports = exp;
|