def send_help(message): bot.send_message(message.chat.id, 'Форматы ввода: "Город" -> "Дата", ' + '"Город Дата", "История Город Дата". ' + 'Дату можно обозначать ключевыми словами: "сегодня" или "завтра". ' + 'Внимание! Дату можно указывать до 16 дней вперёд.' + 'Узнать историю запросов в систему можно с помощью команды: ' + 'История {Название города} {дата}. Дата в формате: 2020-05-05 ' + 'или с помощью ключевых слов "сегодня" или "завтра"')
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)
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)
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)
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, 'Неизвестен город!')
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)
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)
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)
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)
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)
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)
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))