Фикс клавиатуры возвращающегося клиента + защита от двух экземпляров
- Возвращающийся клиент: «Да/Отмена» — нижняя клавиатура, а «Сменить имя/ телефон/Заполнить заново» — отдельные инлайн-кнопки под сообщением (ровно 3, как просил). - start_bot.bat: перед запуском убивает старые экземпляры бота — устраняет «рандомные» цвета от нескольких параллельных longpoll-инстансов. - Маска телефона в приветствии возвращающегося клиента. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -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]):
|
||||
"""Развилка для возвращающегося клиента: подтвердить данные / сменить / заполнить заново."""
|
||||
|
||||
+9
-4
@@ -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()
|
||||
|
||||
|
||||
|
||||
@@ -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%] Запуск бота ИКП...
|
||||
|
||||
Reference in New Issue
Block a user