summaryrefslogtreecommitdiff
path: root/lib/BitrafBot.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/BitrafBot.js')
-rw-r--r--lib/BitrafBot.js89
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;