LiKenun commited on
Commit
455b194
·
1 Parent(s): 7a90ab0

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 = {user["id"]: user["profile"]["display_name"] or user["real_name"]
78
- for user
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