Фикс: пустой ряд в клавиатуре ломал отправку («Задать вопрос» молчал) + vk.ru в резолвере

1) _kb при пустых рядах создавал ПУСТОЙ первый ряд (add_line до кнопок) — VK
   отклонял такую клавиатуру, из-за чего сообщения шага «Задать вопрос»,
   «другая игра», «нужен совет» не отправлялись (состояние при этом менялось).
   Теперь add_line ставится только между реальными кнопками — пустых рядов нет.
2) _resolve_vk_user_id теперь понимает домен vk.ru (и www./m.), а не только vk.com —
   ссылку https://vk.ru/screenname на добавление админа бот принимает.

Тесты: test_funnel_keyboards_no_empty_rows, test_resolve_vk_links. pytest 40 passed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Kenik
2026-07-26 10:45:31 +03:00
parent 81c1162ca1
commit 24daec1c09
3 changed files with 47 additions and 8 deletions
+34
View File
@@ -213,6 +213,40 @@ def test_admin_edit_link(app):
assert app._link("group_4") == "https://infocyber.pro/pay/group4"
def test_resolve_vk_ru_and_com_links(app):
"""Резолвер принимает ссылки vk.ru и vk.com (id-форма работает без сети)."""
assert app._resolve_vk_user_id("https://vk.ru/id350793273") == 350793273
assert app._resolve_vk_user_id("https://vk.com/id777") == 777
assert app._resolve_vk_user_id("http://m.vk.ru/id42") == 42
assert app._resolve_vk_user_id("www.vk.com/id5") == 5
assert app._resolve_vk_user_id("id99") == 99
assert app._resolve_vk_user_id("12345") == 12345
def test_funnel_keyboards_no_empty_rows():
"""VK отклоняет клавиатуру с пустым рядом — таких быть не должно ни в одной."""
import json, keyboards
kbs = [
keyboards.get_baza_menu_only_keyboard(), keyboards.get_baza_forwho_keyboard(),
keyboards.get_baza_age_keyboard(), keyboards.get_baza_game_keyboard(),
keyboards.get_baza_level_keyboard(), keyboards.get_baza_format_keyboard(),
keyboards.get_baza_group_keyboard(), keyboards.get_baza_individual_keyboard(),
keyboards.get_baza_int_level_keyboard(),
]
for kb in kbs:
for row in json.loads(kb)["buttons"]:
assert len(row) > 0
def test_resolve_vk_links(app):
"""Ссылки vk.ru и vk.com (и голый id) корректно приводятся к числовому id."""
assert app._resolve_vk_user_id("https://vk.ru/id350793273") == 350793273
assert app._resolve_vk_user_id("https://vk.com/id777") == 777
assert app._resolve_vk_user_id("vk.ru/id42") == 42
assert app._resolve_vk_user_id("id100") == 100
assert app._resolve_vk_user_id("999") == 999
def test_admin_mute_notifications(app):
"""Админ может отключить себе уведомления от клиентов — _notify_operators его пропускает."""
op = _admin()