corsica-irc
Advanced tools
Comparing version
125
index.js
@@ -24,6 +24,12 @@ /* Description: | ||
module.exports = function (corsica) { | ||
var corsica | ||
var ircClient; | ||
var oldSettings; | ||
var settingsConfig; | ||
module.exports = function (corsica_) { | ||
logger.log('Starting up'); | ||
corsica = corsica_; | ||
var settingsConfig = corsica.settings.setup('corsica-irc', { | ||
settingsConfig = corsica.settings.setup('corsica-irc', { | ||
server: 'irc.example.org', | ||
@@ -35,4 +41,3 @@ port: 6667, | ||
var ircClient; | ||
var oldSettings; | ||
settingsConfig.on('updated', settingUpdated); | ||
@@ -52,65 +57,67 @@ settingsConfig.get().then(function (settings) { | ||
ircClient.addListener('registered', function (message) { | ||
logger.log('Connected to server.'); | ||
}); | ||
ircClient.addListener('registered', onIRCConnected); | ||
ircClient.addListener('message', onIRCMessage); | ||
ircClient.addListener('error', onError); | ||
}) | ||
.catch(onError); | ||
}; | ||
ircClient.addListener('message', function (from, to, message) { | ||
settingsConfig.get().then(function (settings) { | ||
var regex = new RegExp('^' + settings.nick + ': (.*)$'); | ||
var match = regex.exec(message); | ||
function onIRCConnected() { | ||
logger.log('Connected to server.'); | ||
} | ||
if (match === null) { | ||
return; | ||
} | ||
function onIRCMessage(from, to, message) { | ||
settingsConfig.get().then(function (settings) { | ||
var regex = new RegExp('^' + settings.nick + ': (.*)$'); | ||
var match = regex.exec(message); | ||
corsica.sendMessage('command', {raw: match[1]}); | ||
}); | ||
}); | ||
if (match === null) { | ||
return; | ||
} | ||
ircClient.addListener('error', function(message) { | ||
logger.error('Something has gone wrong.'); | ||
logger.error(message.stack || message); | ||
}); | ||
}) | ||
.catch(function (err) { | ||
logger.error('Something has gone wrong.'); | ||
logger.error(err.stack || err); | ||
corsica.sendMessage('command', {raw: match[1]}); | ||
}); | ||
} | ||
settingsConfig.on('updated', function(newSettings) { | ||
logger.log('Settings updated'); | ||
if (ircClient === undefined) { | ||
return; | ||
function onError(message) { | ||
logger.error('Something has gone wrong.', message.stack || message); | ||
} | ||
function settingUpdated(newSettings) { | ||
logger.log('Settings updated'); | ||
if (ircClient === undefined) { | ||
return; | ||
} | ||
// Server and/or Port | ||
if (newSettings.server !== oldSettings.server || newSettings.port !== oldSettings.port) { | ||
logger.log('Changing servers to:', newSettings.server + ':' + newSettings.port); | ||
ircClient.disconnect(function() { | ||
ircClient.opt = corsica.utils.merge(ircClient.opt, newSettings); | ||
ircClient.connect(); | ||
}); | ||
return; | ||
} | ||
// Nick | ||
if (newSettings.nick !== oldSettings.nick) { | ||
logger.log('Changing nick to', newSettings.nick); | ||
ircClient.send('NICK', newSettings.nick); | ||
ircClient.opt.nick = newSettings.nick; | ||
} | ||
// Channels | ||
oldSettings.channels.forEach(function(oldChan) { | ||
if (newSettings.channels.indexOf(oldChan) === -1) { | ||
logger.log('Leaving', oldChan); | ||
ircClient.part(oldChan); | ||
} | ||
// Server and/or Port | ||
if (newSettings.server !== oldSettings.server || newSettings.port !== oldSettings.port) { | ||
logger.log('Changing servers to:', newSettings.server + ':' + newSettings.port); | ||
ircClient.disconnect(function() { | ||
ircClient.opt = corsica.utils.merge(ircClient.opt, newSettings); | ||
ircClient.connect(); | ||
}); | ||
return; | ||
}); | ||
newSettings.channels.forEach(function(newChan) { | ||
if (oldSettings.channels.indexOf(newChan) === -1) { | ||
logger.log('Joining', newChan); | ||
ircClient.join(newChan); | ||
} | ||
}); | ||
// Nick | ||
if (newSettings.nick !== oldSettings.nick) { | ||
logger.log('Changing nick to', newSettings.nick); | ||
ircClient.send('NICK', newSettings.nick); | ||
ircClient.opt.nick = newSettings.nick; | ||
} | ||
// Channels | ||
oldSettings.channels.forEach(function(oldChan) { | ||
if (newSettings.channels.indexOf(oldChan) === -1) { | ||
logger.log('Leaving', oldChan); | ||
ircClient.part(oldChan); | ||
} | ||
}); | ||
newSettings.channels.forEach(function(newChan) { | ||
if (oldSettings.channels.indexOf(newChan) === -1) { | ||
logger.log('Joining', newChan); | ||
ircClient.join(newChan); | ||
} | ||
}); | ||
}); | ||
}; | ||
oldSettings = newSettings; | ||
} |
{ | ||
"name": "corsica-irc", | ||
"version": "0.2.0", | ||
"version": "0.2.1", | ||
"description": "A Corsica plugin to provide IRC messaging.", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
101
4.12%3948
-1.52%