【问题标题】:SlackClient Python RTM not capturing messagesSlackClient Python RTM 未捕获消息
【发布时间】:2021-02-25 19:16:33
【问题描述】:

我想编写一个简单的 slack 机器人,它将给定的字符串响应@提及,但是我无法使官方文档代码正常工作。

我已将所有 OAuth 权限授予机器人并拥有以下代码:

from slack import RTMClient

@RTMClient.run_on(event="message")
def gravity_bot(**payload):
    data = payload['data']
    print(data.get('text'))

try:
    rtm_client = RTMClient(
        token="my_token_auth_code",
        connect_method='rtm.start'
    )
    print("Bot is up and running!")
    rtm_client.start()
except Exception as err:
    print(err)

我认为连接已建立,因为出现“Bot is up and running”消息,但是在 bot 的松弛通道上似乎离线,我也无法在终端中得到任何响应,而不是直接消息,即使在邀请机器人到给定频道后也不适用于频道消息。

【问题讨论】:

    标签: python python-3.x bots slack


    【解决方案1】:

    抱歉不能放过这个。我想通了,步骤如下:

    1. 在 Slack 中创建一个“经典”应用程序(这是获得适当范围的唯一方法),只需单击此链接:https://api.slack.com/apps?new_classic_app=1
    2. 从“添加特性和功能”选项卡中单击“机器人”:

    1. 点击“添加旧版机器人用户”按钮(这将添加您需要的“rtm.stream”范围,但您无法手动添加)

    1. 在基本信息页面中,在工作区中安装您的应用
    2. 从 OAuth & Permissions 页面,复制“Bot User OAuth Access Token”(底部)
    3. 运行以下代码(文档中代码稍作修改的版本)
    from slack_sdk.rtm import RTMClient
    
    # This event runs when the connection is established and shows some connection info
    @RTMClient.run_on(event="open")
    def show_start(**payload):
        print(payload)
    
    @RTMClient.run_on(event="message")
    def say_hello(**payload):
        print(payload)
        data = payload['data']
        web_client = payload['web_client']
        if 'Hello' in data['text']:
            channel_id = data['channel']
            thread_ts = data['ts']
            user = data['user']
    
            web_client.chat_postMessage(
                channel=channel_id,
                text=f"Hi <@{user}>!",
                thread_ts=thread_ts
            )
    
    if __name__ == "__main__":
        slack_token = "<YOUR TOKEN HERE>"
        rtm_client = RTMClient(token=slack_token)
        rtm_client.start()
    

    上一个答案:

    嗯,这很棘手...根据文档,这仅适用于“经典” Slack 应用程序,因此这可能是第一个指针。它明确表示您不应该升级您的应用程序。此外,您需要通过选择“bot”范围来设置正确的权限(天知道是哪些权限)。

    老实说,我无法运行此程序。看起来 Slack 正在摆脱这种连接方法,因此您可能会更幸运地查看“事件 API”。我知道这不是理想的解决方案,因为它不是实时的,但它看起来有更好的文档记录,并且会保留一段时间。另一种方法可能是轮询。它并不性感,但它确实有效......

    我的猜测是您的问题是没有有效的连接,但是 Slack 库中没有适当的错误处理。该消息是在您实际连接之前打印的,因此不表示任何内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      • 2021-05-24
      • 2015-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多