Spaces:
Runtime error
Runtime error
Handle unmappable Slack user identifiers
Browse files
src/ctp_slack_bot/services/slack_service.py
CHANGED
@@ -74,9 +74,10 @@ class SlackServiceResource(AsyncResource):
|
|
74 |
async def init(self: Self, event_brokerage_service: EventBrokerageService, slack_bolt_app: AsyncApp) -> SlackService:
|
75 |
match await slack_bolt_app.client.users_list():
|
76 |
case AsyncSlackResponse(status_code=200, data={"ok": True, "members": users}):
|
77 |
-
user_id_name_map = {
|
78 |
-
for
|
79 |
-
in users
|
|
|
80 |
logger.debug("Obtained a list of {} user name(s) for the workspace: {}", len(user_id_name_map), user_id_name_map)
|
81 |
case something:
|
82 |
user_id_name_map = {}
|
@@ -84,3 +85,17 @@ class SlackServiceResource(AsyncResource):
|
|
84 |
slack_service = SlackService(event_brokerage_service=event_brokerage_service, slack_bolt_app=slack_bolt_app, user_id_name_map=user_id_name_map)
|
85 |
slack_service.initialize()
|
86 |
return slack_service
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
async def init(self: Self, event_brokerage_service: EventBrokerageService, slack_bolt_app: AsyncApp) -> SlackService:
|
75 |
match await slack_bolt_app.client.users_list():
|
76 |
case AsyncSlackResponse(status_code=200, data={"ok": True, "members": users}):
|
77 |
+
user_id_name_map = {id: display_name
|
78 |
+
for id, display_name
|
79 |
+
in zip(map(SlackServiceResource._get_user_id, users), map(SlackServiceResource._get_user_display_name, users))
|
80 |
+
if display_name}
|
81 |
logger.debug("Obtained a list of {} user name(s) for the workspace: {}", len(user_id_name_map), user_id_name_map)
|
82 |
case something:
|
83 |
user_id_name_map = {}
|
|
|
85 |
slack_service = SlackService(event_brokerage_service=event_brokerage_service, slack_bolt_app=slack_bolt_app, user_id_name_map=user_id_name_map)
|
86 |
slack_service.initialize()
|
87 |
return slack_service
|
88 |
+
|
89 |
+
@classmethod
|
90 |
+
def _get_user_id(cls, user: Mapping[str, Any]):
|
91 |
+
return user["id"]
|
92 |
+
|
93 |
+
@classmethod
|
94 |
+
def _get_user_display_name(cls, user: Mapping[str, Any]):
|
95 |
+
match user:
|
96 |
+
case {"profile": {"display_name": display_name}}:
|
97 |
+
return display_name
|
98 |
+
case {"real_name": real_name}:
|
99 |
+
return real_name
|
100 |
+
case _:
|
101 |
+
None
|