1

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 onethis onethis one),rtm.startrtm.connect呈现为完成几乎相同的事情,除了rtm.start返回更多信息并因此产生更多流量。因此,他们推荐rtm.connect.

这是我的问题,当我在上面的示例中替换rtm.start为时rtm.connect,我的脚本在一秒钟后停止,没有任何消息或错误。这是怎么回事?

4

0 回答 0