Реклама ООО Таймвэб
Реклама ООО Таймвэб
Реклама ООО Таймвэб

Создаем бота для Discord (NodeJS + Docker)

3 комментария
Создаем бота для Discord

В этом ознакомительном HOWTO я расскажу, как можно немного занять себя на время карантина и сделать бота для своего Discord-сервера. Мы развернем NodeJS в Docker под Ubuntu 18.04 и запустим в нем бота с парочкой простых команд. В конце я оставлю ссылки на полезные источники информации, чтобы вы могли дальше развивать бота, наделяя его полезными функциями.

Программное обеспечение сервера, используемое в этом уроке:

  • Ubuntu 18.04
  • Docker 19.03.6
  • npm 6.14.5 

В этой статье подразумевается, что вы обладаете навыками работы в командной строке Linux.

Первые шаги

Первым шагом станет создание приложения на официальном сайте Discord (убедитесь, что вы зарегистрированы). Для этого потребуется пройти по ссылке и нажать на кнопку “New application”.

New applicationВ появившемся окне нужно придумать имя своему приложению (будущему боту):

Бот Дискорд

После указания имени и создания приложения мы можем перейти к созданию бота. Для этого в левом меню выберите пункт “Bot” и нажмите на кнопку “Add Bot”.

Добавить бота в DiscordПоследним шагом здесь будет копирование token по кнопке “Copy”. Держите в секрете ваш token и сохраните его куда-нибудь — он понадобится позже. 

Токен Discord

Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Подписаться

Подготовка сервера

В качестве площадки для размещения бота я использую VDS под управлением операционной системы Ubuntu 18.04. Вы можете разместить бота и на других дистрибутивах, убедившись в том, что в них установлены нужные пакеты.

Команды для установки в Ubuntu 18.04:

sudo apt update
sudo apt install docker npm

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

Создание основных файлов

Как я указал в начале статьи, мы будем использовать 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 <example@example.com>",
 "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

Добавление бота на сервер

Бот запущен и работает в контейнере. Осталось только пригласить его на сервер и проверить его работу.

Для приглашения необходимо: 

  1. Вернуться обратно по ссылке.
  2. Выбрать созданное приложение.
  3. Перейти во вкладку “OAuth2”.
  4. В списке “Scopes” выбрать “bot”.
  5. Скопировать ссылку и перейти по ней в браузере.
  6. Выбрать сервер, на который будет добавлен бот.

Выбор сервера для ботаТеперь мы можем проверить работу двух команд, созданных ранее: 

Проверка команд бота

Заключение

В этой ознакомительной статье мы зарегистрировали новое приложение, создали бота, написали несколько простых команд, запустили контейнер и пригласили бота на сервер.

Далее бота можно развивать, наполняя его другими более сложными и полезными функциями. Для этого вам пригодятся знания JavaScript и следующие ссылки:

Надеюсь, этот материал будет полезен для всех, кто давно хочет создать собственного бота в Discord, но не знает, с чего начать.

Вопросы и пожелания можно оставлять в комментариях. Спасибо за внимание!

Наши постоянные авторы и читатели делятся лайфхаками, основанными на личном опыте. Полная свобода самовыражения.

Комментарии

No Name +4
16 июля в 2022
Но в данном приложении Discord не обойтись без минусов:
1)Разнообразный коллектив который не всегда подстать себе найдешь;
2)В приложении дискорд на жалобы сквозь пальцы смотрят.могут и не отреагировать;
3)Конфиденциальность в общении не в почёте.
4)Странное комньюнити которое как "стая пчел".
5)На жалобы техобслуживание долго не реагирует.но попытаться можно.
6)Само общество дискорда может окунуть тебя в грязь.Если им что-то не нравится.У них своё представление о том или ином человеке.Они живут в своём собственном мирке под названием Discord.
7)Есть определенные "особые" личности которым всё непочем.и они суются куда не следует.
Проблема русскоязычного дискорда независит от сервера.
Сейчас русскоязычный дискорд самое поганое место обитания.
No Name +4
16 июля в 2022
Ни в коем случае не общайтесь в русскоязычных серверах Discord. Это относится как к общему чату так и к личным сообщениям.
Иван Афанасьев +1
16 июня в 2023
Как перезапустить бота
С помощью соцсетей
У меня нет аккаунта Зарегистрироваться
С помощью соцсетей
У меня уже есть аккаунт Войти
Инструкции по восстановлению пароля высланы на Ваш адрес электронной почты.
Пожалуйста, укажите email вашего аккаунта
Ваш баланс 10 ТК
1 ТК = 1 ₽
О том, как заработать и потратить Таймкарму, читайте в этой статье
Чтобы потратить Таймкарму, зарегистрируйтесь на нашем сайте