Exemplo n.º 1
0
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'] = 'Слишком много городов!'
Exemplo n.º 2
0
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лишком много городов!'
Exemplo n.º 3
0
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'] = 'Слишком много городов!'
Exemplo n.º 4
0
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()}, слишком много городов!'
Exemplo n.º 5
0
Arquivo: app.py Projeto: Ysmur/ya2_API
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'] + 'Слишком много городов!'
Exemplo n.º 6
0
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()}!'
Exemplo n.º 7
0
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'] = 'Слишком много городов!'
Exemplo n.º 8
0
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лишком много городов!'
Exemplo n.º 9
0
Arquivo: 1.py Projeto: segukki/Alice
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'
Exemplo n.º 11
0
    "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)]), 'м')
Exemplo n.º 12
0
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. Произвести поиск (Просто с'\
                                      + 'кажите: "Поиск")'