diff --git a/tests/conftest.py b/tests/conftest.py index 8943b5f2b7..b4ddccae74 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1018,25 +1018,25 @@ def user_dict(logged_on_user: Dict[str, Any]) -> Dict[str, Dict[str, Any]]: "emailgateway@zulip.com": { "email": "emailgateway@zulip.com", "full_name": "Email Gateway", - "status": "inactive", + "status": "bot", "user_id": 6, }, "feedback@zulip.com": { "email": "feedback@zulip.com", "full_name": "Zulip Feedback Bot", - "status": "inactive", + "status": "bot", "user_id": 1, }, "notification-bot@zulip.com": { "email": "notification-bot@zulip.com", "full_name": "Notification Bot", - "status": "inactive", + "status": "bot", "user_id": 5, }, "welcome-bot@zulip.com": { "email": "welcome-bot@zulip.com", "full_name": "Welcome Bot", - "status": "inactive", + "status": "bot", "user_id": 4, }, } @@ -1075,7 +1075,7 @@ def user_list(logged_on_user: Dict[str, Any]) -> List[Dict[str, Any]]: { "email": "emailgateway@zulip.com", "full_name": "Email Gateway", - "status": "inactive", + "status": "bot", "user_id": 6, }, { @@ -1105,19 +1105,19 @@ def user_list(logged_on_user: Dict[str, Any]) -> List[Dict[str, Any]]: { "email": "notification-bot@zulip.com", "full_name": "Notification Bot", - "status": "inactive", + "status": "bot", "user_id": 5, }, { "email": "welcome-bot@zulip.com", "full_name": "Welcome Bot", - "status": "inactive", + "status": "bot", "user_id": 4, }, { "email": "feedback@zulip.com", "full_name": "Zulip Feedback Bot", - "status": "inactive", + "status": "bot", "user_id": 1, }, ] diff --git a/zulipterminal/config/symbols.py b/zulipterminal/config/symbols.py index d10fa89f2d..01b9606c32 100644 --- a/zulipterminal/config/symbols.py +++ b/zulipterminal/config/symbols.py @@ -19,5 +19,6 @@ STATUS_IDLE = "◒" STATUS_OFFLINE = "○" STATUS_INACTIVE = "•" +BOT_MARKER = "♟" AUTOHIDE_TAB_LEFT_ARROW = "❰" AUTOHIDE_TAB_RIGHT_ARROW = "❱" diff --git a/zulipterminal/config/themes.py b/zulipterminal/config/themes.py index 6eb7e8766f..06299eb171 100644 --- a/zulipterminal/config/themes.py +++ b/zulipterminal/config/themes.py @@ -31,6 +31,7 @@ 'user_idle' : '', 'user_offline' : '', 'user_inactive' : '', + 'user_bot' : '', 'title' : 'bold', 'column_title' : 'bold', 'time' : '', diff --git a/zulipterminal/config/ui_mappings.py b/zulipterminal/config/ui_mappings.py index 781597a410..ea8d7a1c4d 100644 --- a/zulipterminal/config/ui_mappings.py +++ b/zulipterminal/config/ui_mappings.py @@ -4,6 +4,7 @@ from zulipterminal.api_types import EditPropagateMode from zulipterminal.config.symbols import ( + BOT_MARKER, STATUS_ACTIVE, STATUS_IDLE, STATUS_INACTIVE, @@ -27,6 +28,7 @@ "idle": STATUS_IDLE, "offline": STATUS_OFFLINE, "inactive": STATUS_INACTIVE, + "bot": BOT_MARKER, } diff --git a/zulipterminal/model.py b/zulipterminal/model.py index 48b7f0eb72..6d7312b172 100644 --- a/zulipterminal/model.py +++ b/zulipterminal/model.py @@ -975,6 +975,15 @@ def get_all_users(self) -> List[Dict[str, Any]]: "user_id": user["user_id"], "status": status, } + + if user["is_bot"]: + self.user_dict[user["email"]] = { + "full_name": user["full_name"], + "email": email, + "user_id": user["user_id"], + "status": "bot", + } + self._all_users_by_id[user["user_id"]] = user self.user_id_email_dict[user["user_id"]] = email @@ -985,7 +994,7 @@ def get_all_users(self) -> List[Dict[str, Any]]: "full_name": bot["full_name"], "email": email, "user_id": bot["user_id"], - "status": "inactive", + "status": "bot", } self._cross_realm_bots_by_id[bot["user_id"]] = bot self._all_users_by_id[bot["user_id"]] = bot @@ -1012,12 +1021,18 @@ def get_all_users(self) -> List[Dict[str, Any]]: for properties in self.user_dict.values() if properties["status"] == "inactive" ] + bot = [ + properties + for properties in self.user_dict.values() + if properties["status"] == "bot" + ] # Construct user_list from sorted components of each list user_list = sorted(active, key=lambda u: u["full_name"].casefold()) user_list += sorted(idle, key=lambda u: u["full_name"].casefold()) user_list += sorted(offline, key=lambda u: u["full_name"].casefold()) user_list += sorted(inactive, key=lambda u: u["full_name"].casefold()) + user_list += sorted(bot, key=lambda u: u["full_name"].casefold()) # Add current user to the top of the list user_list.insert(0, current_user) self.user_dict[current_user["email"]] = current_user diff --git a/zulipterminal/themes/gruvbox_dark.py b/zulipterminal/themes/gruvbox_dark.py index 6044e8fd0c..5d0ca7f997 100644 --- a/zulipterminal/themes/gruvbox_dark.py +++ b/zulipterminal/themes/gruvbox_dark.py @@ -30,6 +30,7 @@ 'user_idle' : (Color.NEUTRAL_YELLOW, Color.DARK0_HARD), 'user_offline' : (Color.LIGHT2, Color.DARK0_HARD), 'user_inactive' : (Color.LIGHT2, Color.DARK0_HARD), + 'user_bot' : (Color.LIGHT2, Color.DARK0_HARD), 'title' : (Color.LIGHT2__BOLD, Color.DARK0_HARD), 'column_title' : (Color.LIGHT2__BOLD, Color.DARK0_HARD), 'time' : (Color.BRIGHT_BLUE, Color.DARK0_HARD), diff --git a/zulipterminal/themes/gruvbox_light.py b/zulipterminal/themes/gruvbox_light.py index 7660f2dc9b..e16cb5384b 100644 --- a/zulipterminal/themes/gruvbox_light.py +++ b/zulipterminal/themes/gruvbox_light.py @@ -29,6 +29,7 @@ 'user_idle' : (Color.NEUTRAL_YELLOW, Color.LIGHT0_HARD), 'user_offline' : (Color.DARK2, Color.LIGHT0_HARD), 'user_inactive' : (Color.DARK2, Color.LIGHT0_HARD), + 'user_bot' : (Color.DARK2, Color.LIGHT0_HARD), 'title' : (Color.DARK2__BOLD, Color.LIGHT0_HARD), 'column_title' : (Color.DARK2__BOLD, Color.LIGHT0_HARD), 'time' : (Color.FADED_BLUE, Color.LIGHT0_HARD), diff --git a/zulipterminal/themes/zt_blue.py b/zulipterminal/themes/zt_blue.py index 60e8efb96c..709518a363 100644 --- a/zulipterminal/themes/zt_blue.py +++ b/zulipterminal/themes/zt_blue.py @@ -24,6 +24,7 @@ 'user_idle' : (Color.DARK_GRAY, Color.LIGHT_BLUE), 'user_offline' : (Color.BLACK, Color.LIGHT_BLUE), 'user_inactive' : (Color.BLACK, Color.LIGHT_BLUE), + 'user_bot' : (Color.BLACK, Color.LIGHT_BLUE), 'title' : (Color.WHITE__BOLD, Color.DARK_BLUE), 'column_title' : (Color.BLACK__BOLD, Color.LIGHT_BLUE), 'time' : (Color.DARK_BLUE, Color.LIGHT_BLUE), diff --git a/zulipterminal/themes/zt_dark.py b/zulipterminal/themes/zt_dark.py index 6372b845b5..10e9d89820 100644 --- a/zulipterminal/themes/zt_dark.py +++ b/zulipterminal/themes/zt_dark.py @@ -24,6 +24,7 @@ 'user_idle' : (Color.YELLOW, Color.BLACK), 'user_offline' : (Color.WHITE, Color.BLACK), 'user_inactive' : (Color.WHITE, Color.BLACK), + 'user_bot' : (Color.WHITE, Color.BLACK), 'title' : (Color.WHITE__BOLD, Color.BLACK), 'column_title' : (Color.WHITE__BOLD, Color.BLACK), 'time' : (Color.LIGHT_BLUE, Color.BLACK), diff --git a/zulipterminal/themes/zt_light.py b/zulipterminal/themes/zt_light.py index f8a7f80df7..b5caa72695 100644 --- a/zulipterminal/themes/zt_light.py +++ b/zulipterminal/themes/zt_light.py @@ -24,6 +24,7 @@ 'user_idle' : (Color.DARK_BLUE, Color.WHITE), 'user_offline' : (Color.BLACK, Color.WHITE), 'user_inactive' : (Color.BLACK, Color.WHITE), + 'user_bot' : (Color.BLACK, Color.WHITE), 'title' : (Color.WHITE__BOLD, Color.DARK_GRAY), 'column_title' : (Color.BLACK__BOLD, Color.WHITE), 'time' : (Color.DARK_BLUE, Color.WHITE),