Przeglądaj źródła

Upgrade moderation sequence

Librellium 3 miesięcy temu
rodzic
commit
44c6ac03aa
1 zmienionych plików z 45 dodań i 19 usunięć
  1. 45 19
      podslv21_bot/bot/routers/media.py

+ 45 - 19
podslv21_bot/bot/routers/media.py

@@ -67,44 +67,70 @@ class MediaRouter(Router):
 
                 try:
                     if can_send_media(messages):
+                        moderation = self.config.moderation.enabled
+                        moderation_passed = not moderation
+
+                        group_message_id = None
+                        targets = {
+                            self.config.forwarding.moderation_chat_id: True
+                        }
+
                         sent_message = await message.answer("Сообщение отправлено на модерацию...")
                         if len(messages) > 1:
                             media = []
                             for msg in messages:
-                                if self.config.moderation.enabled and msg.caption:
+                                if moderation and msg.caption:
                                     async for event in self.executor.process_message(msg.caption):
-                                        if event.type == "moderation_decision" and event.result.status == "REJECT":
-                                            await sent_message.edit_text("Сообщение не прошло модерацию.")
-                                            return
+                                        if event.type == "moderation_decision":
+                                            if event.result.status == "PASS":
+                                                moderation_passed = True
+                                            elif event.result.status == "REJECT":
+                                                await sent_message.edit_text("Сообщение не прошло модерацию.")
 
                                 media.append(get_media(msg))
 
-                            group_message_id = (await bot.send_media_group(
-                                self.config.forwarding.target_chat_id,
-                                media
-                            ))[0].message_id
+                            if moderation_passed:
+                                targets[self.config.forwarding.publication_chat_id] = False
+
+                            for target, save_message_id in targets.items():
+                                messages = await bot.send_media_group(
+                                    target,
+                                    media
+                                )
+
+                                if save_message_id:
+                                    group_message_id = messages[0].message_id
                         elif len(messages) == 1:
                             msg = messages[0]
                             caption = msg.caption
 
-                            if self.config.moderation.enabled:
+                            if moderation and caption:
                                 async for event in self.executor.process_message(caption):
-                                    if event.type == "moderation_decision" and event.result.status == "REJECT":
-                                        await sent_message.edit_text("Сообщение не прошло модерацию.")
-                                        return
+                                    if event.type == "moderation_decision":
+                                        if event.result.status == "PASS":
+                                            moderation_passed = True
+                                        elif event.result.status == "REJECT":
+                                            await sent_message.edit_text("Сообщение не прошло модерацию.")
+
+                            targets[self.config.forwarding.publication_chat_id] = False
 
                             func = bot.send_photo if msg.photo else bot.send_video
                             file_id = msg.photo[-1].file_id if msg.photo else msg.video.file_id
 
-                            group_message_id = (await func(
-                                self.config.forwarding.target_chat_id,
-                                file_id,
-                                caption=self.config.forwarding.message_template.format(text=msg.caption or ""),
-                                parse_mode="HTML"
-                            )).message_id
+                            for target, save_message_id in targets.items():
+                                msg = await func(
+                                    target,
+                                    file_id,
+                                    caption=self.config.forwarding.message_template.format(text=msg.caption or ""),
+                                    parse_mode="HTML"
+                                )
+
+                                if save_message_id:
+                                    group_message_id = msg.message_id
 
                         self.message_manager.add(reply_to_message_id, group_message_id, message.chat.id)
-                        await message.answer("Сообщение успешно отправлено!")
+                        if moderation_passed:
+                            await message.answer("Сообщение успешно отправлено!")
                 except (TelegramBadRequest, TelegramForbiddenError) as e:
                     await message.answer(f'Не удалось отправить сообщение: "{e}"')