|
@@ -4,25 +4,25 @@ from aiogram import BaseMiddleware
|
|
|
from aiogram.enums import ChatMemberStatus, ChatType
|
|
from aiogram.enums import ChatMemberStatus, ChatType
|
|
|
from aiogram.types import ChatIdUnion, Message
|
|
from aiogram.types import ChatIdUnion, Message
|
|
|
|
|
|
|
|
-from anonflow.services import MessageRouter
|
|
|
|
|
-from anonflow.services.transport.results import UserSubscriptionRequiredResult
|
|
|
|
|
|
|
+from anonflow.interfaces import UserResponsesPort
|
|
|
|
|
+from anonflow.services.transport.types import RequestContext
|
|
|
|
|
|
|
|
|
|
|
|
|
class SubscriptionMiddleware(BaseMiddleware):
|
|
class SubscriptionMiddleware(BaseMiddleware):
|
|
|
- def __init__(self, channel_ids: Tuple[ChatIdUnion], message_router: MessageRouter):
|
|
|
|
|
|
|
+ def __init__(self, responses_port: UserResponsesPort, channel_ids: Tuple[ChatIdUnion]):
|
|
|
super().__init__()
|
|
super().__init__()
|
|
|
|
|
|
|
|
- self.channel_ids = channel_ids
|
|
|
|
|
- self.message_router = message_router
|
|
|
|
|
|
|
+ self._responses_port = responses_port
|
|
|
|
|
+ self._channel_ids = channel_ids
|
|
|
|
|
|
|
|
async def __call__(self, handler, event, data):
|
|
async def __call__(self, handler, event, data):
|
|
|
message = getattr(event, "message", None)
|
|
message = getattr(event, "message", None)
|
|
|
if isinstance(message, Message) and message.chat.type == ChatType.PRIVATE:
|
|
if isinstance(message, Message) and message.chat.type == ChatType.PRIVATE:
|
|
|
user_id = message.from_user.id # type: ignore
|
|
user_id = message.from_user.id # type: ignore
|
|
|
- for channel_id in self.channel_ids:
|
|
|
|
|
|
|
+ for channel_id in self._channel_ids:
|
|
|
member = await message.bot.get_chat_member(channel_id, user_id) # type: ignore
|
|
member = await message.bot.get_chat_member(channel_id, user_id) # type: ignore
|
|
|
if member.status in (ChatMemberStatus.KICKED, ChatMemberStatus.LEFT):
|
|
if member.status in (ChatMemberStatus.KICKED, ChatMemberStatus.LEFT):
|
|
|
- await self.message_router.dispatch(UserSubscriptionRequiredResult(), message)
|
|
|
|
|
|
|
+ await self._responses_port.user_subscription_required(RequestContext(message.chat.id, data["user_language"]))
|
|
|
return
|
|
return
|
|
|
|
|
|
|
|
return await handler(event, data)
|
|
return await handler(event, data)
|