6.8 KiB
6.8 KiB
Обновление: Управление админами и исправления
✅ Что сделано
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- подтвердить удаление по коду
Как работает:
- Владелец (@glpshchn00) видит кнопки "Назначить" и "Снять" у пользователей
- При нажатии выбирается номер админа (1-10)
- Система генерирует 6-значный код и отправляет пользователю в личку бота
- Пользователь вводит код в Mini App
- После подтверждения админ добавляется/удаляется
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), чтобы добавить:
-
Новую вкладку "Админы" с:
- Списком всех админов с номерами
- Кнопками "Назначить" и "Снять" (только для @glpshchn00)
- Модальным окном для ввода кода подтверждения
- Выбором номера админа (1-10)
-
Убрать выбор слота из вкладки "Публикация":
- Удалить dropdown со слотами
- Показывать текущий номер админа из базы
-
Тестирование:
- Проверить live chat
- Проверить добавление/удаление админов
- Проверить публикацию с автоматическим слотом
🔒 Безопасность
- Все операции с админами требуют авторизации через
authenticateModeration - Добавление/удаление доступно только владельцу через middleware
requireOwner - Коды подтверждения удаляются автоматически через 5 минут (MongoDB TTL)
- Коды одноразовые - удаляются сразу после использования
- Боту нужны права отправки сообщений пользователям
⚠️ Важно
Перед запуском на проде убедись:
MODERATION_BOT_TOKENправильно настроен в.env- Бот может отправлять сообщения пользователям (они должны начать диалог с ботом)
- Владелец (@glpshchn00) правильно указан в
MODERATION_OWNER_USERNAMES - MongoDB доступна и работает
🐛 Возможные проблемы
"Бот не отправляет код":
- Проверь, что пользователь написал боту
/start - Проверь
MODERATION_BOT_TOKENв логах
"Номер админа уже занят":
- Проверь
db.moderationadmins.find()- возможно есть дубликаты - Очисти базу:
db.moderationadmins.deleteMany({})
"Live chat не подключается":
- Проверь, что владелец указан в
MODERATION_OWNER_USERNAMES - Посмотри логи WebSocket подключения