diff options
author | Trygve Aaberge <trygveaa@gmail.com> | 2023-01-19 23:05:25 +0100 |
---|---|---|
committer | Trygve Aaberge <trygveaa@gmail.com> | 2024-02-18 11:32:53 +0100 |
commit | d2bb9263f0062275b92024ccdba68d5439521b5d (patch) | |
tree | dd9b46727d5a3fc8e1b1c232419504772305e928 /slack/slack_api.py | |
parent | d6b4f505d53e69ecb39d518a89d8d0013e22ad51 (diff) | |
download | wee-slack-d2bb9263f0062275b92024ccdba68d5439521b5d.tar.gz |
Add support for completing nicks
This uses Slacks edgeapi which only works for session tokens, but has
the benefit of being able to complete nicks without all users being
loaded. So need to add some completion for the loaded users for when
using OAuth tokens as well.
Diffstat (limited to 'slack/slack_api.py')
-rw-r--r-- | slack/slack_api.py | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/slack/slack_api.py b/slack/slack_api.py index f68abd1..44e1477 100644 --- a/slack/slack_api.py +++ b/slack/slack_api.py @@ -15,6 +15,7 @@ if TYPE_CHECKING: from slack_api.slack_rtm_connect import SlackRtmConnectResponse from slack_api.slack_users_conversations import SlackUsersConversationsResponse from slack_api.slack_users_info import SlackUserInfoResponse, SlackUsersInfoResponse + from slack_edgeapi.slack_users_search import SlackUsersSearchResponse from slack.slack_conversation import SlackConversation from slack.slack_workspace import SlackWorkspace @@ -60,6 +61,21 @@ class SlackApi: return response return response + async def _fetch_edgeapi(self, method: str, params: Params = {}): + enterprise_id_part = ( + f"{self.workspace.enterprise_id}/" if self.workspace.enterprise_id else "" + ) + url = f"https://edgeapi.slack.com/cache/{enterprise_id_part}{self.workspace.id}/{method}" + options = self._get_request_options() + options["postfields"] = json.dumps(params) + options["httpheader"] += "\nContent-Type: application/json" + response = await http_request( + url, + options, + self.workspace.config.network_timeout.value * 1000, + ) + return json.loads(response) + async def fetch_rtm_connect(self): method = "rtm.connect" response: SlackRtmConnectResponse = await self._fetch(method) @@ -137,3 +153,18 @@ class SlackApi: if response["ok"] is False: raise SlackApiError(self.workspace, method, response, params) return response + + async def fetch_users_search(self, query: str): + method = "users/search" + params = { + "include_profile_only_users": True, + "query": query, + "count": 25, + "fuzz": 1, + "uax29_tokenizer": False, + "filter": "NOT deactivated", + } + response: SlackUsersSearchResponse = await self._fetch_edgeapi(method, params) + if response["ok"] is False: + raise SlackApiError(self.workspace, method, response, params) + return response |