def handle_dialog(res, req): user_id = req['session']['user_id'] if req['session']['new']: res['response'][ 'text'] = 'Привет! Я могу сказать в какой стране город или сказать расстояние между городами!' return cities = get_cities(req) if len(cities) == 0: res['response']['text'] = 'Ты не написал название не одного города!' elif len(cities) == 1: res['response']['text'] = 'Этот город в стране - ' + get_country( cities[0]) elif len(cities) == 2: distance = get_distance(get_coordinates(cities[0]), get_coordinates(cities[1])) res['response']['text'] = 'расстояние между этими городами: ' + str( round(distance)) + ' км.' else: res['response']['text'] = 'Слишком много городов!'
def handle_dialog(res, req): user_id = req['session']['user_id'] if req['session']['new']: res['response']['text'] = 'Привет! Назови своё имя!' sessionStorage[user_id] = { 'first_name': None, } 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()}. Я Алиса. Я могу показать город или сказать расстояние между городами!' else: cities = get_cities(req) if not cities: res['response']['text'] = sessionStorage[user_id][ 'first_name'] + ', ты не написал название не одного города!' elif len(cities) == 1: res['response']['text'] = 'Этот город в стране - ' + \ get_country(cities[0]) elif len(cities) == 2: distance = get_distance(get_coordinates(cities[0]), get_coordinates(cities[1])) res['response']['text'] = 'Расстояние между этими городами: ' + \ str(round(distance)) + ' км.' else: res['response']['text'] = sessionStorage[user_id][ 'first_name'] + ', cлишком много городов!'
def handle_dialog(res, req): user_id = req['session']['user_id'] if req['session']['new']: res['response'][ 'text'] = 'Привет! РЇ РјРѕРіСѓ сказать РІ какой стране РіРѕСЂРѕРґ или сказать расстояние между городами!' return cities = get_cities(req) if len(cities) == 0: res['response'][ 'text'] = 'РўС‹ РЅРµ написал название РЅРµ РѕРґРЅРѕРіРѕ РіРѕСЂРѕРґР°!' elif len(cities) == 1: res['response'][ 'text'] = 'Ртот РіРѕСЂРѕРґ РІ стране - ' + get_country( cities[0]) elif len(cities) == 2: distance = get_distance(get_coordinates(cities[0]), get_coordinates(cities[1])) res['response'][ 'text'] = 'Расстояние между этими городами: ' + str( round(distance)) + ' РєРј.' else: res['response']['text'] = 'Слишком РјРЅРѕРіРѕ РіРѕСЂРѕРґРѕРІ!'
def handle_dialog(res, req): user_id = req['session']['user_id'] if req['session']['new']: res['response']['text'] = \ 'Привет! Я могу показать город или сказать расстояние между городами! ' \ 'Но сначала скажи своё имя!' sessionStorage[user_id] = {'first_name': None} return if sessionStorage[user_id]['first_name'] is None: first_name = get_first_name(req) if first_name is None: res['response']['text'] = 'Не расслышала имя. Повтори, пожалуйста!' return else: sessionStorage[user_id]['first_name'] = first_name res['response'][ 'text'] = f'Хорошо, {first_name.title()}. Напиши название города или 2-ух!' return cities = get_cities(req) if not cities: res['response']['text'] = f'{sessionStorage[user_id]["first_name"].title()}, ' \ f'ты не написал название не одного города!' elif len(cities) == 1: res['response']['text'] = f'{sessionStorage[user_id]["first_name"].title()}, этот город в стране - ' + \ get_country(cities[0]) elif len(cities) == 2: distance = get_distance(get_coordinates(cities[0]), get_coordinates(cities[1])) res['response']['text'] = f'{sessionStorage[user_id]["first_name"].title()}, расстояние между этими городами: ' + \ str(round(distance)) + ' км.' else: res['response'][ 'text'] = f'{sessionStorage[user_id]["first_name"].title()}, слишком много городов!'
def handle_dialog(res, req): user_id = req['session']['user_id'] if req['session']['new']: res['response']['text'] = 'Привет! Назови свое имя!' # создадим словарь в который в будущем положим имя пользователя sessionStorage[user_id] = {'first_name': None} 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 res['response'][ 'text'] = 'Приятно познакомиться, ' + first_name.title() \ + '. Я - Алиса. Я могу сказать в какой стране город или сказать расстояние между городами!' else: cities = get_cities(req) if len(cities) == 0: res['response']['text'] = sessionStorage[user_id][ 'first_name'] + 'Ты не написал название не одного города!' elif len(cities) == 1: res['response']['text'] = sessionStorage[user_id][ 'first_name'] + 'Этот город в стране - ' + get_geo_info( cities[0], 'country') elif len(cities) == 2: distance = get_distance(get_geo_info(cities[0], "coordinates"), get_geo_info(cities[1], "coordinates")) res['response']['text'] = sessionStorage[user_id][ 'first_name'] + 'Расстояние между этими городами: ' + str( round(distance)) + ' км.' else: res['response']['text'] = sessionStorage[user_id][ 'first_name'] + 'Слишком много городов!'
def handle_dialog(res, req): user_id = req['session']['user_id'] res['response']['buttons'] = [{ 'title': 'Помощь', 'hide': False, }] if req['request']['original_utterance'].lower() == "помощь": res['response']['text'] = "Я - бот, в зависимости от того, сколько названий городов вы мне скажете, " \ "показывающий город или говорящий расстояние между ними." return if req['session']['new']: res['response']['text'] = 'Привет! Назови своё имя!' sessionStorage[user_id] = { 'first_name': None, } return user_name = sessionStorage[user_id]['first_name'] if user_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 res['response']['text'] = f'Приятно познакомиться, {first_name.title()}. Я Алиса. Я могу показать город ' \ f'или сказать расстояние между городами!' else: cities = get_cities(req) if not cities: res['response'][ 'text'] = f'{user_name.title()}, ты не написал название не одного города!' elif len(cities) == 1: res['response']['text'] = f'{user_name.title()}, этот город в стране - ' + \ get_country(cities[0]) elif len(cities) == 2: distance = get_distance(get_coordinates(cities[0]), get_coordinates(cities[1])) res['response']['text'] = f'{user_name.title()}, расстояние между этими городами: ' + \ str(round(distance)) + ' км.' else: res['response'][ 'text'] = f'Слишком много городов, {user_name.title()}!'
def handle_dialog(res, req): user_id = req['session']['user_id'] if req['session']['new']: res['response']['text'] = \ 'Привет! Я могу показать город или сказать расстояние между городами!' return cities = get_cities(req) if not cities: res['response']['text'] = 'Ты не написал название не одного города!' elif len(cities) == 1: res['response']['text'] = 'Этот город в стране - ' + \ get_geo_info(cities[0], 'country') elif len(cities) == 2: distance = get_distance(get_geo_info( cities[0], 'coordinates'), get_geo_info(cities[1], 'coordinates')) res['response']['text'] = 'Расстояние между этими городами: ' + \ str(round(distance)) + ' км.' else: res['response']['text'] = 'Слишком много городов!'
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 # здесь информация о том, что пользователь начал игру. По умолчанию 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()}. Я могу сказать в какой стране город или сказать расстояние между городами!' else: name = sessionStorage[user_id]['first_name'].title() cities = get_cities(req) if len(cities) == 0: res['response']['text'] = f'{name}, вы не написали название ни одного города!' elif len(cities) == 1: res['response']['text'] = f'{name}, этот город в стране ' + get_geo_info(cities[0], 'country') elif len(cities) == 2: distance = get_distance(get_geo_info(cities[0], 'coordinates'), get_geo_info(cities[1], 'coordinates')) res['response']['text'] = f'{name}, расстояние между этими городами: ' + str(round(distance)) + ' км.' else: res['response']['text'] = f'{name}, cлишком много городов!'
def handle_dialog(res, req): user_id = req['session']['user_id'] # если пользователь новый if req['session']['new']: res['response']['text'] = 'Привет! Назови свое имя!' sessionStorage[user_id] = { 'first_name': None } 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 res['response'][ 'text'] = 'Приятно познакомиться, ' + first_name.title() + '. Я - Алиса. Я могу показать город или сказать расстояние между городами!' res['response']['buttons'] = [ { 'title': city.title(), 'hide': True } for city in cities_ ] # если пользователь уже что-то написал else: # ищем города в сообщении от пользователя cities = get_cities(req) if not cities: res['response']['text'] = 'Ты не написал название ни одного города!' elif len(cities) == 1: if cities[0] in cities_: if 'подробнее' in req['request']['original_utterance'].lower() or 'хочу больше информации' in req['request']['original_utterance'].lower(): res['response']['text'] = 'https://ru.wikipedia.org/wiki/' + cities[0] else: res['response']['card'] = {} res['response']['card']['type'] = 'BigImage' res['response']['card']['title'] = 'Этот город я знаю. Он в стране ' + get_country(cities[0]) + '.' res['response']['card']['image_id'] = random.choice(cities_[cities[0]]) res['response']['text'] = 'Этот город я знаю.' else: res['response']['text'] = 'Этот город я знаю. Он в стране ' + get_country(cities[0]) + '.' elif len(cities) == 2: distance = get_distance(get_coordinates( cities[0]), get_coordinates(cities[1])) res['response']['text'] = 'Расстояние между этими городами: ' + str(round(distance)) + ' км.' else: res['response']['text'] = 'Слишком много городов!' res['response']['buttons'] = [ { 'title': city.title(), 'hide': True } for city in cities_ ]
def handle_dialog(res, req): try: user_id = req['session']['user_id'] # Обработка команды "Помощь" в зависимости от того, на какой стадии пользователь if 'помощь' in req['request']['nlu']['tokens']: if sessionStorage[user_id]['first_name'] is None: res['response']['text'] = 'Представьтесь, пожалуйста.' elif sessionStorage['city'] is None: first_name = sessionStorage[user_id]['first_name'] res['response']['text'] = f'{first_name.title()}, введите город, ' \ f'в котором хотите искать организацию.' elif sessionStorage['work'] == 0: first_name = sessionStorage[user_id]['first_name'] res['response']['text'] = '{}, используйте "Поиск [Адрес/Название организации]",' \ ' чтобы найти здание или компанию, ближайшую к центру' \ ' города {} или к дому, если он указан("Дом [Адрес]",' \ ' чтобы установить точку на дом для поиска расстояния' \ '.)'.format(first_name, sessionStorage['city']) res['response']['buttons'] = [ { 'title': 'Покажи адрес дома', 'hide': True }, { 'title': 'Удали дом', 'hide': True } ] elif sessionStorage['work'] == 1: first_name = sessionStorage[user_id]['first_name'] res['response'][ 'text'] = f'{first_name.title()}, используйте кнопки для ' \ f'получения информации об организации.' res['response']['buttons'] = [ { 'title': 'Адрес', 'hide': True }, { 'title': 'Телефон', 'hide': True }, { 'title': 'Время', 'hide': True }, { 'title': 'Индекс', 'hide': True }, { 'title': 'Расстояние от дома', 'hide': True }, { 'title': 'Покажи на карте', 'hide': True }, { 'title': 'Обратно', 'hide': True }, { 'title': 'Помощь', 'hide': False } ] return # Показываем пользователю данные, если включен режим работы if sessionStorage['work'] == 1: try: name = sessionStorage['organization']['properties']['CompanyMetaData']['name'] except: name = '"Компания"' if 'время' in req['request']['nlu']['tokens']: try: peremennaya = \ sessionStorage[user_id]['organization']["properties"]["CompanyMetaData"]["Hours"]["text"] res['response']['text'] = 'Компания {} работает {}'.format(name, peremennaya) except: res['response']['text'] = 'Я не смогла получить часы работы компании {}'.format(name) elif 'телефон' in req['request']['nlu']['tokens']: try: peremennaya = \ sessionStorage['organization']['properties']['CompanyMetaData']['Phones'][0]['formatted'] res['response']['text'] = 'Телефон компании {} - {}'.format(name, peremennaya) except: res['response']['text'] = 'Я не смогла получить телефон компании {}'.format(name) elif 'адрес' in req['request']['nlu']['tokens']: try: peremennaya = sessionStorage['organization']['properties']['CompanyMetaData']['address'] res['response']['text'] = '{} находится по адресу {}'.format(name, peremennaya) except: res['response']['text'] = 'Я не смогла получить адрес компании {}'.format(name) elif 'индекс' in req['request']['nlu']['tokens']: try: peremennaya = sessionStorage['organization']['properties']['CompanyMetaData']['postalCode'] res['response']['text'] = 'Индекс компании {} - {}'.format(name, peremennaya) except: res['response']['text'] = 'Я не смогла получить индекс компании {}'.format(name) elif 'покажи на карте' == req['request']['original_utterance'].lower(): res['response']['text'] = 'Лови ссылку! https://yandex.ru/maps/?mode=search&text={}'.format( '+'.join(sessionStorage['organization']['properties']['CompanyMetaData']['address'].split())) elif 'обратно' in req['request']['nlu']['tokens']: sessionStorage['work'] = 0 res['response']['text'] = 'Введи "Поиск [Адрес/Название организации]", чтобы на' \ 'йти здание или компанию, ближайшую к центру города {}' \ ' или к дому, если он указан("Дом [Адрес]", чтобы' \ ' установить точку на дом для поиска ' \ 'расстояния.)'.format(sessionStorage['city']) res['response']['buttons'] = [ { 'title': 'Помощь', 'hide': False }, { 'title': 'Покажи адрес дома', 'hide': True }, { 'title': 'Удали дом', 'hide': True }, { 'title': 'Обратно', 'hide': True } ] sessionStorage['company'] = '' sessionStorage['organization'] = None return elif 'расстояние' in req['request']['nlu']['tokens']: if sessionStorage['address']: dist = get_distance([float(x) for x in sessionStorage['ll'].split(',')], [float(x) for x in sessionStorage['coord'].split(',')]) res['response']['text'] = 'От твоего дома до организации примерно {} метра'.format(dist) else: res['response'][ 'text'] = 'Для подсчёта расстояния мне нужен адрес дома! ' \ 'Нажми кнопку "Обратно", потом укажи адрес дома в' \ ' формате "Дом [Адрес]" и возвращайся.' else: res['response'][ 'text'] = 'Не поняла тебя. Я могу показать только то, что написано на' \ ' кнопках, используй их!' res['response']['buttons'] = [ { 'title': 'Адрес', 'hide': True }, { 'title': 'Телефон', 'hide': True }, { 'title': 'Время', 'hide': True }, { 'title': 'Индекс', 'hide': True }, { 'title': 'Расстояние от дома', 'hide': True }, { 'title': 'Покажи на карте', "url": 'https://yandex.ru/maps/?mode=search&text={}'.format( '+'.join(sessionStorage['organization']['properties']['CompanyMetaData']['address'].split())), 'hide': True }, { 'title': 'Обратно', 'hide': True } ] return else: # Знакомимся, если пользователь только начал общение if req['session']['new']: res['response']['text'] = 'Привет! Давай познакомимся! Как тебя зовут?' res['response']['buttons'] = [ { 'title': 'Помощь', 'hide': False } ] sessionStorage[user_id] = { 'first_name': None, 'game_started': False } return # Определяем город, если уже познакомились if sessionStorage[user_id]['first_name'] is None and sessionStorage['city'] is None: first_name = get_first_name(req) if first_name is None: res['response']['text'] = 'Не расслышала имя. Повтори, пожалуйста!' res['response']['buttons'] = [ { 'title': 'Помощь', 'hide': False } ] else: sessionStorage[user_id]['first_name'] = first_name res['response'][ 'text'] = f'{first_name.title()}, напиши мне любой город России и ' \ f'сможешь узнать о нём информацию.' res['response']['buttons'] = [ { 'title': 'Помощь', 'hide': False } ] # Определяем город, если пользователь представился или решил его поменять else: first_name = sessionStorage[user_id]['first_name'] if sessionStorage['city'] is None: city = get_cities(req) if len(city) == 0: res['response'][ 'text'] = f'Я не поняла названия ни одного города, ' \ f'{first_name.title()}! Попробуй ещё раз.' res['response']['buttons'] = [ { 'title': 'Помощь', 'hide': False } ] sessionStorage['city'] = None elif len(city) == 1: country = get_geo_info(city[0], 'country') if country != 'Россия': res['response'][ 'text'] = f'Извини, {first_name.title()}, но этот город' \ f' находится не в России! Введи другой.' res['response']['buttons'] = [ { 'title': 'Помощь', 'hide': False } ] sessionStorage['city'] = None else: res['response']['text'] = 'Введи "Поиск [Адрес/Название организации]' \ '", чтобы найти здание или компанию, ' \ 'ближайшую к центру города или к дому, ' \ 'если он указан("Дом [Адрес]", чтобы ' \ 'установить точку на дом для поиска' \ ' расстояния.)' geocoder_request = "http://geocode-maps.yandex.ru/1.x/" \ "?geocode={}&format=json".format(city) response = requests.get(geocoder_request) json_response = response.json() toponym = json_response["response"]["GeoObjectCollection"]["featureMember"][0]["GeoObject"] toponym_coodrinates = toponym["Point"]["pos"] sessionStorage['ll'] = ','.join(toponym_coodrinates.split()) sessionStorage['archive'] = ','.join(toponym_coodrinates.split()) sessionStorage['city'] = city[0] sessionStorage['address'] = '' res['response']['buttons'] = [ { 'title': 'Помощь', 'hide': False }, { 'title': 'Покажи адрес дома', 'hide': True }, { 'title': 'Удали дом', 'hide': True }, { 'title': 'Обратно', 'hide': True } ] else: sessionStorage['city'] = None res['response']['text'] = f'Слишком много городов, ' \ f'{first_name.title()}! Выбери только 1!' res['response']['buttons'] = [ { 'title': 'Помощь', 'hide': False } ] else: # Удаляем данные о городе, если пользователь дал команду if 'обратно' in req['request']['nlu']['tokens']: sessionStorage['city'] = None sessionStorage['address'] = None res['response'][ 'text'] = f'{first_name.title()}, напиши мне любой город ' \ f'России и сможешь узнать о нём информацию.' res['response']['buttons'] = [ { 'title': 'Помощь', 'hide': False } ] # Устанавливаем точку на дом, увидев ключевое слово elif 'дом' in req['request']['nlu']['tokens'][0]: # Запрещаем, если дом уже есть if sessionStorage['address']: res['response']['text'] = f'{first_name.title()}, ' \ f'сначала выселись из предыдущего!' res['response']['buttons'] = [ { 'title': 'Помощь', 'hide': False }, { 'title': 'Покажи адрес дома', 'hide': True }, { 'title': 'Удали дом', 'hide': True }, { 'title': 'Обратно', 'hide': True } ] # Не запрещаем, если дома нет else: f = True for entity in req['request']['nlu']['entities']: if entity['type'] == 'YANDEX.GEO': if 'house_number' in entity['value'].keys(): f = False sessionStorage['address'] = ' '.join(req['request']['nlu']['tokens'][1:]) geocoder_request = "http://geocode-maps.yandex.ru/1.x/?geocode={}&format=json" \ .format( '+'.join([x.strip(',') for x in req['request']['nlu']['tokens'][1:]])) sessionStorage['address'] = ' '.join(req['request']['nlu']['tokens'][1:]) response = requests.get(geocoder_request) json_response = response.json() toponym = json_response["response"]["GeoObjectCollection"]["featureMember"][0][ "GeoObject"] toponym_coodrinates = toponym["Point"]["pos"] sessionStorage['ll'] = ','.join(toponym_coodrinates.split()) res['response']['text'] = 'Дом по адресу {} добавлен!'.format( sessionStorage['address']) res['response']['buttons'] = [ { 'title': 'Помощь', 'hide': False }, { 'title': 'Покажи адрес дома', 'hide': True }, { 'title': 'Удали дом', 'hide': True }, { 'title': 'Обратно', 'hide': True } ] if f: res['response'][ 'text'] = f'Я не нашла ни одного дома, ' \ f'{first_name.title()}! Попробуй ещё раз.' res['response']['buttons'] = [ { 'title': 'Помощь', 'hide': False } ] # Печатаем адрес дома, если он указан elif 'покажи адрес дома' == req['request']['original_utterance'].lower(): if sessionStorage['address']: res['response']['text'] = 'Твой дом находится по адресу {}'.format( sessionStorage['address']) else: res['response']['text'] = f'{first_name.title()}, ' \ f'у тебя нет дома! ノ( º _ ºノ)' res['response']['buttons'] = [ { 'title': 'Помощь', 'hide': False }, { 'title': 'Удали дом', 'hide': True }, { 'title': 'Обратно', 'hide': True } ] # Удаляем дом, если он есть elif 'удали дом' == req['request']['original_utterance'].lower(): if sessionStorage['address']: res['response']['text'] = 'Твой дом по адресу {}' \ ' удалён!'.format(sessionStorage['address']) sessionStorage['address'] = '' sessionStorage['ll'] = sessionStorage['archive'] else: res['response']['text'] = f'{first_name.title()}, ' \ f'у тебя нет дома! ノ( º _ ºノ)' res['response']['buttons'] = [ { 'title': 'Помощь', 'hide': False } ] # Ищем организацию, если увидели ключевое слово elif 'поиск' in req['request']['nlu']['tokens']: sessionStorage['company'] = '+'.join(req['request']['nlu']['tokens'][1:]) search_params = { "apikey": sessionStorage['api'], "text": sessionStorage['company'], "lang": "ru_RU", "ll": sessionStorage['ll'], "type": "biz" } response = requests.get(sessionStorage['search'], params=search_params) json_response = response.json() sessionStorage['organization'] = json_response["features"][0] if sessionStorage['organization']: address = '+'.join(sessionStorage['organization']['properties']['CompanyMetaData']['address'].split()) geocoder_request = "http://geocode-maps.yandex.ru/1.x/?geocode={}&format=json".format( address) try: response = requests.get(geocoder_request) if response: json_response = response.json() print(json_response) toponym = json_response["response"]["GeoObjectCollection"]["featureMember"][0][ "GeoObject"] toponym_coodrinates = toponym["Point"]["pos"] sessionStorage['coord'] = ','.join(toponym_coodrinates.split()) print(sessionStorage['coord']) else: print("Ошибка выполнения запроса:") print(geocoder_request) print("Http статус:", response.status_code, "(", response.reason, ")") except: print("Запрос не удалось выполнить. Проверьте подключение к сети Интернет.") # sessionStorage['coord'] = sessionStorage['organization'] sessionStorage['work'] = 1 res['response'][ 'text'] = f'Организация успешно найдена, ' \ f'{first_name.title()}. Что подсказать?' res['response']['buttons'] = [ { 'title': 'Адрес', 'hide': True }, { 'title': 'Телефон', 'hide': True }, { 'title': 'Время', 'hide': True }, { 'title': 'Индекс', 'hide': True }, { 'title': 'Расстояние от дома', 'hide': True }, { 'title': 'Покажи на карте', "url": 'https://yandex.ru/maps/?mode=search&text={}'.format('+'.join( sessionStorage['organization']['properties']['CompanyMetaData'][ 'name'].split())), 'hide': True }, { 'title': 'Обратно', 'hide': True }, { 'title': 'Помощь', 'hide': False } ] else: res['response'][ 'text'] = f'Я не смогла найти организацию, ' \ f'{first_name.title()}. Попробуй ещё раз.' else: res['response']['text'] = f'{first_name.title()}, произошла ' \ f'непредвиденная ошибка. Возможно, вы ' \ f'пытаетесь меня сломать, а так делать ' \ f'заперещено. Общайтесь хорошо или я обижусь!' res['response']['buttons'] = [ { 'title': 'Помощь', 'hide': False } ] except: res['response'][ 'text'] = 'Если вы видите эту ошибку, то вы конкретно так' \ ' сломали Алису, подорожник вряд ли поможет. ' \ 'Напишите vk.com/drmattsuu'
"apikey": "dda3ddba-c9ea-4ead-9010-f43fbc15c6e3", "text": "аптека", "lang": "ru_RU", "ll": toponym_longitude + ',' + toponym_lattitude, "type": "biz" } response = requests.get(search_api_server, params=search_params) if not response: pass json_response = response.json() organization = json_response["features"][0] org_name = organization["properties"]["CompanyMetaData"]["name"] org_address = organization["properties"]["CompanyMetaData"]["address"] point = organization["geometry"]["coordinates"] org_point = "{0},{1}".format(point[0], point[1]) coord_top = "{0},{1}".format(toponym_longitude, toponym_lattitude) map_params = { "ll": toponym_longitude + ',' + toponym_lattitude, "spn": ",".join(spn_func(coord_top, org_point)), "l": "map", "pt": "{0},pm2dgl~{1},pm2dgl".format(org_point, coord_top) } map_api_server = "http://static-maps.yandex.ru/1.x/" response = requests.get(map_api_server, params=map_params) Image.open(BytesIO( response.content)).show() print(org_name) print(org_address) print(organization["properties"]["CompanyMetaData"]['Hours']['text']) print(get_distance([float(point[0]), float(point[1])], [float(toponym_longitude), float(toponym_lattitude)]), 'м')
def handle_dialog(res, req): global photos user_id = req['session']['user_id'] # если пользователь новый, то просим его представиться. if req['session']['new']: res['response']['card'] = {} res['response']['card']['type'] = 'BigImage' res['response']['card']['title'] = 'Привет! Я Алиса.Гид,'\ + ' а тебя как зовут?' res['response']['card']['image_id'] = photos['alica'] # текст если нету экрана res['response']['text'] = 'Привет! Я Алиса-Гид,'\ + ' а тебя как зовут?' # создаём словарь в который в будущем положим имя пользователя sessionStorage[user_id] = {'first_name': None} 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 res['response'][ 'text'] = 'Приятно познакомиться, ' + first_name.title()\ + '.\nВот что я умею:\n1. Играть в горо'\ + 'да (Просто скажите: "Давай сыграем в города")\n'\ + '2. Найти точное расстаяние между городами '\ + '(Просто скажите: "Отмерь расстояние")\n'\ + '3. Найти в какой стране город '\ + '(Просто скажите: "В какой стране город?")\n'\ + '4. Перевести на любой язык '\ + '(Просто скажите: "Перевод")\n'\ + '5. Определить язык '\ + '(Просто скажите: "Определи язык")\n'\ + '6. Произвести поиск '\ + '(Просто скажите: "Поиск")' else: # преобразовываем все нужные переменные в глобальные global city_game global used_cities global cities global distance_city_game global country_game global trans_lg global language global translate_lg global search_lg global detect_lg global ya_serch global happ global hello # ИГРА В ГОРОДА if 'давай сыграем в города' in req['request']['command'].lower(): city_game = [True, 'а'] # фотография Алисы с тайтлами res['response']['card'] = {} res['response']['card']['type'] = 'BigImage' res['response']['card']['title'] = '*Чтобы прекратить игру напиш'\ + 'ите Хватит* Я начну, Москв'\ + 'а - тебе на "а"' res['response']['card']['image_id'] = photos['alica_city_game'] # текст если нету экрана res['response']['text'] = '*Чтобы прекратить игру напишите Хвати'\ + 'т* Я начну, Москва - тебе на "а"' res['response']['buttons'] = [{'title': 'Хватит', 'hide': True}] elif city_game[0] is True: if 'где это' in req['request']['command'].lower(): res['response']['text'] = 'Это замечательное место. Ваш ход...' res['response']['buttons'] = [{ 'title': 'Хватит', 'hide': True }] elif 'хватит' in req['request']['command'].lower(): res['response']['text'] = 'С тобой было приятно играть!\n'\ + '-Если хочешь узнать, что я могу,'\ + ' напиши: "Что ты можешь?" ' city_game = [False, ''] used_cities = [] elif sorted(cities) == sorted(used_cities): res['response']['text'] = 'С тобой приятно играть, но я устал'\ + 'а!\n-Если хочешь узнать, что '\ + 'я могу, напиши: "Что ты можешь?"' city_game = [False, ''] used_cities = [] elif city_game[1] == req['request']['command'].lower()[0]: if req['request']['command'].lower().title() in used_cities: res['response']['text'] = 'Повторяться нельзя!\nТы проиг'\ + 'рал. Но ничего в следующий раз '\ + 'обязательно всё получится!\n'\ + '-Если хочешь узнать, что я могу,'\ + ' напиши: "Что ты можешь?" ' city_game = [False, ''] used_cities = [] elif req['request']['command'].lower().title() not in cities: res['response']['text'] = 'Такого города я не знаю!\nКа'\ + 'жется ты проиграл. Но ничего в с'\ + 'ледующий раз обязательно всё пол'\ + 'учится!\n-Если хочешь узнать, чт'\ + 'о я могу, напиши:"Что ты можешь?"' city_game = [False, ''] used_cities = [] else: word = req['request']['command'].lower().title() used_cities.append(word) if req['request']['command'].lower()[-1] != 'ь'\ and req['request']['command'].lower()[-1] != 'ъ'\ and req['request']['command'].lower()[-1] != 'ы': city_game[1] = req['request']['command'].lower()[-1] else: city_game[1] = req['request']['command'].lower()[-2] for i in cities: if i[0].lower() == city_game[1].lower()\ and i not in used_cities: used_cities.append(i) res['response']['text'] = str(i) city_n = str(i) if i[-1] != 'ь'\ and i[-1] != 'ъ'\ and i[-1] != 'ы': city_game[1] = i[-1] else: city_game[1] = i[-2] break url = 'https://yandex.ru/maps/?ll=86.026101%2C46.958498&m'\ + 'ode=search&sll=52.395874%2C55.743583&sspn=0.3137'\ + '97%2C0.105549&text={}&z=2.7'.format(city_n) res['response']['buttons'] = [{ 'title': 'Где это?', 'hide': True, 'url': url }, { 'title': 'Хватит', 'hide': True }] else: res['response']['text'] = 'Упс... Кажется ты проиграл\n'\ + 'Но ничего в следующий раз '\ + 'обязательно всё получится!\n'\ + '-Если хочешь узнать, что я могу,'\ + ' напиши: "Что ты можешь?" ' city_game = [False, ''] used_cities = [] # НАХОЖДЕНИЕ РАССТОЯНИЯ ГОРОДОВ elif 'отмерь расстояние' in req['request']['command'].lower(): res['response']['card'] = {} res['response']['card']['type'] = 'BigImage' res['response']['card']['title'] = '*Чтобы прекратить напишите '\ + 'Хватит* Каких двух городо'\ + 'в нужно узнать расстояние'\ + '? (Пример: Москва Питер)' name_photo = 'alica_distance_city_game' res['response']['card']['image_id'] = photos[name_photo] distance_city_game = True # текст если нету экрана res['response']['text'] = '*Чтобы прекратить напишите Хватит*'\ + '\nКаких двух городов нужно узнать'\ + ' расстояние?\n (Пример: Москва Питер)' res['response']['buttons'] = [{'title': 'Хватит', 'hide': True}] elif distance_city_game is True: cities_d = get_cities(req) if 'хватит' in req['request']['command'].lower(): res['response']['text'] = 'Закончили!\n'\ + '-Если хочешь узнать, что я могу,'\ + ' напиши: "Что ты можешь?" ' distance_city_game = False elif len(cities_d) == 0: res['response']['text'] = 'Ты не написал название'\ + ' не одного города!' res['response']['buttons'] = [{ 'title': 'Хватит', 'hide': True }] elif len(cities_d) == 2: distance = get_distance(get_coordinates(cities_d[0]), get_coordinates(cities_d[1])) res['response']['text'] = 'Расстояние между этими городами: '\ + str(round(distance)) + ' км.\n'\ + '-Если хочешь узнать, что я могу,'\ + ' напиши: "Что ты можешь?" ' distance_city_game = False else: res['response']['text'] = 'Не то количество городов!\n'\ + 'Попробуй ещё раз.' res['response']['buttons'] = [{ 'title': 'Хватит', 'hide': True }] # В КАКОЙ СТРАНЕ ГОРОД elif 'в какой стране город' in req['request']['command'].lower(): country_game = True res['response']['card'] = {} res['response']['card']['type'] = 'BigImage' res['response']['card']['title'] = '*Чтобы прекратить напишите '\ + 'Хватит* Какого города нуж'\ + 'но узнать страну?' res['response']['card']['image_id'] = photos['alica_country_game'] # текст если нету экрана res['response']['text'] = '*Чтобы прекратить напишите Хватит*'\ + '\nКакого города нужно узнать страну?' res['response']['buttons'] = [{'title': 'Хватит', 'hide': True}] elif country_game is True: cities_d = get_cities(req) if 'хватит' in req['request']['command'].lower(): res['response']['text'] = 'Закончили!\n'\ + '-Если хочешь узнать, что я могу,'\ + ' напиши: "Что ты можешь?" ' country_game = False elif len(cities_d) == 0: res['response']['text'] = 'Ты не написал название города!' res['response']['buttons'] = [{ 'title': 'Хватит', 'hide': True }] elif len(cities_d) == 1: res['response']['text'] = 'Этот город в стране - '\ + get_country(cities_d[0])\ + '\n-Если хочешь узнать, что я '\ + 'могу, напиши: "Что ты можешь?" ' country_game = False else: res['response']['text'] = 'Слишком много городов!\n'\ + 'Попробуй ещё раз.' res['response']['buttons'] = [{ 'title': 'Хватит', 'hide': True }] # ПЕРЕВОДЧИК elif 'перевод' == req['request']['command'].lower(): trans_lg = True language = '' res['response']['card'] = {} res['response']['card']['type'] = 'BigImage' res['response']['card']['title'] = '*Чтобы прекратить напишите '\ + 'Хватит* На какой язык пер'\ + 'евести? Если вы не знаете'\ + ' язык в какой-то стране, '\ + 'напиши страну, я помогу!' res['response']['card']['image_id'] = photos['alica_trans_lg'] # текст если нету экрана res['response']['text'] = '*Чтобы прекратить напишите Хватит*'\ + '\nНа какой язык вы хотите перевести?'\ + '\nЕсли вы не знаете язык в какой-то '\ + 'стране, напиши страну, я тебе помогу!' res['response']['buttons'] = [{'title': 'Хватит', 'hide': True}] elif trans_lg is True: word = req['request']['command'].lower().strip().title() if 'хватит' in req['request']['command'].lower(): res['response']['text'] = 'Закончили!\n'\ + '-Если хочешь узнать, что я могу,'\ + ' напиши: "Что ты можешь?" ' trans_lg = False elif word in count_lg.COUNTRY_LG: ans = req['request']['command'].lower().strip().title() ans = count_lg.COUNTRY_LG[ans] ans = count_lg.SIM_LG[ans] language = count_lg.LG_SIM[ans] res['response']['text'] = 'Я определила язык, это - ' + ans\ + '\nЧто вы хотите перевести?' res['response']['buttons'] = [{ 'title': 'Хватит', 'hide': True }] elif req['request']['command'].lower().strip() in count_lg.LG_SIM: res['response']['text'] = 'Что вы хотите перевести?' ans = req['request']['command'].lower().strip() language = count_lg.LG_SIM[ans] res['response']['buttons'] = [{ 'title': 'Хватит', 'hide': True }] elif language == '': res['response']['text'] = 'Не понимаю! Попробуйте ещё раз...' res['response']['buttons'] = [{ 'title': 'Хватит', 'hide': True }] else: text = str(req['request']['command']) res['response']['text'] = 'Перевод: ' + str( translate_lg(text, language)) res['response']['buttons'] = [{ 'title': 'Хватит', 'hide': True }] # ОПРЕДЕЛЕНИЕ ЯЗЫКА elif 'определи язык' == req['request']['command'].lower(): search_lg = True res['response']['card'] = {} res['response']['card']['type'] = 'BigImage' res['response']['card']['title'] = '*Чтобы прекратить напишите '\ + 'Хватит* Напишите что-нибу'\ + 'дь, а я определю, что за'\ + ' язык!' res['response']['card']['image_id'] = photos['alica_search_lg'] # текст если нету экрана res['response']['text'] = '*Чтобы прекратить напишите Хватит*'\ + '\nНапишите что-нибудь, '\ + 'а я определю, что за язык!' res['response']['buttons'] = [{'title': 'Хватит', 'hide': True}] elif search_lg: if 'хватит' in req['request']['command'].lower(): res['response']['text'] = 'Закончили!\n'\ + '-Если хочешь узнать, что я могу,'\ + ' напиши: "Что ты можешь?" ' search_lg = False else: text = str(req['request']['command']) ans = detect_lg(text) ans = count_lg.SIM_LG[ans] res['response']['text'] = 'Я знаю! Это -' + ans\ + '\nНапиши что-нибудь ещё!' res['response']['buttons'] = [{ 'title': 'Хватит', 'hide': True }] # ПОИСК elif 'поиск' == req['request']['command'].lower(): ya_serch = True res['response']['card'] = {} res['response']['card']['type'] = 'BigImage' res['response']['card']['title'] = '*Чтобы прекратить напишите'\ + ' Хватит* Напишите что ну'\ + 'жно найти, после нажмите'\ + ' кнопку "Искать"!' res['response']['card']['image_id'] = photos['alica_ya_serch'] # текст если нету экрана res['response']['text'] = '*Чтобы прекратить напишите Хватит*'\ + '\nНапишите что нужно найти, '\ + 'после нажмите кнопку "Искать"!' res['response']['buttons'] = [{'title': 'Хватит', 'hide': True}] elif ya_serch: if 'хватит' in req['request']['command'].lower(): res['response']['text'] = 'Закончили искать!\n'\ + '-Если хочешь узнать, что я могу,'\ + ' напиши: "Что ты можешь?" ' ya_serch = False elif 'нет' == req['request']['command'].lower(): res['response']['text'] = 'Попробуйте искать по другому'\ + ' запросу...' res['response']['buttons'] = [{ 'title': 'Хватит', 'hide': True }] elif 'да' == req['request']['command'].lower(): res['response']['text'] = 'Отлично!\n'\ + '-Если хочешь узнать, что я могу,'\ + ' напиши: "Что ты можешь?" ' ya_serch = False elif 'искать' == req['request']['command'].lower(): res['response']['text'] = 'Нашли что хотели?' res['response']['buttons'] = [{ 'title': 'Да', 'hide': True }, { 'title': 'Нет', 'hide': True }, { 'title': 'Хватит', 'hide': True }] else: ans = '%20'.join(req['request']['command'].split()) url = 'https://yandex.ru/search/?text={}&lr=236'.format(ans) res['response']['buttons'] = [{ 'title': 'Искать', 'hide': True, 'url': url }, { 'title': 'Хватит', 'hide': True }] res['response']['text'] = 'Произвожу поиск...' # СПОНТАННОЕ ПРИВЕТСТВИЕ elif 'привет' == req['request']['command'].lower()\ or 'здравствуй' == req['request']['command'].lower()\ or 'здравствуйте' == req['request']['command'].lower()\ or 'хай' == req['request']['command'].lower()\ or 'хеллоу' == req['request']['command'].lower(): answer = str(random.choice(hello)) res['response']['text'] = answer # СПОНТАННО СТРОСИЛИ КАК ДЕЛА elif 'как дела?' in req['request']['command'].lower()\ or 'как дела' in req['request']['command'].lower()\ or 'как у тебя дела?' in req['request']['command'].lower()\ or 'как у тебя дела' in req['request']['command'].lower(): answer = str(random.choice(happ)) res['response']['text'] = answer # ЕСЛИ НЕТ ПОДХОДЯЩЕГО НАВЫКА ИЛИ ОТВЕТА НА ЗАПРОС else: res['response']['text'] = 'Я могу:\n1. Играть в города (Просто'\ + ' скажите: "Давай сыграем в города'\ + '")\n2. Найти точное расстаяние ме'\ + 'жду городами (Просто скажите: "От'\ + 'мерь расстояние")\n3. Найти в как'\ + 'ой стране город (Просто скажите: '\ + '"В какой стране город?")\n4. Пере'\ + 'вести на любой язык (Просто скажи'\ + 'те: "Перевод")\n5. Определить язы'\ + 'к (Просто скажите: "Определи язык'\ + '")\n6. Произвести поиск (Просто с'\ + 'кажите: "Поиск")'