"""Keep sensitive dialogs private and report unexpected failures safely.""" import logging from aiogram import BaseMiddleware from aiogram.types import CallbackQuery, Message from aiogram.exceptions import TelegramBadRequest logger = logging.getLogger(__name__) class PrivateDialogMiddleware(BaseMiddleware): async def __call__(self, handler, event, data): message = event if isinstance(event, Message) else getattr(event, "message", None) if message and message.chat.type != "private": if isinstance(event, CallbackQuery): await event.answer("Откройте личный диалог с ботом", show_alert=True) return return await handler(event, data) class ErrorMiddleware(BaseMiddleware): async def __call__(self, handler, event, data): try: return await handler(event, data) except TelegramBadRequest as error: if "message is not modified" in str(error): if isinstance(event, CallbackQuery): await event.answer() return logger.exception("Telegram rejected a bot response") except Exception: logger.exception("Update handler failed") message = event.message if isinstance(event, CallbackQuery) else event if message: try: await message.answer("Не удалось выполнить действие. Попробуйте ещё раз или отправьте /cancel.") except Exception: logger.warning("Failed to deliver error response")