import asyncio from datetime import datetime from aiogram import Dispatcher, Bot, F from aiogram.enums import ParseMode from aiogram.filters import Command from aiogram.types import Message from DB import UseDB from additional_functions import on_notification, set_group, timetable_for_day, timetable_day TOKEN = "6555348338:AAHhjvljGrW9wt1ZKjMEIiBEOyHDNCFznKU" dp = Dispatcher() @dp.message(Command("start")) async def start_handler(msg: Message): await msg.answer( "Приветствую!\nЭтот бот предназначен для просмотра расписания занятий " "для любой группы СибГУ, включая сегодня, завтра и послезавтра.\n" "Для начала, пожалуйста, укажите номер вашей группы с помощью команды " "/set_group номер_группы.\nНомер группы доступен по ссылке: " "timetable.pallada.sibsau.ru/timetable/group/номер_группы.\n" "После настройки вы сможете легко узнать расписание на интересующий вас день.\n" "Также предоставляется возможность подписки на уведомления о расписании, " "используя команду /on_notification часы:минуты, чтобы получать напоминания в " "удобное для вас время." ) @dp.message(Command("set_group")) async def start_handler(msg: Message): if len(msg.text.split()) == 2: await set_group(msg) else: await msg.answer( "Введённая вами команда содержит ошибку. " "Правильный формат команды: /set_group номер_группы." ) @dp.message(Command("on_notification")) async def start_handler(msg: Message): if len(msg.text.split()) == 2: await on_notification(msg) else: await msg.answer( "Введённая вами команда содержит ошибку. " "Правильный формат команды: /on_notification часы:минуты." ) @dp.message(F.text == "сегодня") @dp.message(Command("today")) async def start_handler(msg: Message): await timetable_for_day(msg) @dp.message(F.text == "завтра") @dp.message(Command("tomorrow")) async def start_handler(msg: Message): await timetable_for_day(msg, 1) @dp.message(F.text == "послезавтра") @dp.message(Command("the_day_after_tomorrow")) async def start_handler(msg: Message): await timetable_for_day(msg, 2) async def send_notification(bot): while True: db = UseDB("users") responses = db.find_document({}) for response in responses: _, user_id, group_id, notification = response.values() now = datetime.now() if now.hour == notification.hour and now.minute == notification.minute: await timetable_day(user_id, group_id, bot) await asyncio.sleep(59) async def main() -> None: bot = Bot(TOKEN, parse_mode=ParseMode.HTML) _ = asyncio.create_task(send_notification(bot)) await dp.start_polling(bot) if __name__ == "__main__": asyncio.run(main())