# Обновление: Управление админами и исправления ## ✅ Что сделано ### 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` - Улучшено логирование подключений ## 📦 Деплой ### На сервере: ```bash 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`, нужно добавить номера вручную: ```bash mongosh nakama ``` ```javascript // Посмотреть текущих админов db.moderationadmins.find() // Назначить номера вручную (замени ID и номера) db.moderationadmins.updateOne( { _id: ObjectId("...") }, { $set: { adminNumber: 1 } } ) db.moderationadmins.updateOne( { _id: ObjectId("...") }, { $set: { adminNumber: 2 } } ) // И так далее для каждого админа ``` Или удалить всех и добавить заново через Mini App: ```javascript 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 подключения