import re import datetime from aiogram.types import Message, ReplyKeyboardMarkup, KeyboardButton from aiogram import Bot from get import get_timetable_for_day, fetch_timetable_data from DB import UseDB def get_group_id(user_id): db = UseDB("users") if db.find_document({"user_id": user_id}): return db.find_document({"user_id": user_id})[0]["group_id"] else: return None async def on_notification(msg: Message): time_on_notification = msg.text.split()[1] pattern = r'^([01]?[0-9]|2[0-3]):([0-5]?[0-9])$' if re.match(pattern, time_on_notification): time_obj = datetime.datetime.strptime(time_on_notification, "%H:%M") db = UseDB("users") db.update_document( {"user_id": msg.from_user.id}, {"notification": time_obj} ) await msg.answer(f"Отлично, время теперь установленно на: {time_obj}") else: await msg.answer( "Формат времени не правильный. " "Правильный формат команды: /on_notification часы:минуты." ) async def set_group(msg: Message): try: group_id = int(msg.text.split()[1]) except ValueError: return await msg.answer( "Указанная вами группа не найдена. " "Пожалуйста, проверьте корректность номера группы." ) response = fetch_timetable_data(group_id) if "404" in str(response) or "500" in str(response): await msg.answer( "Указанная вами группа не найдена. " "Пожалуйста, проверьте корректность номера группы." ) else: db = UseDB("users") if db.find_document({"user_id": msg.from_user.id}): db.update_document( {"user_id": msg.from_user.id}, {"group_id": group_id} ) else: db.insert_document( { "user_id": msg.from_user.id, "group_id": group_id, "notification": "off" } ) kb = [ [KeyboardButton(text="сегодня")], [KeyboardButton(text="завтра")], [KeyboardButton(text="послезавтра")] ] keyboard = ReplyKeyboardMarkup(keyboard=kb, resize_keyboard=True) await msg.answer("Я сохранил группу для вас.", reply_markup=keyboard) async def timetable_for_day(msg: Message, shift: int = 0): group_id = get_group_id(msg.from_user.id) if group_id is None: return await msg.answer( "Кажется, вашего пользователя нет в нашей базе данных." "Чтобы начать работу, пожалуйста, укажите вашу группу с " "помощью команды: /set_group номер_группы." ) for text in get_timetable_for_day(group_id, shift): await msg.answer(text) async def timetable_day(user_id: int, group_id: int, bot: Bot): for text in get_timetable_for_day(group_id, 1): await bot.send_message(chat_id=user_id, text=text)