Files
aero/main.py
T

90 lines
3.4 KiB
Python

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())