discordBot/utils/cat.py

33 lines
977 B
Python

import asyncio
import logging
import os
import requests
from utils.rate_limiter import cat_limiter
logger = logging.getLogger(__name__)
CAT_API_URL = "https://api.thecatapi.com/v1/images/search"
_cat_api_key: str | None = os.getenv("CAT_API_KEY")
_session = requests.Session()
async def fetch_cat() -> str | None:
"""Получить URL случайного котика. Вернуть None при ошибке."""
await cat_limiter.acquire()
headers: dict[str, str] | None = None
if _cat_api_key:
headers = {"x-api-key": _cat_api_key}
try:
response = await asyncio.to_thread(
_session.get, CAT_API_URL, timeout=10, headers=headers
)
response.raise_for_status()
data = response.json()
return data[0]["url"]
except (requests.exceptions.RequestException, IndexError, KeyError) as e:
logger.error("Ошибка при получении котика: %s", e)
return None