From 9c98ff2e3e6dbf13eb650bff91b49b37594ca4b9 Mon Sep 17 00:00:00 2001 From: Giuseppe Bilotta Date: Thu, 5 Apr 2007 14:09:23 +0000 Subject: search plugin: gcalc command thanks to epitron --- data/rbot/plugins/search.rb | 33 +++++++++++ data/rbot/plugins/search.rb-epipatch | 108 ----------------------------------- 2 files changed, 33 insertions(+), 108 deletions(-) delete mode 100644 data/rbot/plugins/search.rb-epipatch (limited to 'data/rbot/plugins') diff --git a/data/rbot/plugins/search.rb b/data/rbot/plugins/search.rb index 9b976886..aea6dc4c 100644 --- a/data/rbot/plugins/search.rb +++ b/data/rbot/plugins/search.rb @@ -18,6 +18,7 @@ require 'uri' Net::HTTP.version_1_2 GOOGLE_WAP_LINK = /(.*?)<\/a>/im +GOOGLE_CALC_RESULT = %r{

 (.+)
} class SearchPlugin < Plugin BotConfig.register BotConfigIntegerValue.new('google.hits', @@ -37,6 +38,8 @@ class SearchPlugin < Plugin case topic when "search", "google" "#{topic} => search google for " + when "gcalc" + "gcalc => use the google calculator to find the answer to " when "wp" "wp [] => search for on Wikipedia. You can select a national to only search the national Wikipedia" else @@ -92,6 +95,35 @@ class SearchPlugin < Plugin end + def gcalc(m, params) + what = params[:words].to_s + searchfor = URI.escape(what).sub('+','%2B') + + debug "Getting gcalc thing: #{searchfor.inspect}" + url = "http://www.google.com/search?q=#{searchfor}" + + begin + html = @bot.httputil.get(url) + rescue => e + m.reply "error googlecalcing #{what}" + return + end + + debug "#{html.size} bytes of html recieved" + + results = html.scan(GOOGLE_CALC_RESULT) + debug "results: #{results.inspect}" + + if results.length != 1 + m.reply "couldn't calculate #{what}" + return + end + + result = results[0][0].ircify_html + debug "replying with: #{result.inspect}" + m.reply "#{result}" + end + def wikipedia(m, params) lang = params[:lang] site = "#{lang.nil? ? '' : lang + '.'}wikipedia.org" @@ -108,6 +140,7 @@ plugin = SearchPlugin.new plugin.map "search *words", :action => 'google' plugin.map "google *words", :action => 'google' +plugin.map "gcalc *words", :action => 'gcalc' plugin.map "wp :lang *words", :action => 'wikipedia', :requirements => { :lang => /^\w\w\w?$/ } plugin.map "wp *words", :action => 'wikipedia' diff --git a/data/rbot/plugins/search.rb-epipatch b/data/rbot/plugins/search.rb-epipatch deleted file mode 100644 index 5ead2074..00000000 --- a/data/rbot/plugins/search.rb-epipatch +++ /dev/null @@ -1,108 +0,0 @@ -require 'uri' - -Net::HTTP.version_1_2 - -GOOGLE_WAP_LINK = /(.*?)<\/a>/im -GOOGLE_CALC_RESULT = %r{

 (.+)
} - -class SearchPlugin < Plugin - def help(plugin, topic="") - case topic - when "search" - "search => search google for " - when "google" - "google => search google for " - when "gcalc" - "gcalc => use the google calculator to find the answer to " - when "wp" - "wp [] => search for on Wikipedia. You can select a national to only search the national Wikipedia" - else - "search (or: google ) => search google for | wp => search for on Wikipedia | gcalc => use google calculator to calculate " - end - end - - def google(m, params) - what = params[:words].to_s - searchfor = URI.escape what - # This method is also called by other methods to restrict searching to some sites - if params[:site] - site = "site:#{params[:site]}+" - else - site = "" - end - # It is also possible to choose a filter to remove constant parts from the titles - # e.g.: "Wikipedia, the free encyclopedia" when doing Wikipedia searches - filter = params[:filter] || "" - - url = "http://www.google.com/wml/search?q=#{site}#{searchfor}" - - begin - wml = @bot.httputil.get_cached(url) - rescue => e - m.reply "error googling for #{what}" - return - end - results = wml.scan(GOOGLE_WAP_LINK) - if results.length == 0 - m.reply "no results found for #{what}" - return - end - results = results[0...3].map { |res| - n = res[0] - t = Utils.decode_html_entities res[2].gsub(filter, '').strip - u = URI.unescape res[1] - "#{n}. #{Bold}#{t}#{Bold}: #{u}" - }.join(" | ") - - m.reply "Results for #{what}: #{results}" - end - - def gcalc(m, params) - what = params[:words].to_s - searchfor = URI.escape(what).sub('+','%2B') - - puts "Getting gcalc thing: #{searchfor.inspect}" - url = "http://www.google.com/search?q=#{searchfor}" - - begin - html = @bot.httputil.get_cached(url) - rescue => e - m.reply "error googlecalcing #{what}" - return - end - - puts "#{html.size} bytes of html recieved" - - results = html.scan(GOOGLE_CALC_RESULT) - puts "results: #{results.inspect}" - - if results.length != 1 - m.reply "couldn't calculate #{what}" - #puts html - return - end - - result = results[0][0] - result.gsub!(" ", ",") - puts "replying with: #{result.inspect}" - m.reply "#{result}" - end - - def wikipedia(m, params) - lang = params[:lang] - site = "#{lang.nil? ? '' : lang + '.'}wikipedia.org" - params[:site] = site - params[:filter] = / - Wikipedia.*$/ - return google(m, params) - end - -end - -plugin = SearchPlugin.new - -plugin.map "search *words", :action => 'google' -plugin.map "google *words", :action => 'google' -plugin.map "gcalc *words", :action => 'gcalc' -plugin.map "wp :lang *words", :action => 'wikipedia', :requirements => { :lang => /^\w\w\w?$/ } -plugin.map "wp *words", :action => 'wikipedia' - -- cgit v1.2.3