Files
new_lottery_bot/CHAT_FIX_REPORT.md
Andrew K. Choi 6b2e915452
All checks were successful
continuous-integration/drone/push Build is passing
fix: Fix chat message broadcasting to all users
- 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
2026-02-17 01:03:36 +09:00

3.7 KiB
Raw Permalink Blame History

ОТЧЕТ: Исправление проблемы с чатом (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()
  • Теперь функция:
    1. Проверяет ключевые слова для выхода
    2. Если это не ключевое слово → обрабатывает как обычное сообщение чата
    3. Выполняет рассылку/пересылку сообщения

Изменение 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) Синтаксис кода проверен (правильный) Все пользователи теперь получают сообщения в чате Логирование добавлено для отладки

Как проверить

  1. Откройте чат от двух разных пользователей
  2. Отправьте сообщение от первого пользователя
  3. Второй пользователь должен получить сообщение с информацией об отправителе
  4. Проверьте логи: docker compose logs -f bot | grep "[CHAT]"

Файлы изменены

  • src/handlers/chat_handlers.py (объединены обработчики, исправлена логика рассылки)
  • test_chat_fix.md (документация об исправлении)