Update files
This commit is contained in:
parent
741524e4af
commit
de3fd9b58c
|
|
@ -2,6 +2,9 @@ const axios = require('axios');
|
||||||
const config = require('../config');
|
const config = require('../config');
|
||||||
const { log, logError } = require('../middleware/logger');
|
const { log, logError } = require('../middleware/logger');
|
||||||
const User = require('../models/User');
|
const User = require('../models/User');
|
||||||
|
const { normalizeUsername } = require('../services/moderationAdmin');
|
||||||
|
|
||||||
|
const OWNER_USERNAMES = new Set(config.moderationOwnerUsernames || []);
|
||||||
|
|
||||||
const BOT_TOKEN = config.telegramBotToken;
|
const BOT_TOKEN = config.telegramBotToken;
|
||||||
const TELEGRAM_API = BOT_TOKEN ? `https://api.telegram.org/bot${BOT_TOKEN}` : null;
|
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 = () => {
|
const getStartMessage = () => {
|
||||||
return `<b>Добро пожаловать в Nakama!</b>
|
return `<b>Добро пожаловать в Nakama!</b>
|
||||||
|
|
||||||
|
|
@ -123,6 +141,41 @@ const handleCommand = async (message) => {
|
||||||
return;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
// Игнорируем неизвестные команды
|
// Игнорируем неизвестные команды
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue