nakama/ADMIN_MANAGEMENT_UPDATE.md

147 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Обновление: Управление админами и исправления
## ✅ Что сделано
### 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 подключения