diff --git a/session_bot/bot.py b/session_bot/bot.py index ce3e4d2..efc7d69 100644 --- a/session_bot/bot.py +++ b/session_bot/bot.py @@ -213,6 +213,10 @@ def save_post_template(state_storage: JsonStateStorage, template: str) -> None: state_storage.save(payload) +def count_actor_placeholders(template: str) -> int: + return normalize_template_placeholders(template).count("{{actors}}") + + @router.message(CommandStart()) @router.message(Command("panel")) async def start_handler(message: Message, state: FSMContext, app_config: dict, actor_lookup: dict, settings) -> None: @@ -277,12 +281,25 @@ async def post_handler( normalized = normalize_template_placeholders(template) save_post_template(state_storage, normalized) await state.clear() - if "{{actors}}" not in normalized: + placeholder_count = count_actor_placeholders(normalized) + if placeholder_count == 0: await message.answer( "Шаблон сохранен, но в нем нет {{actors}}.\n" "Плейсхолдер должен быть именно {{actors}} в любом регистре." ) return + if placeholder_count > 1: + await message.answer( + "Шаблон сохранен, но в нем несколько {{actors}}.\n" + "Нужен только один общий {{actors}} на месте всего блока актеров, иначе список будет дублироваться." + ) + return + if message.text and message.text.startswith("/post "): + await message.answer( + "Шаблон сохранен.\n" + "Но если нужна разметка, ссылки и premium emoji, лучше использовать /post ответом на уже оформленное сообщение, а не вставлять шаблон текстом после команды." + ) + return await message.answer("Шаблон поста сохранен.") return @@ -493,12 +510,19 @@ async def post_template_handler( save_post_template(state_storage, normalized) await state.clear() - if "{{actors}}" not in normalized: + placeholder_count = count_actor_placeholders(normalized) + if placeholder_count == 0: await message.answer( "Шаблон сохранен, но в нем нет {{actors}}.\n" "Плейсхолдер должен быть именно {{actors}} в любом регистре." ) return + if placeholder_count > 1: + await message.answer( + "Шаблон сохранен, но в нем несколько {{actors}}.\n" + "Нужен только один общий {{actors}} на месте всего блока актеров, иначе список будет дублироваться." + ) + return await message.answer("Шаблон поста сохранен.")