Как заставить бота Python Slack отвечать в теме? - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь заставить моего бота Python Slack автоматически отвечать в теме, если я отправляю ему команды в одной. Однако, независимо от того, где я отправляю свои команды - в ветке или иным образом, он все равно отвечает как общее сообщение.

Я хочу получить ответ в теме. Вот мой код (для краткости я усек большую часть кода инициализации и запуска):

import os, time, re, inspect, functools
from slackclient import SlackClient

class Bot(object):
    def __init__(self, token): 
        ...

    def startup(self):
        ...

    def parse_bot_commands(self, slack_events):
        """
            Parses a list of events coming from the Slack RTM API to find bot commands.
            If a bot command is found, this function returns a tuple of command and channel.
            If its not found, then this function returns None, None.
        """
        for event in slack_events:
            if event["type"] == "message" and not "subtype" in event:
                user_id, message = self.parse_direct_mention(event["text"])
                if user_id == self.starterbot_id:
                    return message, event["channel"]
        return None, None

    def parse_direct_mention(self, message_text):
        """
            Finds a direct mention (a mention that is at the beginning) in message text
            and returns the user ID which was mentioned. If there is no direct mention, returns None
        """
        matches = re.search(self.MENTION_REGEX, message_text)
        # the first group contains the username, the second group contains the remaining message
        return (matches.group(1), matches.group(2).strip()) if matches else (None, None)

    def handle_command(self, command, channel):
        """
            Executes bot command if the command is known
        """
        # Default response is help text for the user
        default_response = "Not sure what you mean. Try *{}*.".format(self.EXAMPLE_COMMAND)

        # Finds and executes the given command, filling in response
        response = None

        # NOTE: This is where you start to implement more commands!
        if command.lower().startswith("roll"):
            response = 'Rock and Roll!"

        # Sends the response back to the channel
        self.slack_client.api_call("chat.postMessage", channel=channel, text=response or default_response)

'''START THE BOT!'''
#Initialize the token (when installing the app)
bot = Bot('xxx-xxx')
bot.startup()

1 Ответ

0 голосов
/ 27 июня 2019

Команды слеша не работают должным образом в потоках. Это известная проблема, которая до сих пор не устранена.

См. Также этот ответ: Может ли бот Slack получить идентификатор потока, с которого была отправлена ​​команда слэша?

...