nakama/ADMIN_CHAT_DEBUG.md

6.0 KiB
Raw Blame History

🔍 Отладка админского чата

Проблема

Админский чат не подключается в системе модерации.

Что проверить

1. Откройте DevTools в системе модерации

Нажмите F12 и откройте вкладку Console

2. Перейдите на вкладку "Чат"

Должны увидеть логи:

[Chat] Инициализация чата
[Chat] User данные: { username: "glpshchn00", telegramId: "...", hasUsername: true, hasTelegramId: true }
[Chat] Подключение к: http://localhost:3000/mod-chat
[Chat] ✅ WebSocket подключен, ID: abc123
[Chat] Отправка auth с данными: { username: "glpshchn00", telegramId: "..." }

Затем должно быть:

Успех:

[Chat] ✅ Авторизация успешна!

Ошибка - нет прав:

[Chat] ❌ Нет прав для доступа к чату
[Chat] user.username: glpshchn00
[Chat] user.telegramId: 123456789
[Chat] Вы должны быть в списке MODERATION_OWNER_USERNAMES

Ошибка подключения:

[Chat] ❌ Ошибка подключения: timeout

Решения

Проблема: "Нет прав доступа"

Причина: Ваш username не в списке админов на сервере.

Решение:

  1. Откройте .env на сервере:
nano .env
  1. Проверьте/добавьте:
MODERATION_OWNER_USERNAMES=glpshchn00
  1. Перезапустите backend:
docker-compose restart backend
  1. Проверьте логи:
docker-compose logs backend | grep "Mod chat"

Должно быть:

[INFO] Mod chat auth success { username: 'glpshchn00', isOwner: true }

Проблема: "Ошибка подключения: timeout"

Причина: Backend недоступен или неправильный URL.

Решение:

  1. Проверьте что backend запущен:
docker-compose ps backend
  1. Проверьте VITE_API_URL в moderation frontend:
# В docker-compose.yml
environment:
  - VITE_API_URL=http://localhost:3000  # Для локальной разработки
  - VITE_API_URL=https://ваш-домен.com  # Для production
  1. Проверьте CORS в backend .env:
CORS_ORIGIN=http://localhost:5174,https://ваш-домен.com

Проблема: user.username или user.telegramId пустые

Причина: Пользователь не авторизован.

Решение:

  1. Убедитесь что открыли через Telegram бота
  2. Проверьте логи auth:
[Chat] user.username: undefined  ← ПРОБЛЕМА!
  1. Попробуйте переоткрыть систему модерации из бота

Проблема: WebSocket вообще не подключается

Причина: CORS блокирует WebSocket.

Решение:

  1. Проверьте browser console на ошибки CORS:
Access to XMLHttpRequest at 'http://...' from origin '...' has been blocked by CORS
  1. Добавьте origin в .env:
CORS_ORIGIN=http://localhost:5173,http://localhost:5174,https://web.telegram.org
  1. Перезапустите:
docker-compose restart backend

Backend логи

Успешное подключение:

docker-compose logs backend | tail -20

Должно быть:

✅ WebSocket подключен: abc123
[INFO] Mod chat auth success { username: 'glpshchn00', isOwner: true, isAdmin: false }

Ошибка авторизации:

[WARN] Mod chat auth failed: no username/telegramId
# или
[WARN] Mod chat access denied { username: '...', telegramId: '...' }

Быстрая проверка

1. Backend работает?

curl http://localhost:3000/health
# Должен вернуть 200 OK

2. WebSocket работает?

curl http://localhost:3000/socket.io/
# Должен вернуть: {"code":0,"message":"Transport unknown"}
# Это нормально - значит WebSocket сервер работает

3. Username в списке?

# Проверьте переменную
docker-compose exec backend printenv | grep MODERATION_OWNER

Должно быть:

MODERATION_OWNER_USERNAMES=glpshchn00

Полная перезагрузка

Если ничего не помогло:

# 1. Остановите всё
docker-compose down

# 2. Проверьте .env
cat .env | grep -E "MODERATION|CORS"

# 3. Запустите заново
docker-compose up -d

# 4. Смотрите логи
docker-compose logs -f backend

# 5. Переоткройте систему модерации из бота

Контрольный список

  • Backend запущен (docker-compose ps)
  • MODERATION_OWNER_USERNAMES содержит ваш username
  • CORS_ORIGIN включает домен системы модерации
  • User авторизован (есть username и telegramId)
  • VITE_API_URL указывает на правильный backend
  • Нет ошибок CORS в browser console
  • WebSocket сервер инициализирован (логи backend)
  • Firewall не блокирует WebSocket порты

Если всё еще не работает

Отправьте в @NakamaReportbot:

  1. Скриншот DevTools Console (вкладка Чат)
  2. Логи backend:
docker-compose logs backend > backend-logs.txt
  1. Переменные окружения (без секретов):
cat .env | grep -v SECRET | grep -v KEY | grep -v PASSWORD > env-safe.txt

После исправления чат должен подключиться автоматически при открытии вкладки "Чат"!