Slack API:rtm.start可以工作,但在Slack_sdk.rtm_v2中rtm.connect不能工作

2024-09-28 22:23:50 发布

您现在位置:Python中文网/ 问答频道 /正文

TL;DR:尝试使用slack_sdk.rtm_v2在Python中创建一个松弛的botrtm.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应用程序,而不是更新的应用程序

我在this page上尝试了第一个示例,它对我很有用:

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 onethis one、和this one),rtm.startrtm.connect完成了几乎相同的事情,只是rtm.start返回更多信息,因此产生更多流量。因此,他们建议rtm.connect

这是我的问题,在上面的例子中,当我用rtm.connect替换rtm.start时,我的脚本在一秒钟后停止,没有任何消息或错误。发生什么事了


Tags: 方法clienteventapiconnectchannelsdkthis