From fc3361c7ea2ce96a552fbc0d7d41ed951284e095 Mon Sep 17 00:00:00 2001 From: Kenik Date: Thu, 25 Jun 2026 09:14:57 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=B0=D1=82=D1=83=D1=80=D1=8B=20=D0=B2=D0=BE=D0=B7?= =?UTF-8?q?=D0=B2=D1=80=D0=B0=D1=89=D0=B0=D1=8E=D1=89=D0=B5=D0=B3=D0=BE?= =?UTF-8?q?=D1=81=D1=8F=20=D0=BA=D0=BB=D0=B8=D0=B5=D0=BD=D1=82=D0=B0=20+?= =?UTF-8?q?=20=D0=B7=D0=B0=D1=89=D0=B8=D1=82=D0=B0=20=D0=BE=D1=82=20=D0=B4?= =?UTF-8?q?=D0=B2=D1=83=D1=85=20=D1=8D=D0=BA=D0=B7=D0=B5=D0=BC=D0=BF=D0=BB?= =?UTF-8?q?=D1=8F=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Возвращающийся клиент: «Да/Отмена» — нижняя клавиатура, а «Сменить имя/ телефон/Заполнить заново» — отдельные инлайн-кнопки под сообщением (ровно 3, как просил). - start_bot.bat: перед запуском убивает старые экземпляры бота — устраняет «рандомные» цвета от нескольких параллельных longpoll-инстансов. - Маска телефона в приветствии возвращающегося клиента. Co-Authored-By: Claude Opus 4.8 --- bot.py | 11 ++++++++--- keyboards.py | 13 +++++++++---- start_bot.bat | 3 +++ 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/bot.py b/bot.py index c51e63f..429c3e4 100644 --- a/bot.py +++ b/bot.py @@ -666,15 +666,20 @@ class VKBotApplication: def _send_returning_prompt(self, user_id: int, user_data: Dict[str, Any]): """Приветствие для клиента, чьи имя и телефон уже сохранены.""" name = user_data.get("name") - phone = user_data.get("phone") + phone = format_phone_display(user_data.get("phone", "")) self.send_message( user_id, f"Здравствуйте! Мы вас помним, {name}. 👋\n\n" f"Ваш номер телефона по-прежнему {phone}?\n\n" - "Если всё верно — нажмите «Да, всё верно ✅», и сразу перейдём к выбору услуги. " - "Либо измените данные или заполните заявку заново.", + "Если всё верно — нажмите «Да, всё верно ✅», и сразу перейдём к выбору услуги.", keyboard=get_returning_keyboard() ) + # Кнопки изменения данных — инлайн, под отдельным сообщением + self.send_message( + user_id, + "Нужно поправить данные? 👇", + keyboard=get_returning_changes_keyboard() + ) def _handle_form_returning(self, user_id: int, text: str, text_lower: str, user_data: Dict[str, Any]): """Развилка для возвращающегося клиента: подтвердить данные / сменить / заполнить заново.""" diff --git a/keyboards.py b/keyboards.py index f98d2dd..f58c91a 100644 --- a/keyboards.py +++ b/keyboards.py @@ -210,16 +210,21 @@ def get_binary_keyboard(show_skip: bool = False) -> str: def get_returning_keyboard() -> str: - """Инлайн-клавиатура для возвращающегося клиента (под сообщением).""" - keyboard = VkKeyboard(inline=True) + """Нижняя клавиатура возвращающегося клиента: подтвердить или отменить.""" + keyboard = VkKeyboard(one_time=False) keyboard.add_button("Да, всё верно ✅", color=VkKeyboardColor.PRIMARY) keyboard.add_line() + keyboard.add_button("Отменить заполнение ❌", color=VkKeyboardColor.NEGATIVE) + return keyboard.get_keyboard() + + +def get_returning_changes_keyboard() -> str: + """Инлайн-кнопки под сообщением: сменить имя / телефон / заполнить заново.""" + keyboard = VkKeyboard(inline=True) keyboard.add_button("Сменить имя 👤", color=VkKeyboardColor.SECONDARY) keyboard.add_button("Сменить телефон 📞", color=VkKeyboardColor.SECONDARY) keyboard.add_line() keyboard.add_button("Заполнить заново 🔄", color=VkKeyboardColor.SECONDARY) - keyboard.add_line() - keyboard.add_button("Отменить заполнение ❌", color=VkKeyboardColor.NEGATIVE) return keyboard.get_keyboard() diff --git a/start_bot.bat b/start_bot.bat index 371a2bc..d7c054e 100644 --- a/start_bot.bat +++ b/start_bot.bat @@ -3,6 +3,9 @@ chcp 65001 >nul cd /d "%~dp0" title Бот ИКП (VK) +REM Защита от нескольких экземпляров: убиваем старый бот перед запуском +powershell -NoProfile -Command "Get-CimInstance Win32_Process | Where-Object { $_.Name -eq 'python.exe' -and $_.CommandLine -like '*bot.py*' } | ForEach-Object { Stop-Process -Id $_.ProcessId -Force }" >nul 2>&1 + :loop echo. echo [%date% %time%] Запуск бота ИКП...