2025-11-11 00:33:22 +00:00
|
|
|
|
# Обновление: Управление админами и исправления
|
|
|
|
|
|
|
|
|
|
|
|
## ✅ Что сделано
|
|
|
|
|
|
|
|
|
|
|
|
### 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 подключения
|
|
|
|
|
|
|
2025-11-20 20:50:14 +00:00
|
|
|
|
|