From 9e42c3e7d1c8a427699f2dcd7b1b03f8a28b53c7 Mon Sep 17 00:00:00 2001 From: Egor Date: Thu, 11 Sep 2025 04:17:17 +0300 Subject: [PATCH] Update welcome_text.py --- app/handlers/admin/welcome_text.py | 87 ++++++++++++++++++++++++++++-- 1 file changed, 82 insertions(+), 5 deletions(-) diff --git a/app/handlers/admin/welcome_text.py b/app/handlers/admin/welcome_text.py index cc21390c..a1cecef0 100644 --- a/app/handlers/admin/welcome_text.py +++ b/app/handlers/admin/welcome_text.py @@ -11,7 +11,8 @@ from app.utils.decorators import admin_required, error_handler from app.database.crud.welcome_text import ( get_active_welcome_text, set_welcome_text, - get_current_welcome_text_or_default + get_current_welcome_text_or_default, + get_available_placeholders ) logger = logging.getLogger(__name__) @@ -25,7 +26,8 @@ async def show_welcome_text_panel( ): await callback.message.edit_text( "👋 Управление приветственным текстом\n\n" - "Здесь вы можете изменить текст, который показывается новым пользователям после регистрации.", + "Здесь вы можете изменить текст, который показывается новым пользователям после регистрации.\n\n" + "💡 Доступные плейсхолдеры для автозамены:", reply_markup=get_welcome_text_keyboard(db_user.language) ) await callback.answer() @@ -45,10 +47,40 @@ async def show_current_welcome_text( else: status = "📝 Текущий приветственный текст:" + placeholders = get_available_placeholders() + placeholders_text = "\n".join([f"• {key} - {desc}" for key, desc in placeholders.items()]) + await callback.message.edit_text( f"{status}\n\n" f"{current_text}\n\n" - f"💡 В тексте можно использовать имя пользователя - оно автоматически заменит 'Egor'", + f"💡 Доступные плейсхолдеры:\n{placeholders_text}", + reply_markup=get_welcome_text_keyboard(db_user.language), + parse_mode="HTML" + ) + await callback.answer() + +@admin_required +@error_handler +async def show_placeholders_help( + callback: types.CallbackQuery, + db_user: User, + db: AsyncSession +): + placeholders = get_available_placeholders() + placeholders_text = "\n".join([f"• {key}\n {desc}" for key, desc in placeholders.items()]) + + help_text = ( + "💡 Доступные плейсхолдеры для автозамены:\n\n" + f"{placeholders_text}\n\n" + "📌 Примеры использования:\n" + "• Привет, {user_name}! Добро пожаловать!\n" + "• Здравствуйте, {first_name}! Рады видеть вас!\n" + "• Привет, {username}! Спасибо за регистрацию!\n\n" + "При отсутствии данных пользователя используется слово 'друг'." + ) + + await callback.message.edit_text( + help_text, reply_markup=get_welcome_text_keyboard(db_user.language), parse_mode="HTML" ) @@ -67,10 +99,14 @@ async def start_edit_welcome_text( if not current_text: current_text = await get_current_welcome_text_or_default() + placeholders = get_available_placeholders() + placeholders_text = "\n".join([f"• {key} - {desc}" for key, desc in placeholders.items()]) + await callback.message.edit_text( f"📝 Редактирование приветственного текста\n\n" f"Текущий текст:\n" f"{current_text}\n\n" + f"💡 Доступные плейсхолдеры:\n{placeholders_text}\n\n" f"Отправьте новый текст:", parse_mode="HTML" ) @@ -99,10 +135,14 @@ async def process_welcome_text_edit( success = await set_welcome_text(db, new_text, db_user.id) if success: + placeholders = get_available_placeholders() + placeholders_text = "\n".join([f"• {key}" for key in placeholders.keys()]) + await message.answer( f"✅ Приветственный текст успешно обновлен!\n\n" f"Новый текст:\n" - f"{new_text}", + f"{new_text}\n\n" + f"💡 Будут заменяться плейсхолдеры: {placeholders_text}", reply_markup=get_welcome_text_keyboard(db_user.language), parse_mode="HTML" ) @@ -128,7 +168,8 @@ async def reset_welcome_text( await callback.message.edit_text( f"✅ Приветственный текст сброшен на стандартный!\n\n" f"Стандартный текст:\n" - f"{default_text}", + f"{default_text}\n\n" + f"💡 Плейсхолдер {{user_name}} будет заменяться на имя пользователя", reply_markup=get_welcome_text_keyboard(db_user.language), parse_mode="HTML" ) @@ -140,6 +181,32 @@ async def reset_welcome_text( await callback.answer() +@admin_required +@error_handler +async def show_preview_welcome_text( + callback: types.CallbackQuery, + db_user: User, + db: AsyncSession +): + from app.database.crud.welcome_text import get_welcome_text_for_user + + class TestUser: + def __init__(self): + self.first_name = "Иван" + self.username = "test_user" + + test_user = TestUser() + preview_text = await get_welcome_text_for_user(db, test_user) + + await callback.message.edit_text( + f"👁️ Предварительный просмотр\n\n" + f"Как будет выглядеть текст для пользователя 'Иван' (@test_user):\n\n" + f"{preview_text}", + reply_markup=get_welcome_text_keyboard(db_user.language), + parse_mode="HTML" + ) + await callback.answer() + def register_welcome_text_handlers(dp: Dispatcher): dp.callback_query.register( show_welcome_text_panel, @@ -151,6 +218,16 @@ def register_welcome_text_handlers(dp: Dispatcher): F.data == "show_welcome_text" ) + dp.callback_query.register( + show_placeholders_help, + F.data == "show_placeholders_help" + ) + + dp.callback_query.register( + show_preview_welcome_text, + F.data == "preview_welcome_text" + ) + dp.callback_query.register( start_edit_welcome_text, F.data == "edit_welcome_text"