Merge github.com:reality/depressionbot into database

Conflicts:
	modules/poll/commands.js
	modules/quotes/commands.js
This commit is contained in:
reality 2013-04-13 00:57:18 +00:00
commit 3a567a35da
8 changed files with 86 additions and 25 deletions

View File

@ -7,6 +7,27 @@ var _ = require('underscore')._,
request = require('request'); request = require('request');
var imgur = function(dbot) { var imgur = function(dbot) {
this.internalAPI = {
'infoString': function(imgData) {
info = null;
if(imgData && _.has(imgData, 'data')) {
imgData = imgData.data;
info = '[';
if(imgData.title) {
info += imgData.title + ' is ';
}
if(imgData.animated) {
info += 'an animated ' + imgData.type.split('/')[1] + ' with ';
} else {
info += 'a non-animated ' + imgData.type.split('/')[1] + ' with ';
}
info += imgData.views + ' views].';
}
return info;
}
};
this.api = { this.api = {
'getRandomImage': function(callback) { 'getRandomImage': function(callback) {
var random = function(len) { var random = function(len) {
@ -14,27 +35,57 @@ var imgur = function(dbot) {
return len ? chars.charAt(~~(Math.random()*chars.length)) + random(len-1) : ""; return len ? chars.charAt(~~(Math.random()*chars.length)) + random(len-1) : "";
}; };
var ext = [ 'gif', 'png', 'jpg' ];
var testSlug = random(5);
var testUrl = 'http://i.imgur.com/' + var testUrl = 'http://i.imgur.com/' +
random(5) + testSlug +
'.png'; '.' + ext[_.random(0, ext.length - 1)];
var image = request(testUrl, function(error, response, body) { var image = request(testUrl, function(error, response, body) {
// 492 is body.length of a removed image // 492 is body.length of a removed image
if(!error && response.statusCode == 200 && body.length != 492) { if(!error && response.statusCode == 200 && body.length != 492) {
callback(testUrl); callback(testUrl, testSlug);
} else { } else {
this.api.getRandomImage(callback); this.api.getRandomImage(callback);
} }
}.bind(this)); }.bind(this));
},
'getImageInfo': function(slug, callback) {
request.get({
'url': 'https://api.imgur.com/3/image/' + slug + '.json',
'json': true,
'headers': {
'Authorization': 'Client-ID 86fd3a8da348b65'
}
}, function(err, response, body) {
callback(body);
});
} }
}; };
this.commands = { this.commands = {
'~ri': function(event) { '~ri': function(event) {
this.api.getRandomImage(function(link) { this.api.getRandomImage(function(link, slug) {
event.reply(event.user + ': (' + dbot.t('nsfw') + ') ' + link); this.api.getImageInfo(slug, function(imgData) {
}); var info = this.internalAPI.infoString(imgData);
event.reply(event.user + ': ' + link + ' ' + info);
}.bind(this));
}.bind(this));
} }
} }
this.onLoad = function() {
var imgurHandler = function(event, matches, name) {
if(matches[2]) { // TODO: handle this in the regex
this.api.getImageInfo(matches[1], function(imgData) {
var info = this.internalAPI.infoString(imgData);
if(info) event.reply(info);
}.bind(this));
}
}.bind(this);
dbot.api.link.addHandler(this.name, /http:\/\/i\.imgur\.com\/([a-zA-Z0-9]+)\.([jpg|png|gif])/, imgurHandler);
dbot.api.link.addHandler(this.name, /\bhttps?:\/\/imgur\.com\/([a-zA-Z0-9]+)\b/i, imgurHandler);
}.bind(this);
}; };
exports.fetch = function(dbot) { exports.fetch = function(dbot) {

View File

@ -14,7 +14,7 @@ var link = function(dbot) {
this.fetchTitle = function(event, link) { this.fetchTitle = function(event, link) {
var limit = 1000000, var limit = 1000000,
size = 0, size = 0,
page = request(link, function(error, response, body) { page = request(link.replace('https', 'http'), function(error, response, body) {
if(!error && response.statusCode == 200) { if(!error && response.statusCode == 200) {
body = body.replace(/(\r\n|\n\r|\n)/gm, " "); body = body.replace(/(\r\n|\n\r|\n)/gm, " ");
var title = body.valMatch(/<title>(.*)<\/title>/, 2); var title = body.valMatch(/<title>(.*)<\/title>/, 2);

View File

@ -27,11 +27,7 @@ var commands = function(dbot) {
event.reply(dbot.t('poll_created', { event.reply(dbot.t('poll_created', {
'name': name, 'name': name,
'description': description, 'description': description,
'url': dbot.t('url', { 'url': dbot.api.web.getUrl('/poll/' + name)
'host': 'test.com',
'port': 80,
'path': 'polls/' + name
})
})); }));
} else if(err instanceof AlreadyExistsError) { } else if(err instanceof AlreadyExistsError) {
event.reply(dbot.t('poll_exists', { 'name': name })); event.reply(dbot.t('poll_exists', { 'name': name }));

View File

@ -33,7 +33,7 @@ var commands = function(dbot){
if(event.params[1]){ if(event.params[1]){
var primary = dbot.api.users.resolveUser(event.server, event.params[1]); var primary = dbot.api.users.resolveUser(event.server, event.params[1]);
if(_.has(dbot.db.profiles[event.server], primary.toLowerCase())){ if(_.has(dbot.db.profiles[event.server], primary.toLowerCase())){
event.reply("http://"+dbot.config.web.webHost+":"+dbot.config.web.webPort+"/profile/"+event.server+"/"+primary.toLowerCase()); event.reply(dbot.api.web.getUrl("/profile/"+event.server+"/"+primary.toLowerCase());
} }
else{ else{
event.reply("No profile found for "+event.params[1]); event.reply("No profile found for "+event.params[1]);

View File

@ -91,7 +91,17 @@ var commands = function(dbot) {
{ 'count': rmCacheCount })); { 'count': rmCacheCount }));
}, },
// Remove last quote from category // Retrieve quote from a category in the database.
'~q': function(event) {
var key = event.input[1].trim().toLowerCase();
var quote = this.api.getQuote(event, event.input[1]);
if(quote) {
event.reply(key + ': ' + quote);
} else {
event.reply(dbot.t('category_not_found', {'category': key}));
}
},
'~rmlast': function(event) { '~rmlast': function(event) {
if(this.rmAllowed === true || _.include(dbot.config.admins, event.user)) { if(this.rmAllowed === true || _.include(dbot.config.admins, event.user)) {
var key = event.input[1].trim().toLowerCase(), var key = event.input[1].trim().toLowerCase(),
@ -352,11 +362,7 @@ var commands = function(dbot) {
if(_.has(dbot.config, 'web') && _.has(dbot.config.web, 'webHost')) { if(_.has(dbot.config, 'web') && _.has(dbot.config.web, 'webHost')) {
event.reply(dbot.t('quote_link', { event.reply(dbot.t('quote_link', {
'category': key, 'category': key,
'url': dbot.t('url', { 'url': dbot.api.web.getUrl('quotes/' + encodeURIComponent(key))
'host': dbot.config.web.webHost,
'port': dbot.config.web.webPort,
'path': 'quotes/' + encodeURIComponent(key)
})
})); }));
} else { } else {
event.reply(dbot.t('web_not_configured')); event.reply(dbot.t('web_not_configured'));

View File

@ -1,4 +1,5 @@
{ {
"webHost": "localhost", "webHost": "localhost",
"webPort": 8080 "webPort": 8080,
"externalPath": false
} }

View File

@ -37,8 +37,18 @@ var webInterface = function(dbot) {
this.onDestroy = function() { this.onDestroy = function() {
server.close(); server.close();
};
this.api = {
'getUrl': function(path) {
if(this.config.externalPath) {
return this.config.externalPath + '/' + path;
} else {
return 'http://' + this.config.webHost + ':' + port + '/' + path;
} }
}; };
};
};
exports.fetch = function(dbot) { exports.fetch = function(dbot) {
return new webInterface(dbot); return new webInterface(dbot);

View File

@ -10,8 +10,5 @@
"es": "No se pudó cargar el módulo: {moduleName}", "es": "No se pudó cargar el módulo: {moduleName}",
"na'vi": "Oeru Oel {moduleName}it sung.", "na'vi": "Oeru Oel {moduleName}it sung.",
"cy": "Wedi methu a llwytho modiwl: {moduleName}" "cy": "Wedi methu a llwytho modiwl: {moduleName}"
},
"url": {
"en": "http://{host}:{port}/{path}"
} }
} }