Пример #1
0
def set_second_airport(bot, update, user_data):
    text = update.message.text

    if text == '🔙Вернуться назад':
        city_ru, city_en = get_city(user_data['current_response'],
                                    'ru_RU'), get_city(
                                        user_data['current_response'])
        airport_question(update, city_ru, city_en)
        return SET_SECOND_CITY_HANDLER

    elif text == '🔚Вернуться в меню':
        update.message.reply_text(
            'Выберите одну из возможных функций для данного местоположения:',
            reply_markup=ReplyKeyboardMarkup(keyboard2))

        return LOCATION_HANDLER

    else:
        response = geocoder_request(geocode=text, format='json')
        if check_response(response):
            user_data['city2'] = get_city(response, 'ru_RU')
            city_en = get_city(response)
            airports = airs.get(user_data['city2'], []) + airs.get(city_en, [])
            if not airports:
                update.message.reply_text(
                    'Введеный город не найден. Проверьте написание.')
                return SET_SECOND_AIRPORT_HANDLER
            update.message.reply_text(
                'Выберите аэропорт прибытия:',
                reply_markup=ReplyKeyboardMarkup(
                    [[elem[1] + ', ' + elem[0]] for elem in airports] +
                    [['🔙Вернуться назад'], ['🔚Вернуться в меню']]))
            return FIND_FLIGHTS_HANDLER
        update.message.reply_text(
            'Введеный город не найден. Проверьте написание.')
Пример #2
0
def weather(bot, update, user_data):
    text = update.message.text

    if text == '🌤Текущая погода':
        city, code = get_city(user_data['current_response']), get_country_code(
            user_data['current_response'])
        update.message.reply_text(
            get_current_weather(
                city, code, WEATHER_TOKEN,
                get_city(user_data['current_response'], 'ru-RU')))

    elif text == '☔️Прогноз на 6 дней':
        city, code = get_city(user_data['current_response']), get_country_code(
            user_data['current_response'])
        update.message.reply_text(
            get_forecast_weather(
                city, code, WEATHER_TOKEN,
                get_city(user_data['current_response'], 'ru-RU')))

    elif text == '🔙Вернуться назад':
        update.message.reply_text(
            'Выберите одну из возможных функций для данного местоположения:',
            reply_markup=ReplyKeyboardMarkup(keyboard2))

        return LOCATION_HANDLER
def parse_news(data):
    session = HTMLSession()

    print('getting page')
    city = '_'.join(get_city(data).split())
    response = session.get(url.format(city))
    if response:
        print('page gotten')
        html = response.html.find(selectors[0])[1]

        stories = html.find(selectors[1])

        news = []
        for story in stories:
            link = story.find('h2 > a')[0]

            title = link.text
            href = 'https://news.yandex.ru/story' + link.attrs['href']

            try:
                text = story.find('div.story__text')[0].text
            except IndexError:
                continue

            news.append([title, text, href])
        return news
    else:
        print('error while getting page, status code: {}'.format(
            response.status_code))
        return None
Пример #4
0
def choosing_map_type(bot, update, user_data):
    query = update.callback_query
    bot.edit_message_text(
        chat_id=query.message.chat_id,
        message_id=query.message.message_id,
        text="[​​​​​​​​​​​]({}){}".format(
            get_static_map(user_data, query.data), 'Карта для города ' +
            get_city(user_data['current_response'], 'ru-RU')),
        parse_mode='markdown',
        reply_markup=inline_maps)
Пример #5
0
def find_flights(bot, update, user_data):
    text = update.message.text

    if text == '🔙Вернуться назад':
        city_ru, city_en = get_city(user_data['current_response'],
                                    'ru_RU'), get_city(
                                        user_data['current_response'])
        airport_question(update, city_ru, city_en)
        return SET_SECOND_CITY_HANDLER

    elif text == '🔚Вернуться в меню':
        update.message.reply_text(
            'Выберите одну из возможных функций для данного местоположения:',
            reply_markup=ReplyKeyboardMarkup(keyboard2))

        return LOCATION_HANDLER

    else:
        airport2 = text.split(', ')[-1]
        flights = get_flights(user_data['airport1'], airport2)
        if not flights:
            update.message.reply_text(
                'Рейсов между указанными ранее аэропортами не найдено!')
            city_ru, city_en = get_city(user_data['current_response'],
                                        'ru_RU'), get_city(
                                            user_data['current_response'])
            airport_question(update, city_ru, city_en)
            return SET_SECOND_CITY_HANDLER

        user_data['array'] = flights
        user_data['index'] = 0
        user_data['length'] = len(flights)
        update.message.reply_text(
            'Найдено рейсов для данного направления: {}'.format(len(flights)),
            reply_markup=ReplyKeyboardRemove())
        update.message.reply_text(
            '[Данные предоставлены сервисом Яндекс.Расписания](http://rasp.yandex.ru/)',
            parse_mode='markdown')
        update.message.reply_text(
            flights[0],
            reply_markup=inline_sch_state1
            if len(flights) > 1 else ReplyKeyboardMarkup(keyboard3))
Пример #6
0
def scrolling_flights(bot, update, user_data):
    print(user_data['array'])
    query = update.callback_query
    d = {0: inline_sch_state1, user_data['length'] - 1: inline_sch_state3}
    if query.data == '1':
        user_data['index'] = min(user_data['length'], user_data['index'] + 1)

    elif query.data == '2':
        user_data['index'] = max(0, user_data['index'] - 1)

    elif query.data == '3':
        bot.deleteMessage(chat_id=query.message.chat_id,
                          message_id=query.message.message_id)
        city_ru, city_en = get_city(user_data['current_response'],
                                    'ru_RU'), get_city(
                                        user_data['current_response'])
        airports = airs.get(city_ru, []) + airs.get(city_en, [])
        bot.sendMessage(
            text='Из какого аэропорта города {} вы хотите найти рейс?'.format(
                city_ru),
            chat_id=query.message.chat_id,
            reply_markup=ReplyKeyboardMarkup(
                [[elem[1] + ', ' + elem[0]] for elem in airports] +
                [['🔙Вернуться назад'], ['🔚Вернуться в меню']]))
        return SET_SECOND_CITY_HANDLER

    try:
        bot.edit_message_text(text=user_data['array'][user_data['index']],
                              chat_id=query.message.chat_id,
                              message_id=query.message.message_id,
                              parse_mode='markdown',
                              reply_markup=d[user_data['index']] if
                              user_data['index'] in d else inline_sch_state2)
    except IndexError:
        if user_data['index'] < 0:
            user_data['index'] = 0

        else:
            user_data['index'] = user_data['length'] - 1
Пример #7
0
def schedule(bot, update, user_data):
    text = update.message.text

    if text == '✈️Найти авиарейс':
        city_ru, city_en = get_city(user_data['current_response'],
                                    'ru_RU'), get_city(
                                        user_data['current_response'])
        airports = airs.get(city_ru, []) + airs.get(city_en, [])

        if airports:
            airport_question(update, city_ru, city_en)
            return SET_SECOND_CITY_HANDLER

        else:
            update.message.reply_text('В заданном городе аэропорта не найдено')

    elif text == '🔙Вернуться назад':
        update.message.reply_text(
            'Выберите одну из возможных функций для данного местоположения:',
            reply_markup=ReplyKeyboardMarkup(keyboard2))

        return LOCATION_HANDLER
Пример #8
0
def location_handler(bot, update, user_data):
    text = update.message.text

    if text == '🗺Показать на карте':
        res = "[​​​​​​​​​​​]({}){}".format(
            get_static_map(user_data), 'Карта для города ' +
            get_city(user_data['current_response'], 'ru-RU'))
        update.message.reply_text(res,
                                  parse_mode='markdown',
                                  reply_markup=inline_maps)

    elif text == '🗞Последние новости':
        news = parse_news(user_data['current_response'])
        if news is not None:
            user_data['array'] = news
            user_data['index'] = 0
            user_data['length'] = len(news)
            update.message.reply_text(
                'Найдено новостей в заданном городе: {}'.format(len(news)),
                reply_markup=ReplyKeyboardRemove())
            update.message.reply_text(
                '*{0}*\n{1}\n[Подробнее:]({2})'.format(*news[0]),
                parse_mode='markdown',
                reply_markup=inline_news_state1)
            return NEWS_HANDLER

        else:
            update.message.reply_text('Новостей для этой местности не найдено')

    elif text == '🌧Погода':
        update.message.reply_text(
            'Что вы хотите узнать о погоде в городе {}?'.format(
                get_city(user_data['current_response'], 'ru-RU')),
            reply_markup=ReplyKeyboardMarkup(keyboard4))
        return WEATHER_HANDLER

    elif text == '🛩Расписания':
        update.message.reply_text('Выберите один из вариантов поиска:',
                                  reply_markup=ReplyKeyboardMarkup(keyboard5))
        return RASP_HANDLER

    elif text == '💸Вакансии':
        try:
            data = geocoder_request(geocode=get_city(
                user_data['current_response']),
                                    format='json')
            city = get_city(data, 'ru_RU')
            region = list(region_suggest(city).items())[0][1]

        except:
            update.message.reply_text(
                'Данный город не найден в базе данных HeadHunter.',
                reply_markup=ReplyKeyboardMarkup(keyboard2))
            return LOCATION_HANDLER

        try:
            params = {'area': region}
            if user_data['vacancy']['keywords'] is not None:
                params['text'] = user_data['vacancy']['keywords']
            user_data['vacancies_response'] = vacancies_request(
                **params)['items']
            if len(user_data['vacancies_response']) == 0:
                update.message.reply_text(
                    'Для данного города не найдено ни одной вакансии.',
                    reply_markup=ReplyKeyboardMarkup(keyboard2))
                return LOCATION_HANDLER

            user_data['vacancies_index'] = 0
            user_data['vacancies_image'] = 'logo'

            update.message.reply_text('Найдено несколько вакансий',
                                      reply_markup=ReplyKeyboardRemove())
            _keyboard = [[
                InlineKeyboardButton('Следующая вакансия▶️', callback_data=1)
            ], [InlineKeyboardButton('🗺Местоположение', callback_data=4)],
                         [InlineKeyboardButton('🔙Назад', callback_data=3)]]

            if len(user_data['vacancies_response']) == 1:
                _keyboard.pop(0)

            reply = form_vacancy_reply(user_data)
            if reply['address'] == 'Адрес не указан':
                _keyboard.pop(1)

            update.message.reply_text(
                (
                    '*{title}*\n'
                    '{experience}\n'
                    '{address}\n'
                    '[Подробнее:]({url})\n'
                    '[​​​​​​​​​​​]({image_url})'  # EMPTY STRING IN BRACKETS
                ).format(**reply),
                parse_mode='markdown',
                reply_markup=InlineKeyboardMarkup(_keyboard))

            return VACANCIES_HANDLER

        except Exception as e:
            logger.exception(e)

    elif text == '🔙Вернуться назад':
        update.message.reply_text(
            'Введите город, информацию о котором Вы хотите узнать',
            reply_markup=ReplyKeyboardMarkup(keyboard3))
        return SEARCH_HANDLER

    return LOCATION_HANDLER