90 lines
3.4 KiB
Python
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())
|