Ejemplo n.º 1
0
def send_help(message):
    bot.send_message(message.chat.id, 'Форматы ввода: "Город" -> "Дата", ' +
                                      '"Город Дата", "История Город Дата". ' +
                                      'Дату можно обозначать ключевыми словами: "сегодня" или "завтра". ' +
                                      'Внимание! Дату можно указывать до 16 дней вперёд.' +
                                      'Узнать историю запросов в систему можно с помощью команды: ' +
                                      'История {Название города} {дата}. Дата в формате: 2020-05-05 ' +
                                      'или с помощью ключевых слов "сегодня" или "завтра"')
Ejemplo n.º 2
0
def get_inline_key_city(chat_id, message):
    markup = InlineKeyboardMarkup(row_width=2)
    inline_btn_array = []

    for index, city in enumerate(data['cities']):
        inline_btn_array.append(InlineKeyboardButton(city[str(index)], callback_data=str(index)))
    markup.row(*inline_btn_array)

    bot.send_message(chat_id, message, reply_markup=markup)
Ejemplo n.º 3
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)
Ejemplo n.º 4
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)
Ejemplo n.º 5
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, 'Неизвестен город!')
Ejemplo n.º 6
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)
Ejemplo n.º 7
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)
Ejemplo n.º 8
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)
Ejemplo n.º 9
0
def get_main_keyboard(chat_id, message):
    markup = ReplyKeyboardMarkup(resize_keyboard=True, row_width=2, one_time_keyboard=True)
    markup.row(*consts.START_KEYBOARD_LIST)
    bot.send_message(chat_id, message, reply_markup=markup)
Ejemplo n.º 10
0
def get_keyboard_return(chat_id, message):
    markup = ReplyKeyboardMarkup(resize_keyboard=True, row_width=1)
    markup.row(consts.RETURN_KEYBOARD)
    bot.send_message(chat_id, message, reply_markup=markup)
Ejemplo n.º 11
0
def get_inline_key_weather(chat_id, message):
    markup = InlineKeyboardMarkup(row_width=2)
    markup.row(InlineKeyboardButton("Сегодня", callback_data="now"), InlineKeyboardButton("Завтра", callback_data="tomorrow"))
    bot.send_message(chat_id, message, reply_markup=markup)
Ejemplo n.º 12
0
def get_result_message(message, month, day, degrees, weather_text):
    bot.send_message(message.chat.id, '[Месяц: {0}, день: {1}, температура: {2}, минимальная (по ощущениям): {3}, максимальная (по ощущениям): {4}]: {5}'.format(month, day, degrees["temp"], degrees["app_max_temp"], degrees["app_min_temp"], weather_text))