contrib bots: Edit code for uniformity.
Add one function (get_bot_botname_response()) that generates response
from the given input and replies back to the handle_message with the final
content of response to be sent. Also add code to bots(except followup) to
reply to private messages along with stream messages.
MODIFY
contrib_bots/bots/converter/converter.py
contrib_bots/bots/converter/converter.py
@@ -10,6 +10,7 @@ import sys
from math import log10, floor
import utils
+import re
def is_float(value):
try:
@@ -48,6 +49,22 @@ class ConverterHandler(object):
'''
def handle_message(self, message, client, state_handler):
+ bot_response = get_bot_converter_response(message, client)
+ if message['type'] == 'private':
+ client.send_message(dict(
+ type='private',
+ to=message['sender_email'],
+ content=bot_response,
+ ))
+ else:
+ client.send_message(dict(
+ type='stream',
+ to=message['display_recipient'],
+ subject=message['subject'],
+ content=bot_response,
+ ))
+
+def get_bot_converter_response(message, client):
content = message['content']
words = content.lower().split()
@@ -121,11 +138,6 @@ class ConverterHandler(object):
for idx, result in enumerate(results, 1):
new_content += ((str(idx) + '. conversion: ') if len(results) > 1 else '') + result + '\n'
- client.send_message(dict(
- type='stream',
- to=message['display_recipient'],
- subject=message['subject'],
- content=new_content,
- ))
+ return new_content
handler_class = ConverterHandler

RENAME
contrib_bots/bots/define_bot/define_bot.py
contrib_bots/bots/define/define.py
@@ -15,17 +15,32 @@ class DefineHandler(object):
EMPTY_WORD_REQUEST_ERROR_MESSAGE = 'Please enter a word to define.'
PHRASE_ERROR_MESSAGE = 'Definitions for phrases are not available.'
- def usage(DefineHandler):
+ def usage(self):
return '''
This plugin will allow users to define a word. Users should preface
messages with @mention-bot.
'''
- def _handle_definition(DefineHandler, original_content):
- # Remove '@define' from the message and extract the rest of the message, the
- # word to define.
- split_content = original_content.split(' ')
+ def handle_message(self, message, client, state_handler):
+ original_content = message['content'].strip()
+ bot_response = self.get_bot_define_response(original_content)
+
+ if message['type'] == 'private':
+ client.send_message(dict(
+ type='private',
+ to=message['sender_email'],
+ content=bot_response,
+ ))
+ else:
+ client.send_message(dict(
+ type='stream',
+ to=message['display_recipient'],
+ subject=message['subject'],
+ content=bot_response,
+ ))
+ def get_bot_define_response(self, original_content):
+ split_content = original_content.split(' ')
# If there are more than one word (a phrase)
if len(split_content) > 1:
return DefineHandler.PHRASE_ERROR_MESSAGE
@@ -35,19 +50,19 @@ class DefineHandler(object):
# No word was entered.
if not to_define_lower:
- return DefineHandler.EMPTY_WORD_REQUEST_ERROR_MESSAGE
+ return self.EMPTY_WORD_REQUEST_ERROR_MESSAGE
else:
response = '**{}**:\n'.format(to_define)
try:
# Use OwlBot API to fetch definition.
- api_result = requests.get(DefineHandler.DEFINITION_API_URL.format(to_define_lower))
+ api_result = requests.get(self.DEFINITION_API_URL.format(to_define_lower))
# Convert API result from string to JSON format.
definitions = api_result.json()
# Could not fetch definitions for the given word.
if not definitions:
- response += DefineHandler.REQUEST_ERROR_MESSAGE
+ response += self.REQUEST_ERROR_MESSAGE
else: # Definitions available.
# Show definitions line by line.
for d in definitions:
@@ -55,21 +70,9 @@ class DefineHandler(object):
response += '\n' + '* (**{}**) {}\n&nbsp;&nbsp;{}'.format(d['type'], d['defenition'], html2text.html2text(example))
except Exception as e:
- response += DefineHandler.REQUEST_ERROR_MESSAGE
+ response += self.REQUEST_ERROR_MESSAGE
logging.exception(e)
return response
- def handle_message(DefineHandler, message, client, state_handler):
- original_content = message['content']
-
- response = DefineHandler._handle_definition(original_content)
-
- client.send_message(dict(
- type='stream',
- to=message['display_recipient'],
- subject=message['sender_email'],
- content=response
- ))
-
handler_class = DefineHandler

RENAME
contrib_bots/bots/encrypt_bot/encrypt_bot.py
contrib_bots/bots/encrypt/encrypt.py
@@ -29,17 +29,28 @@ class EncryptHandler(object):
'''
def handle_message(self, message, client, state_handler):
- original_content = message['content']
- temp_content = encrypt(original_content)
- send_content = "Encrypted/Decrypted text: " + temp_content
+ bot_response = self.get_bot_encrypt_response(message)
+ if message['type'] == 'private':
+ client.send_message(dict(
+ type='private',
+ to=message['sender_email'],
+ content=bot_response,
+ ))
+ else:
client.send_message(dict(
type='stream',
to=message['display_recipient'],
subject=message['subject'],
- content = send_content
+ content=bot_response,
))
+ def get_bot_encrypt_response(self, message):
+ original_content = message['content']
+ temp_content = encrypt(original_content)
+ send_content = "Encrypted/Decrypted text: " + temp_content
+ return send_content
+
handler_class = EncryptHandler
if __name__ == '__main__':

MODIFY
contrib_bots/bots/followup/followup.py
contrib_bots/bots/followup/followup.py
@@ -23,16 +23,20 @@ class FollowupHandler(object):
'''
def handle_message(self, message, client, state_handler):
- original_content = message['content']
- original_sender = message['sender_email']
- temp_content = 'from %s:' % (original_sender,)
- new_content = temp_content + original_content
-
+ bot_response = self.get_bot_followup_response(message)
client.send_message(dict(
type='stream',
to='followup',
subject=message['sender_email'],
- content=new_content,
+ content=bot_response,
))
+ def get_bot_followup_response(self, message):
+ original_content = message['content']
+ original_sender = message['sender_email']
+ temp_content = 'from %s:' % (original_sender,)
+ new_content = temp_content + original_content
+
+ return new_content
+
handler_class = FollowupHandler

MODIFY
contrib_bots/bots/wikipedia/wikipedia.py
contrib_bots/bots/wikipedia/wikipedia.py
@@ -2,6 +2,7 @@ from __future__ import absolute_import
from __future__ import print_function
import requests
import logging
+import re
# See readme.md for instructions on running this code.
@@ -26,8 +27,23 @@ class WikipediaHandler(object):
'''
def handle_message(self, message, client, state_handler):
- query = message['content']
+ bot_response = self.get_bot_wiki_response(message, client)
+ if message['type'] == 'private':
+ client.send_message(dict(
+ type='private',
+ to=message['sender_email'],
+ content=bot_response,
+ ))
+ else:
+ client.send_message(dict(
+ type='stream',
+ to=message['display_recipient'],
+ subject=message['subject'],
+ content=bot_response,
+ ))
+ def get_bot_wiki_response(self, message, client):
+ query = message['content']
query_wiki_link = ('https://en.wikipedia.org/w/api.php?action=query&'
'list=search&srsearch=%s&format=json' % (query,))
try:
@@ -47,12 +63,7 @@ class WikipediaHandler(object):
search_string = data.json()['query']['search'][0]['title'].replace(' ', '_')
url = 'https://en.wikipedia.org/wiki/' + search_string
new_content = new_content + '", ' + url
+ return new_content
- client.send_message(dict(
- type=message['type'],
- to=message['display_recipient'],
- subject=message['subject'],
- content=new_content,
- ))
handler_class = WikipediaHandler

contrib bots: Edit code for uniformity.
Add one function (get_bot_botname_response()) that generates response
from the given input and replies back to the handle_message with the final
content of response to be sent. Also add code to bots(except followup) to
reply to private messages along with stream messages.