daily notify
This commit is contained in:
@@ -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():
|
||||
|
||||
@@ -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 = ""
|
||||
|
||||
Reference in New Issue
Block a user