]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/commitdiff
search: show long definitions with 'google define:stuff'
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Mon, 31 Aug 2009 19:10:59 +0000 (21:10 +0200)
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Mon, 31 Aug 2009 19:10:59 +0000 (21:10 +0200)
data/rbot/plugins/search.rb

index 827a130398c3144adfd73a7311f6e2e12357648b..95b88a0c9f52577e510689e6bb41f422ed043f3f 100644 (file)
@@ -59,6 +59,10 @@ class SearchPlugin < Plugin
 
   def google(m, params)
     what = params[:words].to_s
+    if what.match(/^define:/)
+      return google_define(m, what, params)
+    end
+
     searchfor = CGI.escape what
     # This method is also called by other methods to restrict searching to some sites
     if params[:site]
@@ -125,6 +129,34 @@ class SearchPlugin < Plugin
 
   end
 
+  def google_define(m, what, params)
+    begin
+      wml = @bot.httputil.get(GOOGLE_SEARCH + CGI.escape(what))
+      raise unless wml
+    rescue => e
+      m.reply "error googling for #{what}"
+      return
+    end
+
+    begin
+      related_index = wml.index(/Related phrases:/, 0)
+      raise unless related_index
+      defs_index = wml.index(/Definitions of <b>/, related_index)
+      raise unless defs_index
+      defs_end = wml.index(/<input/, defs_index)
+      raise unless defs_end
+    rescue => e
+      m.reply "no results found for #{what}"
+      return
+    end
+
+    related = wml[related_index...defs_index]
+    defs = wml[defs_index...defs_end]
+
+    m.reply defs.ircify_html(:a_href => Underline), :split_at => (Underline + ' ')
+
+  end
+
   def lucky(m, params)
     params.merge!(:lucky => true)
     google(m, params)