diff --git a/bot.py b/bot.py index 6e8fcee..7a5d7a0 100644 --- a/bot.py +++ b/bot.py @@ -484,6 +484,11 @@ class VKBotApplication: text_lower = text_clean.lower() attachments = attachments or [] + # Сообщения без текста (стикер/фото/голосовое/гифка/сервисное) не распознаются + # и раньше вызывали фолбэк «не понял запрос». Бот текстовый — просто игнорируем. + if not text_clean: + return + # === Экстренный выключатель бота (только супер-админ) === if self._is_super_admin(user_id): if user_id in self._favi_pending: @@ -1835,6 +1840,12 @@ class VKBotApplication: if event.type == VkBotEventType.MESSAGE_NEW: message_obj = event.obj.message 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"] attachments = message_obj.get("attachments", []) try: diff --git a/tests/test_flow.py b/tests/test_flow.py index 1d9b862..dc55b79 100644 --- a/tests/test_flow.py +++ b/tests/test_flow.py @@ -74,6 +74,18 @@ def test_baza_records_lead_once(app): 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): """§9: клиенту и в карточку оператору уходит номер заявки (тикет).""" u = 70040