var fs = require('fs'); var timers = require('./timer'); var jsbot = require('./jsbot'); require('./snippets'); var DBot = function(timers) { // Load external files this.config = JSON.parse(fs.readFileSync('config.json', 'utf-8')); try { this.db = JSON.parse(fs.readFileSync('db.json', 'utf-8')); } catch (e) { this.db = {}; } finally { /* fill any missing parts of the db; if this is a new DB, that's all of them */ if(!this.db.hasOwnProperty("bans")) { this.db.bans = {}; } if(!this.db.bans.hasOwnProperty("*")) { this.db.bans["*"] = []; } if(!this.db.hasOwnProperty("quoteArrs")) { this.db.quoteArrs = {}; } if(!this.db.quoteArrs.hasOwnProperty("realityonce")) { this.db.quoteArrs.realityonce = []; } if(!this.db.hasOwnProperty("kicks")) { this.db.kicks = {}; } if(!this.db.hasOwnProperty("kickers")) { this.db.kickers = {}; } if(!this.db.hasOwnProperty("modehate")) { this.db.modehate = []; } if(!this.db.hasOwnProperty("locks")) { this.db.locks = []; } } // Populate bot properties with config data this.name = this.config.name || 'dbox'; this.admin = this.config.admin || 'reality'; this.password = this.config.password || 'lolturtles'; this.nickserv = this.config.nickserv || 'zippy'; this.server = this.config.server || 'elara.ivixor.net'; this.port = this.config.port || 6667; this.moduleNames = this.config.modules || [ 'js', 'admin', 'kick', 'modehate', 'quotes', 'puns', 'spelling', 'web', 'youare' ]; this.timers = timers.create(); this.instance = jsbot.createJSBot(this.name, this.server, this.port, this, function() { if(this.config.hasOwnProperty('channels')) { this.config.channels.each(function(channel) { this.instance.join(channel); }.bind(this)); } }.bind(this), this.nickserv, this.password); // Load the modules and connect to the server this.reloadModules(); this.instance.connect(); }; // Retrieve a random quote from a given category, interpolating any quote references (~~QUOTE CATEGORY~~) within it DBot.prototype.interpolatedQuote = function(key) { var quoteString = this.db.quoteArrs[key].random(); var quoteRefs = quoteString.match(/~~([\d\w\s-]*)~~/); if (quoteRefs) { quoteRefs = quoteRefs.slice(1); for(var i=0;i