Files
audio_resive/test.py
T

199 lines
7.2 KiB
Python

from flask import Flask, request, jsonify
import logging
import random
app = Flask(__name__)
logging.basicConfig(level=logging.INFO)
cities = {
'москва': [['1540737/daa6e420d33102bf6947', '213044/7df73ae4cc715175059e'], "Россия"],
'нью-йорк': [['1652229/728d5c86707054d4745f', '1030494/aca7ed7acefde2606bdc']],
'париж': [["1652229/f77136c2364eb90a3ea8", '123494/aca7ed7acefd12e606bdc']]
}
sessionStorage = {}
@app.route('/post', methods=['POST'])
def main():
logging.info('Request: %r', request.json)
response = {
'session': request.json['session'],
'version': request.json['version'],
'response': {
'end_session': False
}
}
handle_dialog(response, request.json)
logging.info('Response: %r', response)
return jsonify(response)
def handle_dialog(res, req):
user_id = req['session']['user_id']
if req['session']['new']:
res['response']['text'] = 'Привет! Назови своё имя!'
sessionStorage[user_id] = {
'first_name': None,
'game_started': False
}
return
if sessionStorage[user_id]['first_name'] is None:
first_name = get_first_name(req)
if first_name is None:
res['response']['text'] = 'Не расслышала имя. Повтори, пожалуйста!'
else:
sessionStorage[user_id]['first_name'] = first_name
sessionStorage[user_id]['guessed_cities'] = []
res['response']['text'] = f'Приятно познакомиться, {first_name.title()}. Я Алиса. Отгадаешь город по фото?'
res['response']['buttons'] = [
{
'title': 'Да',
'hide': True
},
{
'title': 'Нет',
'hide': True
}
]
else:
if not sessionStorage[user_id]['game_started']:
if 'да' in req['request']['nlu']['tokens']:
if len(sessionStorage[user_id]['guessed_cities']) == 3:
res['response']['text'] = 'Ты отгадал все города!'
res['end_session'] = True
else:
sessionStorage[user_id]['game_started'] = True
sessionStorage[user_id]['attempt'] = 1
play_game(res, req)
elif 'нет' in req['request']['nlu']['tokens']:
res['response']['text'] = 'Ну и ладно!'
res['end_session'] = True
else:
res['response']['text'] = 'Не поняла ответа! Так да или нет?'
res['response']['buttons'] = [
{
'title': 'Да',
'hide': True
},
{
'title': 'Нет',
'hide': True
}
]
else:
play_game(res, req)
def play_game(res, req):
user_id = req['session']['user_id']
city = random.choice(list(cities.keys()))
while city in sessionStorage[user_id]['guessed_cities']:
city = random.choice(list(cities.keys()))
sessionStorage[user_id]['city'] = city
sessionStorage[user_id]['country'] = cities[city][1]
sessionStorage[user_id]['guessed_cities'].append(city)
images = cities[city][0]
res['response']['card'] = {}
res['response']['card']['type'] = 'BigImage'
res['response']['card']['title'] = 'Что это за город?'
res['response']['card']['image_id'] = random.choice(images)
res['response']['text'] = 'Тогда сыграем! Как называется этот город?'
def check_city(res, req):
user_id = req['session']['user_id']
if req['request']['original_utterance'].lower() == sessionStorage[user_id]['city']:
if len(sessionStorage[user_id]['guessed_cities']) == 3:
res['response']['text'] = f'Правильно! Ты отгадал все города!'
res['end_session'] = True
else:
res['response']['text'] = f'Правильно! Следующий город - {play_game(res, req)}'
sessionStorage[user_id]['game_started'] = False
del sessionStorage[user_id]['attempt']
# Добавляем вопрос о стране
res['response']['buttons'] = [
{
'title': 'Да',
'hide': True,
},
{
'title': 'Нет',
'hide': True,
}
]
else:
if sessionStorage[user_id]['attempt'] == 3:
res['response'][
'text'] = f'Вы проиграли! Правильный ответ - {sessionStorage[user_id]["city"]}. Сыграем еще?'
del sessionStorage[user_id]['attempt']
sessionStorage[user_id]['game_started'] = False
res['response']['buttons'] = [
{
'title': 'Да',
'hide': True,
},
{
'title': 'Нет',
'hide': True,
}
]
else:
sessionStorage[user_id]['attempt'] += 1
res['response']['text'] = f'Неправильно. Попробуй еще раз!'
def check_country(res, req):
user_id = req['session']['user_id']
if req['request']['original_utterance'].lower() == sessionStorage[user_id]['country']:
res['response']['text'] = f'Правильно! Следующий город - {play_game(res, req)}'
del sessionStorage[user_id]['attempt']
res['response']['buttons'] = [
{
'title': 'Да',
'hide': True,
},
{
'title': 'Нет',
'hide': True,
}
]
else:
if sessionStorage[user_id]['attempt'] == 3:
res['response'][
'text'] = f'Вы проиграли! Правильный ответ - {sessionStorage[user_id]["country"]}. Сыграем еще?'
del sessionStorage[user_id]['attempt']
sessionStorage[user_id]['game_started'] = False
res['response']['buttons'] = [
{
'title': 'Да',
'hide': True,
},
{
'title': 'Нет',
'hide': True,
}
]
else:
sessionStorage[user_id]['attempt'] += 1
res['response']['text'] = f'Неправильно. Попробуй еще раз!'
def get_city(req):
for entity in req['request']['nlu']['entities']:
if entity['type'] == 'YANDEX.GEO':
return entity['value'].get('city', None)
def get_first_name(req):
for entity in req['request']['nlu']['entities']:
if entity['type'] == 'YANDEX.FIO':
return entity['value'].get('first_name', None)
if __name__ == '__main__':
app.run(port=52520)