forked from YogurtTheHorse/RogueBot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main_alice.py
80 lines (59 loc) · 2.05 KB
/
main_alice.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# coding utf-8
# Импортирует поддержку UTF-8.
from __future__ import unicode_literals
# Импортируем модули для работы с JSON и логами.
import json
import logging
import usermanager
import config
# Импортируем подмодули Flask для запуска веб-сервиса.
from flask import Flask, request
app = Flask(__name__)
logging.basicConfig(level=logging.DEBUG)
# Хранилище данных о сессиях.
sessionStorage = {}
# Задаем параметры приложения Flask.
@app.route("/", methods=['POST'])
def main():
# Функция получает тело запроса и возвращает ответ.
logging.info('Request %r', request.json)
response = {
"version": request.json['version'],
"session": request.json['session'],
"response": {
"end_session": False
}
}
handle_dialog(request.json, response)
logging.info('Response %r', response)
return json.dumps(
response,
ensure_ascii=False,
indent=2
)
# Функция для непосредственной обработки диалога.
def handle_dialog(req, res):
user_id = 'alice' + req['session']['user_id']
global text, buttons_list
text = ''
buttons_list = [ ]
def reply(txt, buttons=None, photo=None):
global text, buttons_list
text = text + '\n\n' + txt
if buttons is None:
return
for btn in buttons:
if isinstance(btn, list):
buttons_list.extend(btn)
else:
buttons_list.append(btn)
if req['session']['new']:
if not usermanager.new_user(user_id, reply=reply):
text = 'Теперь скажи мне свое имя'
else:
usermanager.message(user_id, reply, req['request']['command'])
res['response']['text'] = text.strip()
res['response']['buttons'] = [
{'title': btn, 'hide': False}
for btn in buttons_list
]