64 lines
2.4 KiB
Python
64 lines
2.4 KiB
Python
import datetime
|
||
from time import sleep
|
||
|
||
from telebot.apihelper import ApiTelegramException
|
||
|
||
from daemons.bot import bot
|
||
from helpers import now, get_next_daily_notify_time
|
||
from helpers.models import UserSchema
|
||
from helpers.mongo import mongo
|
||
from helpers.ruz import ruz
|
||
|
||
|
||
def process():
|
||
for user in mongo.users_collection.find({"notify_minutes": {"$ne": None}, "hse_id": {"$ne": None}}):
|
||
for lesson in mongo.lessons_collection.find({
|
||
"hse_user_id": user["hse_id"],
|
||
"begin": {"$lte": now() + datetime.timedelta(minutes=user["notify_minutes"])},
|
||
"notified": False
|
||
}):
|
||
ans = ""
|
||
ans += f"Аудитория: {lesson['building']}, {lesson['auditorium']}\n"
|
||
ans += f"Начало: {lesson['begin'].strftime('%H:%M')}\n"
|
||
ans += f"Конец: {lesson['end'].strftime('%H:%M')}\n"
|
||
ans += f"Преподаватель: {(lesson['lecturer'] or 'Неизвестно')}\n"
|
||
try:
|
||
bot.send_message(
|
||
user["chat_id"],
|
||
"Уведомляю о занятиях!\n" + ans
|
||
)
|
||
except ApiTelegramException:
|
||
pass
|
||
mongo.lessons_collection.update_one({"_id": lesson['_id']}, {"$set": {"notified": True}})
|
||
time_now = now()
|
||
for user in mongo.users_collection.find({"next_daily_notify_time": {"$lte": time_now}}):
|
||
user_model = UserSchema().load(user)
|
||
if time_now.weekday() != 6:
|
||
lessons = mongo.get_today_lessons(user_model)
|
||
if len(lessons) == 0:
|
||
text = "Сегодня у тебя нет пар."
|
||
else:
|
||
text = ruz.schedule_builder(lessons)
|
||
try:
|
||
bot.send_message(
|
||
user["chat_id"],
|
||
"Уведомляю о занятиях! Твое расписание на сегодня:\n" + text
|
||
)
|
||
except:
|
||
pass
|
||
mongo.users_collection.update_one(
|
||
{"chat_id": user["chat_id"]},
|
||
{"$set": {"next_daily_notify_time": get_next_daily_notify_time(user_model, time_now)}}
|
||
)
|
||
|
||
|
||
def notify():
|
||
while True:
|
||
print("notify start")
|
||
begin = datetime.datetime.now()
|
||
process()
|
||
end = datetime.datetime.now()
|
||
print('notify finished')
|
||
print("time elapsed", (end - begin).total_seconds())
|
||
sleep(60)
|