var fs = require('fs'); var timers = require('./timer'); var jsbot = require('./jsbot/jsbot'); require('./snippets'); var DBot = function(timers) { // Load external files var requiredConfigKeys = [ 'name', 'servers', 'admin', 'moduleNames', 'language' ]; try { this.config = JSON.parse(fs.readFileSync('config.json', 'utf-8')); } catch(err) { console.log('Config file is screwed up. Attempting to load defaults.'); try { this.config = JSON.parse(fs.readFileSync('config.json.sample', 'utf-8')); } catch(err) { console.log('Error loading sample config. Bugger off. Stopping.'); process.exit(); } } requiredConfigKeys.each(function(key) { if(!this.config.hasOwnProperty(key)) { console.log('Error: Please set a value for ' + key + ' in ' + 'config.json. Stopping.'); process.exit(); } }.bind(this)); var rawDB; try { var rawDB = fs.readFileSync('db.json', 'utf-8'); } catch(err) { this.db = {}; // If no db file, make empty one } try { if(!this.db) { // If it wasn't empty this.db = JSON.parse(rawDB); } } catch(err) { console.log('Syntax error in db.json. Stopping: ' + err); process.exit(); } // Load Strings file try { this.strings = JSON.parse(fs.readFileSync('strings.json', 'utf-8')); } catch(err) { console.log('Probably a syntax error in strings.json: ' + err); this.strings = {}; } // Initialise run-time resources this.usage = {}; this.sessionData = {}; this.timers = timers.create(); // Populate bot properties with config data for(var configKey in this.config) { if(this.config.hasOwnProperty(configKey) && this.hasOwnProperty(configKey) === false) { this[configKey] = this.config[configKey]; } } // Create JSBot and connect to each server this.instance = jsbot.createJSBot(this.name); for(var name in this.servers) { if(this.servers.hasOwnProperty(name)) { var server = this.servers[name]; this.instance.addConnection(name, server.server, server.port, this.admin, function(event) { var server = this.servers[event.server]; for(var i=0;i