coffea
Version:
event based and extensible nodejs irc client library with multi-network support
61 lines (55 loc) • 2.18 kB
JavaScript
/*jslint node: true, nomen: true, unparam: true*/
;
var utils = require('../utils');
module.exports = function () {
var serverInfo = {};
return function (irc) {
irc.getServerInfo = function (network) {
if (!network) network = 0;
utils.emit(irc, network, 'serverinfo', {
"info": serverInfo[network]
});
return serverInfo[network];
};
irc.on('data', function (err, msg) {
var network = msg.network;
var match, supports;
switch (msg.command) {
case 'RPL_YOURHOST':
match = msg.trailing.match(/^Your host is (.+), running version (.+)$/i);
serverInfo[network] = serverInfo[network] || {};
serverInfo[network].servername = match[1];
serverInfo[network].version = match[2];
break;
case 'RPL_CREATED':
serverInfo[network] = serverInfo[network] || {};
serverInfo[network].created = new Date(msg.trailing.substr(24));
break;
/*case 'RPL_MYINFO':
//http://i.imgur.com/fWVvVno.gif
break;*/
/*case 'RPL_ISUPPORT':
serverInfo[network] = serverInfo[network] || {};
serverInfo[network].supports = serverInfo[network].supports || {};
supports = msg.params.split(' ');
supports.shift();
supports.forEach(function (s) {
if (s.indexOf('=') !== -1) {
serverInfo[network].supports[s.split('=')[0]] = s.split('=')[1];
} else {
serverInfo[network].supports[s] = true;
}
});
break;*/
}
});
irc.on('disconnect', function (err, event) {
// Reconnect after 10 seconds.
if (irc.stinfo[event.network].reconnect === true) {
setTimeout(function() {
irc.reconnect(event.network);
}, 10000);
}
});
};
};