From 194ba1367b2d74f41d8fce48bd50e6983c3bd677 Mon Sep 17 00:00:00 2001 From: neiljp Date: Tue, 23 May 2017 15:23:42 -0700 Subject: [PATCH] contrib_bots: Clean up and document virtual_fs bot. --- contrib_bots/bots/virtual_fs/readme.md | 44 ++++++++++++++++++++++ contrib_bots/bots/virtual_fs/virtual_fs.py | 21 +++++------ 2 files changed, 54 insertions(+), 11 deletions(-) create mode 100644 contrib_bots/bots/virtual_fs/readme.md diff --git a/contrib_bots/bots/virtual_fs/readme.md b/contrib_bots/bots/virtual_fs/readme.md new file mode 100644 index 0000000..1f43cd6 --- /dev/null +++ b/contrib_bots/bots/virtual_fs/readme.md @@ -0,0 +1,44 @@ +# Virtual fs bot + +This bot allows users to store information in a virtual file system, +for a given stream or private chat. + +## Usage + +Run this bot as described in +[here](http://zulip.readthedocs.io/en/latest/bots-guide.html#how-to-deploy-a-bot). + +Use this bot with any of the following commands: + +`@fs mkdir` : create a directory +`@fs ls` : list a directory +`@fs cd` : change directory +`@fs pwd` : show current path +`@fs write` : write text +`@fs read` : read text +`@fs rm` : remove a file +`@fs rmdir` : remove a directory + +where `fs` may be the name of the bot you registered in the zulip system. + +### Usage examples + +`@fs ls` - Initially shows nothing (with a warning) +`@fs pwd` - Show which directory we are in: we start in / +`@fs mkdir foo` - Make directory foo +`@fs ls` - Show that foo is now created +`@fs cd foo` - Change into foo (and do a pwd, automatically) +`@fs write test hello world` - Write "hello world" to the file 'test' +`@fs read test` - Check the text was written +`@fs ls` - Show that the new file exists +`@fs rm test` - Remove that file +`@fs cd /` - Change back to root directory +`@fs rmdir foo` - Remove foo + +## Notes + +* In a stream, the bot must be mentioned; in a private chat, the bot + will assume every message is a command and so does not require this, + though doing so will still work. + +* Use commands like `@fs help write` for more details on a command. diff --git a/contrib_bots/bots/virtual_fs/virtual_fs.py b/contrib_bots/bots/virtual_fs/virtual_fs.py index f796665..07983ed 100644 --- a/contrib_bots/bots/virtual_fs/virtual_fs.py +++ b/contrib_bots/bots/virtual_fs/virtual_fs.py @@ -9,7 +9,7 @@ class VirtualFsHandler(object): def handle_message(self, message, client, state_handler): command = message['content'] - stream = message['display_recipient'] + if command == "": return topic = message['subject'] sender = message['sender_email'] @@ -17,23 +17,22 @@ class VirtualFsHandler(object): if state is None: state = {} - if stream not in state: - state[stream] = fs_new() - fs = state[stream] + recipient = message['display_recipient'] + if isinstance(recipient, list): # If not a stream, then hash on list of emails + recipient = " ".join([x['email'] for x in recipient]) + + if recipient not in state: + state[recipient] = fs_new() + fs = state[recipient] if sender not in fs['user_paths']: fs['user_paths'][sender] = '/' fs, msg = fs_command(fs, sender, command) prependix = '{}:\n'.format(sender) msg = prependix + msg - state[stream] = fs + state[recipient] = fs state_handler.set_state(state) - client.send_message(dict( - type='stream', - to=stream, - subject=topic, - content=msg, - )) + client.send_reply(message, msg) def get_help():