BaseHTTPRequestHandler Python中的变量

时间:2018-04-25 08:13:40

标签: python chatbot httpserver basehttprequesthandler

我正在使用Python和Python的MS Bot Builder SDK创建一个聊天机器人。 bot是使用处理程序的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次消息,我得到的是'(1)你说:a'4次。 我尝试过度使用BaseHTTPRequestHandler的init方法,但它没有用。

对于那些知道:事情是使用Python SDK,我们没有像Node.js那样的瀑布对话框,或者我没有找到它是如何工作的,如果有人知道告诉我,因为我需要保留跟踪用户的很多东西,我需要变量。我真的想使用Python,因为我需要Python中的一些ML和其他模块。

感谢您的帮助。

0 个答案:

没有答案