Правки кнопок + VK-имя в уведомлении о заявке
- Админка — всегда зелёная (POSITIVE). - Меню изменения данных: «Назад к проверке» — красная. - Возвращающийся клиент: «Да/Сменить имя/телефон/Заполнить заново/Отмена» — инлайн-кнопки под сообщением. - Уведомление оператору: добавлено реальное имя из VK с флагом «не совпадает с введённым» — помогает отсеивать рандомные/фейковые данные (профиль VK уже был). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -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
@@ -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()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user