from collections.abc import Awaitable, Callable from typing import Any from aiogram import BaseMiddleware from aiogram.types import CallbackQuery, Message, TelegramObject from .binding import BindingService class BindingRequiredMiddleware(BaseMiddleware): """Не пропускает CRM-команды до привязки аккаунта.""" def __init__(self, bindings: BindingService) -> None: self.bindings = bindings async def __call__( self, handler: Callable[[TelegramObject, dict[str, Any]], Awaitable[Any]], event: TelegramObject, data: dict[str, Any] ) -> Any: user = data.get("event_from_user") if user: binding = await self.bindings.find(user.id) if binding: data["binding"] = binding return await handler(event, data) text = "Сначала привяжи Telegram через приложение в Bitrix24." if isinstance(event, CallbackQuery): await event.answer(text, show_alert=True) elif isinstance(event, Message): await event.answer(text) return None