bots: Fix googlesearch bot exceptions and add readme.
MODIFY
contrib_bots/bots/googlesearch/googlesearch.py
contrib_bots/bots/googlesearch/googlesearch.py
-# See zulip/contrib_bots/lib/readme.md for instructions on running this code.
+# See readme.md for instructions on running this code.
from __future__ import print_function
import logging
import http.client
@@ -8,13 +8,19 @@ from six.moves.urllib.request import urlopen
# pip install --upgrade google
from google import search
+
def get_google_result(search_keywords):
- if search_keywords == 'help':
- help_message = "To use this bot start message with @google \
+ help_message = "To use this bot, start messages with @mentioned-bot, \
followed by what you want to search for. If \
found, Zulip will return the first search result \
- on Google. An example message that could be sent is:\
- '@google zulip' or '@google how to create a chatbot'."
+ on Google.\
+ \
+ An example message that could be sent is:\
+ '@mentioned-bot zulip' or \
+ '@mentioned-bot how to create a chatbot'."
+ if search_keywords == 'help':
+ return help_message
+ elif search_keywords == '' or search_keywords is None:
return help_message
else:
try:
@@ -27,29 +33,43 @@ def get_google_result(search_keywords):
logging.exception(e)
return 'Error: Search failed. {}.'.format(e)
- if not urls:
- return 'No URLs returned by google.'
-
+ try:
url = next(urls)
+ except AttributeError as a_err:
+ # google.search query failed and urls is of object
+ # 'NoneType'
+ logging.exception(a_err)
+ return "Error: Google search failed with a NoneType result. {}.".format(a_err)
+ except TypeError as t_err:
+ # google.search query failed and returned None
+ # This technically should not happen but the prior
+ # error check assumed this behavior
+ logging.exception(t_err)
+ return "Error: Google search function failed. {}.".format(t_err)
+ except Exception as e:
+ logging.exception(e)
+ return 'Error: Search failed. {}.'.format(e)
return 'Success: {}'.format(url)
+
class GoogleSearchHandler(object):
'''
This plugin allows users to enter a search
term in Zulip and get the top URL sent back
to the context (stream or private) in which
it was called. It looks for messages starting
- with @google.
+ with @mentioned-bot.
'''
def usage(self):
return '''
This plugin will allow users to search
for a given search term on Google from
- Zulip. Use '@google help' to get more
- information on the bot usage. Users
- should preface messages with @google.
+ Zulip. Use '@mentioned-bot help' to get
+ more information on the bot usage. Users
+ should preface messages with
+ @mentioned-bot.
'''
def handle_message(self, message, client, state_handler):
@@ -73,6 +93,7 @@ class GoogleSearchHandler(object):
handler_class = GoogleSearchHandler
+
def test():
try:
urlopen('http://216.58.192.142', timeout=1)

ADD
contrib_bots/bots/googlesearch/readme.md
+# Google Search bot
+
+This bot allows users to do Google search queries and have the bot
+respond with the first search result. It is by default set to the
+highest safe-search setting.
+
+## Usage
+
+Run this bot as described
+[here](http://zulip.readthedocs.io/en/latest/bots-guide.html#how-to-deploy-a-bot).
+
+Use this bot with the following command
+
+`@mentioned-bot <search terms>`
+
+This will return the first link found by Google for `<search terms>`
+and print the resulting URL.
+
+If no `<search terms>` are entered, a help message is printed instead.
+
+If there was an error in the process of running the search (socket
+errors, Google search function failed, or general failures), an error
+message is returned.

bots: Fix googlesearch bot exceptions and add readme.