57 lines
2.2 KiB
Python
57 lines
2.2 KiB
Python
"""
|
|
Планировщик фоновых задач для бота
|
|
"""
|
|
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()
|