TL;DR:尝试在 Python 中使用slack_sdk.rtm_v2
. rtm.start
有效但rtm.connect
无效,即使它们被呈现为除了返回的信息量外几乎相同。为什么?
我正在尝试在 Python 中制作一个 Slack 机器人,它可以在将消息识别为命令时收听频道并回答不同的事情。我必须说我对他们的在线文档有点困惑。它非常杂乱无章,分散在多个网站(slack.dev、api.slack.com、...)中。提供了使用预制方法的示例,但文档主要讨论这些方法发送和接收的 JSON 字符串,而不是如何使用这些方法本身。(如果 Slack 的人读到这里,我认为还有改进的余地。)
根据我收集到的信息,有旧的 slackclient API 和更新的 slack_sdk,后者本身包含 rtm 和 rtm_v2 API。(很烦人,因为你在论坛上寻找的答案有大约 2/3 的机会是你不使用的 API!)它在不同的地方说用 slack_sdk.rtm_v2 构建机器人是可行的,但仍然需要一个经典的Slack 应用程序而不是较新的应用程序。
我尝试了此页面上的第一个示例,它对我有用:
import os
from slack_sdk.rtm_v2 import RTMClient
rtm = RTMClient(token=os.environ["SLACK_BOT_TOKEN"])
@rtm.on("message")
def handle(client: RTMClient, event: dict):
if 'Hello' in event['text']:
channel_id = event['channel']
thread_ts = event['ts']
user = event['user'] # This is not username but user ID (the format is either U*** or W***)
client.web_client.chat_postMessage(
channel=channel_id,
text=f"Hi <@{user}>!",
thread_ts=thread_ts
)
rtm.start()
在其他页面上(例如this one、this one和this one),rtm.start
并rtm.connect
呈现为完成几乎相同的事情,除了rtm.start
返回更多信息并因此产生更多流量。因此,他们推荐rtm.connect
.
这是我的问题,当我在上面的示例中替换rtm.start
为时rtm.connect
,我的脚本在一秒钟后停止,没有任何消息或错误。这是怎么回事?