В этом ознакомительном 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”.
Последним шагом здесь будет копирование token по кнопке “Copy”. Держите в секрете ваш token и сохраните его куда-нибудь — он понадобится позже.
Подготовка сервера
В качестве площадки для размещения бота я использую 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
Добавление бота на сервер
Бот запущен и работает в контейнере. Осталось только пригласить его на сервер и проверить его работу.
Для приглашения необходимо:
- Вернуться обратно по ссылке.
- Выбрать созданное приложение.
- Перейти во вкладку “OAuth2”.
- В списке “Scopes” выбрать “bot”.
- Скопировать ссылку и перейти по ней в браузере.
- Выбрать сервер, на который будет добавлен бот.
Теперь мы можем проверить работу двух команд, созданных ранее:
Заключение
В этой ознакомительной статье мы зарегистрировали новое приложение, создали бота, написали несколько простых команд, запустили контейнер и пригласили бота на сервер.
Далее бота можно развивать, наполняя его другими более сложными и полезными функциями. Для этого вам пригодятся знания JavaScript и следующие ссылки:
- документация библиотеки discordjs;
- справочная информация по JavaScript;
- ознакомительный курс по Docker.
Надеюсь, этот материал будет полезен для всех, кто давно хочет создать собственного бота в Discord, но не знает, с чего начать.
Вопросы и пожелания можно оставлять в комментариях. Спасибо за внимание!
Комментарии
1)Разнообразный коллектив который не всегда подстать себе найдешь;
2)В приложении дискорд на жалобы сквозь пальцы смотрят.могут и не отреагировать;
3)Конфиденциальность в общении не в почёте.
4)Странное комньюнити которое как "стая пчел".
5)На жалобы техобслуживание долго не реагирует.но попытаться можно.
6)Само общество дискорда может окунуть тебя в грязь.Если им что-то не нравится.У них своё представление о том или ином человеке.Они живут в своём собственном мирке под названием Discord.
7)Есть определенные "особые" личности которым всё непочем.и они суются куда не следует.
Проблема русскоязычного дискорда независит от сервера.
Сейчас русскоязычный дискорд самое поганое место обитания.