2017-05-30 02:10:19 -04:00
|
|
|
# See zulip/api/bots/readme.md for instructions on running this code.
|
2017-01-12 06:20:16 -05:00
|
|
|
from __future__ import print_function
|
|
|
|
import sys
|
|
|
|
import logging
|
|
|
|
try:
|
|
|
|
from PyDictionary import PyDictionary as Dictionary
|
|
|
|
except ImportError:
|
|
|
|
logging.error("Dependency Missing!")
|
|
|
|
sys.exit(0)
|
|
|
|
|
|
|
|
#Uses Python's Dictionary module
|
|
|
|
# pip install PyDictionary
|
|
|
|
|
|
|
|
def get_clean_response(m, method):
|
|
|
|
try:
|
|
|
|
response = method(m)
|
|
|
|
except Exception as e:
|
|
|
|
logging.exception(e)
|
|
|
|
return e
|
|
|
|
if isinstance(response, str):
|
|
|
|
return response
|
|
|
|
elif isinstance(response, list):
|
|
|
|
return ', '.join(response)
|
2017-05-24 15:23:50 -04:00
|
|
|
else:
|
|
|
|
return "Sorry, no result found! Please check the word."
|
2017-01-12 06:20:16 -05:00
|
|
|
|
|
|
|
def get_thesaurus_result(original_content):
|
2017-05-27 18:33:20 -04:00
|
|
|
help_message = ("To use this bot, start messages with either "
|
|
|
|
"@mention-bot synonym (to get the synonyms of a given word) "
|
|
|
|
"or @mention-bot antonym (to get the antonyms of a given word). "
|
|
|
|
"Phrases are not accepted so only use single words "
|
|
|
|
"to search. For example you could search '@mention-bot synonym hello' "
|
|
|
|
"or '@mention-bot antonym goodbye'.")
|
2017-05-24 15:23:50 -04:00
|
|
|
query = original_content.strip().split(' ', 1)
|
|
|
|
if len(query) < 2:
|
2017-01-12 06:20:16 -05:00
|
|
|
return help_message
|
2017-05-24 15:23:50 -04:00
|
|
|
else:
|
|
|
|
search_keyword = query[1]
|
|
|
|
if original_content.startswith('synonym'):
|
2017-01-12 06:20:16 -05:00
|
|
|
result = get_clean_response(search_keyword, method = Dictionary.synonym)
|
2017-02-16 16:56:32 -05:00
|
|
|
elif original_content.startswith('antonym'):
|
2017-01-12 06:20:16 -05:00
|
|
|
result = get_clean_response(search_keyword, method = Dictionary.antonym)
|
2017-05-24 15:23:50 -04:00
|
|
|
else:
|
|
|
|
result = help_message
|
2017-03-05 14:21:56 -05:00
|
|
|
return result
|
2017-01-12 06:20:16 -05:00
|
|
|
|
|
|
|
class ThesaurusHandler(object):
|
|
|
|
'''
|
|
|
|
This plugin allows users to enter a word in zulip
|
|
|
|
and get synonyms, and antonyms, for that word sent
|
|
|
|
back to the context (stream or private) in which
|
|
|
|
it was sent. It looks for messages starting with
|
2017-02-16 16:56:32 -05:00
|
|
|
'@mention-bot synonym' or '@mention-bot @antonym'.
|
2017-01-12 06:20:16 -05:00
|
|
|
'''
|
|
|
|
|
|
|
|
def usage(self):
|
|
|
|
return '''
|
|
|
|
This plugin will allow users to get both synonyms
|
|
|
|
and antonyms for a given word from zulip. To use this
|
|
|
|
plugin, users need to install the PyDictionary module
|
2017-02-16 16:56:32 -05:00
|
|
|
using 'pip install PyDictionary'.Use '@mention-bot synonym help' or
|
|
|
|
'@mention-bot antonym help' for more usage information. Users should
|
|
|
|
preface messages with @mention-bot synonym or @mention-bot antonym.
|
2017-01-12 06:20:16 -05:00
|
|
|
'''
|
|
|
|
|
2017-06-11 09:03:39 -04:00
|
|
|
def handle_message(self, message, bot_handler, state_handler):
|
2017-02-16 16:56:32 -05:00
|
|
|
original_content = message['content'].strip()
|
2017-01-12 06:20:16 -05:00
|
|
|
new_content = get_thesaurus_result(original_content)
|
2017-06-11 09:03:39 -04:00
|
|
|
bot_handler.send_reply(message, new_content)
|
2017-01-12 06:20:16 -05:00
|
|
|
|
|
|
|
handler_class = ThesaurusHandler
|