UNPKG

command-cooldown

Version:

a simple (discord bots anything really) cooldown for commands made using quick.db

91 lines (82 loc) 2.92 kB
const quick = require('quick.db'); var db = quick; const oldDb = db.get(`SSet_1`) ? db.get(`SSet_1`) : [0]; const oldAnitDb = db.get(`SSet_2`) ? db.get(`SSet_2`) : [0]; const Cd = new Set(oldDb); const AntiCd = new Set(oldAnitDb); async function delUnwantedCd() { for(let cd of [...Cd]) { if ((new Date() - new Date(cd.time)) > cd.cooldowm) Cd.delete(cd); }; for(let cd of [...AntiCd]) { if ((new Date() - new Date(cd.time)) > cd.cooldowm) Cd.delete(cd); }; return null; } delUnwantedCd(); setInterval(async () => { await delUnwantedCd(); }, 5000); async function addCoolDown(ID, time, cmd) { if (!time) time = 5000; if (!cmd) cmd = "global"; let newCd = { ID: ID, cmd: cmd, time:new Date(), cooldowm:time }; Cd.add(newCd); setTimeout(() => { Cd.delete(newCd) },time); await db.set('SSet_1', [...Cd]); await db.set('SSet_2', [...AntiCd]); return newCd; }; async function addAntiCoolDown(ID, time, cmd) { if (!time) time = 5000; if (!cmd) cmd = "global"; let newCd = { ID: ID, cmd: cmd, time:new Date(), cooldowm:time }; AntiCd.add(newCd); setTimeout(() => { AntiCd.delete(newCd); db.set('SSet_2', [...AntiCd]);},time); await db.set('SSet_2', [...AntiCd]); return newCd; }; async function checkCoolDown(ID, cmd, options) { if (!cmd) cmd = "global"; var cd = [...Cd].find(x => x.ID == ID && x.cmd == cmd); var anticd = [...AntiCd].find(x => x.ID == ID && x.cmd == cmd); let checkSpam = false; if (anticd) checkSpam = true; class Res { constructor (ready, rem, cmd, spam) { this.ready = ready; this.rem = rem; this.cmd = cmd; this.spam = spam; }; }; if (!cd) return { res : new Res(true, null, null, false), _DELFUNC:null }; if (!anticd) addAntiCoolDown(ID, (cd.cooldowm - (new Date() - new Date(cd.time))) -500, cmd); if ((new Date() - new Date(cd.time)) < cd.cooldowm) return { res : new Res(false, cd.cooldowm - (new Date() - new Date(cd.time)), cd.cmd, checkSpam), _DELFUNC : setTimeout (() => { Cd.delete(cd) }, cd.cooldowm - (new Date() - new Date(cd.time))) }; if ((new Date() - new Date(cd.time)) > cd.cooldowm) return { res : new Res(true, cd.cooldowm - (new Date() - new Date(cd.time)), cd.cmd, checkSpam), _DELFUNC : setTimeout (() => { Cd.delete(cd) }, 0) }; await db.set('SSet_1', [...Cd]); await db.set('SSet_2', [...AntiCd]); return { res: `Colud not analyze cd obj , ${cd}` }; }; exports.addCoolDown = addCoolDown; exports.checkCoolDown = checkCoolDown;