diff --git a/__pycache__/main.cpython-313.pyc b/__pycache__/main.cpython-313.pyc new file mode 100644 index 0000000..080bf73 Binary files /dev/null and b/__pycache__/main.cpython-313.pyc differ diff --git a/main.py b/main.py index 310ff87..352f2b1 100644 --- a/main.py +++ b/main.py @@ -123,32 +123,8 @@ async def main_menu(msg: Message): return elif action == "PHOTO": USER_MENU_SHOWN[user_id] = True - from photo_bot.handlers import check_moderation_status - from utils.texts import photo_moderation_pending, photo_rejected_notice - if not PHOTO_TEST_MODE: - status = await check_moderation_status(user_id) - if status.get("status") == "ok" and status.get("moderation_status") == "pending": - photo_id = status.get("photo_id", "???") - log_menu_stats(user_id, "Photo Bot", "Вход заблокирован — фото на модерации") - await msg.answer( - photo_moderation_pending(photo_id), - parse_mode="html" - ) - return - elif status.get("status") == "ok" and status.get("moderation_status") == "rejected": - reason = (status.get("rejection_reason") or "Причина не указана.").strip() - log_menu_stats(user_id, "Photo Bot", "Вход — фото отклонено, показана причина") - await msg.answer(photo_rejected_notice(reason), parse_mode="html") - # Кнопки остаются: пользователь отправляет новое фото (меню ниже) - elif status.get("status") != "ok": - logger.warning(f"Не удалось проверить статус модерации для {user_id}: {status.get('reason')}") - set_state(user_id, "PHOTO_MODE") - log_menu_stats(user_id, "Photo Bot (TEST)" if PHOTO_TEST_MODE else "Photo Bot", "Вход") - from utils.texts import PHOTO_TEST_ENTRY_TEXT - await msg.answer( - PHOTO_TEST_ENTRY_TEXT if PHOTO_TEST_MODE else PHOTO_MAIN_MENU_TEXT, - parse_mode="html" - ) + from photo_bot.handlers import send_dynamic_photo_main_menu + await send_dynamic_photo_main_menu(msg, user_id) return elif action == "TRANSCRIPTION": USER_MENU_SHOWN[user_id] = True diff --git a/photo_bot/__pycache__/handlers.cpython-313.pyc b/photo_bot/__pycache__/handlers.cpython-313.pyc new file mode 100644 index 0000000..3e6d474 Binary files /dev/null and b/photo_bot/__pycache__/handlers.cpython-313.pyc differ diff --git a/photo_bot/handlers.py b/photo_bot/handlers.py index 242e3a2..16d74c5 100644 --- a/photo_bot/handlers.py +++ b/photo_bot/handlers.py @@ -30,6 +30,8 @@ from utils.texts import ( photo_cancel_text, photo_preview_ready, photo_moderation_pending, + photo_rejected_notice, + PHOTO_TEST_ENTRY_TEXT, PHOTO_TEST_WELCOME_TEXT, PHOTO_TEST_PREVIEW_TEXT, PHOTO_TEST_AI_CHECKING_TEXT, @@ -150,6 +152,45 @@ async def check_moderation_status(user_id: str) -> dict: return {"status": "error", "reason": str(e)} +# ========================================================= +# ВХОД В РАЗДЕЛ ФОТО: проверка статуса модерации + показ меню +# ========================================================= +async def send_dynamic_photo_main_menu(msg: Message, user_id: str): + """Вход в раздел фото (паттерн ЛК): модуль сам запрашивает данные и показывает их. + + - pending — показать инфо «фото на модерации» и НЕ вводить в модуль + (кнопок загрузки фото нет); + - rejected — показать причину отказа, кнопки остаются (новое фото); + - иначе/ошибка API — штатный вход в модуль. + """ + if not config.PHOTO_TEST_MODE: + status = await check_moderation_status(user_id) + if status.get("status") == "ok" and status.get("moderation_status") == "pending": + photo_id = status.get("photo_id", "???") + log_menu_stats(user_id, "Photo Bot", "Вход заблокирован — фото на модерации") + await msg.answer( + photo_moderation_pending(photo_id), + parse_mode="html" + ) + return + elif status.get("status") == "ok" and status.get("moderation_status") == "rejected": + reason = (status.get("rejection_reason") or "Причина не указана.").strip() + log_menu_stats(user_id, "Photo Bot", "Вход — фото отклонено, показана причина") + await msg.answer(photo_rejected_notice(reason), parse_mode="html") + # Меню показывается ниже: кнопки остаются, пользователь шлёт новое фото + elif status.get("status") != "ok": + logger.warning( + f"Не удалось проверить статус модерации для {user_id}: {status.get('reason')}" + ) + + states.set_state(user_id, "PHOTO_MODE") + log_menu_stats(user_id, "Photo Bot (TEST)" if config.PHOTO_TEST_MODE else "Photo Bot", "Вход") + await msg.answer( + PHOTO_TEST_ENTRY_TEXT if config.PHOTO_TEST_MODE else PHOTO_MAIN_MENU_TEXT, + parse_mode="html" + ) + + # ========================================================= # ОСНОВНОЙ ОБРАБОТЧИК # =========================================================