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