✔Создаем бота для Discord (NodeJS + Docker) - «Новости мира Интернет»

В этом ознакомительном HOWTO я расскажу, как можно немного занять себя на время карантина и сделать бота для своего Discord-сервера. Мы развернем NodeJS в Docker под Ubuntu 18.04 и запустим в нем бота с парочкой простых команд. В конце я оставлю ссылки на полезные источники информации, чтобы вы могли дальше развивать бота, наделяя его полезными функциями.
Программное обеспечение сервера, используемое в этом уроке:
- Ubuntu 18.04
- Docker 19.03.6
- npm 6.14.5
В этой статье подразумевается, что вы обладаете навыками работы в командной строке Linux.
Первые шаги
Первым шагом станет создание приложения на официальном сайте Discord (убедитесь, что вы зарегистрированы). Для этого потребуется пройти по ссылке и нажать на кнопку “New application”.

После указания имени и создания приложения мы можем перейти к созданию бота. Для этого в левом меню выберите пункт “Bot” и нажмите на кнопку “Add Bot”.
Подготовка сервера
В качестве площадки для размещения бота я использую VDS под управлением операционной системы Ubuntu 18.04. Вы можете разместить бота и на других дистрибутивах, убедившись в том, что в них установлены нужные пакеты.
Команды для установки в Ubuntu 18.04:
sudo apt update
sudo apt install docker npm
Если вы используете другой дистрибутив, то установка необходимых пакетов может отличаться. Вы можете найти инструкцию для конкретного дистрибутива в документации или в поисковике.
Читайте также
Настройка Iptables для чайников

Как установить и настроить NTP на сервере

Создание основных файлов
Как я указал в начале статьи, мы будем использовать NodeJS для запуска бота. Дополнительно нам потребуются две библиотеки:
- discord.js (основная библиотека для работы бота);
- dotenv (будет использоваться для конфигурационного файла).
Создадим рабочую директорию проекта и файл package.json. В моем случае рабочая директория располагается в директории /home, но вы можете выбрать любую другую на свое усмотрение.
mkdir /home/my-discord-bot
cd /home/my-discord-bot
touch package.json
Примерный вид файла:
{
"name": "my-discord-bot",
"version": "1.0.0",
"description": "My discord bot",
"author": "Me ",
"main": "app.js",
"keywords": [
"nodejs"
],
"dependencies": {
"discord.js": "^12.1.1",
"dotenv": "^8.2.0"
}
}
В нем мы указали имя будущего пакета (name), версию (version), описание (description), автора (author), основной файл (app.js) и список зависимостей (dependencies).
Запустим npm install и убедимся, что создался файл package-lock.json, который потом также будет скопирован в контейнер.
Теперь создадим файл самого бота app.js и запишем в него следующий код:
// Загрузка библиотек и конфигурационного файла
require('dotenv').config();
const Discord = require('discord.js');
const bot = new Discord.Client();
const token = process.env.token;
const prefix = process.env.prefix;
bot.login(token);
// Запуск бота
bot.on('ready', () => {
console.info(`Logged in as ${bot.user.tag}!`);
console.info(`Current prefix: ${prefix}`);
});
// Команда для приветственного сообщения
bot.on('message', message => {
if (message.content === `${prefix}hello`) {
console.log(message.content, message.author);
message.channel.send('hello!');
}
});
// Команда для вывода количества участников сервера
bot.on('message', message => {
if (message.content === `${prefix}server`) {
console.log(message.content, message.author);
message.channel.send(`Сообщество: ${message.guild.name}nУчастников: ${message.guild.memberCount}`);
}
});
Учитывая, что здесь используется конфигурационный файл, создадим в рабочей директории .env и запишем в него:
token=tokenbot
prefix="!"
Вместо “tokenbot” подставляется token бота, который был сохранен в начале статьи, а в качестве prefix указывается символ, после которого будут вводиться команды. Я выбрал в качестве префикса “!”, но вы можете выбрать другой удобный символ, если только он не используется самим Discord, как например “@” или “/”.
Создание Docker-контейнера
Теперь в рабочей директории нам нужно создать Dockerfile, который будет содержать инструкции для сборки образа, на основе которого будет запущен контейнер. В него мы запишем:
FROM node:14
WORKDIR /home/my-discord-bot
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD ["node", "app.js"]
Создадим файл .dockerignore и запишем туда несколько локальных файлов, которые будут игнорироваться:
node_modules
npm-debug.log
Соберем образ и запустим на его основе контейнер:
docker build -t authorname/my-discrod-bot
docker run -p 42150:8080 -d authorname/my-discrod-bot
Вместо “authorname” можно ввести имя пользователя, от которого создается бот, и через “/” указать имя бота.
Проверим, что контейнер запустился, специальной командой:
docker ps
9fbaf1176c7a authorname/my-discrod-bot "docker-entrypoint.s…" 6 seconds ago Up 4 seconds 0.0.0.0:42150->8080/tcp pensive_carson
Добавление бота на сервер
Бот запущен и работает в контейнере. Осталось только пригласить его на сервер и проверить его работу.
Для приглашения необходимо:
- Вернуться обратно по ссылке.
- Выбрать созданное приложение.
- Перейти во вкладку “OAuth2”.
- В списке “Scopes” выбрать “bot”.
- Скопировать ссылку и перейти по ней в браузере.
- Выбрать сервер, на который будет добавлен бот.

Заключение
В этой ознакомительной статье мы зарегистрировали новое приложение, создали бота, написали несколько простых команд, запустили контейнер и пригласили бота на сервер.
Далее бота можно развивать, наполняя его другими более сложными и полезными функциями. Для этого вам пригодятся знания jаvascript и следующие ссылки:
- документация библиотеки discordjs;
- справочная информация по jаvascript;
- ознакомительный курс по Docker.
Надеюсь, этот материал будет полезен для всех, кто давно хочет создать собственного бота в Discord, но не знает, с чего начать.
Вопросы и пожелания можно оставлять в комментариях. Спасибо за внимание!