var fs = require('fs'), _ = require('underscore')._, jsbot = require('./jsbot/jsbot'), DatabaseDriver = require('./database').DatabaseDriver; require('./snippets'); var DBot = function() { /*** Load the DB ***/ if(fs.existsSync('db.json')) { try { this.db = JSON.parse(fs.readFileSync('db.json', 'utf-8')); } catch(err) { console.log('Error loading db.json. Stopping: ' + err); process.exit(); } } else { this.db = {}; } if(!_.has(this.db, 'config')) { this.db.config = {}; } /*** Load the fancy DB ***/ this.ddb = new DatabaseDriver(); /*** Load the Config ***/ if(!fs.existsSync('config.json')) { console.log('Error: config.json file does not exist. Stopping'); process.exit(); } this.config = _.clone(this.db.config); try { _.defaults(this.config, JSON.parse(fs.readFileSync('config.json', 'utf-8'))); } catch(err) { console.log('Config file is invalid. Stopping: ' + err); process.exit(); } try { var defaultConfig = JSON.parse(fs.readFileSync('config.json.sample', 'utf-8')); } catch(err) { console.log('Error loading sample config. Bugger off this should not even be edited. Stopping.'); process.exit(); } // Load missing config directives from sample file _.defaults(this.config, defaultConfig); /*** Load main strings ***/ 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.status = {}; this.sessionData = {}; // Populate bot properties with config data // Create JSBot and connect to each server this.instance = jsbot.createJSBot(this.config.name); _.each(this.config.servers, function(server, name) { this.instance.addConnection(name, server.server, server.port, this.config.admin, function(event) { var server = this.config.servers[event.server]; for(var i=0;i>>>>>> 2afb1c6ba37eb92f875124c754453bb063f42277 }.bind(this)); process.nextTick(function() { if(_.has(this.modules, 'web')) this.modules.web.reloadPages(); _.each(this.modules, function(module, name) { if(module.onLoad) { try { module.onLoad(); } catch(err) { this.status[name] = 'Error in onLoad: ' + err + ' ' + err.stack.split('\n')[1].trim(); console.log('MODULE ONLOAD ERROR (' + name + '): ' + err ); } } }, this); }.bind(this)); this.save(); }; DBot.prototype.cleanNick = function(key) { key = key.toLowerCase(); while(key.endsWith("_")) { if(_.has(this.db.quoteArrs, key)) { return key; } key = key.substring(0, key.length-1); } return key; } new DBot();