переменные внутри BaseHTTPRequestHandler Python - PullRequest
0 голосов
/ 25 апреля 2018

Я создаю чат-бота с использованием Python и MS Bot Builder SDK для Python. Бот - это HTTPServer, использующий обработчик. То, что я хочу, это переменные, которые помогают мне отслеживать разговор, например счетчик сообщений. Но я не могу заставить его работать, каждый раз, когда бот получает запрос (я что-то отправляю), как будто создается другой обработчик, потому что количество сообщений всегда равно 1. Я не уверен, что вызывается на каждом запрос.

Вот (важный) код:

class BotRequestHandler(BaseHTTPRequestHandler):
    count = 0

    @staticmethod
    def __create_reply_activity(request_activity, text):
        # not important

    def __handle_conversation_update_activity(self, activity):
        # not important

    def __handle_message_activity(self, activity):
        self.count += 1 ############## INCREMENTATION ##############
        self.send_response(200)
        self.end_headers()
        credentials = MicrosoftAppCredentials(APP_ID, APP_PASSWORD)
        connector = ConnectorClient(credentials, base_url=activity.service_url)
        reply = BotRequestHandler.__create_reply_activity(activity, '(%d) You said: %s' % (self.count, activity.text))
        connector.conversations.send_to_conversation(reply.conversation.id, reply)

    def __handle_authentication(self, activity):
        # not important

    def __unhandled_activity(self):
        # not important

    def do_POST(self):
        body = self.rfile.read(int(self.headers['Content-Length']))
        data = json.loads(str(body, 'utf-8'))
        activity = Activity.deserialize(data)

        if not self.__handle_authentication(activity):
            return

        if activity.type == ActivityTypes.conversation_update.value:
            self.__handle_conversation_update_activity(activity)
        elif activity.type == ActivityTypes.message.value:
            self.__handle_message_activity(activity)
        else:
            self.__unhandled_activity()


class BotServer(HTTPServer):
    def __init__(self):
        super().__init__(('localhost', 9000), BotRequestHandler)

    def _run(self):
        try:
            print('Started http server')
            self.serve_forever()
        except KeyboardInterrupt:
            print('^C received, shutting down server')
            self.socket.close()

server = BotServer()
server._run()

Что я получу, если введу сообщение 'a' 4 раза is '(1) Вы сказали: a' 4 раза. Я попытался переопределить метод инициализации BaseHTTPRequestHandler, но он не сработал.

Для тех, кто знает: дело в Python SDK, у нас нет диалогов Waterfall, как в Node.js, или я не нашел, как это работает, если кто-то знает, просто скажите мне, потому что здесь мне нужно сохранить отслеживать много вещей от пользователя и мне нужны переменные. И я действительно хочу использовать Python, потому что мне нужны некоторые ML и другие модули в Python.

Спасибо за вашу помощь.

...