""" Планировщик фоновых задач для бота """ from apscheduler.schedulers.asyncio import AsyncIOScheduler from apscheduler.triggers.cron import CronTrigger import logging from src.core.activity_service import ActivityService logger = logging.getLogger(__name__) class BotScheduler: """Планировщик задач для бота""" def __init__(self): self.scheduler = AsyncIOScheduler() def setup_jobs(self): """Настройка всех периодических задач""" # Проверка неактивных пользователей каждый день в 03:00 self.scheduler.add_job( self._check_inactive_users, trigger=CronTrigger(hour=3, minute=0), id='check_inactive_users', name='Проверка неактивных пользователей', replace_existing=True ) logger.info("Планировщик задач настроен") async def _check_inactive_users(self): """Проверка и блокировка неактивных пользователей""" try: logger.info("Запуск проверки неактивных пользователей") marked = await ActivityService.check_and_mark_inactive_users() logger.info(f"Проверка завершена. Неактивных пользователей помечено: {marked}") except Exception as e: logger.error(f"Ошибка при проверке неактивных пользователей: {e}", exc_info=True) def start(self): """Запуск планировщика""" self.setup_jobs() self.scheduler.start() logger.info("Планировщик задач запущен") def shutdown(self): """Остановка планировщика""" if self.scheduler.running: self.scheduler.shutdown() logger.info("Планировщик задач остановлен") # Глобальный экземпляр планировщика bot_scheduler = BotScheduler()