Фото: проверка статуса модерации перенесена из main.py в модуль photo_bot (паттерн ЛК)
This commit is contained in:
Binary file not shown.
@@ -123,32 +123,8 @@ async def main_menu(msg: Message):
|
|||||||
return
|
return
|
||||||
elif action == "PHOTO":
|
elif action == "PHOTO":
|
||||||
USER_MENU_SHOWN[user_id] = True
|
USER_MENU_SHOWN[user_id] = True
|
||||||
from photo_bot.handlers import check_moderation_status
|
from photo_bot.handlers import send_dynamic_photo_main_menu
|
||||||
from utils.texts import photo_moderation_pending, photo_rejected_notice
|
await send_dynamic_photo_main_menu(msg, user_id)
|
||||||
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"
|
|
||||||
)
|
|
||||||
return
|
return
|
||||||
elif action == "TRANSCRIPTION":
|
elif action == "TRANSCRIPTION":
|
||||||
USER_MENU_SHOWN[user_id] = True
|
USER_MENU_SHOWN[user_id] = True
|
||||||
|
|||||||
Binary file not shown.
@@ -30,6 +30,8 @@ from utils.texts import (
|
|||||||
photo_cancel_text,
|
photo_cancel_text,
|
||||||
photo_preview_ready,
|
photo_preview_ready,
|
||||||
photo_moderation_pending,
|
photo_moderation_pending,
|
||||||
|
photo_rejected_notice,
|
||||||
|
PHOTO_TEST_ENTRY_TEXT,
|
||||||
PHOTO_TEST_WELCOME_TEXT,
|
PHOTO_TEST_WELCOME_TEXT,
|
||||||
PHOTO_TEST_PREVIEW_TEXT,
|
PHOTO_TEST_PREVIEW_TEXT,
|
||||||
PHOTO_TEST_AI_CHECKING_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)}
|
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"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# =========================================================
|
# =========================================================
|
||||||
# ОСНОВНОЙ ОБРАБОТЧИК
|
# ОСНОВНОЙ ОБРАБОТЧИК
|
||||||
# =========================================================
|
# =========================================================
|
||||||
|
|||||||
Reference in New Issue
Block a user