const ModerationAdmin = require('../models/ModerationAdmin'); const User = require('../models/User'); const config = require('../config'); const normalizeUsername = (username = '') => username.replace(/^@/, '').trim().toLowerCase(); const ownerUsernames = new Set(config.moderationOwnerUsernames || []); const listAdmins = async () => { const admins = await ModerationAdmin.find().sort({ username: 1 }).lean(); return admins.map((admin) => ({ telegramId: admin.telegramId, username: admin.username, firstName: admin.firstName, lastName: admin.lastName, addedBy: admin.addedBy, createdAt: admin.createdAt })); }; const isModerationAdmin = async ({ telegramId, username }) => { const normalized = normalizeUsername(username); if (ownerUsernames.has(normalized)) { return true; } if (telegramId) { const byId = await ModerationAdmin.findOne({ telegramId }).lean(); if (byId) { return true; } } if (normalized) { const byUsername = await ModerationAdmin.findOne({ username: normalized }).lean(); if (byUsername) { return true; } } return false; }; const addAdmin = async ({ username, addedBy }) => { const normalized = normalizeUsername(username); if (!normalized) { throw new Error('Укажите username в формате @username'); } const user = await User.findOne({ username: normalized }).lean(); if (!user) { throw new Error(`Пользователь ${normalized} не найден в Nakama`); } const existing = await ModerationAdmin.findOne({ username: normalized }); if (existing) { return existing; } const admin = new ModerationAdmin({ telegramId: user.telegramId, username: normalized, firstName: user.firstName, lastName: user.lastName, addedBy: normalizeUsername(addedBy) }); await admin.save(); return admin; }; const removeAdmin = async (username) => { const normalized = normalizeUsername(username); if (!normalized) { throw new Error('Укажите username в формате @username'); } if (ownerUsernames.has(normalized)) { throw new Error('Нельзя удалить владельца'); } await ModerationAdmin.deleteOne({ username: normalized }); }; module.exports = { listAdmins, isModerationAdmin, addAdmin, removeAdmin, normalizeUsername };