diff --git a/janet.js b/janet.js index 19def89..2b3c2d5 100644 --- a/janet.js +++ b/janet.js @@ -1,18 +1,16 @@ const fs = require('fs') const irc = require('irc') -const PubSub = require('pubsub-js') - -const MessagePubSub = require('pubsub-js') class Janet { - + constructor() { this.config = this.loadConfig() this.events = { 'join': require('pubsub-js'), - 'message': require('pubsub-js') + 'message': require('pubsub-js'), + 'pm': require('pubsub-js'), } this.loadModules() @@ -25,18 +23,31 @@ class Janet { ) this.client.addListener('message', (from, to, message) => { - if(message.substr(0,6) === "Janet,") { - let command = message.replace('Janet, ','').trim() + console.log("DEBUG: A message was received") + let commandEnd = message.indexOf('?') + if(message.substr(0,6) === "Janet," && commandEnd !== -1) { + let command = message.substr(0,commandEnd + 1).replace('Janet, ','').trim() + let variables = message.substr(commandEnd + 1, message.length).split(',') this.events.message.publish(command, { from: from, to: to, - message: message + message: message, + variables: variables }) } }) this.client.addListener('join', (channel, who) => { - PubSub.publish('join', who) + console.log("DEBUG: A new user joined") + this.events.join.publish('join', who) + }) + + this.client.addListener('pm', (nick, text, message) => { + console.log("DEBUG: A pm was received") + this.events.pm.publish(text, { + from: nick, + message: message + }) }) } @@ -59,17 +70,27 @@ class Janet { let title = file.substr(0, file.length - 3) if (title !== 'janetmodule') { + delete require.cache[require.resolve('./modules/' + title)] let module = require('./modules/' + title)(this) - + for(let method of module.methods) { - this.events[method].subscribe(module.command, (...args) => { + this.events[method].subscribe(module.command, (...args) => { module.respond(...args) }) } } } } } - + + /** + * Clear the module list + */ + clearModules() { + for(let key in this.events) { + this.events[key].clearAllSubscriptions() + } + } + /** * Says a phrase across all of the joined channels */ diff --git a/modules/commands.js b/modules/commands.js new file mode 100644 index 0000000..e0f2bdb --- /dev/null +++ b/modules/commands.js @@ -0,0 +1,35 @@ +const fs = require('fs') + +const JanetModule = require('./janetmodule') + +class Commands extends JanetModule { + constructor(client) { + super({ + name: 'Commands', + command: 'what commands are available?', + showInHelp: true, + methods: ['message'], + }, client) + } + + respond(event, data) { + fs.readdir('modules', (err, files) => { + let commands = []; + + for (let file of files) { + let title = file.substr(0, file.length - 3) + if (title !== 'janetmodule') { + let module = require('../modules/' + title)(this.client) + if (module.showInHelp) { + commands.push(module.name) + } + } + } + this.client.say(commands.join(', ')) + }) + } +} + +module.exports = (client) => { + return new Commands(client) +} diff --git a/modules/janetmodule.js b/modules/janetmodule.js index 51c3876..3b11f51 100644 --- a/modules/janetmodule.js +++ b/modules/janetmodule.js @@ -15,7 +15,7 @@ class JanetModule { 'command', 'methods' ] - + for(let key of keys) { if(!(key in opts)) { throw new TypeError("Key " + key + " is missing from Module options") @@ -30,7 +30,7 @@ class JanetModule { } } - + /** * Response to the input, triggered by the command * @return A string response diff --git a/modules/reload.js b/modules/reload.js new file mode 100644 index 0000000..2c66c0c --- /dev/null +++ b/modules/reload.js @@ -0,0 +1,24 @@ +const JanetModule = require('./janetmodule') + +class Reload extends JanetModule { + + constructor(client) { + super({ + name: 'Reload', + showInHelp: false, + command: 'reload', + methods: ['pm'] + }, client) + } + + respond(event, data) { + this.client.say("Just checking to see if I've got any new modules...") + this.client.clearModules(); + this.client.loadModules(); + this.client.say("I'm back now") + } +} + +module.exports = (client) => { + return new Reload(client) +}