diff options
author | Trygve Aaberge <trygveaa@gmail.com> | 2023-01-14 22:26:54 +0100 |
---|---|---|
committer | Trygve Aaberge <trygveaa@gmail.com> | 2024-02-18 11:32:53 +0100 |
commit | 17d928f8ce765229690afbc78a6a31cdf24da409 (patch) | |
tree | f31fae5f12f4bc82be86353e4e21b4e8d13b1694 | |
parent | 1906b75a92fcdc441e891546cc9cc97a2e621495 (diff) | |
download | wee-slack-17d928f8ce765229690afbc78a6a31cdf24da409.tar.gz |
Call rtm.connect (doesn't connect to web socket yet)
-rw-r--r-- | mock_data/slack_rtm_connect.json | 13 | ||||
-rwxr-xr-x | scripts/update_mocks.sh | 2 | ||||
-rw-r--r-- | slack/commands.py | 2 | ||||
-rw-r--r-- | slack/slack_api.py | 4 | ||||
-rw-r--r-- | slack/slack_conversation.py | 4 | ||||
-rw-r--r-- | slack/slack_workspace.py | 10 | ||||
-rw-r--r-- | typings/slack_api/slack_rtm_connect.pyi | 24 |
7 files changed, 55 insertions, 4 deletions
diff --git a/mock_data/slack_rtm_connect.json b/mock_data/slack_rtm_connect.json new file mode 100644 index 0000000..5350e6a --- /dev/null +++ b/mock_data/slack_rtm_connect.json @@ -0,0 +1,13 @@ +{ + "ok": true, + "url": "wss://wss-primary.slack.com/websocket/...", + "team": { + "id": "T0FC8BFQR", + "name": "wee-slack-test", + "domain": "wee-slack-test" + }, + "self": { + "id": "U7JNGMGEB", + "name": "trygveaa" + } +} diff --git a/scripts/update_mocks.sh b/scripts/update_mocks.sh index 7aea63b..05cc072 100755 --- a/scripts/update_mocks.sh +++ b/scripts/update_mocks.sh @@ -9,6 +9,8 @@ if [ ! -d mock_data ]; then exit 1 fi +curl_slack "$api_base/rtm.connect" | jq . > mock_data/slack_rtm_connect.json + curl_slack "$api_base/users.conversations?types=public_channel&exclude_archived=True" | jq . > mock_data/slack_users_conversations_public_channel.json curl_slack "$api_base/users.conversations?types=private_channel&exclude_archived=True" | jq . > mock_data/slack_users_conversations_private_channel.json curl_slack "$api_base/users.conversations?types=mpim&exclude_archived=True" | jq . > mock_data/slack_users_conversations_mpim.json diff --git a/slack/commands.py b/slack/commands.py index cc446d3..ffd833f 100644 --- a/slack/commands.py +++ b/slack/commands.py @@ -85,7 +85,7 @@ def display_workspace(workspace: SlackWorkspace, detailed_list: bool): f"{with_color('chat_delimiters', '[')}" f"connected" f"{with_color('chat_delimiters', ']')}" - f", nick: {workspace.nick}" + f", nick: {workspace.my_user.nick}" f", 0 channel(s), 0 pv", ) else: diff --git a/slack/slack_api.py b/slack/slack_api.py index ef15d81..70a3aaa 100644 --- a/slack/slack_api.py +++ b/slack/slack_api.py @@ -10,6 +10,7 @@ from slack.shared import shared if TYPE_CHECKING: from slack_api.slack_conversations_history import SlackConversationsHistoryResponse from slack_api.slack_conversations_info import SlackConversationsInfoResponse + from slack_api.slack_rtm_connect import SlackRtmConnectResponse from slack_api.slack_users_conversations import SlackUsersConversationsResponse from slack_api.slack_users_info import SlackUsersInfoResponse @@ -54,6 +55,9 @@ class SlackApi: return response return response + async def fetch_rtm_connect(self) -> SlackRtmConnectResponse: + return await self._fetch("rtm.connect") + async def fetch_conversations_history( self, conversation: SlackConversation ) -> SlackConversationsHistoryResponse: diff --git a/slack/slack_conversation.py b/slack/slack_conversation.py index 9ab254d..3f801e0 100644 --- a/slack/slack_conversation.py +++ b/slack/slack_conversation.py @@ -74,7 +74,9 @@ class SlackConversation: self.buffer_pointer = weechat.buffer_new( self.name, get_callback_name(buffer_input_cb), "", "", "" ) - weechat.buffer_set(self.buffer_pointer, "localvar_set_nick", "nick") + weechat.buffer_set( + self.buffer_pointer, "localvar_set_nick", self.workspace.my_user.nick + ) async def fill_history(self): if self.history_filled or self.history_pending: diff --git a/slack/slack_workspace.py b/slack/slack_workspace.py index c5296c0..c95821c 100644 --- a/slack/slack_workspace.py +++ b/slack/slack_workspace.py @@ -32,12 +32,18 @@ class SlackWorkspace: self.config = shared.config.create_workspace_config(self.name) self.api = SlackApi(self) self.is_connected = False - self.nick = "TODO" self.users = SlackUsers(self) self.conversations: Dict[str, SlackConversation] = {} async def connect(self): - # rtm_connect = await self.api.fetch("rtm.connect") + rtm_connect = await self.api.fetch_rtm_connect() + if rtm_connect["ok"] is False: + # TODO: Handle error + raise Exception("Failed fetching rtm.connect") + + self.id = rtm_connect["team"]["id"] + self.my_user = await self.users[rtm_connect["self"]["id"]] + # "types": "public_channel,private_channel,im", user_channels_response = await self.api.fetch_users_conversations( "public_channel" diff --git a/typings/slack_api/slack_rtm_connect.pyi b/typings/slack_api/slack_rtm_connect.pyi new file mode 100644 index 0000000..7fce94f --- /dev/null +++ b/typings/slack_api/slack_rtm_connect.pyi @@ -0,0 +1,24 @@ +from __future__ import annotations + +from typing import Literal, TypedDict + +class SlackRtmConnectTeam(TypedDict): + id: str + name: str + domain: str + +class SlackRtmConnectSelf(TypedDict): + id: str + name: str + +class SlackRtmConnectErrorResponse(TypedDict): + ok: Literal[False] + error: str + +class SlackRtmConnectSuccessResponse(TypedDict): + ok: Literal[True] + url: str + team: SlackRtmConnectTeam + self: SlackRtmConnectSelf + +SlackRtmConnectResponse = SlackRtmConnectSuccessResponse | SlackRtmConnectErrorResponse |