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(): time_now = now() print(time_now) 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": time_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}}) 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)