PageRenderTime 38ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/plugins/duckduckgo.js

https://github.com/johnkpaul/protobot
JavaScript | 37 lines | 30 code | 6 blank | 1 comment | 9 complexity | 881d29a5a1bcf489ebcc1d67c3b6ae8c MD5 | raw file
  1. exports.register = register
  2. var exec = require( 'child_process' ).exec
  3. /* ---------------------------- DuckDuckGo ---------------------------- */
  4. function DuckDuckGo() {
  5. }
  6. DuckDuckGo.prototype.search = function( query, cloudback ) {
  7. exec("curl 'http://api.duckduckgo.com/?format=json&q=" + escape( query ) + "'", function ( err, stdout, stderr ) {
  8. var results = JSON.parse( stdout ) // What could possibly go wrong?
  9. cloudback.call( this, results )
  10. })
  11. }
  12. function register( j ) {
  13. var ddg = new DuckDuckGo()
  14. j.watch_for( /^([\/.,`?]?)ddg ([^#@]+)(?:\s*#([1-9]))?(?:\s*@\s*([-\[\]\{\}`|_\w]+))?$/, function( message ) {
  15. var user = message.match_data[4] || message.name
  16. , term = message.match_data[2]
  17. , num = +message.match_data[3]-1 || 0
  18. ddg.search( term, function( results ) {
  19. if ( results["AbstractText"] )
  20. message.say( user + ': ' + unescapeAll( results["AbstractText"] ) + ' - ' + results["AbstractURL"] )
  21. else if ( results["Definition"] )
  22. message.say( user + ': ' + results["Definition"] + ' - ' + results["DefinitionURL"] )
  23. else if ( results["Redirect"] ) // !bang syntax used
  24. message.say( user + ': ' + results["Redirect"] )
  25. else if ( results["Results"].length )
  26. message.say( user + ': ' + results["Results"][num]["Text"] + " - " + results["Results"][num]["FirstURL"] )
  27. else
  28. message.say( user + ": Sorry, no results for '" + term + "'" )
  29. })
  30. })
  31. }