Update files

This commit is contained in:
glpshchn 2025-12-07 18:19:22 +03:00
parent 741524e4af
commit de3fd9b58c
1 changed files with 53 additions and 0 deletions

View File

@ -2,6 +2,9 @@ const axios = require('axios');
const config = require('../config');
const { log, logError } = require('../middleware/logger');
const User = require('../models/User');
const { normalizeUsername } = require('../services/moderationAdmin');
const OWNER_USERNAMES = new Set(config.moderationOwnerUsernames || []);
const BOT_TOKEN = config.telegramBotToken;
const TELEGRAM_API = BOT_TOKEN ? `https://api.telegram.org/bot${BOT_TOKEN}` : null;
@ -58,6 +61,21 @@ const sendMessageToAllUsers = async (messageText) => {
}
};
const requireAdmin = async (message) => {
try {
const telegramId = message.from?.id;
if (!telegramId) return false;
const user = await User.findOne({ telegramId }).select('role');
const username = normalizeUsername(message.from?.username || '');
return user && (user.role === 'admin' || OWNER_USERNAMES.has(username));
} catch (error) {
logError('Ошибка проверки прав админа', error);
return false;
}
};
const getStartMessage = () => {
return `<b>Добро пожаловать в Nakama!</b>
@ -123,6 +141,41 @@ const handleCommand = async (message) => {
return;
}
if (command === '/broadcast') {
// Проверка прав
const isAdmin = await requireAdmin(message);
if (!isAdmin) {
await sendMessage(chatId, '❌ Команда доступна только администраторам.');
return;
}
// Получить текст сообщения (все после /broadcast)
const messageText = args.slice(1).join(' ').trim();
if (!messageText) {
await sendMessage(chatId, 'Использование: /broadcast <сообщение>\n\nПример: /broadcast Всем привет!');
return;
}
// Отправить подтверждение
await sendMessage(chatId, '📤 Начинаю рассылку сообщения всем пользователям...');
try {
const result = await sendMessageToAllUsers(messageText);
await sendMessage(chatId,
`✅ Рассылка завершена!\n\n` +
`📊 Статистика:\n` +
`• Отправлено: ${result.sent}\n` +
`• Ошибок: ${result.failed}\n` +
`Всего пользователей: ${result.total}`
);
} catch (error) {
logError('Ошибка рассылки через команду', error);
await sendMessage(chatId, `❌ Ошибка рассылки: ${error.message}`);
}
return;
}
// Игнорируем неизвестные команды
};