Przeglądaj źródła

Add moderation stage to text forwarding sequence

Librellium 3 miesięcy temu
rodzic
commit
ca82f67079
1 zmienionych plików z 16 dodań i 7 usunięć
  1. 16 7
      podslv21_bot/bot/routers/text.py

+ 16 - 7
podslv21_bot/bot/routers/text.py

@@ -7,19 +7,19 @@ from aiogram.types import Message
 
 from podslv21_bot.bot.message_manager import MessageManager
 from podslv21_bot.config import Config
-from podslv21_bot.moderation import AsyncModerator
+from podslv21_bot.moderation import ModerationExecutor
 
 
 class TextRouter(Router):
     def __init__(self,
                  config: Config,
                  message_manager: MessageManager,
-                 moderator: Optional[AsyncModerator] = None):
+                 executor: Optional[ModerationExecutor] = None):
         super().__init__()
 
         self.config = config
         self.message_manager = message_manager
-        self.moderator = moderator
+        self.executor = executor
 
         self._register_handlers()
 
@@ -36,11 +36,20 @@ class TextRouter(Router):
                         reply_to_message_id, chat_id = result
                         try:
                             await bot.send_message(chat_id, message.text, reply_to_message_id=reply_to_message_id)
-                            await message.answer("Ответ успешно отправлен!")
+                            await message.answer("Ответ успешно отправлен!")
                         except (TelegramBadRequest, TelegramForbiddenError) as e:
-                            await message.answer(f'Не удалось отправить ответ: "{e}"')
+                            await message.answer(f'Не удалось отправить ответ: "{e}"')
             elif message.chat.type == ChatType.PRIVATE and "text" in self.config.forwarding.types:
                 try:
+                    if self.config.moderation.enabled:
+                        sent_message = await message.answer("Сообщение отправлено на модерацию...")
+                        async for event in self.executor.process_message(message.text):
+                            if event.type == "moderation_decision" and event.result.status == "REJECT":
+                                await sent_message.edit_text("Сообщение не прошло модерацию.")
+                                return
+
+                        await sent_message.delete()
+
                     reply_to_message_id = message.message_id
                     group_message_id = (await bot.send_message(
                         self.config.forwarding.target_chat_id,
@@ -49,6 +58,6 @@ class TextRouter(Router):
                     )).message_id
 
                     self.message_manager.add(reply_to_message_id, group_message_id, message.chat.id)
-                    await message.answer("Сообщение успешно отправлено!")
+                    await message.answer("Сообщение успешно отправлено!")
                 except (TelegramBadRequest, TelegramForbiddenError) as e:
-                    await message.answer(f'Не удалось отправить сообщение: "{e}"')
+                    await message.answer(f'Не удалось отправить сообщение: "{e}"')