Как создать бота на Discord JS своими руками

Как создать бота на discord js

Как создать бота на discord js

Создание Discord-бота на JavaScript начинается с установки Node.js версии не ниже 16.9.0, поскольку именно эта версия поддерживает последние возможности библиотеки discord.js. Рабочую среду лучше подготовить заранее: создать отдельную папку для проекта, инициализировать её командой npm init -y, а затем установить библиотеку с помощью npm install discord.js.

Чтобы бот мог подключиться к серверам Discord, необходимо зарегистрировать его в Developer Portal и получить токен. Этот токен хранится только в переменных окружения или отдельном .env файле, так как открытая публикация приведёт к компрометации бота. После этого стоит добавить бота на тестовый сервер через сгенерированную ссылку с правами, соответствующими будущему функционалу.

Первый рабочий скрипт чаще всего представляет собой подключение клиента из discord.js и обработку событий ready и messageCreate. Такой минимальный код позволяет убедиться, что бот запускается без ошибок и корректно реагирует на сообщения. Уже на этом этапе можно внедрить простые команды, чтобы проверить логику обработки входящих данных.

Дальнейшая работа строится вокруг архитектуры проекта: хранение команд в отдельных файлах, использование асинхронных функций для работы с API, подключение баз данных или интеграций. Такой подход делает код масштабируемым и удобным для расширения, что особенно важно, если бот будет использоваться не только для личных нужд, но и на публичных серверах.

Установка Node.js и подготовка окружения

Для работы с Discord.js требуется актуальная версия Node.js не ниже 18. Проверить доступные релизы можно на официальном сайте nodejs.org.

  • Windows: загрузите установщик LTS-версии и во время установки активируйте опцию «Add to PATH».
  • Linux: используйте пакетный менеджер. Например, для Ubuntu:
    sudo apt update
    sudo apt install -y nodejs npm
  • macOS: установите через Homebrew:
    brew install node

После установки проверьте версии:

node -v
npm -v

Создайте отдельную директорию для проекта:

mkdir discord-bot
cd discord-bot

Инициализируйте package.json с настройками по умолчанию:

npm init -y

Добавьте в проект Git для удобного контроля версий:

git init

Установите менеджер процессов для запуска бота в фоновом режиме, например PM2:

npm install -g pm2

Окружение готово к установке библиотеки Discord.js и написанию кода.

Создание нового проекта и настройка package.json

Перейдите в папку, где будет храниться бот, и выполните команду mkdir discord-bot && cd discord-bot. Это создаст отдельный каталог и переключит вас в него.

Инициализируйте проект командой npm init -y. В результате будет создан файл package.json со стандартными значениями. Этот файл фиксирует зависимости и параметры проекта.

Откройте package.json и измените поле "main" на "index.js", чтобы указать правильную точку входа. Дополнительно в разделе "scripts" добавьте строку "start": "node index.js", что позволит запускать бота командой npm start.

Установите библиотеку для работы с Discord: npm install discord.js. В package.json появится запись о зависимости, а также создастся каталог node_modules с файлами библиотеки.

Для удобства используйте npm install nodemon --save-dev. После этого добавьте в "scripts" строку "dev": "nodemon index.js". Теперь можно запускать бота в режиме разработки командой npm run dev, и он будет автоматически перезапускаться при изменениях в коде.

Подключение библиотеки discord.js

Подключение библиотеки discord.js

Для начала необходимо установить Node.js версии не ниже 18.17.0, так как более старые версии не поддерживаются актуальным релизом discord.js.

В корневой папке проекта выполните команду:
npm install discord.js

После установки в файле package.json появится зависимость "discord.js" с указанной версией. Рекомендуется фиксировать номер версии, чтобы избежать несовместимостей при обновлениях.

Подключение библиотеки в коде выполняется через импорт:
const { Client, GatewayIntentBits } = require('discord.js');

При использовании ES-модулей синтаксис другой:
import { Client, GatewayIntentBits } from 'discord.js';

Создание клиента требует указания интентов – набора событий, которые бот будет получать. Например:
const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages] });

Если интенты не указать, бот не сможет реагировать на сообщения и другие действия в Discord. Минимизируйте их список, чтобы снизить нагрузку и повысить безопасность.

Регистрация приложения и получение токена бота

Регистрация приложения и получение токена бота

Перейдите на Discord Developer Portal и нажмите кнопку New Application. Укажите название приложения – оно будет отображаться в настройках и списке приложений.

В открывшемся приложении перейдите в раздел Bot и выберите Add Bot. Подтвердите действие, после чего для вашего приложения будет создан бот-аккаунт.

В блоке Token нажмите Reset Token и скопируйте сгенерированный ключ. Этот токен используется для подключения к API Discord, храните его только в конфигурационных файлах, недоступных публично. Никогда не размещайте токен в открытом репозитории.

Для безопасности рекомендуется сразу включить опцию Privileged Gateway Intents в разделе Bot, если вашему проекту нужен доступ к событиям PRESENCE INTENT или MESSAGE CONTENT INTENT. Без активации этих параметров часть функций работать не будет.

Создание базового кода запуска бота

Для запуска Discord-бота на Node.js потребуется библиотека discord.js и правильная структура исходного файла. Минимальный рабочий код можно разместить в файле index.js.

  1. Установите библиотеку:
    npm install discord.js
  2. Создайте файл index.js и добавьте следующий код:
    const { Client, GatewayIntentBits } = require('discord.js');
    const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent] });
    client.once('ready', () => {
    console.log(`Бот запущен как ${client.user.tag}`);
    });
    client.login('ВАШ_TOKEN');

Ключевые моменты:

  • GatewayIntentBits определяет события, которые бот может получать. Минимальный набор включает Guilds, GuildMessages и MessageContent для обработки сообщений.
  • client.once('ready') выполняется один раз при успешной авторизации и используется для подтверждения запуска.
  • client.login() принимает токен, полученный в панели разработчика Discord. Его нельзя публиковать или хранить в открытом виде.

Рекомендуется создать отдельный файл .env и подключить пакет dotenv для безопасного хранения токена:

TOKEN=ваш_токен

В index.js это подключается так:

require('dotenv').config();
client.login(process.env.TOKEN);

Обработка простых команд и сообщений

Обработка простых команд и сообщений

Для обработки команд в Discord.js необходимо использовать событие messageCreate. Оно срабатывает при каждом новом сообщении на сервере. Начните с проверки, что сообщение не отправлено самим ботом:

if (message.author.bot) return;

Далее определите префикс, например !, и извлеките команду и аргументы из текста сообщения:

const args = message.content.slice(prefix.length).trim().split(/ +/);

const command = args.shift().toLowerCase();

Для простой команды, например !ping, используйте конструкцию:

if (command === ‘ping’) {

  message.channel.send(‘Pong!’);

}

Если требуется реагировать на сообщения без префикса, можно проверять наличие ключевых слов:

if (message.content.toLowerCase().includes(‘привет’)) {

  message.channel.send(‘Привет! Как дела?’);

}

Для поддержания чистоты кода рекомендуют выносить обработку команд в отдельные модули. Каждый модуль экспортирует функцию с аргументами message и args. Это упрощает добавление новых команд и модификацию существующих.

Также важно учитывать ограничение Discord на отправку сообщений: 5 сообщений в 5 секунд на канал для бота. Используйте setTimeout или очередь сообщений для предотвращения спама.

Для расширения функционала используйте Collections из Discord.js для хранения команд и быстрого поиска соответствующей функции по имени команды:

client.commands = new Collection();

client.commands.set(‘ping’, require(‘./commands/ping.js’));

Эта структура обеспечивает стабильную работу и легкое масштабирование бота при добавлении новых команд и реакции на сообщения.

Добавление событий для реакции на действия пользователей

Добавление событий для реакции на действия пользователей

В Discord.js события позволяют боту отслеживать и реагировать на действия участников сервера в реальном времени. Основной метод регистрации событий – использование метода client.on(). Он принимает два аргумента: имя события и функцию-обработчик.

Например, чтобы бот отвечал на новое сообщение, используется событие messageCreate:

client.on('messageCreate', message => {
  if(message.content.toLowerCase() === 'привет') {
    message.reply('Привет!');
  }
});

Для отслеживания присоединения новых участников применяется событие guildMemberAdd:

client.on('guildMemberAdd', member => {
  member.send('Добро пожаловать на сервер!');
});

События могут принимать дополнительные параметры, например messageReactionAdd возвращает объект реакции и пользователя, что позволяет реализовать сложные системы голосований или реакции на эмодзи:

client.on('messageReactionAdd', (reaction, user) => {
  if(reaction.emoji.name === '👍') {
    reaction.message.channel.send(`${user.username} поставил лайк!`);
  }
});

Рекомендуется регистрировать события в отдельных файлах или модулях, чтобы код оставался структурированным и легко расширяемым. Для производительных ботов полезно фильтровать события внутри обработчика, чтобы бот не обрабатывал все сообщения или реакции без необходимости.

Для событий с высокой частотой, таких как messageCreate, целесообразно использовать дебаунс или проверки условий до выполнения действий, чтобы снизить нагрузку на процессор и избежать спама ответами.

Запуск бота и проверка его работы на сервере

После завершения разработки бота на Discord.js необходимо подготовить его к запуску. Для этого убедитесь, что установлен Node.js версии не ниже 18. В корневой папке проекта выполните команду npm install, чтобы установить все зависимости, указанные в package.json.

Для запуска бота используйте терминал и команду node index.js, где index.js – основной файл с кодом бота. Если используется nodemon для автоматического перезапуска при изменениях, команда будет npx nodemon index.js.

После запуска в терминале должно появиться сообщение об успешном входе бота в систему, например: Logged in as BotName#1234. Это подтверждает, что токен указан корректно и соединение с Discord установлено.

Чтобы проверить работу бота на сервере, выполните следующие действия:

Шаг Действие Результат
1 Пригласите бота на сервер с правильными правами через OAuth2 URL. Бот появляется в списке участников сервера.
2 Отправьте тестовую команду, например !ping. Бот должен ответить заранее запрограммированным сообщением, например Pong!.
3 Проверьте логи терминала на наличие ошибок при обработке команд. Отсутствие ошибок подтверждает стабильную работу.
4 Проверьте работу интерактивных событий, например messageCreate или guildMemberAdd. Бот корректно реагирует на события сервера.

Если бот не отвечает на команды, убедитесь, что токен действителен, у бота есть нужные права на сервере и события прописаны в коде правильно. Для дальнейшего мониторинга рекомендуется добавить логирование ошибок с помощью console.error() или библиотек вроде winston.

После успешного запуска и проверки функционала бот готов к постоянной работе на сервере.

Вопрос-ответ:

Как создать простого бота для Discord на JavaScript?

Для начала нужно установить Node.js и менеджер пакетов npm. Затем создайте новый проект с помощью команды npm init и установите библиотеку discord.js через npm install discord.js. После этого создайте файл, например index.js, подключите библиотеку и напишите код, который создаёт клиента и реагирует на события, такие как сообщения в чате. Для работы бота потребуется токен, который можно получить на портале разработчиков Discord.

Какие права и разрешения нужны боту в Discord?

При создании приложения в Discord необходимо указать, какие действия бот сможет выполнять. Чаще всего это чтение сообщений, отправка сообщений, управление ролями и подключение к голосовым каналам. Точный набор разрешений зависит от того, какие функции вы хотите реализовать. После указания прав вы получите ссылку для приглашения бота на сервер, где он будет иметь только заданные возможности.

Как сделать так, чтобы бот реагировал на команды пользователей?

В библиотеке discord.js есть возможность отслеживать события сообщений. Нужно настроить обработчик для события messageCreate, проверять текст сообщения и вызывать определённую функцию в зависимости от команды. Например, если пользователь напишет !привет, бот может ответить «Привет!». Также можно организовать систему префиксов и разделять команды по отдельным файлам для удобства масштабирования.

Можно ли подключить к боту внешние данные или API?

Да, бот может работать с внешними ресурсами. Для этого используется стандартный модуль fetch или библиотеки типа axios. С их помощью можно отправлять запросы к сторонним сервисам и обрабатывать ответы, например получать погоду, новости или данные из базы. Полученные данные бот может отправлять в чат в удобной форме, что расширяет его функционал и делает общение с пользователями более информативным.

Ссылка на основную публикацию