Skip to main content

Исправление синхронизации голосовых каналов

🎯 Проблема

При входе в голосовой канал другие пользователи на сервере не видели уведомления о том, что кто-то присоединился.

✅ Что было исправлено

Backend изменения:

  1. backend/app/websocket/voice.py
    • ✅ Раскомментирован код отправки глобального уведомления при входе в канал
    • ✅ Раскомментирован код отправки глобального уведомления при выходе из канала
    • Теперь отправляется voice_channel_join и voice_channel_leave всем онлайн пользователям
  2. backend/app/websocket/unified.py
    • ✅ Добавлена отправка глобального уведомления при входе в канал
    • ✅ Добавлена отправка глобального уведомления при выходе из канала
    • Синхронизировано с логикой из voice.py
  3. backend/app/websocket/connection_manager.py
    • ✅ Улучшен метод broadcast() для работы с Redis
    • ✅ Добавлена поддержка специального канала broadcast в Redis
    • ✅ Обновлен redis_listener() для обработки broadcast сообщений

Frontend изменения:

  1. frontend/src/store/slices/optimizedVoiceSlice.ts
    • ✅ Исправлена TypeScript ошибка с типами VoiceUser и VoiceParticipant
    • ✅ Добавлена нормализация полей is_muted и is_deafened (преобразование undefined в false)

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

1. Перезапустить бэкенд

С Docker:
Или локально:

2. Проверить функциональность

  1. Откройте два браузера (или две вкладки в режиме инкогнито)
  2. Войдите под разными аккаунтами
  3. На первом аккаунте зайдите в голосовой канал
  4. На втором аккаунте должно появиться:
    • Уведомление о присоединении пользователя
    • Аватарка участника в списке голосового канала
    • Звук присоединения (если включены звуки)

3. Проверить логи

Backend логи должны показать:
Frontend консоль должна показать:

📊 Схема работы

🔍 Отладка

Если синхронизация не работает:
  1. Проверьте WebSocket соединение:
  2. Проверьте Redis:
  3. Проверьте обработчики событий:

📝 Технические детали

Типы WebSocket сообщений

При входе в канал:
При выходе из канала:

Redis каналы

  • user:{user_id} - личные сообщения пользователю
  • channel:{channel_id} - сообщения участникам конкретного канала
  • broadcast - НОВЫЙ - глобальные сообщения всем онлайн пользователям

✨ Что дальше?

После успешного тестирования можно:
  • Добавить push-уведомления о входе друзей в голосовые каналы
  • Показывать “богатое присутствие” (Rich Presence) в профилях
  • Добавить статистику активности в голосовых каналах

Дата исправления: 2025-10-12 Затронутые файлы: 4 backend, 1 frontend Статус: ✅ Готово к тестированию