diff options
Diffstat (limited to 'lib/BitrafBot.js')
-rw-r--r-- | lib/BitrafBot.js | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/lib/BitrafBot.js b/lib/BitrafBot.js new file mode 100644 index 0000000..9388ddb --- /dev/null +++ b/lib/BitrafBot.js @@ -0,0 +1,89 @@ +// var IRC = require('./IRC').IRC; +var IRC = require('../node_modules/node-irc/IRC.js').IRC + , irc = new IRC('irc.freenode.net', 6667) + , url = require('url') + , http = require('http') + , _ = require('underscore'); + +var BitrafBot = function(config) { + var nick = ''; + var nickCount = 0; + var nickAdditions = [ '', '^', '-', '_', '\\', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' ]; + + function findNick() { + if (nickCount == nickAdditions.length) { + nickCount = 0; + } + + return config.nick + nickAdditions[nickCount++]; + } + nick = findNick(); + + irc.on('connected', function(server) { + console.log('connected to ' + server); + irc.join(config.channel, function(error) { + irc.privmsg(config.channel, 'well hello yall'); + }); + }); + irc.on('privmsg', function(from, to, message) { + if(message == ',checkins') { + var checkinsUrl = config.checkinsUrl + console.log('checkins request. url=' + checkinsUrl); + + var options = url.parse(checkinsUrl); + options.headers = { Accept: 'application/vnd.collection+json' }; + options.method = 'GET'; + var req = http.get(options, function(res) { + var chunks = ''; + res.on('data', function (chunk) { + chunks += chunk; + }); + res.on('end', function () { + try { + data = JSON.parse(chunks); + var checkins = -1; + var lastCheckin = 'unknown'; + _.each(data['collection'].items, function(item, i) { + _.each(item.data, function(item, i) { + switch(item.name) { + case 'checkins': checkins = parseInt(item.value); break; + case 'last-checkin': lastCheckin = item.value; break; + } + }); + }); + if(checkins != -1) { + irc.privmsg(to, 'checkins: ' + checkins + ', last checkin: ' + lastCheckin); + } + else { + irc.privmsg(to, 'Could not find any checkins'); + } + } + catch(ex) { + irc.privmsg(to, 'Could not parse document'); + } + }); + }).on('error', function(e) { + irc.privmsg(to, 'Problem with request: ' + e.message); + }); + } + }); + irc.on('ping', function(from) { + console.log('ping from ' + from); + irc.ping(from); + }); + irc.on('ping-reply', function(from, ms) { + console.log('ping reply from ' + from + ': ' + ms + ' ms'); + }); + irc.on('errorcode', function(code) { + if (code == 'ERR_NICKNAMEINUSE') { + nick = findNick(); + irc.nick(nick); + } + }); + irc.connect(nick, 'The useful Bitraf bot', nick); + process.on('exit', function () { + irc.quit('bye'); + }); +} + +module.exports = BitrafBot; |