Exemplo n.º 1
0
def city_handler(message):
    user_id = str(message.from_user.id)
    if message.text == 'На главную':
        functions.get_main_keyboard(message.chat.id, 'Выберите пункт меню.')
        change_data('states', user_id, consts.MAIN_STATE)
    elif len(message.text.split(' ')) == 1:
        resp = functions.get_request_data(message, message.text)
        data['city_weather']['city'] = resp
        data['city_weather']['city_name'] = message.text
        functions.get_inline_key_weather(message.chat.id, 'На какую дату? Формат даты: "Месяц, число" или ключевые слова: "сегодня, завтра"')
        change_data('states', user_id, consts.WEATHER_DATE_STATE)
    elif len(message.text.split(' ')) == 2:
        message_arr = message.text.split(' ')
        if message_arr[-1].lower() == 'сегодня':
            resp = functions.get_request_data(message, message_arr[0])
            functions.get_fix_date_weather(message, resp, message_arr[-1].lower())
            functions.get_inline_key_city(message.chat.id, consts.CITY_QUESTION)
        elif message_arr[-1].lower() == 'завтра':
            resp = functions.get_request_data(message, message_arr[0])
            functions.get_fix_date_weather(message, resp, message_arr[-1].lower())
            functions.get_inline_key_city(message.chat.id, consts.CITY_QUESTION)
        else:
            functions.get_error_message(message, consts.ERROR_MESSAGE)
    elif message.text.split(' ')[0] == 'История':
        message_parsed = message.text.split(' ')
        if len(message_parsed) == 1 or len(message_parsed) == 2:
            functions.get_error_message(message, 'Неверен формат ввода для показа истории погоды')
        else:
            city = message.text.split(' ')[1]
            day = message.text.split(' ')[2]
            get_history_message(message, city, day)
    else:
        functions.get_error_message(message, consts.ERROR_MESSAGE)
Exemplo n.º 2
0
def get_error_message(message, text, st=consts.MAIN_STATE):
    user_id = str(message.from_user.id)
    if st == consts.MAIN_STATE:
        markup = ReplyKeyboardMarkup(resize_keyboard=True, row_width=2, one_time_keyboard=True)
        markup.row(*consts.START_KEYBOARD_LIST)
        bot.send_message(message.chat.id, text, reply_markup=markup)
    else:
        bot.reply_to(message, text)
    change_data('states', user_id, st)
Exemplo n.º 3
0
def main_handler(message):
    user_id = str(message.from_user.id)
    if message.text == 'Погода':
        functions.get_keyboard_return(message.chat.id, 'Теперь вы можете выбрать город, который вас инетерсует или вернуться на главную!')
        functions.get_inline_key_city(message.chat.id, 'Какой город вас интересует?')
        change_data('states', user_id, consts.CITY_STATE)
    elif message.text == 'Настройки':
        functions.get_keyboard_return(message.chat.id, 'Теперь вы можете добавить город в избранное!')
        bot.send_message(message.chat.id, 'Добавьте избранный город для быстрого выбора. Напишите полное название города.')
        change_data('states', user_id, consts.SETTINGS_STATE)
    else:
        functions.get_error_message(message, consts.ERROR_MESSAGE)
Exemplo n.º 4
0
def get_history_message(message, city, day):
    user_id = str(message.from_user.id)
    if day.lower() == 'сегодня':
        today = date.today()
        if today.month < 10:
            month = '0' + str(today.month)
        else:
            month = today.month

        if today.day < 10:
            cur_day = '0' + str(today.day)
        else:
            cur_day = today.day

        day_dict = '{0}-{1}-{2}'.format(str(today.year), str(month),
                                        str(cur_day))
    elif day.lower() == 'завтра':
        today = date.today() + timedelta(days=1)
        if today.month < 10:
            month = '0' + str(today.month)
        else:
            month = today.month

        if today.day < 10:
            cur_day = '0' + str(today.day)
        else:
            cur_day = today.day

        day_dict = '{0}-{1}-{2}'.format(str(today.year), str(month),
                                        str(cur_day))
    else:
        day_dict = day

    if city in data['history_weather']:
        if day_dict in data['history_weather'][city]:
            history_list = data['history_weather'][city][day_dict][0:3]
            weather_text = ''
            for weather in history_list:
                weather_text += weather + '\n'
            bot.send_message(
                message.chat.id,
                'История погоды для города {0}:\n{1}\n\n{2} \nВсего {3} запрос(ов)'
                .format(city, day_dict, weather_text,
                        str(len(data['history_weather'][city][day_dict]))))
            functions.get_inline_key_city(message.chat.id,
                                          consts.CITY_QUESTION)
            change_data('states', user_id, consts.CITY_STATE)
        else:
            functions.get_error_message(message, 'Неизвестная дата погоды!')
    else:
        functions.get_error_message(message, 'Неизвестен город!')
Exemplo n.º 5
0
def settings_handler(message):
    user_id = str(message.from_user.id)
    if message.text == 'На главную':
        functions.get_main_keyboard(message.chat.id, 'Выберите пункт меню.')
        change_data('states', user_id, consts.MAIN_STATE)
    elif functions.get_request_data(message, message.text):
        if message.text not in data['cities']:
            index = str(len(data['cities']))
            data['cities'].append({index: message.text})
            markup = ReplyKeyboardMarkup(resize_keyboard=True, row_width=2, one_time_keyboard=True)
            markup.row(*consts.START_KEYBOARD_LIST)
            bot.send_message(message.chat.id, 'Город успешно добавлен в избранное.', reply_markup=markup)
        else:
            functions.get_error_message(message, 'Город уже добавлен в избранное!')
    else:
        functions.get_error_message(message, consts.ERROR_MESSAGE)
    change_data('states', user_id, consts.MAIN_STATE)
Exemplo n.º 6
0
def weather_date_handler(message):
    user_id = str(message.from_user.id)
    if message.text == 'На главную':
        bot.send_message(message.chat.id, 'Выберите пункт меню.')
        change_data('states', user_id, consts.MAIN_STATE)
    elif message.text.lower() == 'сегодня':
        functions.get_fix_date_weather(message, data['city_weather']['city'], message.text.lower())
        functions.get_inline_key_city(message.chat.id, consts.CITY_QUESTION)
        change_data('states', user_id, consts.CITY_STATE)
        data['city_weather']['city'] = {}
    elif message.text.lower() == 'завтра':
        functions.get_fix_date_weather(message, data['city_weather']['city'], message.text.lower())
        functions.get_inline_key_city(message.chat.id, consts.CITY_QUESTION)
        change_data('states', user_id, consts.CITY_STATE)
        data['city_weather']['city'] = {}
    elif message.text.split(',')[0].strip().lower() in consts.MONTHS:
        if ',' not in message.text or not message.text.split(',')[1]:
            functions.get_error_message(message, 'Неверная дата, повторите запрос!')
            return
        month, day = message.text.split(',')
        day = int(day.strip())

        if data['city_weather']['city']:
            current_data = [item for item in data['city_weather']['city']['data'] if
                            int(item['valid_date'].split('-')[2]) == day]
        else:
            functions.get_error_message(message, 'Неверный ввод данных! Я тебя не понял!')
            return

        if current_data:
            message_str = data['city_weather']['city_name'] + ' ' + message.text
            functions.generate_weather_message(current_data, message, message_str)
        else:
            functions.get_error_message(message, 'Вы вышли за границу допустимых значений, повторите запрос!')
            return
        functions.get_inline_key_city(message.chat.id, consts.CITY_QUESTION)
        change_data('states', user_id, consts.CITY_STATE)
        data['city_weather']['city'] = {}
    else:
        functions.get_error_message(message, consts.ERROR_MESSAGE)
Exemplo n.º 7
0
def callback_handler(call):
    user_id = str(call.from_user.id)
    if call.data == 'now':
        functions.get_fix_date_weather(call.message, data['city_weather']['city'], "сегодня")
        functions.get_inline_key_city(call.message.chat.id, consts.CITY_QUESTION)
        change_data('states', user_id, consts.CITY_STATE)
        data['city_weather']['city'] = {}
    elif call.data == 'tomorrow':
        functions.get_fix_date_weather(call.message, data['city_weather']['city'], "завтра")
        functions.get_inline_key_city(call.message.chat.id, consts.CITY_QUESTION)
        change_data('states', user_id, consts.CITY_STATE)
        data['city_weather']['city'] = {}
    else:
        for index, city in enumerate(data['cities']):
            if str(call.data) == str(index):
                bot.send_message(call.message.chat.id, city[str(index)])
                bot.answer_callback_query(call.id, 'Ожидание...')
                resp = functions.get_request_data(call.message, city[str(index)])
                data['city_weather']['city'] = resp
                data['city_weather']['city_name'] = city[str(index)]
                functions.get_inline_key_weather(call.message.chat.id,
                                       'На какую дату? Формат даты: "Месяц, число" или ключевые слова: "сегодня, завтра"')
                change_data('states', user_id, consts.WEATHER_DATE_STATE)