【问题标题】:Cannot read channel message from slack in Python using slack SocketModeHandler无法使用 slack SocketModeHandler 从 Python 中的 slack 读取通道消息
【发布时间】:2021-06-16 21:53:27
【问题描述】:

以下是用于读取和响应从松弛通道到 python 的消息的 python 代码。我使用他们的教程编写了这个脚本,并最终遇到了问题。我也无法使用 client.chat_postMessage(channel="XXXXXXXXXXX", text=msg, user="XXXXXXXXXXX") 向 slack 发送消息

我不知道为什么,但是当我在频道中写入命令“/hi”时,python 会读取事件并打印数据,但是如果我尝试使用任何关键字,例如 check 和 knock knock,python 不会对此做出响应,

import os
# Use the package we installed
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
from os.path import join, dirname

import time
import re
from datetime import datetime


dotenv_path = join(dirname(__file__), '.env')
load_dotenv(dotenv_path)

# Initializes your app with your bot token and signing secret
app = App(
    token=os.environ['SLACK_BOT_TOKEN'],
    signing_secret=os.environ['SIGNING_SECRET']
)


# Add functionality here
@app.message("check")
def say_hello(message, client, body, logger):
    print(message)
    print(client)
    print(body)
    msg = "Hi there from Python"
    try:
        client.chat_postMessage(channel="XXXXXXXXXXX", text=msg, user="XXXXXXXXXXX")
    except Exception as e:
        logger.exception(f"Failed to post a message {e}")
        print(e)


@app.message("knock knock")
def ask_who(message, say):
    say("_Who's there?_")

@app.event("message")
def handle_message_events(body, logger):
    logger.info(body)
    print("messaging", body)


@app.command("/hi")
def handle_some_command(ack, body, logger):
    ack()
    logger.info(body)
    print(body)


# Start your app
if __name__ == "__main__":
    SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()

这是来自 slackbolt 的应用程序清单

_metadata:
  major_version: 1
  minor_version: 1
display_information:
  name: Hotline App
features:
  app_home:
    home_tab_enabled: true
    messages_tab_enabled: true
    messages_tab_read_only_enabled: false
  bot_user:
    display_name: Hotline Bot
    always_online: false
  slash_commands:
    - command: /hi
      description: greets user
      should_escape: false
oauth_config:
  scopes:
    user:
      - chat:write
      - channels:read
      - im:history
      - channels:history
      - groups:history
    bot:
      - incoming-webhook
      - calls:read
      - calls:write
      - app_mentions:read
      - channels:history
      - channels:join
      - channels:manage
      - channels:read
      - chat:write
      - chat:write.customize
      - chat:write.public
      - commands
      - dnd:read
      - emoji:read
      - files:read
      - files:write
      - groups:history
      - groups:read
      - groups:write
      - im:history
      - im:read
      - im:write
      - links:read
      - links:write
      - mpim:history
      - mpim:read
      - mpim:write
      - pins:read
      - pins:write
      - reactions:read
      - reactions:write
      - reminders:read
      - reminders:write
      - remote_files:read
      - remote_files:share
      - remote_files:write
      - team:read
      - usergroups:write
      - usergroups:read
      - users.profile:read
      - users:read
      - users:read.email
      - users:write
      - workflow.steps:execute
settings:
  event_subscriptions:
    user_events:
      - channel_archive
      - channel_created
      - channel_deleted
      - channel_rename
      - message.channels
      - message.groups
      - message.im
    bot_events:
      - app_mention
      - channel_archive
      - channel_created
      - channel_deleted
      - channel_history_changed
      - channel_id_changed
      - channel_left
      - channel_rename
      - channel_shared
      - channel_unarchive
      - channel_unshared
      - dnd_updated_user
      - email_domain_changed
      - emoji_changed
      - file_change
      - file_created
      - file_deleted
      - file_public
      - file_shared
      - file_unshared
      - group_archive
      - group_deleted
      - group_history_changed
      - group_left
      - group_rename
      - group_unarchive
      - im_history_changed
      - link_shared
      - member_joined_channel
      - member_left_channel
      - message.channels
      - message.groups
      - message.im
      - message.mpim
      - pin_added
      - pin_removed
      - reaction_added
      - reaction_removed
      - subteam_created
      - subteam_members_changed
      - subteam_updated
      - team_domain_change
      - team_join
      - team_rename
      - user_change
  interactivity:
    is_enabled: true
  org_deploy_enabled: false
  socket_mode_enabled: true

专家对此问题的任何帮助可能会减轻我的头痛和工作量,提前致谢!

亲切的问候, 高尔

【问题讨论】:

    标签: python python-3.x slack slack-api slack-commands


    【解决方案1】:

    机器人必须是发送消息的频道的成员 - 请确保邀请机器人进入该频道,它应该开始接收这些消息事件。

    此外,这对于您的问题来说有些偶然,但作为安全预防措施,请仅请求您的机器人运行所需的范围。您冒着创建一个范围过于宽松的令牌的风险。您可能不需要此应用的用户范围。事件也是如此——考虑只订阅您的应用实际需要的事件。

    【讨论】:

    • 非常感谢,我不知道该机器人不是该频道的成员。是的,我知道我是新手,只是想检查它为什么会出现错误,因此启用了所有范围和事件,无论如何感谢您的帮助。非常感激。祝你今天愉快。
    猜你喜欢
    • 2022-01-12
    • 2018-07-14
    • 1970-01-01
    • 2021-11-08
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 2020-08-15
    相关资源
    最近更新 更多