54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
import logging
|
|
from datetime import datetime
|
|
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
|
from prompts import FACTS, HOLIDAYS
|
|
from config import ALLOWED_CHAT_ID
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
class BytikScheduler:
|
|
def __init__(self, bot):
|
|
self.bot = bot
|
|
self.scheduler = AsyncIOScheduler(timezone="Europe/Moscow")
|
|
|
|
def start(self):
|
|
self.scheduler.add_job(
|
|
self.send_morning_fact,
|
|
"cron",
|
|
hour=7,
|
|
minute=30,
|
|
timezone="Europe/Moscow",
|
|
)
|
|
self.scheduler.add_job(
|
|
self.check_holidays,
|
|
"cron",
|
|
hour=8,
|
|
minute=0,
|
|
timezone="Europe/Moscow",
|
|
)
|
|
self.scheduler.start()
|
|
logger.info("Планировщик запущен")
|
|
|
|
def shutdown(self):
|
|
self.scheduler.shutdown()
|
|
logger.info("Планировщик остановлен")
|
|
|
|
async def send_morning_fact(self):
|
|
import random
|
|
fact = random.choice(FACTS)
|
|
try:
|
|
await self.bot.send_message(chat_id=ALLOWED_CHAT_ID, text=fact)
|
|
logger.info(f"Утренняя рассылка отправлена: {fact[:50]}...")
|
|
except Exception as e:
|
|
logger.error(f"Ошибка утренней рассылки: {e}")
|
|
|
|
async def check_holidays(self):
|
|
today = datetime.now().strftime("%m-%d")
|
|
if today in HOLIDAYS:
|
|
message = HOLIDAYS[today]
|
|
try:
|
|
await self.bot.send_message(chat_id=ALLOWED_CHAT_ID, text=message)
|
|
logger.info(f"Праздничное поздравление отправлено: {today}")
|
|
except Exception as e:
|
|
logger.error(f"Ошибка отправки праздничного сообщения: {e}")
|