Files
zulip/zerver/lib/zcommand.py
Wyatt Hoodes 4d6755a807 zcommand.py: Clean up backend logic.
This commit contains a few clean ups:

* In order to scale better for adding multiple commands,
the message formatting and setting switch logic was
extracted to its own function.

* The command lists were removed, as the frontend parses
the slash command from the compose box, and only sends
a single command to the backend for any given command
alias typed.

* The `switch_command` logic was removed because, given
the aforementioned fact, the index of the command will
always be the same. Thus the switch command will always
be the same.

* Switched to using early returns as opposed to nested
conditionals.  Along with removing single use variable
declarations.
2020-04-07 20:54:34 -07:00

42 lines
1.8 KiB
Python

from typing import Any, Dict
from django.utils.translation import ugettext as _
from zerver.models import UserProfile
from zerver.lib.actions import do_set_user_display_setting
from zerver.lib.exceptions import JsonableError
def process_zcommands(content: str, user_profile: UserProfile) -> Dict[str, Any]:
def change_mode_setting(command: str, switch_command: str,
setting: str, setting_value: bool) -> str:
msg = 'Changed to {command} mode! To revert ' \
'{command} mode, type `/{switch_command}`.'.format(
command=command,
switch_command=switch_command
)
do_set_user_display_setting(user_profile=user_profile,
setting_name=setting,
setting_value=setting_value)
return msg
if not content.startswith('/'):
raise JsonableError(_('There should be a leading slash in the zcommand.'))
command = content[1:]
if command == 'ping':
return dict()
elif command == 'night':
if user_profile.night_mode:
return dict(msg='You are still in night mode.')
return dict(msg=change_mode_setting(command=command,
switch_command='day',
setting='night_mode',
setting_value=True))
elif command == 'day':
if not user_profile.night_mode:
return dict(msg='You are still in day mode.')
return dict(msg=change_mode_setting(command=command,
switch_command='night',
setting='night_mode',
setting_value=False))
raise JsonableError(_('No such command: %s') % (command,))