support for ankhbot commands, static commands, cooldowns, implemented fun/ham facts

This commit is contained in:
Chris Ham
2018-01-22 18:32:09 -08:00
parent be5d8bc2ec
commit a2a9974108
10 changed files with 249 additions and 15 deletions

48
lib/cooldowns.js Executable file
View File

@@ -0,0 +1,48 @@
module.exports = {
get: isOnCooldown,
set: placeOnCooldown
};
const memcache = require('memcache'),
md5 = require('md5'),
keyPrefix = 'cd';
const cache = new memcache.Client();
cache.on('error', console.error);
cache.connect();
// Given a cooldownTime in seconds and a command, returns false if the command is not on cooldown
// returns the time in seconds until the command will be ready again otherwise
function isOnCooldown(command, cooldownTime, callback)
{
return new Promise((resolve, reject) => {
let now = Date.now();
let onCooldown = false;
let key = keyPrefix + md5(command);
cache.get(key, function(err, timeUsed) {
if (err) reject(err);
if (timeUsed !== null) {
// Command was recently used, check timestamp to see if it's on cooldown
if ((now - timeUsed) <= (cooldownTime*1000)) {
// Calculate how much longer it's on cooldown
onCooldown = ((cooldownTime*1000) - (now - timeUsed))/1000;
}
}
resolve(onCooldown);
});
});
}
// Places a command on cooldown for cooldownTime (in seconds)
function placeOnCooldown(command, cooldownTime)
{
let key = keyPrefix + md5(command);
return cache.set(key, Date.now(), handleCacheSet, cooldownTime);
}
function handleCacheSet(error, result) {}
process.on('exit', (code) => {cache.close()});