import datetime import zoneinfo from time import sleep from telebot.apihelper import ApiTelegramException from daemons.bot import bot from helpers.mongo import mongo def process(): for user in mongo.users_collection.find({"notify_minutes": {"$ne": None}, "hse_id": {"$ne": None}}): zone = zoneinfo.ZoneInfo("Europe/Moscow") now = datetime.datetime.now(zone) for lesson in mongo.lessons_collection.find({ "hse_user_id": user["hse_id"], "begin": {"$lte": now + datetime.timedelta(minutes=5)}, "notified": False }): ans = "" ans += "Аудитория: " + lesson["building"] + ", " + lesson["auditorium"] + "\n" ans += "Начало: " + lesson["begin"].strftime("%H:%M") + "\n" ans += "Конец: " + lesson["end"].strftime("%H:%M") + "\n" ans += "Преподаватель: " + (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}}) 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 * 2)