var Wordnik = require('wordnik'), parseString = require('xml2js').parseString; var words = function(dbot) { this.commands = { '~define': function(event) { var query = event.params[1]; this.wn.definitions(encodeURIComponent(query), function(err, defs) { if(!err && defs[0]) { event.reply(dbot.t('def', { 'word': query, 'definition': defs[0].text })); } else { event.reply(dbot.t('no_def', { 'word': query })); } }); }, '~like': function(event) { var query = event.params[1]; this.wn.word(query, {}, function(err, word) { if(!err && word) { word.related({ 'limit': 10 }, function(err, related) { if(related[0]) { event.reply(dbot.t('def', { 'word': 'Words related to ' + query, 'definition': related[0].words.join(', ') + '.' })); } else { event.reply(dbot.t('no_similar', { 'word': query })); } }); } else { event.reply(dbot.t('no_word', { 'word': query })); } }); }, '~example': function(event) { var query = event.params[1]; this.wn.word(query, {}, function(err, word) { if(!err && word) { word.topExample({}, function(err, example) { if(!err && example) { var rep = new RegExp(query, 'g'); event.reply(dbot.t('def', { 'word': query + ' example', 'definition': example.text.replace(rep, '\u00033'+query+'\u000f') })); } else { event.reply(dbot.t('no_example', { 'word': query })); } }); } else { event.reply(dbot.t('no_word', { 'word': query })); } }); }, '~rw': function(event) { this.wn.randomWord(function(err, word) { if(!err && word) { this.wn.definitions(encodeURIComponent(word.word), function(err, defs) { if(!err && defs[0]) { if(!defs[0].text.match(/plural/i) && !defs[0].text.match(/participle/i)) { event.reply(dbot.t('def', { 'word': word.word, 'definition': defs[0].text })); } else { dbot.commands['rw'](event); } } else { event.reply(dbot.t('no_def', { 'word': query })); } }.bind(this)); } }.bind(this)); }, '~etymology': function(event) { var query = event.params[1]; this.wn.word(query, {}, function(err, word) { if(!err && word) { word.etymologies({},function(err, origin) { if(!err && origin[0]) { parseString(origin[0], function(err, string) { event.reply(dbot.t('origin', { 'word': query, 'origin': string.ety._ })); }); } else { event.reply(dbot.t('no_def', { 'word': query })); } }); } else { event.reply(dbot.t('no_word', { 'word': query })); } }); }, '~jimble': function(event) { event.reply(event.params[1].split('').sort(function() { return (Math.round(Math.random()) - 0.5); }).join('')); } }; this.commands['~jimble'].regex = [/^jimble (.+)$/, 2]; this.listener = function(event) { var matchOne = event.message.match(new RegExp(dbot.config.name + ': should (\\w+) (.+) or (.*)\\?', 'i')); var matchTwo = event.message.match(new RegExp(dbot.config.name + ': should (\\w+) (.+)\\?', 'i')); if(matchOne) { var pre = matchOne[1]; if(pre == 'i' || pre == 'I') { pre = 'You'; } if(Math.floor(Math.random() * (6)) == 1) { dbot.api.quotes.getInterpolatedQuote(event.server, event.channel.name, event.user, 'should_responses', function(q) { event.reply(pre + ' should ' + q); }); } else { event.reply(pre + ' should ' + matchOne[_.random(2, 3)].replace(/,/,'').replace(/should/,'')); } } else if(matchTwo) { // I know i can do it in the one regex shut up var pre = matchTwo[1]; if(pre == 'i' || pre == 'I') { pre = 'You'; } if(Math.floor(Math.random() * (6)) == 1) { dbot.api.quotes.getInterpolatedQuote(event.server, event.channel.name, event.user, 'should_responses', function(q) { event.reply(pre + ' should ' + q); }); } else { var choice = [ '', 'not ']; event.reply(pre + ' should ' + choice[_.random(0, 1)] + matchTwo[2].replace(/,/,'').replace(/should/,'')); } } }; this.on = 'PRIVMSG'; this.onLoad = function() { this.wn = new Wordnik({ 'api_key': this.config.api_key }); }.bind(this); }; exports.fetch = function(dbot) { return new words(dbot); };