Template
38 lines
923 B
Python
38 lines
923 B
Python
"""Алерты админам в Telegram (health / ошибки оплат)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
import time
|
|
from typing import TYPE_CHECKING
|
|
|
|
if TYPE_CHECKING:
|
|
from aiogram import Bot
|
|
from config import Settings
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
_last_sent: dict[str, float] = {}
|
|
|
|
|
|
async def alert_admins(
|
|
bot: Bot | None,
|
|
settings: Settings,
|
|
text: str,
|
|
*,
|
|
key: str = "generic",
|
|
cooldown_sec: float = 300.0,
|
|
) -> None:
|
|
if bot is None or not settings.admin_ids:
|
|
return
|
|
now = time.monotonic()
|
|
last = _last_sent.get(key, 0.0)
|
|
if now - last < cooldown_sec:
|
|
return
|
|
_last_sent[key] = now
|
|
for admin_id in settings.admin_ids:
|
|
try:
|
|
await bot.send_message(admin_id, text, parse_mode="HTML")
|
|
except Exception: # noqa: BLE001
|
|
logger.warning("admin alert failed id=%s", admin_id)
|