aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTrygve Aaberge <trygveaa@gmail.com>2023-01-14 22:26:54 +0100
committerTrygve Aaberge <trygveaa@gmail.com>2024-02-18 11:32:53 +0100
commit17d928f8ce765229690afbc78a6a31cdf24da409 (patch)
treef31fae5f12f4bc82be86353e4e21b4e8d13b1694
parent1906b75a92fcdc441e891546cc9cc97a2e621495 (diff)
downloadwee-slack-17d928f8ce765229690afbc78a6a31cdf24da409.tar.gz
Call rtm.connect (doesn't connect to web socket yet)
-rw-r--r--mock_data/slack_rtm_connect.json13
-rwxr-xr-xscripts/update_mocks.sh2
-rw-r--r--slack/commands.py2
-rw-r--r--slack/slack_api.py4
-rw-r--r--slack/slack_conversation.py4
-rw-r--r--slack/slack_workspace.py10
-rw-r--r--typings/slack_api/slack_rtm_connect.pyi24
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