aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--slack/config.py12
-rw-r--r--slack/slack_user.py12
-rw-r--r--typings/slack_api/slack_users_info.pyi44
3 files changed, 44 insertions, 24 deletions
diff --git a/slack/config.py b/slack/config.py
index a1ab999..d4a36bd 100644
--- a/slack/config.py
+++ b/slack/config.py
@@ -38,8 +38,8 @@ class SlackConfigSectionColor:
self.reaction_suffix = WeeChatOption(
self._section,
"reaction_suffix",
- "text color for the [:wave:(@user)] suffix on messages that have "
- "reactions attached to them.",
+ "text color for the [:wave:(@user)] suffix on messages that have"
+ " reactions attached to them.",
WeeChatColor("darkgray"),
)
@@ -79,6 +79,14 @@ class SlackConfigSectionWorkspace:
30,
)
+ self.use_real_names = self._create_option(
+ "use_real_names",
+ "use real names as the nicks for all users. When this is"
+ " false, display names will be used if set, with a fallback"
+ " to the real name if display name is not set",
+ False,
+ )
+
def _create_option(
self,
name: str,
diff --git a/slack/slack_user.py b/slack/slack_user.py
index 8fcd445..e5d066b 100644
--- a/slack/slack_user.py
+++ b/slack/slack_user.py
@@ -16,8 +16,9 @@ class SlackUser:
return self.workspace.api
@property
- def nick(self):
- return self._info["name"]
+ def nick(self) -> str:
+ nick = self._nick_from_profile()
+ return nick.replace(" ", "")
async def init(self):
info = await self._api.fetch_users_info(self)
@@ -25,3 +26,10 @@ class SlackUser:
# TODO: Handle error
raise Exception("Failed fetching user info")
self._info = info["user"]
+
+ def _nick_from_profile(self) -> str:
+ if self.workspace.config.use_real_names.value:
+ return self._info["real_name"]
+
+ display_name = self._info["profile"].get("display_name")
+ return display_name or self._info["real_name"]
diff --git a/typings/slack_api/slack_users_info.pyi b/typings/slack_api/slack_users_info.pyi
index 433255e..59057e2 100644
--- a/typings/slack_api/slack_users_info.pyi
+++ b/typings/slack_api/slack_users_info.pyi
@@ -1,43 +1,47 @@
from __future__ import annotations
-from typing import Dict, Generic, List, Literal, TypedDict, TypeVar, final
+from typing import Dict, Generic, List, Literal, Optional, TypedDict, TypeVar, final
+
+from typing_extensions import NotRequired
T = TypeVar("T")
class SlackProfileCommon(TypedDict):
- title: str
- phone: str
- skype: str
- real_name: str
- real_name_normalized: str
- display_name: str
- display_name_normalized: str
- fields: Dict # pyright: ignore [reportMissingTypeArgument]
- status_text: str
- status_emoji: str
- status_emoji_display_info: List # pyright: ignore [reportMissingTypeArgument]
- status_expiration: int
- avatar_hash: str
+ title: NotRequired[Optional[str]]
+ phone: NotRequired[Optional[str]]
+ skype: NotRequired[Optional[str]]
+ real_name: NotRequired[Optional[str]]
+ real_name_normalized: NotRequired[Optional[str]]
+ display_name: NotRequired[Optional[str]]
+ display_name_normalized: NotRequired[Optional[str]]
+ # fields: NotRequired[Optional[Dict]] # pyright: ignore [reportMissingTypeArgument]
+ status_text: NotRequired[Optional[str]]
+ status_emoji: NotRequired[Optional[str]]
+ # status_emoji_display_info: NotRequired[
+ # Optional[List] # pyright: ignore [reportMissingTypeArgument]
+ # ]
+ status_expiration: NotRequired[Optional[int]]
+ avatar_hash: NotRequired[Optional[str]]
image_24: str
image_32: str
image_48: str
image_72: str
image_192: str
image_512: str
- status_text_canonical: str
+ status_text_canonical: NotRequired[Optional[str]]
team: str
@final
class SlackProfilePerson(SlackProfileCommon):
- email: str
+ email: NotRequired[Optional[str]]
@final
class SlackProfileBot(SlackProfileCommon):
- api_app_id: str
- always_active: bool
+ api_app_id: NotRequired[Optional[str]]
+ always_active: NotRequired[Optional[bool]]
image_original: str
- is_custom_image: bool
- bot_id: str
+ is_custom_image: NotRequired[Optional[bool]]
+ bot_id: NotRequired[Optional[str]]
image_1024: str
class SlackUsersInfoCommon(TypedDict):