diff --git a/modules/puush/puush.js b/modules/puush/puush.js new file mode 100644 index 0000000..5141a5a --- /dev/null +++ b/modules/puush/puush.js @@ -0,0 +1,69 @@ +/** + * Module Name: puush + * Description: You like the random puush? + */ + +var _ = require('underscore')._, + request = require('request'), + async = require('async'); + +var puush = function(dbot) { + this.ApiRoot = 'http://puu.sh/'; + this.rpCache = []; + + this.api = { + 'getRandomImage': function(callback) { + var random = function(len) { + var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz"; + return len ? chars.charAt(~~(Math.random()*chars.length)) + random(len-1) : ""; + }; + + var ext = [ 'gif', 'png', 'jpg' ]; + var testSlug = random(5); + var testUrl = 'http://puu.sh/' + + testSlug + + '.' + ext[_.random(0, ext.length - 1)]; + + request(testUrl, function(error, response, body) { + if(!error && response.statusCode === 200 && body.length > 500) { + callback(testUrl); + } else { + this.api.getRandomImage(callback); + } + }.bind(this)); + } + }; + + this.commands = { + '~rp': function(event) { + var local = event.user; + if(event.params[1]) { + local = event.params.splice(1, event.params.length - 1).join(' ').trim(); + } + + if(this.rpCache.length > 0) { + event.reply(local + ': ' + this.rpCache.pop()); + this.api.getRandomImage(function(url) { + this.rpCache.push(url); + }.bind(this)); + } else { + this.api.getRandomImage(function(url) { + event.reply(local + ': ' + url); + }); + } + } + }; + + this.onLoad = function() { + async.times(10, function(n, next) { + this.api.getRandomImage(function(url) { + this.rpCache.push(url); + next(); + }.bind(this)); + }.bind(this), function() {}); + }.bind(this); +}; + +exports.fetch = function(dbot) { + return new puush(dbot); +};