Фото: проверка статуса модерации перенесена из main.py в модуль photo_bot (паттерн ЛК)

This commit is contained in:
dddennnisss
2026-08-21 21:21:14 +07:00
parent c358d4cbbb
commit 0b2364d79f
4 changed files with 43 additions and 26 deletions
Binary file not shown.
+41
View File
@@ -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"
)
# =========================================================
# ОСНОВНОЙ ОБРАБОТЧИК
# =========================================================