It's version 0.8.3 bug fix ТЕПЕРЬ УЖ точно восстановлена система слежения расписания

This commit is contained in:
Niken
2026-05-20 22:35:42 +03:00
parent bbd9c839d5
commit c0edc77a11
8 changed files with 82 additions and 27 deletions
+24 -7
View File
@@ -1,8 +1,8 @@
import asyncio
from random import randint
from datetime import datetime, timedelta
from aiogram import Bot, types
from config import Config
from logging import getLogger
from models.state import BotState
@@ -47,6 +47,20 @@ class WatcherService:
Config.WATCHER_RANDOM_DELAY_MAX,
)
@staticmethod
def _get_target_date_with_weekend_handling(days_ahead: int) -> datetime:
"""
Получить целевую дату с учетом выходных.
Если целевая дата - воскресенье, переносится на понедельник.
"""
target = (datetime.now() + timedelta(days=days_ahead)).replace(
hour=0, minute=0, second=0, microsecond=0
)
# weekday() returns 6 for Sunday
if target.weekday() == 6:
target += timedelta(days=1)
return target
async def _watcher_loop(self):
"""Основной цикл слежки за появлением PDF на Google Drive."""
while self.state.watcher_work:
@@ -71,12 +85,14 @@ class WatcherService:
Возвращает True, если расписание ещё недоступно ни для одной группы.
Возвращает False, если хотя бы одной группе отправили расписание.
"""
target = self.schedule_service._resolve_target_date(0)
days_ahead = self.state.watcher_days_ahead
target = self._get_target_date_with_weekend_handling(days_ahead)
logger.info(
f"Проверяем Google Drive на расписание за {target.strftime('%d.%m.%Y')}"
f"Проверяем Google Drive на расписание за {target.strftime('%d.%m.%Y')} "
f"(дней вперед: {days_ahead})"
)
if not await self.schedule_service.is_published_for(0):
if not await self.schedule_service.is_published_for(days_ahead):
return True
found_any = False
@@ -84,14 +100,15 @@ class WatcherService:
logger.info(
f"Проверяем расписание для {group} на {target.strftime('%d.%m.%Y')}"
)
if await self._check_group_schedule(group, chat_id):
if await self._check_group_schedule(group, chat_id, days_ahead):
found_any = True
return not found_any
async def _check_group_schedule(self, group: str, chat_id: int) -> bool:
async def _check_group_schedule(self, group: str, chat_id: int, days_ahead: int) -> bool:
target = self._get_target_date_with_weekend_handling(days_ahead)
text, url, data_day, data_month = await self.schedule_service.get_schedule(
group, 0
group, target.day
)
if not self.schedule_service.is_schedule_missing(text):
msg = await self.bot.send_message(