daily notify

This commit is contained in:
Administrator
2022-10-21 18:17:41 +03:00
parent 54c47001b7
commit 61436be630
8 changed files with 181 additions and 68 deletions

View File

@@ -1,14 +1,14 @@
import datetime
import zoneinfo
from time import sleep
from helpers import now
from helpers.mongo import mongo
from helpers.ruz import ruz
from settings import MOSCOW_TIMEZONE
def fetch_schedule_for_user(user_hse_id: int):
zone = zoneinfo.ZoneInfo("Europe/Moscow")
today = datetime.datetime.now(zone)
today = now()
next_day = today + datetime.timedelta(days=7)
schedule = ruz.get_schedule(user_hse_id, today, next_day)
if schedule is None:
@@ -27,7 +27,8 @@ def fetch_schedule_for_user(user_hse_id: int):
month=int(month),
day=int(day),
hour=int(begin_hour),
minute=int(begin_minute)
minute=int(begin_minute),
tzinfo=MOSCOW_TIMEZONE
)
})
if lesson is None:
@@ -40,14 +41,16 @@ def fetch_schedule_for_user(user_hse_id: int):
month=int(month),
day=int(day),
hour=int(begin_hour),
minute=int(begin_minute)
minute=int(begin_minute),
tzinfo=MOSCOW_TIMEZONE
),
"end": datetime.datetime(
year=int(year),
month=int(month),
day=int(day),
hour=int(end_hour),
minute=int(end_minute)
minute=int(end_minute),
tzinfo=MOSCOW_TIMEZONE
),
"building": element['building'],
"lecturer": element['lecturer'],
@@ -66,9 +69,7 @@ def process():
def delete_old():
zone = zoneinfo.ZoneInfo("Europe/Moscow")
today = datetime.datetime.now(zone)
mongo.lessons_collection.delete_many({"end": {"$lte": today - datetime.timedelta(days=1)}})
mongo.lessons_collection.delete_many({"end": {"$lte": now() - datetime.timedelta(days=1)}})
def fetch():

View File

@@ -2,19 +2,42 @@ import datetime
import zoneinfo
from time import sleep
import croniter
import pytz
from telebot.apihelper import ApiTelegramException
from daemons.bot import bot
from helpers import now
from helpers.keyboards import main_keyboard
from helpers.models import UserSchema
from helpers.mongo import mongo
from helpers.ruz import ruz
def process():
for user in mongo.users_collection.find({"hse_id": {"$ne": None}, "next_notify_time": {"$lte": now()}}):
try:
lessons = mongo.get_today_lessons(UserSchema().load(user))
if len(lessons) == 0:
ans = "Сегодня у тебя нет пар."
else:
ans = ruz.schedule_builder(lessons)
bot.send_message(
user['chat_id'],
"Напоминаю о занятиях сегодня!\n" + ans,
reply_markup=main_keyboard()
)
except:
pass
hours, minutes = user['notify_daily'].split(':')
cron = croniter.croniter(f"{minutes} {hours} * * *", now())
next_date = cron.get_next(datetime.datetime)
next_date = next_date.replace(tzinfo=pytz.timezone('Europe/Moscow'))
mongo.users_collection.update_one({"chat_id": user['chat_id']}, {"$set": {"next_notify_time": next_date}})
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)},
"begin": {"$lte": now() + datetime.timedelta(minutes=5)},
"notified": False
}):
ans = ""