Фикс: бот слал «не понял запрос» на беседы и пустые сообщения
Причина случайного фолбэка «Пока не получилось определить запрос»: - бот реагировал на сообщения из бесед/групповых чатов (peer_id != from_id) и слал отправителю в ЛС фолбэк — теперь такие сообщения игнорируются (работаем только в личке); - сообщения без текста (стикер/фото/голосовое/гифка) давали text="" → фолбэк в главном меню — теперь пустые сообщения игнорируются. Тест: test_empty_message_ignored. pytest 44 passed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -484,6 +484,11 @@ class VKBotApplication:
|
|||||||
text_lower = text_clean.lower()
|
text_lower = text_clean.lower()
|
||||||
attachments = attachments or []
|
attachments = attachments or []
|
||||||
|
|
||||||
|
# Сообщения без текста (стикер/фото/голосовое/гифка/сервисное) не распознаются
|
||||||
|
# и раньше вызывали фолбэк «не понял запрос». Бот текстовый — просто игнорируем.
|
||||||
|
if not text_clean:
|
||||||
|
return
|
||||||
|
|
||||||
# === Экстренный выключатель бота (только супер-админ) ===
|
# === Экстренный выключатель бота (только супер-админ) ===
|
||||||
if self._is_super_admin(user_id):
|
if self._is_super_admin(user_id):
|
||||||
if user_id in self._favi_pending:
|
if user_id in self._favi_pending:
|
||||||
@@ -1835,6 +1840,12 @@ class VKBotApplication:
|
|||||||
if event.type == VkBotEventType.MESSAGE_NEW:
|
if event.type == VkBotEventType.MESSAGE_NEW:
|
||||||
message_obj = event.obj.message
|
message_obj = event.obj.message
|
||||||
user_id = message_obj["from_id"]
|
user_id = message_obj["from_id"]
|
||||||
|
peer_id = message_obj.get("peer_id", user_id)
|
||||||
|
# Работаем только в личке. Сообщения из бесед/групповых чатов
|
||||||
|
# (peer_id != from_id) игнорируем — иначе бот шлёт людям в ЛС
|
||||||
|
# «не понял запрос» на каждое их сообщение в беседе.
|
||||||
|
if peer_id != user_id:
|
||||||
|
continue
|
||||||
text = message_obj["text"]
|
text = message_obj["text"]
|
||||||
attachments = message_obj.get("attachments", [])
|
attachments = message_obj.get("attachments", [])
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -74,6 +74,18 @@ def test_baza_records_lead_once(app):
|
|||||||
assert any("Групповой" in name for name, _ in s["by_service"])
|
assert any("Групповой" in name for name, _ in s["by_service"])
|
||||||
|
|
||||||
|
|
||||||
|
def test_empty_message_ignored(app):
|
||||||
|
"""Пустые сообщения (стикер/фото/голосовое) не вызывают фолбэк — бот молчит."""
|
||||||
|
u = 70060
|
||||||
|
app._sent.clear()
|
||||||
|
app.handle_message(u, "")
|
||||||
|
app.handle_message(u, " ")
|
||||||
|
assert app._sent == []
|
||||||
|
# обычный нераспознанный текст фолбэк всё же даёт
|
||||||
|
app.handle_message(u, "абвгдейка")
|
||||||
|
assert any("Пока не получилось" in s["msg"] for s in app._sent)
|
||||||
|
|
||||||
|
|
||||||
def test_baza_question_ticket(app):
|
def test_baza_question_ticket(app):
|
||||||
"""§9: клиенту и в карточку оператору уходит номер заявки (тикет)."""
|
"""§9: клиенту и в карточку оператору уходит номер заявки (тикет)."""
|
||||||
u = 70040
|
u = 70040
|
||||||
|
|||||||
Reference in New Issue
Block a user