如何找到slack事件的消息负载是线程还是通道?

2024-10-01 00:28:52 发布

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

我正在写一个懒虫,当有人在一个松弛的频道发帖时,它一个线程只回复一次。在第一条自动消息之后,slackbot不应该回复同一个线程。但它应该继续收听这个频道的新消息。你知道吗

@RTMClient.run_on(event="message")
def message_activity(**payload):

  print("\n Starting payload", payload)
  data = payload['data']

  if 'subtype' in data.keys() and (data['subtype'] == 'message_replied' or data['subtype'] == 'bot_message'):
     print("No action needed because this is a message in thread")
     time.sleep(1)

  else:
    web_client = payload['web_client']
    message = data['text']
    print("The message is ",message," Sending to handle command")
    handle_command(message, web_client, data)

我的代码是这样的。。这里我检查的子类型值是message\u responsed还是bot\u message。如果没有,它将继续发送有效负载进行处理。但是当我回复bot第一次发布的线程时,我看到了三个事件有效负载—一个是message_replied,第二个是bot_message,第三个没有子类型的事件意味着它被认为是发布在通道中的消息。你知道吗

Starting point... payload {'rtm_client': <slack.rtm.client.RTMClient object at 

0x7f4e59ace5f8>, 'web_client': <slack.web.client.WebClient object at 0x7f4e4a51dd68>, 'data': {'subtype': 'message_replied', 'hidden': True, 'message': {'client_msg_id': '6d195e60-2c09-4b3c-8638-d11dc9c48538', 'type': 'message', 'text': 'Hello', 'user': 'UPUAPRFN3', 'ts': '1576388387.042200', 'team': 'T0V19QY5R', 'blocks': [{'type': 'rich_text', 'block_id': '9kNG', 'elements': [{'type': 'rich_text_section', 'elements': [{'type': 'text', 'text': 'Hello'}]}]}], 'thread_ts': '1576388387.042200', 'reply_count': 4, 'reply_users_count': 2, 'latest_reply': '1576389139.042900', 'reply_users': ['BQM8EURDG', 'UPUAPRFN3'], 'replies': [{'user': 'BQM8EURDG', 'ts': '1576388388.042300'}, {'user': 'UPUAPRFN3', 'ts': '1576388394.042500'}, {'user': 'BQM8EURDG', 'ts': '1576388395.042700'}, {'user': 'UPUAPRFN3', 'ts': '1576389139.042900'}]}, 'channel': 'CR267CD8W', 'event_ts': '1576389139.043000', 'ts': '1576389139.043000'}}
No action needed because this is a message in thread

 Starting point... payload {'rtm_client': <slack.rtm.client.RTMClient object at 0x7f4e59ace5f8>, 'web_client': <slack.web.client.WebClient object at 0x7f4e4a51db70>, 'data': {'client_msg_id': '8a43a5e7-9db5-45e5-95e3-6bc68e173e53', 'suppress_notification': False, 'text': 'Hello', 'user': 'UPUAPRFN3', 'team': 'T0V19QY5R', 'blocks': [{'type': 'rich_text', 'block_id': 'SsF4P', 'elements': [{'type': 'rich_text_section', 'elements': [{'type': 'text', 'text': 'Hello'}]}]}], 'thread_ts': '1576388387.042200', 'user_team': 'T0V19QY5R', 'source_team': 'T0V19QY5R', 'channel': 'CR267CD8W', 'event_ts': '1576389139.042900', 'ts': '1576389139.042900'}}
The message is  Hello  Sending to handle command
handling command

我在一个线程中回复了这个消息,它被发送到处理函数来处理这个消息。 我的问题是,如何仅在新消息发布到频道时捕获事件?我尝试了另一种事件类型,它是message.channels,但是RTM不支持它


Tags: textclientweb消息messagehellodatatype