var quotes = function(dbot) { var quotes = dbot.db.quoteArrs; var addStack = []; var rmAllowed = true; var commands = { '~q': function(data, params) { var q = data.message.valMatch(/^~q ([\d\w\s-]*)/, 2); if(q) { q[1] = q[1].trim(); key = q[1].toLowerCase(); if(quotes.hasOwnProperty(key)) { dbot.say(data.channel, q[1] + ': ' + dbot.interpolatedQuote(key)); } else { dbot.say(data.channel, 'Nobody loves ' + q[1]); } } }, // shows the biggest categories '~qstats': function(data, params) { var qSizes = []; for(var cat in quotes) { if(quotes[cat].length != 0) { qSizes.push([cat, quotes[cat].length]); } } qSizes = qSizes.sort(function(a, b) { return a[1] - b[1]; }); qSizes = qSizes.slice(qSizes.length - 10).reverse(); var qString = "Largest categories: "; for(var i=0;i 0) { dbot.say(data.channel, "Pruning empty quote categories: " + pruned.join(", ")); } else { dbot.say(data.channel, "No empty quote categories. Commence incineration."); } } }; return { 'onLoad': function() { dbot.timers.addTimer(1000 * 60 * 3, function() { rmAllowed = true; }); return commands; }, // For automatic quote retrieval 'listener': function(data, params) { if(data.user == 'reality') { var once = data.message.valMatch(/^I ([\d\w\s,'-]* once)/, 2); } else { var once = data.message.valMatch(/^reality ([\d\w\s,'-]* once)/, 2); } if(once) { if((dbot.db.bans.hasOwnProperty('~qadd') && dbot.db.bans['~qadd'].include(data.user)) || dbot.db.bans['*'].include(data.user)) { dbot.say(data.channel, data.user + ' is banned from using this command. Commence incineration.'); } else { dbot.db.quoteArrs['realityonce'].push('reality ' + once[1] + '.'); addStack.push('realityonce'); rmAllowed = true; dbot.instance.say(data.channel, '\'reality ' + once[1] + '.\' saved.'); } } }, 'on': 'PRIVMSG' }; }; exports.fetch = function(dbot) { return quotes(dbot); };