nakama/ADMIN_MANAGEMENT_UPDATE.md

6.8 KiB
Raw Blame History

Обновление: Управление админами и исправления

Что сделано

1. Убран суффикс "Сообщите об ошибке" из специфичных ошибок

  • Обновлён backend/server.js
  • Суффикс не добавляется к ошибкам валидации, публикации и других операционных сообщений
  • Список исключений: "Загрузите хотя бы одно изображение", "Не удалось опубликовать в канал", "Требуется авторизация", и др.

2. Добавлено управление админами через Mini App

Новые модели:

  • backend/models/AdminConfirmation.js - хранение кодов подтверждения (TTL 5 минут)
  • Обновлена backend/models/ModerationAdmin.js - добавлено поле adminNumber (1-10)

Новые API endpoints в /api/mod-app:

  • GET /admins - получить список всех админов
  • POST /admins/initiate-add - инициировать добавление админа (только для @glpshchn00)
  • POST /admins/confirm-add - подтвердить добавление по коду
  • POST /admins/initiate-remove - инициировать удаление админа (только для @glpshchn00)
  • POST /admins/confirm-remove - подтвердить удаление по коду

Как работает:

  1. Владелец (@glpshchn00) видит кнопки "Назначить" и "Снять" у пользователей
  2. При нажатии выбирается номер админа (1-10)
  3. Система генерирует 6-значный код и отправляет пользователю в личку бота
  4. Пользователь вводит код в Mini App
  5. После подтверждения админ добавляется/удаляется

3. Номера админов (1-10)

  • Каждому админу присваивается уникальный номер от 1 до 10
  • Номер выбирается владельцем при назначении
  • Номер используется автоматически при публикации постов (теперь НЕ нужно выбирать слот)

4. Убран выбор слота из публикации

  • В backend/routes/modApp.js роут /channel/publish обновлён
  • Теперь автоматически берётся adminNumber из базы данных
  • Поле slot больше не требуется в запросе

5. Исправлен live chat

  • Обновлён backend/websocket.js
  • Владелец (@glpshchn00) теперь может подключаться к чату
  • Добавлена проверка config.moderationOwnerUsernames
  • Улучшено логирование подключений

📦 Деплой

На сервере:

cd /var/www/nakama

# 1. Обновить код (если через git)
git pull

# 2. Установить зависимости (если добавились новые)
npm install --production

# 3. Перезапустить бекэнд
pm2 restart nakama-backend --update-env

# 4. Проверить логи
pm2 logs nakama-backend --lines 50

Обновление существующих админов:

Если у тебя уже есть админы в базе БЕЗ adminNumber, нужно добавить номера вручную:

mongosh nakama
// Посмотреть текущих админов
db.moderationadmins.find()

// Назначить номера вручную (замени ID и номера)
db.moderationadmins.updateOne(
  { _id: ObjectId("...") },
  { $set: { adminNumber: 1 } }
)

db.moderationadmins.updateOne(
  { _id: ObjectId("...") },
  { $set: { adminNumber: 2 } }
)

// И так далее для каждого админа

Или удалить всех и добавить заново через Mini App:

db.moderationadmins.deleteMany({})

🎯 Следующие шаги

Нужно обновить фронтенд модерации (moderation/frontend/src/App.jsx), чтобы добавить:

  1. Новую вкладку "Админы" с:

    • Списком всех админов с номерами
    • Кнопками "Назначить" и "Снять" (только для @glpshchn00)
    • Модальным окном для ввода кода подтверждения
    • Выбором номера админа (1-10)
  2. Убрать выбор слота из вкладки "Публикация":

    • Удалить dropdown со слотами
    • Показывать текущий номер админа из базы
  3. Тестирование:

    • Проверить live chat
    • Проверить добавление/удаление админов
    • Проверить публикацию с автоматическим слотом

🔒 Безопасность

  • Все операции с админами требуют авторизации через authenticateModeration
  • Добавление/удаление доступно только владельцу через middleware requireOwner
  • Коды подтверждения удаляются автоматически через 5 минут (MongoDB TTL)
  • Коды одноразовые - удаляются сразу после использования
  • Боту нужны права отправки сообщений пользователям

⚠️ Важно

Перед запуском на проде убедись:

  1. MODERATION_BOT_TOKEN правильно настроен в .env
  2. Бот может отправлять сообщения пользователям (они должны начать диалог с ботом)
  3. Владелец (@glpshchn00) правильно указан в MODERATION_OWNER_USERNAMES
  4. MongoDB доступна и работает

🐛 Возможные проблемы

"Бот не отправляет код":

  • Проверь, что пользователь написал боту /start
  • Проверь MODERATION_BOT_TOKEN в логах

"Номер админа уже занят":

  • Проверь db.moderationadmins.find() - возможно есть дубликаты
  • Очисти базу: db.moderationadmins.deleteMany({})

"Live chat не подключается":

  • Проверь, что владелец указан в MODERATION_OWNER_USERNAMES
  • Посмотри логи WebSocket подключения