diff --git a/modules/admin.js b/modules/admin.js index 16472f9..8771781 100644 --- a/modules/admin.js +++ b/modules/admin.js @@ -1,3 +1,5 @@ +var fs = require('fs'); + var adminCommands = function(dbot) { var dbot = dbot; @@ -15,6 +17,7 @@ var adminCommands = function(dbot) { dbot.say(dbot.admin, 'Reloading DB.'); try { dbot.db = JSON.parse(fs.readFileSync('db.json', 'utf-8')); + dbot.reloadModules(); } catch(err) { dbot.say(dbot.admin, 'DB reload failed.'); } finally { diff --git a/run.js b/run.js index 349af67..6cf1799 100644 --- a/run.js +++ b/run.js @@ -1,13 +1,9 @@ require('./snippets'); var fs = require('fs'); var jsbot = require('./jsbot'); -var quote = require('./modules/quotes'); -var userCommands = require('./modules/user'); -var adminCommands = require('./modules/admin'); -var puns = require('./modules/puns'); -var kick = require('./modules/kick'); -var reality = require('./modules/reality'); -var karma = require('./modules/karma'); +//var quote = require('./modules/quotes'); + +var modules = ['user', 'admin', 'puns', 'kick', 'reality', 'karma']; var dbot = Class.create({ initialize: function(dModules, quotes) { @@ -15,21 +11,20 @@ var dbot = Class.create({ this.waitingForKarma = false; this.name = 'depressionbot'; this.db = JSON.parse(fs.readFileSync('db.json', 'utf-8')); - this.quotes = quotes.fetch(this); + this.quotes = require(quotes).fetch(this); this.instance = jsbot.createJSBot(this.name, 'elara.ivixor.net', 6667, this, function() { this.instance.join('#realitest'); this.instance.join('#42'); - this.instance.join('#fail'); this.instance.join('#itonlygetsworse'); }.bind(this)); - this.modules = dModules.collect(function(n) { - var module = n.fetch(this); - this.instance.addListener(module.on, module.listener); - return n.fetch(this); - }.bind(this)); + this.moduleNames = dModules; + this.rawModules = []; + this.modules = []; + this.reloadModules(); + this.instance.connect(); }, @@ -39,7 +34,26 @@ var dbot = Class.create({ save: function() { fs.writeFile('db.json', JSON.stringify(this.db, null, ' ')); + }, + + reloadModules: function() { + require.cache = {}; // Stupid bloody prototype.js + + this.rawModules = []; + this.modules = []; + + this.moduleNames.each(function(name) { + this.rawModules.push(require('./modules/' + name)); + }.bind(this)); + + this.instance.removeListeners(); + + this.modules = this.rawModules.collect(function(rawModule) { + var module = rawModule.fetch(this); + this.instance.addListener(module.on, module.listener); + return module; + }.bind(this)); } }); -new dbot([userCommands, adminCommands, puns, kick, reality, karma], quote); +new dbot(modules, './modules/quotes');