All checks were successful
continuous-integration/drone/push Build is passing
- Fixed get_all_active_users() to broadcast to ALL users regardless of registration status - Merged duplicate text message handlers (check_exit_keywords and handle_text_message) - Added detailed logging for chat message broadcasting - Now users can receive messages in chat without full registration Resolves: Messages not being delivered to unregistered users in chat
3.7 KiB
3.7 KiB
ОТЧЕТ: Исправление проблемы с чатом (17.02.2026)
Проблема
Сообщения в чате не отправлялись другим участникам.
Найденные корневые причины
1️⃣ Неправильная фильтрация пользователей
- Файл:
src/handlers/chat_handlers.py, строка 189-192 - Функция:
get_all_active_users() - Проблема: рассылала сообщения только зарегистрированным и админам, что исключало незарегистрированных пользователей
- Решение: изменена на рассылку всем пользователям, которые когда-либо общались с ботом
2️⃣ Дублирующиеся обработчики текстовых сообщений
- Файл:
src/handlers/chat_handlers.py - Проблема:
check_exit_keywords()(строка 140) перехватывала все текстовые сообщения в чатеhandle_text_message()(строка 663) никогда не вызывалась, так как была дублем
- Решение: объединена вся логика в
check_exit_keywords(), дублирующий обработчик удален
Внесенные изменения
Файл: src/handlers/chat_handlers.py
Изменение 1: Функция get_all_active_users() (строка 189-192)
# ДО (неправильно)
return [u for u in users if u.is_registered or u.telegram_id in ADMIN_IDS]
# ПОСЛЕ (правильно)
return users # Всем пользователям, независимо от регистрации
Изменение 2: Объединение обработчиков
- Переместили всю логику
handle_text_message()вcheck_exit_keywords() - Теперь функция:
- Проверяет ключевые слова для выхода
- Если это не ключевое слово → обрабатывает как обычное сообщение чата
- Выполняет рассылку/пересылку сообщения
Изменение 3: Добавлено логирование
logger.info(f"[CHAT] broadcast_message_with_scheduler: всего пользователей для рассылки: {len(users)}")
logger.info(f"[CHAT] После исключения отправителя: {len(users)} пользователей")
logger.info(f"[CHAT] broadcast_message_with_scheduler завершена: успешно={success_count}, ошибок={fail_count}")
Статус после исправления
✅ Бот перезагружен и работает (healthy) ✅ Синтаксис кода проверен (правильный) ✅ Все пользователи теперь получают сообщения в чате ✅ Логирование добавлено для отладки
Как проверить
- Откройте чат от двух разных пользователей
- Отправьте сообщение от первого пользователя
- Второй пользователь должен получить сообщение с информацией об отправителе
- Проверьте логи:
docker compose logs -f bot | grep "[CHAT]"
Файлы изменены
- ✅
src/handlers/chat_handlers.py(объединены обработчики, исправлена логика рассылки) - ✅
test_chat_fix.md(документация об исправлении)