def now_lesson_handler(message): bot.send_chat_action(message.chat.id, "typing") today = datetime.today() + server_timedelta json_day = func.get_json_day_data(message.chat.id, today.date()) full_place = func.is_full_place(message.chat.id) answer = func.create_schedule_answer(json_day, full_place, message.chat.id) if "Выходной" in answer: func.send_long_message(bot, answer, message.chat.id) else: lessons = answer.strip().split("\n\n")[1:] for lesson in lessons: times = [] for st in lesson.split("\n")[0].split(" ")[-1].split( emoji["en_dash"]): times.append(func.string_to_time(st)) if times[0] <= today.time() <= times[1]: answer = "{0} <b>Пара:</b>\n{1}".format(emoji["books"], lesson) func.send_long_message(bot, answer, message.chat.id) return elif today.time() <= times[0] and today.time() <= times[1]: answer = "{0} <b>Перерыв</b>\n\nСледующая:\n{1}".format( emoji["couch_and_lamp"], lesson) func.send_long_message(bot, answer, message.chat.id) return answer = "{0} Пары уже закончились".format(emoji["sleep"]) func.send_long_message(bot, answer, message.chat.id)
def to_university_handler(message): bot.send_chat_action(message.chat.id, "typing") if message.text.title() == "В Универ": from_station = func.get_station_code(message.chat.id, is_home=True) to_station = func.get_station_code(message.chat.id, is_home=False) else: from_station = func.get_station_code(message.chat.id, is_home=False) to_station = func.get_station_code(message.chat.id, is_home=True) server_datetime = datetime.today() + server_timedelta data = get_yandex_timetable_data(from_station, to_station, server_datetime) answer = data["answer"] update_keyboard = InlineKeyboardMarkup(True) if data["is_OK"]: if data["is_tomorrow"]: bot.send_message(message.chat.id, emoji["warning"] + " На сегодня нет электричек") update_keyboard.row(*[ InlineKeyboardButton(text=name, callback_data=name) for name in ["Все на завтра"] ]) else: update_keyboard.row(*[ InlineKeyboardButton(text=name, callback_data=name) for name in ["Оставшиеся", "Обновить"] ]) bot.send_message(message.chat.id, answer, reply_markup=update_keyboard, parse_mode='HTML', disable_web_page_preview=True)
def schedule_for_interval(message): bot.send_chat_action(message.chat.id, "typing") from_date, to_date = func.text_to_interval(message.text.lower()) json_data = func.get_json_interval_data(message.chat.id, from_date=from_date, to_date=to_date + timedelta(days=1)) is_send = False full_place = func.is_full_place(message.chat.id) if len(json_data["Days"]) > 10: answer = "{0} Превышен интервал в <b>10 дней</b>".format( emoji["warning"]) bot.send_message(text=answer, chat_id=message.chat.id, parse_mode="HTML") return elif len(json_data["Days"]): for day_info in json_data["Days"]: answer = func.create_schedule_answer(day_info, full_place, message.chat.id) if "Выходной" in answer: continue func.send_long_message(bot, answer, message.chat.id) is_send = True if not is_send or not len(json_data["Days"]): answer = "{0} С <i>{1}</i> по <i>{2}</i> занятий нет".format( emoji["sleep"], func.datetime_to_string(from_date), func.datetime_to_string(to_date)) bot.send_message(text=answer, chat_id=message.chat.id, parse_mode="HTML")
def attestation_handler(message): bot.send_chat_action(message.chat.id, "typing") month = func.get_available_months(message.chat.id) if len(month) == 0: bot.send_message(message.chat.id, "<i>Нет событий</i>", parse_mode="HTML") return inline_keyboard = InlineKeyboardMarkup() for key in month.keys(): inline_keyboard.row( *[InlineKeyboardButton(text=month[key], callback_data=str(key))] ) if message.text == "Сессия": answer = "Выбери месяц:" switch_button = "Допса" else: answer = "Выбери месяц для <b>допсы</b>:" switch_button = "Сессия" inline_keyboard.row( *[InlineKeyboardButton(text=switch_button, callback_data=switch_button)] ) bot.send_message(message.chat.id, answer, reply_markup=inline_keyboard, parse_mode="HTML")
def send_welcome(message: Message): bot.send_chat_action(action='typing', chat_id=message.from_user.id) if dbm.exists(value=message.from_user.id): if dbm.get_user_language(message.from_user.id) == "NONE" and ( message.text != "English" and message.text != "Русский"): bot.send_message(message.chat.id, text.UNDEFINED_LANGUAGE) else: bot.send_message( message.chat.id, getattr( text, dbm.get_user_language(message.from_user.id) + "_user_return")(message.from_user.first_name, )) else: dbm.append_in_table( ID=message.from_user.id, First_Name=message.from_user.first_name, # Last_Name=message.from_user.last_name, User_language='NONE', # Login='******' + message.from_user.username, Best_score='NONE', Game_comb='NONE', Steps='NONE', Game_status='NONE', Games=0) bot.send_message(message.chat.id, text.HELLO_MESSAGE, parse_mode='HTML')
def schedule_editor_handler(message): bot.send_chat_action(message.chat.id, "typing") answer = "Редактор расписания" bot.send_message(message.chat.id, answer, reply_markup=schedule_editor_keyboard, parse_mode='HTML')
def new_game(message: Message): bot.send_chat_action(action='typing', chat_id=message.from_user.id) if dbm.get_user_language(message.from_user.id) == "NONE" and ( message.text != "English" and message.text != "Русский"): bot.send_message(message.chat.id, text.UNDEFINED_LANGUAGE) else: if dbm.get_user_game_state(message.from_user.id) == states.GAMING: message_text = getattr( text, dbm.get_user_language(message.from_user.id) + "_new_game_while_gaming")() bot.send_message(message.chat.id, message_text) elif dbm.get_user_game_state(message.from_user.id) == states.NONE: message_text = getattr( text, dbm.get_user_language(user_id=message.from_user.id) + "_game_rules")() dbm.update(user_id=message.from_user.id, item='Game_status', new_value=states.GAMING) dbm.update(user_id=message.from_user.id, item='Game_comb', new_value=random_combination()) dbm.update(user_id=message.from_user.id, item='Steps', new_value=str(0)) bot.send_message(message.chat.id, message_text, parse_mode='HTML') else: bot.send_message(message.chat.id, 'Error')
def group_templates_handler(message): bot.send_chat_action(message.chat.id, "typing") answer = "" groups = func.get_templates(message.chat.id) group_title = func.get_current_group(message.chat.id)[1] answer += "Текущая группа: <b>{0}</b>\n".format(group_title) last_row = ["Отмена", "Сохранить"] inline_keyboard = InlineKeyboardMarkup(row_width=2) if len(groups) == 0: answer += "Нет шаблонов групп, но ты можешь сохранить текущую\n" else: answer += "Выбери группу:" inline_keyboard.add(*[ InlineKeyboardButton(text=name, callback_data=str(groups[name])) for name in groups.keys() ]) if group_title in groups.keys(): last_row = ["Отмена", "Удалить"] inline_keyboard.row(*[ InlineKeyboardButton(text=name, callback_data=name) for name in last_row ]) inline_keyboard.row(*[ InlineKeyboardButton(text=name, callback_data=name) for name in ["Сменить группу"] ]) bot.send_message(message.chat.id, answer, reply_markup=inline_keyboard, parse_mode="HTML")
def new_game(message: Message): bot.send_chat_action(action='typing', chat_id=message.from_user.id) if dbm.get_user_language(message.from_user.id) == "NONE" and ( message.text != "English" and message.text != "Русский"): bot.send_message(message.chat.id, text.UNDEFINED_LANGUAGE) else: if dbm.get_user_game_state(user_id=message.from_user.id) == "NONE": message_text = getattr( text, dbm.get_user_language(message.from_user.id) + "_cant_end_game")() bot.send_message(message.chat.id, message_text) elif dbm.get_user_game_state(message.from_user.id) == states.GAMING: message_text = getattr( text, dbm.get_user_language(message.from_user.id) + "_ended_game")() dbm.update(user_id=message.from_user.id, item='Game_status', new_value=states.NONE) dbm.update(user_id=message.from_user.id, item='Game_comb', new_value=states.NONE) dbm.update(user_id=message.from_user.id, item='Steps', new_value=states.NONE) bot.send_message(chat_id=message.chat.id, text=message_text) else: bot.send_message(message.chat.id, 'Error')
def users_callback_handler(message): bot.send_chat_action(message.chat.id, "typing") bot.forward_message(ids["my"], message.chat.id, message.message_id) bot.send_message(message.chat.id, "Записал", reply_markup=main_keyboard, reply_to_message_id=message.message_id)
def educator_schedule_handler(message): bot.send_chat_action(message.chat.id, "typing") answer = "Введи Фамилию преподавателя: <i>(и И. О.)</i>" markup = ForceReply(False) bot.send_message(message.chat.id, answer, reply_markup=markup, parse_mode="HTML")
def choose_educator_handler(message): bot.send_chat_action(message.chat.id, "typing") answer = "Здесь ты можешь выбрать для отображения занятие или " \ "преподавателя:" inline_keyboard = InlineKeyboardMarkup(True) inline_keyboard.row(*[ InlineKeyboardButton(text=name, callback_data=name) for name in ["Преподавателя", "Занятие"] ]) bot.send_message(message.chat.id, answer, reply_markup=inline_keyboard)
def write_educator_name_handler(message): bot.send_chat_action(message.chat.id, "typing") answer = "" name = message.text.strip(". ") if not func.is_correct_educator_name(name): answer = "Недопустимые символы" bot.send_message(message.chat.id, answer, reply_markup=schedule_keyboard) return try: educators_data = spbu.search_educator(name) except spbu.ApiException: answer = "Во время выполнения запроса произошла ошибка." bot.send_message(message.chat.id, answer, reply_markup=schedule_keyboard) return if not educators_data["Educators"]: answer = "Никого не найдено" bot.send_message(message.chat.id, answer, reply_markup=schedule_keyboard) elif len(educators_data["Educators"]) > 200: answer = "Слишком много преподавателей\n" \ "Пожалуйста, <b>уточни</b>" bot.send_message(message.chat.id, answer, parse_mode="HTML") answer = "Введи Фамилию преподавателя: <i>(и И. О.)</i>" markup = ForceReply(False) bot.send_message(message.chat.id, answer, reply_markup=markup, parse_mode="HTML") else: bot.send_message(message.chat.id, "Готово!", reply_markup=schedule_keyboard) educators_keyboard = InlineKeyboardMarkup(row_width=2) educators_keyboard.add(*[ InlineKeyboardButton(text=educator["DisplayName"], callback_data=str(educator["Id"])) for educator in educators_data["Educators"] ]) educators_keyboard.row( InlineKeyboardButton(text="Отмена", callback_data="Отмена")) answer = "{0} Найденные преподаватели:\n\n".format( emoji["mag_right"]) + answer bot.send_message(message.chat.id, answer, reply_markup=educators_keyboard, parse_mode="HTML")
def problem_text_handler(message): bot.send_chat_action(message.chat.id, "typing") answer = "Если возникла проблема, то:\n" \ "1. Возможно, информация по этому поводу есть в нашем канале" \ " - @Spbu4u_news;\n" \ "2. Ты всегда можешь связаться с " \ "<a href='https://t.me/eeonedown'>разработчиком</a>." bot.send_message(message.chat.id, answer, disable_web_page_preview=True, parse_mode="HTML")
def chose_to_return(message): bot.send_chat_action(message.chat.id, "typing") answer = "Выбери, что ты хочешь вернуть:" inline_keyboard = InlineKeyboardMarkup(True) inline_keyboard.row( *[InlineKeyboardButton(text=name, callback_data=name) for name in ["Преподавателей", "Занятия"]]) inline_keyboard.row( *[InlineKeyboardButton(text=name, callback_data=name) for name in ["Полный сброс"]]) bot.send_message(message.chat.id, answer, reply_markup=inline_keyboard)
def suburban_handler(message): bot.send_chat_action(message.chat.id, "typing") answer = "Меню расписания электричек\n\n" \ "Данные предоставлены сервисом " \ "<a href = 'http://rasp.yandex.ru/'>Яндекс.Расписания</a>" bot.send_message(message.chat.id, answer, reply_markup=suburban_keyboard, parse_mode='HTML', disable_web_page_preview=True)
def today_schedule_handler(message): bot.send_chat_action(message.chat.id, "typing") for_date = datetime.today().date() + server_timedelta if message.text.capitalize() == "Завтра": for_date += timedelta(days=1) json_day = func.get_json_day_data(message.chat.id, for_date) full_place = func.is_full_place(message.chat.id) answer = func.create_schedule_answer(json_day, full_place, message.chat.id) func.send_long_message(bot, answer, message.chat.id)
def about_author(message: Message): bot.send_chat_action(action='typing', chat_id=message.from_user.id) if dbm.get_user_language(message.from_user.id) == "NONE" and ( message.text != "English" and message.text != "Русский"): # bot.send_message(message.chat.id, text.UNDEFINED_LANGUAGE) bot.reply_to(message, text.UNDEFINED_LANGUAGE) else: message_text = getattr( text, dbm.get_user_language(message.from_user.id) + "_about_author")() # bot.send_message(message.chat.id, message_text, parse_mode='HTML') bot.reply_to(message, message_text, parse_mode='HTML')
def calendar_handler(message): bot.send_chat_action(message.chat.id, "typing") answer = "Выбери день:" week_day_calendar = InlineKeyboardMarkup() week_day_calendar.row(*[ InlineKeyboardButton(text=name, callback_data=name) for name in week_day_number.keys() ]) week_day_calendar.row(*[ InlineKeyboardButton(text=name, callback_data=name) for name in ["Вся неделя"] ]) bot.send_message(message.chat.id, answer, reply_markup=week_day_calendar)
def schedule_for_day(message): bot.send_chat_action(message.chat.id, "typing") day = func.text_to_date(message.text.lower()) json_week = func.get_json_week_data(message.chat.id, for_day=day) json_day = func.get_json_day_data(message.chat.id, day_date=day, json_week_data=json_week) full_place = func.is_full_place(message.chat.id) answer = func.create_schedule_answer(json_day, full_place, user_id=message.chat.id, personal=True) func.send_long_message(bot, answer, message.chat.id)
def help_handler(message): bot.send_chat_action(message.chat.id, "typing") inline_full_info_keyboard = InlineKeyboardMarkup() inline_full_info_keyboard.row(*[ InlineKeyboardButton(text=name, callback_data=name) for name in ["Благодарности"] ]) answer = briefly_info_answer bot.send_message(message.chat.id, answer, parse_mode="HTML", reply_markup=inline_full_info_keyboard, disable_web_page_preview=True)
def schedule_for_weekday(message): bot.send_chat_action(message.chat.id, "typing") message.text = message.text.title() if message.text in week_day_titles.values(): week_day = message.text else: week_day = week_day_titles[message.text] day_date = func.get_day_date_by_weekday_title(week_day) json_day = func.get_json_day_data(message.chat.id, day_date) full_place = func.is_full_place(message.chat.id) answer = func.create_schedule_answer(json_day, full_place, message.chat.id) func.send_long_message(bot, answer, message.chat.id)
def set_ENG_language(message: Message): bot.send_chat_action(action='typing', chat_id=message.from_user.id) if dbm.get_user_language(message.from_user.id) == "Russian": # bot.send_message(message.chat.id, "Этот язык уже установлен") bot.reply_to(message, "Этот язык уже установлен") else: dbm.update(user_id=message.from_user.id, item='User_language', new_value='Russian') # bot.send_message(message.chat.id, getattr(text, dbm.get_user_language(message.from_user.id) + "_set")()) bot.reply_to( message, getattr(text, dbm.get_user_language(message.from_user.id) + "_set")())
def set_ENG_language(message: Message): bot.send_chat_action(action='typing', chat_id=message.from_user.id) if dbm.get_user_language(message.from_user.id) == "English": # bot.send_message(message.chat.id, "This language is already set") bot.reply_to(message, "This language is already set") else: dbm.update(user_id=message.from_user.id, item='User_language', new_value='English') # bot.send_message(message.chat.id, getattr(text, dbm.get_user_language(message.from_user.id) + "_set")()) bot.reply_to( message, getattr(text, dbm.get_user_language(message.from_user.id) + "_set")())
def hide_lesson_handler(message): bot.send_chat_action(message.chat.id, "typing") answer = "Здесь ты можешь скрыть любое занятие\n" \ "Выбери день, когда есть это занятие:" json_week_data = func.get_json_week_data(message.chat.id) days = json_week_data["Days"] days_keyboard = InlineKeyboardMarkup(True) for day in days: days_keyboard.row(*[ InlineKeyboardButton(text=name, callback_data=name) for name in [day["DayString"].split(", ")[0].capitalize()] ]) days_keyboard.row(*[ InlineKeyboardButton(text=name, callback_data=name) for name in ["Отмена"] ]) bot.send_message(message.chat.id, answer, reply_markup=days_keyboard)
def rate_handler(message): bot.send_chat_action(message.chat.id, "typing") answer = "Оцените качество сервиса:" user_rate = func.get_user_rate(message.chat.id) rate_keyboard = InlineKeyboardMarkup(row_width=5) rate_keyboard.add(*[ InlineKeyboardButton(text=emoji["star2"] if user_rate < count_of_stars else emoji["star"], callback_data=str(count_of_stars)) for count_of_stars in (1, 2, 3, 4, 5) ]) rate_keyboard.add(*[ InlineKeyboardButton(text=name, callback_data=name) for name in ["Связь", "Статистика"] ]) bot.send_message(message.chat.id, answer, parse_mode="HTML", reply_markup=rate_keyboard)
def place_handler(message): bot.send_chat_action(message.chat.id, "typing") answer = "Здесь ты можешь выбрать отображаемый формат адреса\nСейчас: " place_keyboard = InlineKeyboardMarkup(True) if func.is_full_place(message.chat.id): answer += "<b>Полностью</b>" place_keyboard.row(*[ InlineKeyboardButton(text=name, callback_data="Аудитория") for name in ["Только аудитория"] ]) else: answer += "<b>Только аудитория</b>" place_keyboard.row(*[ InlineKeyboardButton(text=name, callback_data="Полностью") for name in ["Полностью"] ]) bot.send_message(message.chat.id, answer, parse_mode="HTML", reply_markup=place_keyboard)
def sending_handler(message): bot.send_chat_action(message.chat.id, "typing") answer = "Здесь ты можешь <b>подписаться</b> на рассылку расписания на " + \ "следующий день или <b>отписаться</b> от неё.\n" + \ "Рассылка производится в 21:00" sending_keyboard = InlineKeyboardMarkup(True) if func.is_sending_on(message.chat.id): sending_keyboard.row(*[ InlineKeyboardButton(text=name, callback_data="Отписаться") for name in [emoji["cross_mark"] + " Отписаться"] ]) else: sending_keyboard.row(*[ InlineKeyboardButton(text=name, callback_data="Подписаться") for name in [emoji["check_mark"] + " Подписаться"] ]) bot.send_message(message.chat.id, answer, parse_mode="HTML", reply_markup=sending_keyboard)
def start_handler(message): answer = "" if bot_name != "Spbu4UBot" and message.chat.id not in ids.values(): answer = "Это тестовый бот. Используйте @Spbu4UBot" bot.send_message(message.chat.id, answer) return if message.text == "/start": answer = "Приветствую!\n" elif message.text.split()[1].isdecimal(): answer = "Приветствую!\nДобавляю тебя в группу..." bot_msg = bot.send_message(message.chat.id, answer) try: group_id = int(message.text.split()[1]) except ValueError: answer = "Ошибка в id группы." bot.edit_message_text(answer, message.chat.id, bot_msg.message_id) message.text = "/start" start_handler(message) return try: res = spbu.get_group_events(group_id) except spbu.ApiException: answer = "Ошибка в id группы." bot.edit_message_text(answer, message.chat.id, bot_msg.message_id) message.text = "/start" start_handler(message) return group_title = res["StudentGroupDisplayName"][7:] func.add_new_user(message.chat.id, group_id, group_title) answer = "Готово!\nГруппа <b>{0}</b>".format(group_title) bot.edit_message_text(answer, message.chat.id, bot_msg.message_id, parse_mode="HTML") answer = "Главное меню\n\n" \ "{0} - информация о боте\n" \ "{1} - оценить бота\n" \ "{2} - настройки\n" \ "{3} - электрички\n" \ "{4} - <b>редактор расписания</b>\n" \ "@Spbu4u_news - новости бота".format(emoji["info"], emoji["star"], emoji["settings"], emoji["suburban"], emoji["editor"]) bot.send_message(chat_id=message.chat.id, text=answer, reply_markup=main_keyboard, parse_mode="HTML") return answer += "Загружаю список направлений..." bot_msg = bot.send_message(message.chat.id, answer) bot.send_chat_action(message.chat.id, "typing") answer = "Укажи свое направление:" divisions = spbu.get_study_divisions() division_names = [division["Name"] for division in divisions] divisions_keyboard = ReplyKeyboardMarkup(True, False) for division_name in division_names: divisions_keyboard.row(division_name) divisions_keyboard.row("Поддержка", "Завершить") data = dumps(divisions) sql_con = func.get_connection() cursor = sql_con.cursor() cursor.execute("""DELETE FROM user_choice WHERE user_id = %s""", (message.chat.id, )) sql_con.commit() cursor.execute( """INSERT INTO user_choice (user_id, divisions_json) VALUES (%s, %s)""", (message.chat.id, data)) sql_con.commit() cursor.close() sql_con.close() bot.edit_message_text(text="Готово!", chat_id=message.chat.id, message_id=bot_msg.message_id) bot.send_message(message.chat.id, answer, reply_markup=divisions_keyboard) reg_func.set_next_step(message.chat.id, "select_division")
def exit_handler(message): bot.send_chat_action(message.chat.id, "typing") func.delete_user(message.chat.id, only_choice=False) remove_keyboard = ReplyKeyboardRemove(True) answer = "До встречи!" bot.send_message(message.chat.id, answer, reply_markup=remove_keyboard)