Правки кнопок + VK-имя в уведомлении о заявке

- Админка — всегда зелёная (POSITIVE).
- Меню изменения данных: «Назад к проверке» — красная.
- Возвращающийся клиент: «Да/Сменить имя/телефон/Заполнить заново/Отмена» —
  инлайн-кнопки под сообщением.
- Уведомление оператору: добавлено реальное имя из VK с флагом «не совпадает
  с введённым» — помогает отсеивать рандомные/фейковые данные (профиль VK уже был).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Kenik
2026-06-25 09:00:06 +03:00
parent a7ae2cec21
commit 60ef76024e
2 changed files with 31 additions and 5 deletions
+26 -1
View File
@@ -143,6 +143,20 @@ class VKBotApplication:
for op_id in self._operator_ids():
self.send_message(op_id, message)
def _vk_name(self, user_id: int) -> Optional[str]:
"""Реальное имя пользователя из VK (для сверки с введёнными данными)."""
if not self.vk or user_id <= 0:
return None
try:
info = self.vk.users.get(user_ids=user_id)
if info:
u = info[0]
full = f"{u.get('first_name', '')} {u.get('last_name', '')}".strip()
return full or None
except Exception as e:
logger.error(f"Не удалось получить имя VK для {user_id}: {e}")
return None
@staticmethod
def _progress_bar(step: int, total: int = 3) -> str:
"""Визуальный прогресс шага формы: ▰▰▱ Шаг 2 из 3."""
@@ -1761,9 +1775,20 @@ class VKBotApplication:
consent_3 = user_data.get("consent_3", "Согласен")
promo_line = f"🎁 Промокод клиента: {promo}\n" if promo else ""
# Реальное имя из VK + флаг несовпадения (помогает отсеять «рандомные» данные)
vk_name = self._vk_name(user_id)
if vk_name:
mismatch = ""
if name and name.strip().lower() not in vk_name.lower() and vk_name.lower() not in name.strip().lower():
mismatch = " ⚠️ не совпадает с введённым!"
vk_name_line = f"🪪 Имя в VK: {vk_name}{mismatch}\n"
else:
vk_name_line = ""
operator_msg = (
f"⚡ Получена новая заявка!\n\n"
f"👤 Имя: {name}\n"
f"👤 Имя (введено): {name}\n"
f"{vk_name_line}"
f"📞 Телефон: {format_phone_display(phone)}\n"
f"🎯 Выбранная услуга: {question}\n"
f"🕒 Удобное время звонка: {call_time}\n"
+5 -4
View File
@@ -22,7 +22,7 @@ def get_main_keyboard(is_admin: bool = False) -> str:
# Кнопка админ-панели — только для администраторов (отдельной строкой)
if is_admin:
keyboard.add_line()
keyboard.add_button("Админка ⚙️", color=VkKeyboardColor.SECONDARY)
keyboard.add_button("Админка ⚙️", color=VkKeyboardColor.POSITIVE)
return keyboard.get_keyboard()
@@ -210,14 +210,15 @@ def get_binary_keyboard(show_skip: bool = False) -> str:
def get_returning_keyboard() -> str:
"""Клавиатура для возвращающегося клиента, чьи данные уже известны."""
keyboard = VkKeyboard(one_time=False)
"""Инлайн-клавиатура для возвращающегося клиента (под сообщением)."""
keyboard = VkKeyboard(inline=True)
keyboard.add_button("Да, всё верно ✅", color=VkKeyboardColor.PRIMARY)
keyboard.add_line()
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()
@@ -308,7 +309,7 @@ def get_edit_menu_keyboard() -> str:
keyboard.add_button("Изменить Услугу 🎮", color=VkKeyboardColor.SECONDARY)
keyboard.add_button("Изменить Время 🕒", color=VkKeyboardColor.SECONDARY)
keyboard.add_line()
keyboard.add_button("Назад к проверке ↩️", color=VkKeyboardColor.SECONDARY)
keyboard.add_button("Назад к проверке ↩️", color=VkKeyboardColor.NEGATIVE)
return keyboard.get_keyboard()