Создаем бота для Discord (NodeJS + Docker) - «Новости мира Интернет»
Опасность лазерной коррекции зрения
Опасность лазерной коррекции зрения
Вышел Docker Desktop для Linux - «Новости мира Интернет»
Вышел Docker Desktop для Linux - «Новости мира Интернет»
Из Google Play может исчезнуть более 800 тысяч «заброшенных» приложений - «Новости мира Интернет»
Из Google Play может исчезнуть более 800 тысяч «заброшенных» приложений - «Новости мира Интернет»
Вышла третья версия фреймворка Flutter: что нового? - «Новости мира Интернет»
Вышла третья версия фреймворка Flutter: что нового? - «Новости мира Интернет»
Вебинар Craftum: редизайн вашего сайта в прямом эфире + разбор 5 проектов - «Новости мира Интернет»
Вебинар Craftum: редизайн вашего сайта в прямом эфире + разбор 5 проектов - «Новости мира Интернет»
ВКонтакте открывает технологии VK Video для сторонних разработчиков - «Новости мира Интернет»
ВКонтакте открывает технологии VK Video для сторонних разработчиков - «Новости мира Интернет»
Новые возможности заработка с Яндекс Путешествиями — «Блог для вебмастеров»
Новые возможности заработка с Яндекс Путешествиями — «Блог для вебмастеров»
Электромобили Tesla начали предупреждать владельцев о периодах пиковых нагрузок на электросеть - «Новости сети»
Электромобили Tesla начали предупреждать владельцев о периодах пиковых нагрузок на электросеть - «Новости сети»
Минцифры приступает к разработке единого хранилища обезличенных данных - «Новости мира Интернет»
Минцифры приступает к разработке единого хранилища обезличенных данных - «Новости мира Интернет»
Программы-вымогатели развивают свои экосистемы и становятся более гибкими - «Новости мира Интернет»
Программы-вымогатели развивают свои экосистемы и становятся более гибкими - «Новости мира Интернет»
Новости мира Интернет » Новости » Создаем бота для Discord (NodeJS + Docker) - «Новости мира Интернет»
Создаем бота для 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”.



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



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


В качестве площадки для размещения бота я использую 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

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


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


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



  1. Вернуться обратно по ссылке.

  2. Выбрать созданное приложение.

  3. Перейти во вкладку “OAuth2”.

  4. В списке “Scopes” выбрать “bot”.

  5. Скопировать ссылку и перейти по ней в браузере.

  6. Выбрать сервер, на который будет добавлен бот.



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



Заключение


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


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



  • документация библиотеки discordjs;

  • справочная информация по jаvascript;

  • ознакомительный курс по Docker.


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


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


Смотрите также


А что там на главной? )))



Комментарии )))



Комментарии для сайта Cackle