Создание бота discord bot с помощью node.js
Содержание:
- Создание основных файлов
- Преимущества и недостатки
- Carl Bot
- Горячие клавиши
- Добавление песен
- Приглашение бота
- Проигрывание песен
- Создание Docker-контейнера
- Функции и возможности ProBot в Discord
- Настройка функционала
- Шаг 4 — Реализация команды Sum
- Основы Discord js
- Шаг 2 — Создание проекта
- Варианты настройки бота в Дискорде
- Шаг 4: Пробный запуск бота
- Как пользоваться ботами в Дискорде
- Команды чата
- Заключение
Создание основных файлов
Как я указал в начале статьи, мы будем использовать 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": , "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, как например “@” или “/”.
Преимущества и недостатки
VoiceMaster предлагает уникальную возможность создания своего закрытого канала общения. Никто против вашей воли не сможет туда попасть. В командах бота есть сугубо административные, позволяющие изгонять, блокировать навязчивых «гостей».
Аналогов у бота нет, в этом его явное преимущество. Но данное достоинство одновременно является и недостатком: при желании не получится найти альтернативу. Еще один жирный минус касается платной подписки: оплата в фунтах стерлингах, да еще и от 3,99 в месяц. Это больше, чем стандартная квота у других разработчиков.
Поэтому на сайте ботов Дискорда разброс оценок бота велик, от 1 «звездочки» до 5. Также многие пользователи ссылаются на значительные задержки в отклике VoiceMaster при обращении. При этом создатель не оставляет без внимания комментарии, старается отреагировать ни них.
Carl Bot
Одна из наиболее полезных функций в Discord — это роли реакции, которые позволяют вводить команды и смайлики в Discord, позволяя вносить различные изменения на сервере.
Роли за реакции:
- Высокие ограничения (до 250 ролей).
- Много режимов (уникальный, верификация, наоборот, временный и другие).
- Можно использовать любой эмодзи (даже те, к которым у бота нет доступа).
- Самоуничтожающиеся сообщения.
- Черный и белый списки.
Логирование:
- Сообщения (удаленные и отредактированные).
- Приглашения на сервера.
- Обновления участников (изменение ролей, ников, аватаров, банов).
- Приходящие и уходящие участники.
- Обновление каналов, ролей и эмодзи.
- Игнорирование каналов, участников и префиксов (спамящие боты теперь не будут засорять логи).
- Разбиение логов на разные каналы.
Горячие клавиши
Не менее полезная опция — горячие клавиши Discord, которые можно использовать в обычном режиме или во время игры. При желании их легко задать вручную Для этого сделайте следующие шаги:
- Войдите в программу Дискорд.
- Жмите на шестеренку внизу.
- Найдите слева пункт Горячие клавиши.
- Выберите необходимое действие в любом из полей.
- Введите в поле рядом нужную комбинацию.
При желании можно забить комбинацию на рацию (обычный и приоритетный) режим, обратную рацию, включение и отключение микрофона, режима стримера, звука в динамиках, оверлея и т. д.
Дополнительно можно использовать и другие комбинации:
- Control + Shift + N — создание или присоединение к серверу;
- Control + Enter — ответ на звонок;
- Control + K — поиск или начало общения;
- Escape — отклонение входящего звонка;
- Control + Shift + T — создание частной группы;
- Control + Left Square Bracket — звонок в личное сообщение или группу;
- Tab — текстовая область фокуса;
- ALT + Left Arrow Key — возврат к аудиоканалу;
- ALT + Right Arrow Key — возврат к текстовому каналу;
- Control + Shift + M — отключение аудио;
- Control + Shift + H — помощь и т. д.
Подробный перечень можно почитать на сайте поддержки — https://support.discord.com/hc/ru/articles/225977308.
Если вдруг не работают горячие клавиши Дискорд, попробуйте из заново запрограммировать через настройки или убедитесь в работоспособности клавиатуры.
Добавление песен
Начнем с добавления команды play. Для этого понадобится песня и гильдия (гильдия представляет собой изолированную коллекцию пользователей и каналов и часто упоминается в качестве сервера). Также понадобится ранее установленная библиотека ytdl.
Для начала создаем map с названием очереди, в котором будут сохранены все песни, введенные в чат.
Затем создаем функцию async под названием execute и проверяем, находится ли пользователь в голосовом чате, и есть ли у бота соответствующее разрешение. Если нет, то пишем сообщение об ошибке и возвращаем.
Необходимая информация сохраняется в объект song.
После сохранения информации нужно создать контракт для добавления в очередь. Для этого проверяем, определен ли serverQueue, что означает, что музыка уже играет. Если да, то добавляем песню в существующий serverQueue и отправляем сообщение об успешном выполнении. Если нет, то создаем его, подключаемся к голосовому каналу и начинаем проигрывать музыку.
В этом фрагменте мы проверяем, является ли serverQueue пустым. Если нет добавляем туда песню.
Если serverQueue имеет значение null, создаем контракт.
В этом блоке кода создается контракт, а песня добавляется в массив songs.
Затем присоединяемся к голосовому чату пользователя и вызываем функцию play(), которую затем реализуем.
Приглашение бота
Подключить бота в Дискорде может только администратор сообщества. Если человек не является модератором или администратором, то рекомендуется посоветоваться с владельцем канала перед тем, как устанавливать дополнительный функционал на сайт. Помощника устанавливают в тестовый, в голосовой канал – алгоритм не меняется. План действий:
- На домашней странице мессенджера выбрать сервер, на который будет добавляться помощник.
- Открыть меню и выбрать опцию «Настройки сервера».
- Перейти в категорию «Роли» и кликнуть на опцию «Разрешения.
- Для бота устанавливают разрешения, а потом кликают по «Сохранить».
Бот добавляется на сервер автоматически. При этом в зависимости от изначальных настроек делается это клавишей «Пригласить» или «Добавить».
Иногда возникает проблема: боты не устанавливаются или работают не корректно. Необходимо проверить, вошел ли пользователь с браузера, через который использовал вебсайт поиска ботов. Стоит убедиться, что и учетная запись выбрана правильная.
Проигрывание песен
Поскольку теперь можно добавлять песни в очередь и создавать контракт при его отсутствии, можно приступить к реализации функцию проигрывания.
Сначала создаем функцию play, которая обладает двумя параметрами (гильдия и песня, которую нужно проиграть) и проверяет, является ли объект song пустым. Если да, то покидаем голосовой канал и удаляем очередь.
Затем начинаем проигрывать песню с помощью функции playStream() и URL-адреса песни.
В этом фрагменте мы создаем stream и передаем его URL-адресу песни. Также добавляем два listeners, которые обрабатывают события end и error.
Примечание: это рекурсивная функция, которая повторяет вызов самой себя. Рекурсия используется для проигрывания следующей песни, когда другая заканчивается.
Теперь можно проиграть песню, введя !play URL в чат.
Создание Docker-контейнера
Теперь в рабочей директории нам нужно создать Dockerfile, который будет содержать инструкции для сборки образа, на основе которого будет запущен контейнер. В него мы запишем:
FROM node:14 WORKDIR /home/my-discord-bot COPY package*.json ./ RUN npm install COPY . . EXPOSE 8080 CMD
Создадим файл .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
Функции и возможности ProBot в Discord
Пробот пользуется большим спросом среди пользователей приложения Discord. Его особенности:
- Возможность индивидуальной настройки приветствия Welcomer.
- Обнаружение рейта и мгновенная реакция на такие действия на разных уровнях.
- Автоматическая модерация. ProBot выявляет плохих пользователей Discord и принимает по отношению к ним меры.
- Автоответчик. Пробот умеет отвечать на разные ключевые слова.
- Мультиязычность. Бот поддерживает много языков, в том числе русский.
- Безотказность. По заявлению разработчиков, ProBot стабильно работает на Discord и отлично справляется с задачами в режиме онлайн.
- Удобная настройка. Пользователи могут менять панель инструментов с учетом личных предпочтений.
При рассмотрении помощника Про Бот важно отметить и ряд его функций:
- Разработка и отправка Embeds. ProBot позволяет отправлять embeds в любом канале Discord. Особенность — возможность предварительного просмотра и редактирования, если это необходимо.
- Наличие системы уровней для голоса и текста.
- Модерация других пользователей Discord с помощью специальных команд ProBot.
- Доступ к высококачественной музыке
- Создание собственных приветственных изображений. В них находится аватар и имя пользователя. Рассылка выполняется автоматически, что позволяет сэкономить время.
На июнь 2020 года ProBot подключен к более чем 375 000 серверов на Discord, а общее количество членов более 47 миллионов.
Настройка функционала
Для того чтобы настроить бота, необходимо прежде определить функциональные права помощника. На примере знаменитых ботов Mee6 или Dyno настройка команд происходит на официальном сайте разработчиков бота во вкладке Custom Commands. В данной вкладке существует возможность изменять командные строки, вписывать собственный текст в указанные значения, перераспределять возможности бота.
Для добавления новых команд собственного бота можно воспользоваться discord.js. Он представляет собой более мощный модуль упомянутого раннее node.js. Discord.js и позволяет очень легко взаимодействовать с Discord API. Требует гораздо более объектно ориентированного подхода, чем большинство других библиотек JS Discord, что делает код вашего бота значительно более аккуратным и более легким для понимания.
Настройка виртуального бота в Discord при помощи данного элемента происходит стандартным способом:
- Создание файла в папке проекта. Например, «join.js».
- Пересылка в «index.js».
- Вписывание необходимых значений в указанные командные строки.
Функционирование виртуального помощника начинается с первоначальных элементов подключения модуля Discord.JS:
- Строка const Discord = require(«discord.js») отвечает за подключение командного файла.
- Панель const client = new Discord.Client() моделирует клиент созданного бота.
- Список client.login(Место для «Токена») служит для подключения с помощью своего рода пароля от аккаунта.
Таким образом, в этот перечень команд можно вписать значения для приветствия бота, включения того или иного файла и т.д.
Справка: для настройки «Токен» можно приобрести на официальном портале разработчиков. Вкладка «Bot» позволяет скопировать «Токен» и вставить в команду.
Шаг 4 — Реализация команды Sum
Теперь мы расширим нашу программу, реализовав команду . Эта команда принимает любое количество аргументов, складывает их и возвращает пользователю сумму всех аргументов.
Если ваш бот Discord еще работает, вы можете остановить его процессы, нажав .
Откройте файл снова:
Чтобы начать реализацию команды , мы используем блок . После проверки имени команды ping бот будет проверять, имеет ли имя команды значение . Мы используем блок , потому что одновременно будет обрабатываться только одна команда, и если программа определит совпадение с именем команды , ей не нужно будет проводить проверку на совпадение с именем команды . Добавьте в файл следующие выделенные строки:
index.js
Теперь вы можете начать реализацию кода для команды . Код команды будет размещен в только что созданном нами блоке . Теперь добавьте следующий код:
index.js
Мы используем для списка аргументов, чтобы создать новый список, используя функцию для каждого элемента в массиве . При этом создается новый массив (назначенный константе ), где все элементы являются числами, а не строками. Это означает, что в дальнейшем вы можете определить сумму чисел, выполнив операцию сложения.
Вторая строка использует на константе , предоставляя функцию, суммирующую все элементы в списке. Мы назначаем сумму всех элементов в как значение константы .
Затем мы используем метод на объекте сообщений, чтобы ответить на команду пользователя, отправив литераль шаблона, содержащую сумму всех аргументов, отправленных пользователем боту.
Это завершает реализацию команды . Теперь запустите бот, используя следующую команду (в той же папке, что и ):
Теперь вы можете использовать команду на любом канале, где бот может просматривать и отправлять сообщения.
Далее приведена законченная версия скрипта бота :
index.js
На этом шаге мы дополнили наш бот Discord, реализовав в нем команду .
Основы Discord js
Прежде чем начать, нужно установить несколько зависимостей.
После завершения установки продолжаем написание файла config.json. Сохраните для бота токен и префикс, который он должен слушать.
Для получения токена снова зайдите на портал разработки discord и скопируйте его из раздела bot.
Это все, что нужно выполнить в файле config.json. Приступим к написанию кода javascript.
Сначала импортируем все зависимости.
Затем с помощью токена создаем клиента и логин.
Добавляем несколько базовых listeners, выполняющих метод console.log при запуске.
Теперь можно начать работу с ботом с помощью команды node. Бот должен быть online в discord и в консоль выведется“Ready!”
Шаг 2 — Создание проекта
На этом шаге мы настроим базовую среду программирования, где выполним сборку бота и войдем в него программным путем.
Вначале необходимо настроить папку проекта и необходимые файлы проекта для бота.
Создайте папку проекта:
Перейдите в только что созданную папку проекта:
Далее используйте текстовый редактор для создания файла с именем для сохранения токена аутентификации вашего бота:
Затем добавьте в файл конфигурации следующий код, заменяя выделенный текст токеном аутентификации вашего бота:
config.json
Сохраните и закройте файл.
Затем мы создадим файл , где будут храниться детали нашего проекта и информация о зависимостях, используемых в проекте. Для создания файла запустите следующую команду :
запросит различные детали вашего проекта. Если вам нужны указания по ».
Сейчас мы установим пакет , который будем использовать для взаимодействия с Discord API. Вы можете установить через npm с помощью следующей команды:
Мы настроили файл конфигурации, установили необходимую зависимость и теперь можем начать сборку бота. В реальном приложении мы бы разделили код большого бота на несколько файлов, но в этом обучающем модуле мы поместим весь код бота в один файл.
Вначале создайте файл с именем в папке для кода:
Начните программирование бота, запросив зависимость и файл конфигурации с токеном бота:
index.js
После этого добавьте следующие две строки кода:
index.js
Сохраните и закройте файл.
Первая строка кода создает новый клиент и назначает его как значение константы . Этот клиент частично обеспечивает взаимодействие с Discord API и получает уведомления Discord о событиях, например, о новых сообщениях. Фактически клиент представляет бот Discord.
Во второй строке кода метод используется на для входа в созданный бот Discord с использованием токена в файле в качестве пароля. Токен сообщает Discord API, для какого бота предназначена программа, а также подтверждает вашу аутентификацию для использования бота.
Теперь запустите файл с помощью Node:
Теперь статус вашего бота на сервере Discord, куда вы его добавили, изменится на online (в сети).
Мы успешно настроили среду программирования и создали базовый код для входа в бот Discord. На следующем шаге мы займемся пользовательскими командами и заставим бота выполнить определенные действия, например, отправить сообщения.
Варианты настройки бота в Дискорде
Боты существуют не сами по себе. Конечно, они могут существовать с настройками по умолчанию, но для лучшего функционала, хорошей работы, нужно указать боту, что, как, когда делать. Некоторые делают настройки через чат, командами, однако не каждая настройка доступна через команды чата — нужно переходить к более глобальным способам. Как правило, используются:
- Отдельная программа, использующая модули бота, плагины для его настройки;
- Приложение. Стандартный способ, использующий обычные методы Дискорда по настройке ботов.
Данные методы — не только чаще используются, но также удобнее прочих своей простотой. Настроить бота также просто, как зайти на аккаунт, написать сообщение, добавить человека в список друзей.
Через Dashboard
- Доступ к меню есть не только у администратора сервера. Участники также имеют возможность зайти на него;
- Система рангов, полюбившаяся многим пользователям, в которых играет азарт. Никто не откажется посоревноваться в том, кто выше в топе, чей ранг лучше. Помимо рангов имеется возможность посмотреть статистику, награды;
- Модули можно включать, выключать для разных целей;
- Приложение позволяет просмотреть на сервера, которые установили бота, пользуются им, получить много информации через поиск, сравнить со своим сервером.
Dashboard работает исключительно для авторизованных пользователей. Без входа на аккаунт доступ к данным, настройки ботов, останутся недоступными.
Через приложение
Никто не отменял настройку стандартным способом — через сам мессенджер. Несмотря на меньший объём настроек, способ настройки через приложение имеет немало своих плюсов:
- Блокировка бота производится любым участником, независимо от остальных;
- У админа сервера есть полномочия изменять настройки каждому пользователю;
- Переместить бота в голосовой канал можно исключительно администратору. Поменять настройку, права доступа к перемещению можно отдельной командой.
Добавлять бота в голосовой, текстовый канал, где происходит обычное общение — плохая идея. Лучше — скинуть его в новый, предназначенный под музыкального, оповещающего о вступивших, предупреждающего о событиях ботов. Так, участникам станет проще использовать их, избегая причинения вреда остальным пользователям. Создатель может настроить (определёнными командами) доступ к использованию бота на других каналах.
Самое главное — проверить настройки бота. При необходимости — самостоятельно изменить нежелательные настройки, мешающие работе сервера. Для очистки изменённых данных достаточно убрать бота из канала (как убирать бота — упоминалось выше), вновь добавить его. Так, он сбросится до состояния по умолчанию.
Шаг 4: Пробный запуск бота
Сначала нам нужно убедиться в том, что бот вообще запускается на сервере и переходит в онлайн-режим, для этого понадобится записать его основную часть кода в , а затем уже использовать Node.js для запуска.
- Через среду разработки или выбранный текстовый редактор откройте упомянутый файл для редактирования.
Вставьте туда блок кода, отвечающего за установку зависимостей и указывает на используемые модули:
С помощью указанного ранее токена создайте клиента и логин, что осуществляется путем ввода всего двух простых строк:
Остается только указать последние базовые строчки для прослушивания бота.
Разверните меню «File» и сохраните внесенные изменения.
Снова запустите консоль удобным способом.
Введите команду для запуска скрипта бота.
Если его файлы расположены не в домашней директории пользователя, после придется указать полный пусть к ним.
Об успешном запуске бота свидетельствует появившаяся надпись «Ready!».
Откройте Discord и убедитесь в том, что бот перешел в статус «Онлайн».
Как пользоваться ботами в Дискорде
Преимущество ботов — простота использования. Несмотря на первое впечатление о сложности работы с такой “программой”, со временем легко можно понять, насколько оно ложное
Боты могут всё — проигрывать музыку, оповещать о важной информации сервера, играть, быть ведущим в играх, делать всё сразу
Установка — достаточно проста, что описано выше. Использование — индивидуально. Чтобы не разбирать каждого существующего бота, особенности использования, лучше прочитать о функциях на сайте, с которого скачан (установлен) бот, либо ввести команду, рассказывающую об использовании. Как правило, команда — “!help”, стандартная команда, набираемая в чат, чтобы прочитать, получить ссылку на инструкции, связанные с использованием.
Команды чата
Многие пользователи не знают, что существуют так называемые команды Дискорда для чата. Выделим основные варианты:
- +:(название эмодзи): — добавление реакции на прошлое сообщение в чате.
- s/text/replace — быстрое исправление опечатки (text — слово с ошибкой, а replace — исправленный вариант). Преимущество приказа в том, что его можно использовать для правки предыдущего сообщения без входа в настройки.
- @user — получение идентификатора юзера.
- @role — получение идентификатора роли.
- #channel — получение идентификатора канала.
- :smiley: — возврат версии смайла с юникодом.
- /tableflip: — добавление к тексту (╯°□°)╯︵ ┻━┻
- /unflip: — добавление к сообщению ┬─┬ ノ( ゜-゜ノ)
- /shrug: — добавление ¯_(ツ)_/¯
- /me: — вывод сообщения в виде курсива.
- /nick: — внесение изменений в ник на сервере.
- /tenor и /giphy : — поиск альтернативных картинок в Сети.
- /spoiler: — пометка сообщения в качестве спойлера.
- /tts: — озвучивание сообщения всем участникам на канале.
Как видно, Дискорд-команды чата больше направлены на оформление текста и исправление ошибок. Но их применение во многих случаях может оказаться полезным.
Заключение
Мы успешно создали бот Discord, который может обрабатывать разные команды пользователей и аргументы команд. Если вы хотите расширить возможности вашего бота, вы можете реализовать дополнительные команды или использовать другие части Discord API для построения мощного бота Discord. Вы можете ознакомиться с или Discord API, чтобы узнать больше о Discord API.
При создании ботов Discord всегда помните об условиях обслуживания Discord API, определяющих требования к использованию Discord API разработчиками. Также вам может быть полезен этот набор рекомендаций, показывающий наилучшие способы построения бота Discord и содержащий советы по проектированию ботов Discord. Если вы хотите узнать больше о Node.js, ознакомьтесь с нашей серией материалов «Программирование в Node.js».