command-cooldown
Version:
a simple (discord bots anything really) cooldown for commands made using quick.db
91 lines (82 loc) • 2.92 kB
JavaScript
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;