Skip to content

Commit 58e51c7

Browse files
rhttimabbott
authored andcommitted
Slack bridge: Bump slack-sdk to 3.11.2.
We also upgrade the RTM client API from v1 to v2. This is so that we no longer require aiohttp. If we use v1, it would still require aiohttp.
1 parent fec8cc5 commit 58e51c7

File tree

2 files changed

+13
-12
lines changed

2 files changed

+13
-12
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
1-
slack-sdk==3.5.1
2-
aiohttp
1+
slack-sdk==3.11.2

zulip/integrations/bridge_with_slack/run-slack-bridge

+12-10
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ from typing import Any, Callable, Dict
99

1010
import bridge_with_slack_config
1111
import slack_sdk
12-
from slack_sdk.rtm import RTMClient
12+
from slack_sdk.rtm_v2 import RTMClient
1313

1414
import zulip
1515

@@ -48,7 +48,7 @@ class SlackBridge:
4848

4949
# slack-specific
5050
self.channel = self.slack_config["channel"]
51-
self.slack_client = RTMClient(token=self.slack_config["token"], auto_reconnect=True)
51+
self.slack_client = rtm
5252
# Spawn a non-websocket client for getting the users
5353
# list and for posting messages in Slack.
5454
self.slack_webclient = slack_sdk.WebClient(token=self.slack_config["token"])
@@ -84,23 +84,22 @@ class SlackBridge:
8484
def run_slack_listener(self) -> None:
8585
members = self.slack_webclient.users_list()["members"]
8686
# See also https://api.slack.com/changelog/2017-09-the-one-about-usernames
87-
self.slack_id_to_name = {
87+
self.slack_id_to_name: Dict[str, str] = {
8888
u["id"]: u["profile"].get("display_name", u["profile"]["real_name"]) for u in members
8989
}
9090
self.slack_name_to_id = {v: k for k, v in self.slack_id_to_name.items()}
9191

92-
@RTMClient.run_on(event="message")
93-
def slack_to_zulip(**payload: Any) -> None:
94-
msg = payload["data"]
95-
if msg["channel"] != self.channel:
92+
@rtm.on("message")
93+
def slack_to_zulip(client: RTMClient, event: Dict[str, Any]) -> None:
94+
if event["channel"] != self.channel:
9695
return
97-
user_id = msg["user"]
96+
user_id = event["user"]
9897
user = self.slack_id_to_name[user_id]
9998
from_bot = user == self.slack_config["username"]
10099
if from_bot:
101100
return
102-
self.replace_slack_id_with_name(msg)
103-
content = ZULIP_MESSAGE_TEMPLATE.format(username=user, message=msg["text"])
101+
self.replace_slack_id_with_name(event)
102+
content = ZULIP_MESSAGE_TEMPLATE.format(username=user, message=event["text"])
104103
msg_data = dict(
105104
type="stream", to=self.zulip_stream, subject=self.zulip_subject, content=content
106105
)
@@ -124,6 +123,9 @@ if __name__ == "__main__":
124123

125124
config = bridge_with_slack_config.config
126125

126+
# We have to define rtm outside of SlackBridge because the rtm variable is used as a method decorator.
127+
rtm = RTMClient(token=config["slack"]["token"])
128+
127129
backoff = zulip.RandomExponentialBackoff(timeout_success_equivalent=300)
128130
while backoff.keep_going():
129131
try:

0 commit comments

Comments
 (0)