zulip_bots: Remove thesaurus bot.
This bot depends on PyDictionary, which isn't very well-implemented or well-maintained. PyDictionary's dependency on goslate and goslate's dependency on concurrent.futures has been known to cause problems in Python 3 virtualenvs. This bot has also been the source of disruptive BeautifulSoup warnings. Since this bot is only meant to be an example bot, and for all the above reasons, it makes sense to remove this bot. The cons of debugging the above issues outweight the pros of having the bot at all.
This commit is contained in:
parent
bcc1489bc5
commit
c61d413f25
|
@ -32,7 +32,7 @@ Running tests for all bots:
|
||||||
|
|
||||||
Running tests for specific bots:
|
Running tests for specific bots:
|
||||||
|
|
||||||
./test-bots define thesaurus
|
./test-bots define xkcd
|
||||||
|
|
||||||
Running tests for all bots excluding certain bots (the
|
Running tests for all bots excluding certain bots (the
|
||||||
following command would run tests for all bots except
|
following command would run tests for all bots except
|
||||||
|
|
|
@ -33,7 +33,6 @@ setuptools_info = dict(
|
||||||
'zulip>=0.3.1',
|
'zulip>=0.3.1',
|
||||||
'mock>=2.0.0',
|
'mock>=2.0.0',
|
||||||
'html2text', # for bots/define
|
'html2text', # for bots/define
|
||||||
'PyDictionary', # for bots/thesaurus
|
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
PyDictionary
|
|
|
@ -1,25 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
from __future__ import absolute_import
|
|
||||||
from __future__ import print_function
|
|
||||||
|
|
||||||
from zulip_bots.test_lib import BotTestCase
|
|
||||||
|
|
||||||
class TestThesaurusBot(BotTestCase):
|
|
||||||
bot_name = "thesaurus"
|
|
||||||
|
|
||||||
def test_bot(self):
|
|
||||||
expected = {
|
|
||||||
"synonym good": "great, satisfying, exceptional, positive, acceptable",
|
|
||||||
"synonym nice": "cordial, kind, good, okay, fair",
|
|
||||||
"synonym foo": "bar, thud, X, baz, corge",
|
|
||||||
"antonym dirty": "ordered, sterile, spotless, moral, clean",
|
|
||||||
"antonym bar": "loss, whole, advantage, aid, failure",
|
|
||||||
"": ("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'."),
|
|
||||||
}
|
|
||||||
self.check_expected_responses(expected)
|
|
|
@ -1,67 +0,0 @@
|
||||||
# See zulip/api/bots/readme.md for instructions on running this code.
|
|
||||||
from __future__ import print_function
|
|
||||||
import sys
|
|
||||||
import logging
|
|
||||||
from PyDictionary import PyDictionary as Dictionary
|
|
||||||
|
|
||||||
#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)
|
|
||||||
else:
|
|
||||||
return "Sorry, no result found! Please check the word."
|
|
||||||
|
|
||||||
def get_thesaurus_result(original_content):
|
|
||||||
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'.")
|
|
||||||
query = original_content.strip().split(' ', 1)
|
|
||||||
if len(query) < 2:
|
|
||||||
return help_message
|
|
||||||
else:
|
|
||||||
search_keyword = query[1]
|
|
||||||
if original_content.startswith('synonym'):
|
|
||||||
result = get_clean_response(search_keyword, method = Dictionary.synonym)
|
|
||||||
elif original_content.startswith('antonym'):
|
|
||||||
result = get_clean_response(search_keyword, method = Dictionary.antonym)
|
|
||||||
else:
|
|
||||||
result = help_message
|
|
||||||
return result
|
|
||||||
|
|
||||||
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
|
|
||||||
'@mention-bot synonym' or '@mention-bot @antonym'.
|
|
||||||
'''
|
|
||||||
|
|
||||||
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
|
|
||||||
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.
|
|
||||||
'''
|
|
||||||
|
|
||||||
def handle_message(self, message, bot_handler, state_handler):
|
|
||||||
original_content = message['content'].strip()
|
|
||||||
new_content = get_thesaurus_result(original_content)
|
|
||||||
bot_handler.send_reply(message, new_content)
|
|
||||||
|
|
||||||
handler_class = ThesaurusHandler
|
|
Loading…
Reference in a new issue