@@ -9,7 +9,7 @@ from typing import Any, Callable, Dict
99
1010import bridge_with_slack_config
1111import slack_sdk
12- from slack_sdk .rtm import RTMClient
12+ from slack_sdk .rtm_v2 import RTMClient
1313
1414import 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