Создание Discord-бота, используя библиотеку discord.js

JavaScript *Node.JS * Из песочницы Tutorial

Введение

В этой статье я подробно расскажу о том, как работать с библиотекой discord.js, создать своего Discord-бота, а также покажу несколько интересных и полезных команд. Сразу хочу отметить, что я планирую сделать ряд подобных статей, начиная с простых команд, заканчивая музыкой, системой экономики и распознаванием голоса ботом.

Начало работы

Если вы уже знакомы с приведёнными ниже материалами, — смело можете пролистать этот раздел. Установка среды разработки Для начала работы с кодом нам нужно установить среду разработки, это может быть: 21 мая в 2020 55K image

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

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

  • Ubuntu 18.04
  • Docker 19.03.6
  • npm 6.14.5 

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

Первые шаги

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

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

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

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

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

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

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

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

Заключение

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

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

  • документация библиотеки discordjs;
  • справочная информация по JavaScript;
  • ознакомительный курс по Docker.

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

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

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

Предыстория

Я заинтересовался созданием бота для Discord, но всё что я нашёл, было пару видео на YouTube, да и то там просто писали код, без всяких пояснений. Поэтому я хочу начать серию статей по созданию ботов на основе discord.js.

Получение токена бота

Для начала нам нужно зайти на страницу создание приложений и нажать New Application.

После чего, нам предложат назвать наше приложение. Вводим желаемое название и нажимаем Create. Мы попадаем на страницу настройки приложения, где мы можем поменять название, аватар, описание и тд. Но нам это пока не нужно, переходим во вкладку Bot. И создаём бота.

Осталось только скопировать токен.

Для начала нужно установить Node.js и Visual Studio Code (VS code), в последнем собственно и будет происходить процесс создания бота. Запускаем VS code. Открываем папку, в которой будет хранится наш бот. Нажимаем Вид->Терминал, после этого в нижней части приложения должен появится терминал.

Написания “тела” бота

Для начало нужно создать описание бота.

npm init

После ввода команды, она будет спрашивать вас данные о боте (можно оставить по умолчанию, просто нажав Enter). В конце она спросит правильно ли всё указано и выведет полученные ответы.

npm install
npm install discord.js

После ввода каждой команды, требуется немного подождать.

Примечание! После ввода команд, могут появится предупреждения, не бойтесь, ничего страшного.

Если вы всё сделали правильно, то в папке бота должно быть следующее.

Далее создаём файл botconfig.json, здесь мы будем хранить основные параметры бота.

{     "token":"Njc2MTY0NDQwNTg4MDI1ODY2.XkFyMg.cMKBXh5AJ-u0SQt501OoAd*****", // ваш токен     "prefix":">" // префикс, чаще всего '!' или '>' }

Теперь создаём файл index.js, в него копируем следующий код.

const Discord = require('discord.js');  const bot = new Discord.Client(); //подключаем файл конфигурации let config = require('./botconfig.json');  //"достаём" токен и префикс let token = config.token;  let prefix = config.prefix; //создаём ссылку-приглашение для бота bot.on('ready', () => {      console.log(`Запустился бот ${bot.user.username}`);     bot.generateInvite(["ADMINISTRATOR"]).then(link => {          console.log(link);     }); }); //команда, и то, что она должна выполнить bot.on('message', msg => {     if (msg.content === prefix + 'habr') {         msg.reply('The Best!');     } }); bot.login(token);

И мы на финишной прямой! Пишем в терминале команду для запуска бота. Примечание! Если вы поменяли название исходного файла, вам нужно указать его.

node index.js

После чего остаётся добавить бота на сервер по полученной ссылке.

Вот и всё, наш бот готов!

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

При подобном варианте пользователь может создавать оригинальных помощников при помощи специально разработанных для подобной цели ресурсов. Как правило, клиенты предпочитают применять discord.js, Python или Discord Bot Maker. Программы оснащены интуитивно понятным интерфейсом, чтобы не возникло проблем с пользованием, а вопросы возникали в ходе процесса создания.

Как создать Дискорд-бота на discord.js?

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

Стандартная процедура создания бота при помощи портала discord.js:

  • На платформе просматриваем предлагаемое меню, которое расположено с левого края, и перейти в пункт «new application».
  • При переходе в открывшееся меню указываем наименования приложения, и выбрать вариант для создания «Create».
  • Затем переходим в пункт ботов, и нажимаем на опцию для добавления ботов Add Bot.

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

  • Войти на веб-страницу OAuth2, и на панели с названием Scope следует выбрать необходимый бот.
  • Затем указываем необходимые полномочия для бота. Например, боты могут помочь проигрывать музыкальные композиции в программе Дискорд, или читать сообщения.
  • После этого, пользователю необходимо скопировать URL, который был сгенерирован, и вставить в используемый браузер.
  • Затем следует указать сервер в программе, на который следует добавить бот, и нажать на команду с наименованием Authorize.

Затем следует заняться производством проекта при помощи применения терминала.

  • Вначале производим директорию, и перейти в созданный вариант при помощи применения две команды: mkdir musicbot && cd musicbot.
  • После этого, следует произвести модель проекта при использовании команды npm init. При создании проводится стандартная процедура в виде вопросов по указанной тематике.
  • Пользователям следует произвести необходимые два файла, в которых затем следует производить работу: touch index.js && touch config.json.
  • При помощи текстового редактора открываем необходимыц для подобной цели проект. Например, подойдет VS Code.

Перед тем, как начать использовать бот, следует произвести установки выбранных зависимостей:

  • Для установки следует использовать команду npm install discord.js ffmpeg-binaries opusscript ytdl-core –save.
  • Пользователи могут получить токен, если войдут на платформу с разработками discord, и проведут копирование из отведенного раздела с ботами.

Задание команд для бота Дискорд через discord.js.

При помощи discord.js пользователи могут не только создавать работы для выполнения конкретно выбранной опции, но и могут контролировать процедуру задания команд для созданного бота. Как правило, пользователи предпочитают использовать ботов для того, чтобы:

  • Читать сообщения на канале;
  • Добавлять музыкальные композиции для прослушивания;
  • Музыкальные композиции могут прослушиваться;
  • Необходимые треки будут останавливаться во время прослушивания или пропускаться.

Для чтения сообщений

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

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

Затем производим проверку на префикс, который был указан ранее. При этом, сообщение возвращается, если операция не производится, то следует ввести команду.

Добавление музыки

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

Затем указываем список, и порядок сохранения композиций.

Для подключения к голосовому каналу, добавляем в сферу применения команду в опции бота.

Проигрывание песни

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

Пропуск трека

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

Остановка

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

Полный код бота для Дискорд

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

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

Затем при выполнении процедуры следует указать базовые варианты слушателей, которые исполняют способы console.log во время произведения запуска. После грамотного проведения операции, можно начинать использовать бота в зависимости от предназначения. Для использования бота можно применить команду node.

Тестирование бота

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

Как создать бота в Дискорд на Python?

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

Инструкция по созданию бота внутри платформы Python:

  • Вначале перейти в пункт General Information, и произвести копирование информации о Client ID.
  • Затем вставляем скопированный текст в раздел для CLID.
  • Переходим во вкладку с ботами, и производим бот. Затем следует скопировать указанный токен.
  • Производим установку библиотеки.
  • Затем производим файл, и в рамках добавляем необходимый для применения в рамках программы словарь.
  • После выполнения операции следует произвести файл варианта main. При этом, пользователь может указать любое название.
  • Библиотека должна быть импортирована, и указанный файл.
  • Затем следует произвести для созданного бота туловище, и дать наименование.
  • После этого, можно заняться проектированием основного варианта кода.
  • Затем необходимо запустить бот в работу, и указать команды, которые будут располагаться на помощника.

Применение программы Discord Bot Maker

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

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

  • Перейти в мессенджер Дискорд.
  • В программе выбрать сервер, на котором сохранен бот.
  • В перечне сообщений на сервере, следует выбрать необходимый бот, и нажать с использованием правой кнопки мыши.
  • Следует выбрать вариант «Выгнать», чтобы помощник не смог вернуться на сервер.

Всем привет, сегодня мы напишем Discord-бота на Python и discord.py + бонусом посмотрим на примеры ботов. Приступим 🙂

Перед работой

Перед тем, как начать, вам нужны:

  1. Python 3;
  2. discord.py;
  3. Discord-аккаунт и свой сервер.

Для установки discord.py воспользуйтесь пакетным менеджером:

pip3 install discord.py

Создаём нашего бота

Перейдите на Developer Portal и нажмите на New application.

image

Вы создали своё приложение, на странице приложение перейдите в Bot >> Add Bot и создайте своего Discord-бота.

Сохраните токен бота! Дальше он нам понадобится!

Если всё прошло успешно, поздравляю, половина дела сделана 😀

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

Теперь можно добавить бота на сервер.

Перейдите в OAuth2 >> URL Generator, в Scopes выбираем Bot и ниже — права бота, копируем сгенерированный URL. Вставляем в браузер, и добавляем на наш сервер.

Эхо-бот

Напишем традиционного эхо-бота, и разберём каждую строчку кода.

Код:

import discord  from discord.ext import commands    config = {      'token': 'your-token',      'prefix': 'prefix',  }    bot = commands.Bot(command_prefix=config['prefix'])    @bot.event  async def on_message(ctx):      if ctx.author != bot.user:          await ctx.reply(ctx.content)    bot.run(config['token'])

Пример работы:

Разбор:

import discord  from discord.ext import commands

Нужные нам импорты.

config = {      'token': 'your-token',      'prefix': 'prefix',  }

Вспомогательный словарь config в котором храним токен и префикс команд (далее расскажу зачем нужен префикс команд).

bot = commands.Bot(command_prefix=config['prefix'])

Создаём нашего бота, в аргументе передаём префикс.

@bot.event

Декоратор, предназначенный для обработки событий, подробнее здесь.

async def on_message(ctx):

Создаём асинхронную функцию, с параметром ctx, представляет из себя сообщение.

if ctx.author != bot.user:

Проверка, не является ли автор сообщения нашим Discord-ботом. Дело в том, что если бот отправит сообщение, это будет новым событием, и тогда получается цикл.

await ctx.reply(ctx.content)

Отвечаем на сообщение (ctx.reply), в аргументы передаём сообщение (ctx.content).

bot.run(config['token'])

Запускаем нашего бота, в аргументы передаём токен бота.

Старший разработчик в команду IaaS (Cloud) tproger.ru Вакансии на tproger.ru

Надеюсь вы разобрались с кодом, и мы можем переходить далее.

Обработка команд

Перед тем, как обрабатывать команды, нам пригодится наш префикс.

Рассмотрим код:

import random  import discord  from discord.ext import commands    config = {      'token': 'your-token',      'prefix': '$',  }    bot = commands.Bot(command_prefix=config['prefix'])    @bot.command()  async def rand(ctx, *arg):      await ctx.reply(random.randint(0, 100))    bot.run(config['token'])

Результат работы:

Разбор:

@bot.command()

Декоратор обработки команд

async def rand(ctx, *arg):

Асинхронная функция rand

await ctx.reply(random.randint(0, 100))

Отвечаем на сообщение, в аргументы передаём случайное число от 0 до 100

Бонус

Проверка роли:

import random  import discord  from discord.ext import commands    config = {      'token': 'your-token',      'prefix': '$',  }    bot = commands.Bot(command_prefix=config['prefix'])    @bot.command()  @commands.has_role("Хозяин")  async def rand(ctx, *arg):      await ctx.reply(random.randint(0, 100))    bot.run(config['token'])

Выгнать пользователя

import discord  from discord.ext import commands    config = {      'token': 'your-token',      'prefix': '$',  }    bot = commands.Bot(command_prefix=config['prefix'])    @bot.command()  async def kick(ctx, user : discord.User(), *arg, reason='Причина не указана'):      await bot.kick(user)      await ctx.send('Пользователь {user.name} был изгнан по причине "{reason}"')    bot.run(config['token'])

Оцените статью
Рейтинг автора
4,8
Материал подготовил
Егор Новиков
Наш эксперт
Написано статей
127
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий