Commit graph

316 commits

Author SHA1 Message Date
Abhijeet Kaur 402dda87fe bots: Mock 'send_message' function for 'zulip-bot-output'.
Very few bots like followup bot directly call 'send_message'
function from the bot code. Since ExternalBotHandler class is
mocked, we'll have to mock 'send_message' function as well.

Added dummy field value of 'sender_email' for the message to be
as followup bot requires that field while processing
the message.
Since send_message is directly called from a specific bot's code,
so it can be sent to a different stream or under a different topic
than that of the incoming message. So, print the entire message
along with stream name.

A bot calling 'send_reply' function will reply to the incoming
message in the same stream under the same topic. So, only printing
bot's response message content for that.
2017-08-29 14:04:13 -07:00
Abhijeet Kaur 36f4982e54 bots: Mock get_config_info function for get-bot-output.
Since ExternalBotHandler class is mocked, few bots that
require specific configurations require to run get_config_info.
2017-08-29 13:58:05 -07:00
Abhijeet Kaur 23f6d2f144 bots: Add manual command to get bot output.
This eliminates the need to setup dev environment and to
create a bot, setup zuliprc file, subscribe the bot to the
stream in order to try out a bot.

Manual command get-bot-output gives the bots response content
directly.
2017-08-29 13:58:05 -07:00
derAnfaenger 6c47eda92b definition bot: Clarify error message. 2017-08-25 10:01:44 +02:00
neiljp (Neil Pilgrim) 749356d34b Incrementor tests: Preliminary coverage with no update_message support. 2017-08-24 10:24:41 -07:00
neiljp (Neil Pilgrim) d8c4242053 VirtualFS tests: Improve test coverage. 2017-08-24 10:24:41 -07:00
neiljp (Neil Pilgrim) 37206db176 TicTacToe tests: Improve test coverage. 2017-08-24 10:24:41 -07:00
derAnfaenger b3fc7edcf7 git: Ignore automatically generated MANIFEST.in. 2017-08-24 10:01:53 -07:00
Tim Abbott d42fa61dee test_lib: Clean up variable names. 2017-08-23 19:06:30 -07:00
neiljp (Neil Pilgrim) bef80129bd bot testing: Set check_expected_responses to test one source at a time.
When testing bots with state and using type="all", it is expected that
the passed-in state will be applied for each source individually.
This commit moves away from alternating between sources for each test,
to running all the tests on each source with a copy of state_handler.
2017-08-23 19:00:33 -07:00
neiljp (Neil Pilgrim) 2bd81eaff1 bot testing: Allow check_expected_responses to take Sequence[Tuple].
Ordered data is required for logical testing of stateful bots, as
compared to the previous use of a dict.
2017-08-23 19:00:33 -07:00
Abhijeet Kaur 83bfcb6535 bots: Modify is_private function to take 'id' as parameter.
This is done so that Embedded bot system can also make use of
this function directly, as only id is needed in this function.

Tweaked by tabbott to have a cleaner interface and simpler
documentation.
2017-08-22 12:03:09 -07:00
Abhijeet Kaur ae434cd26c bots: Use user 'id' instead of 'name' in is_private function.
Names are not guaranteed to be unique, user ids should
be used when comparing if the sender and receiver are the same.
2017-08-22 11:59:11 -07:00
Tim Abbott e1758945de bots: Extract some functions to top-level.
We'll want to use these functions for the embedded bots system.
2017-08-17 10:53:39 -07:00
derAnfaenger e4c34d77e7 packaging: Automatically generate zulip_bots MANIFEST.in.
Fixes #69.
2017-08-17 10:09:24 -07:00
Eeshan Garg 7460aca3e5 zulip_bots: Format string before checking if logo file exists.
get_bot_logo_path now first formats the path string with the name
of the bot before checking if the path exists. Not doing so is a
bug and causes the function to always return None.
2017-08-16 17:18:06 -07:00
Eeshan Garg c61d413f25 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.
2017-08-16 16:54:24 -07:00
Eeshan Garg a28fcbbaa9 zulip_bots: Add script to generate zulip_bots/MANIFEST.in.
As a package maintainer, I have to exclude the test fixtures in
MANIFEST.in so that they aren't shipped with the package release.
But for the repo, we need to include fixtures, logos and docs so
that Travis can run the tests after running
`pip install ./zulip_bots`.

Also, since we are installing zulip_bots off of this repo in our
main repo, docs and logos should be included so that they can be
rendered alongside our webhooks/integrations documentation, so we
need to include them in MANIFEST.in as well.

To automate this process, I just wrote this handy little script
that future bot contributors can run instead of having to manually
specify what to include in MANIFEST.in in the repo.
2017-08-15 19:30:13 -07:00
Eeshan Garg be87c04a8e zulip_bots: Include yoda fixtures in MANIFEST. 2017-08-15 19:30:13 -07:00
Eeshan Garg e0cafd1fdb zulip_bots: Add function to get path to a bot's doc.md file.
This is part of our efforts to have the documentation for a
particular bot live in this repo but still be able to render it
in the main repo (in a way similar to how we render the webhooks
docs).

This function allows us to specify the path to a bot's doc.md file
in zerver.lib.integrations.BotIntegration.
2017-08-15 19:30:13 -07:00
Eeshan Garg 5bb1cbf8d0 zulip_bots: Add logo for the GitHub Detail bot. 2017-08-15 19:30:13 -07:00
Eeshan Garg 1ca5ae5db8 zulip_bots: Add logo for the Google Search bot. 2017-08-15 19:30:13 -07:00
Eeshan Garg d63269ee6a zulip_bots: Rename bots/{bot}/readme.md -> bots/{bot}/doc.md.
doc.md better describes the style of documentation that will live
inside these files, since we want these to be similar to our
webhooks' doc.md files in terms of how these are rendered and
composed of Markdown macros.
2017-08-15 19:30:13 -07:00
Eeshan Garg aee564825f zulip_bots: Add function to get absolute path to the bots/ dir.
This is part of our efforts to have the documentation for a
particular bot live in this repo but still be able to render it
in the main repo (in a way similar to how we render the webhooks
docs).

This function allows the calling code to get the absolute path
to the bots/ directory. This will allow us to specify an
arbitrary path (jinja2.env.loader.searchpath)
to look for templates for bots' documentation.
2017-08-15 19:30:13 -07:00
Eeshan Garg 824000f32b zulip_bots: Add function to get the path to a bot's logo.
This is part of our efforts to have the documentation for a
particular bot live in this repo but still be able to render it
in the main repo (in a way similar to how we render the webhooks
docs).

For the logo, if a particular bot has a logo, get_bot_logo_path
expects to find it as /zulip_bots/bots/{bot_name}/logo.png or
/zulip_bots/bots/{bot_name}/logo.svg.
2017-08-15 19:30:13 -07:00
Abhijeet Kaur 1a26ae7f2b bots: Fix "help" message async in yoda.py and test_yoda.py.
The help message string was modified in yoda.py file to correctly
instruct the user. But the help message string was not modified
accordingly in the test file.
2017-08-16 03:55:11 +05:30
derAnfaenger 47ba08ff5c bots: Remove redundant newlines for giphy bot. 2017-08-15 06:37:42 -07:00
Abhijeet Kaur ef7077efdb bots: Correct help reply message in yoda bot. 2017-08-14 17:42:33 -07:00
Abhijeet Kaur c3e2c451a7 bots: Not printing the users input directly in reply message.
In case of an errored input (not consistent with the format
of input that the bot seeks), Converter bot was displaying the
errored part first, along with the error message.

This can lead to many failure, if removing_at_mention function
is not working properly then the input '@bot-name 2 m cm' leads
to the bot getting stuck in infinite loop as converter bot will
want to output '@bot-name not a valid number' and hence calling
itself again.
2017-08-14 17:42:33 -07:00
Abhijeet Kaur a68e582f72 bots: Make giphy bot consistent with other api_key bot structure. 2017-08-14 17:42:33 -07:00
Abhijeet Kaur f3d839fd47 bots: Add complete test coverage for yoda bot.
Add error handling support for empty messages and invalid
input to yoda bot, which was previously making the bot crash.
Add comments to describe tests.
2017-08-08 15:55:57 -07:00
Abhijeet Kaur efb5335b2f bots: Add some more test fixtures for yoda bot. 2017-08-08 14:05:58 -07:00
Abhijeet Kaur 29d33e86fe bots: Add complete tests for offline testing of yoda bot.
Since yoda api returns response of text form, made changes
in test_lib.py to handle responses that can either be json
or plain text.
2017-08-08 14:05:58 -07:00
Abhijeet Kaur 1e84e2eb5e bots: Improve error handling of yoda bot when the service is unavailable.
Frequent 503 errors throw index error exceptions which is misleading
to debug.
2017-08-08 14:05:58 -07:00
Abhijeet Kaur a58fae5cab bots: Minor changes to yoda.py to make it run smoothly.
Modifications done so that the bot runs using 'zulip-run-bot'
command.
2017-08-08 14:05:58 -07:00
Eeshan Garg 59c750707a python-zulip-api: Upgrade package versions (0.3.1 -> 0.3.2). 2017-07-31 15:33:34 -07:00
Abhijeet Kaur a1429f36b2 bots: Enable googlesearch bot to run by 'zulip-run-bot' command.
Since we want our bots to be both python 2 and python 3 compatible,
we use six to make up for both of them and run the bot smoothly.

'http.client' was basically used for error-handling by the author
of the bot, urllib errors can be handled by the urllib itself. So,
using this for simplicity.

urllib.request.urlopen raises URLError on protocol errors.
2017-07-27 10:44:41 -07:00
neiljp (Neil Pilgrim) 0a85962097 weather bot: Fix for integer division in python2 and adjust test.
Fixes #31.
2017-07-27 10:22:05 -07:00
Abhijeet Kaur 05c527a10f bots: Fix 'run.py' file to run bots.
'bot_name' variable in line number 111 in run.py undefined.
2017-07-26 16:54:47 -07:00
derAnfaenger ee7484e656 john bot: Change confusing variable 'abot' to 'chatterbot'. 2017-07-26 20:01:46 +02:00
derAnfaenger 51bf0cf869 bots: Use restricted open function in john. 2017-07-26 20:01:17 +02:00
derAnfaenger f3eaa381f6 bots: Audit filesystem access.
This adds a safe function for opening files via
ExternalBotHandler. This restricts open calls to a bot's
local directory.

Finalizes #9
2017-07-26 20:01:17 +02:00
neiljp (Neil Pilgrim) e619c19b36 bots: Set user-agent for individual bots automatically.
Fixes #28.
2017-07-25 19:35:15 -07:00
neiljp (Neil Pilgrim) b314c70da7 weather bot: Amend temperature formatting. 2017-07-25 18:05:14 -07:00
Tim Abbott 142d10f546 lint: Fix existing lint error in codebase. 2017-07-25 10:55:49 -07:00
Eeshan Garg a50cf906a6 bots/xkcd: Fix wrong package name passed to mock.patch. 2017-07-25 10:50:33 -07:00
Eeshan Garg d181d0192e zulip_bots: Use relative paths to find zulip_bots/bots/*. 2017-07-25 10:50:33 -07:00
Eeshan Garg bc8282b980 zulip_bots/run: Add --provision command-line option. 2017-07-25 10:50:33 -07:00
Eeshan Garg e85be28119 zulip_bots/run.py: Use argparse instead of optparse.
The optparse module is deprecated.
2017-07-25 10:50:33 -07:00
Eeshan Garg e255c73fc3 zulip_bots/provision: Improve logging. 2017-07-25 10:50:32 -07:00
Eeshan Garg 44f63992da zulip_bots/run: Support importing bot modules by path.
The zulip-run-bot script now supports passing in a --path-to-bot
option. This allows users to specify the path to the source file
for their own custom bots, the first step towards being able to
support out-of-tree bots.

To run an existing bot in the zulip_bots package, just passing in
the name of the bot should suffice.
2017-07-25 10:49:21 -07:00
Abhijeet Kaur 0625c26c9a bots: Correct 'http.bot_handler' to 'http.client' in googlesearch bot.
There is no library as 'http.bot_handler'.
'http.client' is what the author of this bots initially wrote.
Searching through the git history shows that someone mistakenly
replaced 'client' with 'bot_handler' here.
2017-07-25 10:46:22 -07:00
neiljp (Neil Pilgrim) 3234096cea bot tests: Add preliminary tests for tictactoe bot, including state. 2017-07-25 10:45:00 -07:00
neiljp (Neil Pilgrim) 6421a6fd49 bot tests: Support optional provided state between test calls. 2017-07-25 10:45:00 -07:00
neiljp (Neil Pilgrim) 45527c4cf4 bots: Switch TicTacToe to use state_handler.state() contextmanager. 2017-07-24 17:22:17 -07:00
neiljp (Neil Pilgrim) 5ca9ec0771 bots: Switch VirtualFS to use state_handler.state() contextmanager. 2017-07-24 17:22:17 -07:00
neiljp (Neil Pilgrim) 7a8b41b63e bots: Switch Incrementor to use state_handler.state() contextmanager. 2017-07-24 17:22:17 -07:00
neiljp (Neil Pilgrim) 101dd60829 bot lib: Add optional StateHandler contextmanager.
State can still be handled with get_state/set_state, and flushed
before the end of a 'with' block using set_state.
2017-07-24 17:22:17 -07:00
Abhijeet Kaur d9ac5ad88c bots: Add complete tests for offline testing of weather bot.
Also, added new lines in between different bot fixture files in
MANIFEST.in for better readability
2017-07-24 02:35:52 +05:30
Abhijeet Kaur e23444b757 bots: Fix errors to get info from config file to run bots.
get_config_info function in 'ExternalBotHandler' class was
using 2 undefined variables, which wasn't allowing bots to
access information from config file.
Fixed it, bots with api key working now.
2017-07-24 02:15:20 +05:30
Abhijeet Kaur 367d0b7986 bots: Add complete tests for offline testing of xkcd bot.
Add patch method to mock 'randint' method to check when
xkcd bot is called with 'random' command.
2017-07-23 07:00:00 +05:30
Abhijeet Kaur 35353f6d7f bots: Add complete tests for offline testing of wikipedia bot. 2017-07-23 06:52:24 +05:30
Abhijeet Kaur f955eb0c8d bots: Add complete tests for offline testing of define bot. 2017-07-22 14:22:29 -07:00
Abhijeet Kaur 2e48392884 bots: Modify howdoi/readme.md to correctly call 'howdoi' bot.
Update images with new commands screenshots for better understanding.
2017-07-20 16:02:47 -07:00
Abhijeet Kaur d9a6fec1a0 bots: Remove common send-reply function.
Previously, the annotation for the (now removed)send-reply
function was also wrong, as "send-message" function of
EmbeddedBotHandler class does not return any value, contrary
to "Dict[str, Any]" as specified by the funtion.

This is done as a follow up for zulip/zulip#5842.
2017-07-20 10:25:54 -07:00
Eeshan Garg 879f44ab3a bots: Move all bots and the bots API to separate package. 2017-07-18 02:20:27 -02:30