--- /dev/null
+***************
+*** 133,138 ****
+ bot.automsg(public,nick,str(gsearch))
+ else: # we haven't found anything.
+ bot.automsg(public,nick,"No pages found.")
+ except IOError: # if the connection times out. This blocks. :(
+ bot.automsg(public,nick,"The web's broken. Waah!")
+
+--- 133,165 ----
+ bot.automsg(public,nick,str(gsearch))
+ else: # we haven't found anything.
+ bot.automsg(public,nick,"No pages found.")
++ except IOError: # if the connection times out. This blocks. :(
++ bot.automsg(public,nick,"The web's broken. Waah!")
++
++ # Look up the definition of something using google
++ def defineq(bot, cmd, nick, conn, public):
++ cmdrest = string.join(cmd.split()[1:])
++ targ = ("http://www.google.com/search?q=define%%3A%s&ie=utf-8&oe=utf-8"
++ % urllib.quote_plus(cmdrest))
++ try:
++ # Just slurp everything into a string
++ defnpage = urllib.urlopen(targ).read()
++ # For definitions we really do have to parse the HTML, sadly.
++ # This is of course going to be a bit fragile. We first look for
++ # 'Definitions of %s on the Web' -- if this isn't present we
++ # assume we have the 'no definitions found page'.
++ # The first defn starts after the following <p> tag.
++ # Following that we assume that each definition is all the non-markup
++ # before a <br> tag. Currently we just dump out the first definition.
++ match = re.search(r"Definitions of <b>.*?</b> on the Web.*?<p>\s*([^>]*)<br>",defnpage,re.MULTILINE)
++ if match == None:
++ bot.automsg(public,nick,"Some things defy definition.")
++ else:
++ # We assume google has truncated the definition for us so this
++ # won't flood the channel with text...
++ defn = " ".join(match.group(1).split("\n"));
++ bot.automsg(public,nick,defn)
++
+ except IOError: # if the connection times out. This blocks. :(
+ bot.automsg(public,nick,"The web's broken. Waah!")
+