diff --git a/photo_bot/__pycache__/handlers.cpython-313.pyc b/photo_bot/__pycache__/handlers.cpython-313.pyc
index 5448c31..ac65d44 100644
Binary files a/photo_bot/__pycache__/handlers.cpython-313.pyc and b/photo_bot/__pycache__/handlers.cpython-313.pyc differ
diff --git a/photo_bot/handlers.py b/photo_bot/handlers.py
index dc90c5e..551e435 100644
--- a/photo_bot/handlers.py
+++ b/photo_bot/handlers.py
@@ -30,7 +30,6 @@ from utils.texts import (
photo_cancel_text,
photo_preview_ready,
photo_welcome_with_status,
- photo_invalid_cmd,
photo_test_welcome,
PHOTO_TEST_WELCOME_TEXT,
PHOTO_TEST_PREVIEW_TEXT,
@@ -224,6 +223,25 @@ async def photo_module_handler(msg: Message):
cmd = raw_num
break
+ # --- ТЕСТ-ПОД-РЕЖИМ: 9 = назад в меню фото (не выход из модуля) ---
+ if in_test_submode(user_id) and cmd == "9" and not is_attachment:
+ test_submode_users.discard(user_id)
+ log_menu_stats(user_id, "Photo Bot (TEST)", "Назад из тест-под-режима")
+ # Висящее тест-фото снимаем (тест-режим: оно никуда не публиковалось)
+ if user_id in pending_photos:
+ photo_data = pending_photos[user_id]
+ if os.path.exists(photo_data['path']):
+ os.remove(photo_data['path'])
+ if 'preview_path' in photo_data and os.path.exists(photo_data['preview_path']):
+ os.remove(photo_data['preview_path'])
+ del pending_photos[user_id]
+ status = await check_moderation_status(user_id)
+ await msg.answer(
+ photo_welcome_with_status(status, show_test=config.PHOTO_TEST_MODE),
+ parse_mode="html"
+ )
+ return
+
# --- ВЫХОД (Кнопки 0 и 9 возвращают в общее меню с очисткой кэша) ---
if cmd in ["0", "9", "/start", "меню"]:
log_menu_stats(user_id, "Photo Bot", "Выход в главное меню")
@@ -250,14 +268,14 @@ async def photo_module_handler(msg: Message):
and status.get("moderation_status") == "pending"
)
if still_pending:
- if config.PHOTO_TEST_MODE and (cmd == "1" or in_test_submode(user_id)):
- # Вход в тест-под-режим (кнопка 1) / повтор его сообщения
+ if config.PHOTO_TEST_MODE and cmd == "1":
+ # Кнопка 1 — вход в тест-под-режим (можно отправить фото в ИИ)
test_submode_users.add(user_id)
log_menu_stats(user_id, "Photo Bot (TEST)", "Тест-под-режим (фото на модерации)")
- await msg.answer(photo_test_welcome(), parse_mode="html")
+ await msg.answer(PHOTO_TEST_WELCOME_TEXT, parse_mode="html")
else:
- # стандартная ошибка: кнопок, кроме 0 (и 1 в тест-режиме), нет
- await msg.answer(photo_invalid_cmd(), parse_mode="html")
+ # Неверная команда → глобальное сообщение
+ await msg.answer(system_error_text(EMOJI_DIGITS), parse_mode="html")
return
# Статус изменился (одобрено/отклонено) — разблокируем
was_in_test = in_test_submode(user_id)
@@ -286,11 +304,6 @@ async def photo_module_handler(msg: Message):
# Ошибка проверки — не блокируем, просто логируем
logger.warning(f"Не удалось проверить статус модерации для {user_id}: {status.get('reason')}")
- # --- ТЕСТ-ПОД-РЕЖИМ: нет висящего фото — на любой текст повторяем тест-приветствие ---
- if not is_attachment and user_id not in pending_photos and in_test_submode(user_id):
- await msg.answer(PHOTO_TEST_WELCOME_TEXT, parse_mode="html")
- return
-
# --- ВХОД В ТЕСТ-ПОД-РЕЖИМ: кнопка 1 в меню фото-режима (тест включен) ---
if (not is_attachment and user_id not in pending_photos
and not in_test_submode(user_id)
@@ -350,9 +363,9 @@ async def photo_module_handler(msg: Message):
await msg.answer(PHOTO_TEST_WELCOME_TEXT, parse_mode="html")
return
- # --- Защита от мусорного ввода при висящем превью (тестовый мод) ---
+ # --- Неверная команда при висящем превью → глобальное сообщение ---
else:
- await msg.answer(PHOTO_TEST_PREVIEW_TEXT, parse_mode="html")
+ await msg.answer(system_error_text(EMOJI_DIGITS), parse_mode="html")
return
# --- ПОДТВЕРЖДЕНИЕ ОТПРАВКИ (Кнопка 1) ---
@@ -421,6 +434,11 @@ async def photo_module_handler(msg: Message):
await msg.answer(system_error_text(EMOJI_DIGITS), parse_mode="html")
return
+ # --- НЕВЕРНАЯ КОМАНДА (висящего фото нет) → глобальное сообщение ---
+ if not is_attachment:
+ await msg.answer(system_error_text(EMOJI_DIGITS), parse_mode="html")
+ return
+
# --- ПРИЕМ НОВОГО ФОТО ---
if is_attachment:
file_id = getattr(msg.content, "file_id", None)
diff --git a/utils/__pycache__/texts.cpython-313.pyc b/utils/__pycache__/texts.cpython-313.pyc
index db61716..f22aab0 100644
Binary files a/utils/__pycache__/texts.cpython-313.pyc and b/utils/__pycache__/texts.cpython-313.pyc differ
diff --git a/utils/texts.py b/utils/texts.py
index 8a155bf..2c094e7 100644
--- a/utils/texts.py
+++ b/utils/texts.py
@@ -232,13 +232,6 @@ def _photo_unknown(emojis: dict) -> str:
f"{emojis['0']} — В главное меню"
)
-def _photo_invalid_cmd(emojis: dict) -> str:
- return (
- f"⚠️ Неверный выбор пункта меню.\n"
- f"Пожалуйста, используйте кнопки из сообщения выше.\n\n"
- f"{emojis['0']} — В главное меню"
- )
-
def _photo_processing_face(emojis: dict) -> str:
return "⏳ Ищу лицо на фото, пожалуйста, подождите..."
@@ -276,20 +269,15 @@ def _photo_status_info(status: dict = None, emojis: dict = None) -> str | None:
)
return None
-def _photo_test_welcome(emojis: dict, photo_id: str = None) -> str:
- """Тест-приветствие. photo_id — если у пользователя ещё есть фото
- на модерации (тестовая проверка его не затрагивает)."""
- text = (
+def _photo_test_welcome(emojis: dict) -> str:
+ """Тест-приветствие: фото уйдёт напрямую в ИИ, никуда не публикуется."""
+ return (
f"🧪 Тестовый режим фото-проверки\n\n"
f"📸 Пришлите фотографию — она уйдёт напрямую в ИИ.\n"
- f"Бот покажет вердикт ИИ. Фото никуда не публикуется."
+ f"Бот покажет вердикт ИИ. Фото никуда не публикуется.\n\n"
+ f"{emojis['9']} — Назад\n"
+ f"{emojis['0']} — В главное меню"
)
- if photo_id:
- text += (
- f"\n⏳ У вас уже есть фото на модерации (№ {photo_id}).\n"
- f"Ожидайте решения модератора. Тестовая проверка его не затрагивает.\n"
- )
- return text + f"\n\n{emojis['0']} — В главное меню"
def _photo_test_preview(emojis: dict) -> str:
return (
@@ -297,6 +285,7 @@ def _photo_test_preview(emojis: dict) -> str:
f"Кадр получен. Фото никуда не публикуется.\n\n"
f"{emojis['1']} — отправлю фото напрямую в ИИ\n"
f"{emojis['2']} — Загрузить другое фото\n"
+ f"{emojis['9']} — Назад\n"
f"{emojis['0']} — В главное меню"
)
@@ -414,9 +403,6 @@ PHOTO_MAIN_MENU_TEXT = _photo_welcome(EMOJI_DIGITS)
PHOTO_TEST_ENTRY_TEXT = _photo_welcome(EMOJI_DIGITS, show_test=True)
PHOTO_UNKNOWN_CMD_TEXT = _photo_unknown(EMOJI_DIGITS)
-def photo_invalid_cmd() -> str:
- return _photo_invalid_cmd(EMOJI_DIGITS)
-
def photo_error_handling() -> str:
return system_error_text(EMOJI_DIGITS, show_back=False)
@@ -455,9 +441,9 @@ def photo_welcome_with_status(status: dict = None, show_test: bool = False) -> s
PHOTO_TEST_WELCOME_TEXT = _photo_test_welcome(EMOJI_DIGITS)
-def photo_test_welcome(photo_id: str = None) -> str:
- """Тест-приветствие; photo_id — если у пользователя ещё фото на модерации."""
- return _photo_test_welcome(EMOJI_DIGITS, photo_id)
+def photo_test_welcome() -> str:
+ """Тест-приветствие (тест-под-режим фото-проверки)."""
+ return _photo_test_welcome(EMOJI_DIGITS)
PHOTO_TEST_PREVIEW_TEXT = _photo_test_preview(EMOJI_DIGITS)
PHOTO_TEST_AI_CHECKING_TEXT = _photo_test_ai_checking(EMOJI_DIGITS)
PHOTO_TEST_RECEIVING_TEXT = _photo_test_receiving(EMOJI_DIGITS)