🛡️ Discord Anti-Nuke Бот
Полнофункциональный Discord бот для защиты сервера от краша, спама и вредоносных ботов. Бот автоматически отслеживает подозрительную активность, применяет наказания и восстанавливает удалённые элементы.
📋 Содержание
- Описание
- Функционал
- Установка
- Настройка
- Запуск
- Модули
- Команды
- База данных
- Логирование
- Запуск на Pterodactyl
- Решение проблем
📖 Описание
Discord Anti-Nuke бот — это комплексная система защиты сервера, которая:
- ✅ Автоматически защищает от массового удаления каналов и ролей
- ✅ Предотвращает добавление вредоносных ботов
- ✅ Блокирует спам и злоупотребление упоминаниями
- ✅ Отслеживает изменения названия и иконки сервера
- ✅ Восстанавливает удалённые элементы автоматически
- ✅ Ведёт подробные логи всех событий
- ✅ Применяет наказания нарушителям
🎯 Функционал
Защита от краша сервера (Anti-Nuke)
- Массовое удаление каналов: Отслеживает количество удалённых каналов за период времени
- Массовое удаление ролей: Контролирует удаление ролей
- Массовое создание каналов/ролей: Предотвращает создание большого количества элементов
- Изменение сервера: Защищает от изменения названия и иконки сервера
- Выдача админских прав: Отслеживает массовую выдачу административных прав
Защита от ботов (Anti-Bot)
- Автоматическая проверка всех добавляемых ботов
- Сравнение с белым списком разрешённых ботов
- Бан неразрешённых ботов и пригласивших их пользователей
Защита от спама (Anti-Spam)
- Контроль частоты сообщений
- Защита от злоупотребления упоминаниями (@everyone, @here)
- Автоматический мут или бан спамеров
Автоматическое восстановление
- Сохранение данных каналов и ролей перед удалением
- Автоматическое восстановление удалённых элементов
- Сохранение всех разрешений и настроек
🚀 Установка
Требования
- Node.js 18+
- MySQL или MariaDB
- Discord Bot Token
Шаги установки
- Клонирование или загрузка проекта
cd /path/to/project
- Установка зависимостей
npm install
- Настройка конфигурации
Скопируйте файл src/config/config.example.yml в src/config/config.yml:
cp src/config/config.example.yml src/config/config.yml
Отредактируйте src/config/config.yml и заполните все необходимые параметры (см. раздел Настройка).
- Сборка проекта
npm run build
⚙️ Настройка
1. Получение Discord Bot Token
- Перейдите на Discord Developer Portal
- Создайте новое приложение или выберите существующее
- Перейдите в раздел "Bot"
- Нажмите "Reset Token" и скопируйте токен
- Включите следующие привилегии:
- SERVER MEMBERS INTENT (Privileged Gateway Intents)
- MESSAGE CONTENT INTENT (Privileged Gateway Intents)
- В разделе "OAuth2" → "URL Generator":
- Выберите scope:
bot,applications.commands - Выберите permissions:
Administrator(или минимальные: Ban Members, Manage Channels, Manage Roles, Manage Server, View Audit Log) - Скопируйте URL и откройте в браузере для добавления бота на сервер
- Выберите scope:
2. Получение ID сервера
- Включите режим разработчика в Discord (Настройки → Расширенные → Режим разработчика)
- Правый клик по серверу → "Копировать ID сервера"
3. Настройка базы данных
Создайте базу данных MySQL/MariaDB:
CREATE DATABASE antinuke CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Или используйте существующую базу данных. Бот автоматически создаст необходимые таблицы при первом запуске.
4. Редактирование config.yml
Откройте src/config/config.yml и заполните:
bot:
token: "ВАШ_ТОКЕН_БОТА"
guild_id: "ID_ВАШЕГО_СЕРВЕРА"
prefix: "!"
log_channel_id: "ID_КАНАЛА_ДЛЯ_ЛОГОВ" # Необязательно
database:
type: "mysql"
host: "localhost"
port: 3306
user: "root"
password: "ваш_пароль"
name: "antinuke"
limits:
max_channel_creates: 3
max_role_deletes: 2
max_channel_deletes: 2
max_role_creates: 5
max_spam_messages: 5
max_mentions: 3
window_seconds: 10
spam_window_seconds: 3
whitelist:
admins:
- "ID_ДОВЕРЕННОГО_АДМИНА_1"
- "ID_ДОВЕРЕННОГО_АДМИНА_2"
bots:
- "ID_РАЗРЕШЁННОГО_БОТА_1"
punishment:
ban_user: true
ban_bot: true
ban_inviter: true
restore_changes: true
mute_on_spam: true
mute_duration_minutes: 10
5. Настройка белого списка
Добавьте ID доверенных администраторов и разрешённых ботов в секцию whitelist конфигурации. Эти пользователи и боты не будут забанены системой защиты.
🏃 Запуск
Режим разработки
npm run dev
Продакшн режим
npm run build
npm start
Использование PM2 (рекомендуется)
npm install -g pm2
npm run build
pm2 start dist/index.js --name antinuke-bot
pm2 save
pm2 startup
🔧 Модули
Core модули
logger.ts
Система логирования на основе Winston. Поддерживает логирование в консоль и файл с ротацией.
database.ts
Модуль работы с MySQL/MariaDB. Обеспечивает подключение, создание таблиц и операции с данными.
configLoader.ts
Загрузка и валидация конфигурации из YAML файла.
Модули защиты
antiNuke.ts
Основной модуль защиты от краша сервера. Отслеживает массовые операции через Audit Log и сравнивает с лимитами.
antiBot.ts
Проверяет всех добавляемых ботов и сравнивает с белым списком.
antiSpam.ts
Контролирует частоту сообщений и упоминаний, применяет наказания за спам.
autoRestore.ts
Сохраняет данные каналов и ролей перед удалением и восстанавливает их при необходимости.
punishment.ts
Выполняет наказания: бан, кик, мут. Отправляет сообщения в лог-канал.
whitelist.ts
Управление белым списком администраторов и ботов.
💬 Команды
Все команды доступны через Slash Commands (/) в Discord.
/whitelist add user_id:<ID> type:<admin|bot>
Добавляет пользователя или бота в белый список.
Пример:
/whitelist add user_id:123456789012345678 type:admin
/whitelist remove user_id:<ID> type:<admin|bot>
Удаляет пользователя или бота из белого списка.
/whitelist list
Показывает текущий белый список.
/antinuke status
Отображает статус системы защиты, текущие лимиты и настройки.
/antinuke test
Проверяет работу системы защиты.
/config reload
Перезагружает конфигурацию из файла config.yml без перезапуска бота.
🗄️ База данных
Структура таблиц
events_log
Хранит все события, отслеживаемые ботом.
| Поле | Тип | Описание |
|---|---|---|
| id | VARCHAR(36) | UUID события |
| user_id | VARCHAR(20) | ID пользователя |
| action | VARCHAR(100) | Тип действия |
| details | TEXT | Детали события |
| timestamp | DATETIME | Время события |
restored_items
Хранит данные для восстановления каналов и ролей.
| Поле | Тип | Описание |
|---|---|---|
| id | INT | ID записи |
| type | ENUM | Тип: channel или role |
| old_data | JSON | Данные элемента |
| restored_at | DATETIME | Время восстановления |
punishments
Лог всех применённых наказаний.
| Поле | Тип | Описание |
|---|---|---|
| id | INT | ID записи |
| user_id | VARCHAR(20) | ID пользователя |
| reason | TEXT | Причина наказания |
| punishment_type | VARCHAR(50) | Тип наказания |
| timestamp | DATETIME | Время наказания |
📝 Логирование
Бот ведёт логи в двух местах:
- Консоль: Все события выводятся в консоль с цветовой кодировкой
- Файл: Логи сохраняются в файл (настраивается в
config.yml)
Уровни логирования
error: Критические ошибкиwarn: Предупрежденияinfo: Информационные сообщенияdebug: Отладочная информация
Настройка логирования
В config.yml:
logging:
enabled: true
file_path: "./logs/bot.log"
level: "info"
max_file_size: "10m"
max_files: 5
🐳 Запуск на Pterodactyl
1. Создание яйца (Egg)
Если у вас есть доступ к панели Pterodactyl, создайте новое яйцо для Node.js приложения.
2. Настройка сервера
- Создайте новый сервер в Pterodactyl
- Выберите яйцо Node.js
- Установите следующие переменные окружения (если нужно):
NODE_VERSION:18или выше
3. Установка зависимостей
В консоли сервера выполните:
npm install
4. Настройка конфигурации
Отредактируйте src/config/config.yml через файловый менеджер или через консоль:
nano src/config/config.yml
5. Сборка и запуск
npm run build
npm start
6. Автозапуск
Pterodactyl автоматически перезапустит бота при перезагрузке сервера, если процесс завершится.
Альтернатива: использование PM2
Если хотите использовать PM2 на Pterodactyl:
- Установите PM2 в консоли сервера:
npm install -g pm2
- Создайте файл
ecosystem.config.js:
module.exports = {
apps: [{
name: 'antinuke-bot',
script: 'dist/index.js',
instances: 1,
autorestart: true,
watch: false,
max_memory_restart: '500M',
}]
};
- Запустите через PM2:
npm run build
pm2 start ecosystem.config.js
pm2 save
🔍 Решение проблем
Бот не запускается
Проблема: Ошибка при запуске бота
Решения:
- Проверьте правильность токена в
config.yml - Убедитесь, что бот добавлен на сервер с необходимыми правами
- Проверьте подключение к базе данных
- Убедитесь, что Node.js версии 18+
Ошибки подключения к БД
Проблема: Error: connect ECONNREFUSED
Решения:
- Проверьте, что MySQL/MariaDB запущен
- Проверьте правильность хоста, порта, пользователя и пароля
- Убедитесь, что база данных существует
- Проверьте права доступа пользователя БД
Бот не реагирует на события
Проблема: Бот онлайн, но не обрабатывает события
Решения:
- Проверьте, что
guild_idв конфиге соответствует ID сервера - Убедитесь, что бот имеет необходимые права на сервере
- Проверьте, что включены необходимые Intents в Discord Developer Portal
- Проверьте логи на наличие ошибок
Команды не работают
Проблема: Slash Commands не отображаются или не работают
Решения:
- Подождите несколько минут после запуска (команды регистрируются асинхронно)
- Проверьте права бота (нужны права на использование Slash Commands)
- Убедитесь, что бот имеет права Administrator или необходимые минимальные права
- Попробуйте перезапустить бота
Бот банит легитимных пользователей
Проблема: Бот банит администраторов или разрешённых ботов
Решения:
- Добавьте ID администраторов в
whitelist.adminsв конфиге - Добавьте ID разрешённых ботов в
whitelist.bots - Перезагрузите конфигурацию командой
/config reloadили перезапустите бота
Восстановление не работает
Проблема: Удалённые каналы/роли не восстанавливаются
Решения:
- Убедитесь, что
punishment.restore_changes: trueв конфиге - Проверьте права бота (нужны права на создание каналов и ролей)
- Проверьте логи на наличие ошибок восстановления
- Убедитесь, что данные сохраняются в БД (проверьте таблицу
restored_items)
Высокое использование памяти
Проблема: Бот потребляет много памяти
Решения:
- Уменьшите
max_filesв настройках логирования - Уменьшите
max_file_sizeдля логов - Используйте PM2 с ограничением памяти
- Регулярно очищайте старые записи из БД
📞 Поддержка
Если у вас возникли проблемы, не описанные в этом руководстве:
- Проверьте логи бота в файле или консоли
- Проверьте логи базы данных
- Убедитесь, что все зависимости установлены:
npm install - Проверьте версию Node.js:
node --version(должна быть 18+)
📄 Лицензия
MIT License
🙏 Благодарности
Бот создан с использованием:
- discord.js - Discord API библиотека
- mysql2 - MySQL драйвер
- winston - Система логирования
- js-yaml - Парсер YAML
Версия: 1.0.0
Последнее обновление: 2024