Przeglądaj źródła

Add SubscriptionMiddleware

Librellium 3 miesięcy temu
rodzic
commit
00cb42ed40
1 zmienionych plików z 34 dodań i 0 usunięć
  1. 34 0
      anonflow/bot/middleware/subscription.py

+ 34 - 0
anonflow/bot/middleware/subscription.py

@@ -0,0 +1,34 @@
+from typing import List
+
+from aiogram import BaseMiddleware
+from aiogram.enums import ChatMemberStatus
+from aiogram.types import ChatIdUnion, Message
+
+from anonflow.bot.utils.template_renderer import TemplateRenderer
+
+from .utils import extract_message
+
+
+class SubscriptionMiddleware(BaseMiddleware):
+    def __init__(self, channel_ids: List[ChatIdUnion], template_renderer: TemplateRenderer):
+        super().__init__()
+
+        self.channel_ids = channel_ids
+        self.renderer = template_renderer
+
+    async def __call__(self, handler, event, data):
+        message = extract_message(event)
+
+        if isinstance(message, Message):
+            user_id = message.from_user.id
+            for channel_id in self.channel_ids:
+                member = await message.bot.get_chat_member(channel_id, user_id)
+                if member.status in (ChatMemberStatus.KICKED, ChatMemberStatus.LEFT):
+                    await message.answer(
+                        await self.renderer.render(
+                            "messages/users/send/subscription_required.j2", message=message
+                        )
+                    )
+                    return
+
+        return await handler(event, data)