Разработка сайтов в Курске. Как создать своего первого бота Discord с помощью Node.js

 
 

В настоящее время боты используются для автоматизации различных задач. С момента выпуска устройств Alexa от Amazon ажиотаж вокруг автоматических ботов только начал расти. Помимо Alexa, другие средства связи, такие как Discord и Telegram, предлагают API для разработки пользовательских ботов.

Эта статья будет посвящена исключительно созданию вашего первого бота с открытым API Discord. Пожалуй, самым известным ботом Discord является Music Bot. Музыкальный бот позволяет вам ввести название песни, и бот прикрепит к вашему каналу нового пользователя, который будет проигрывать запрошенную песню. Это широко используемый бот среди молодежи на игровых или потоковых серверах.

Давайте начнем с создания собственного бота Discord.

Шаг 1. Настройте тестовый сервер

В первую очередь нам нужен тестовый сервер, на котором мы потом сможем протестировать нашего Discord бота. Мы можем создать новый сервер, щелкнув значок плюса в левой части экрана.

нажмите создать сервер

Появится всплывающее окно с вопросом, хотите ли вы присоединиться к серверу или создать новый. Конечно, мы хотим создать новый сервер.

выберите создать сервер

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

имя сервера

Если все прошло хорошо, вы должны увидеть только что созданный сервер.

новый сервер

Шаг 2: Генерация токена аутентификации

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

Чтобы зарегистрировать бота, перейдите на портал разработчиков Discord и войдите под своей учетной записью.

После входа в систему вы должны увидеть панель инструментов. Давайте создадим новое приложение, нажав кнопку New Application.

панель разработчика

Затем вы увидите всплывающее окно, в котором вас попросят ввести имя для вашего приложения. Назовем нашего бота my-greeter-bot. Нажав кнопку «Создать «, Discord создаст приложение API.

создать приложение

Когда приложение будет создано, вы увидите обзор только что созданного my-greeter-botприложения. Вы увидите такую ​​информацию, как идентификатор клиента и секрет клиента. Этот секрет будет использоваться позже в качестве токена авторизации.

обзор приветствующего бота

Теперь нажмите на пункт меню «Бот «в меню «Настройки «. Discord создаст наше my-greeter-botприложение и добавит в него пользователя-бота.

добавить бота

Когда бот будет создан, вы получите обзор вашего собственного бота. Загляните в раздел Токен. Скопируйте этот токен авторизации и запишите его куда-нибудь, так как он понадобится нам позже для подключения к нашему пользователю-боту.

обзор вкладки бота

Шаг 3: Определите разрешения и добавьте бота на сервер

В-третьих, мы хотим определить разрешения для бота и добавить его на наш сервер Discord.

Перейдите в раздел OAuth2 в меню «Настройки «. Здесь мы можем определить область действия нашего бота. Поскольку мы просто хотим включить простого бота, мы выбираем вариант бота.

Вы могли заметить, что приведенный ниже URL-адрес авторизации изменился. Однако в permissions=0разделе указано, что мы еще не установили разрешения.

Область действия OAuth2

Если мы прокрутим дальше вниз, вы найдете раздел разрешений для ботов. Мы хотим, чтобы бот мог Send Messagesи Read Message History. Нам нужно разрешение на чтение истории сообщений, чтобы мы могли обнаруживать запросы пользователей.

При выборе обоих вариантов обратите внимание на то, что номер параметра разрешений в URL-адресе авторизации изменился.

Добавить разрешения

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

Нажмите кнопку Авторизовать, чтобы добавить бота на наш сервер.

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

Если вам удалось успешно добавить бота на свой сервер, вы должны увидеть следующий экран успеха.

Успешно добавить бота

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

успешное добавление канала бота

Успех!

Шаг 4: Настройка проекта

Наконец, давайте настроим проект. Вы можете найти базовый проект на GitHub. Пожалуйста, клонируйте репозиторий локально на свой компьютер, используя git clone https://github.com/sitepoint-editors/discord-bot-sitepoint.

Проект зависит от двух зависимостей, dotenvи discord.js. Первая зависимость позволяет нам использовать.envфайл, содержащий записанный нами токен бота. Очевидно, что нам нужна вторая зависимость discord.jsдля разработки бота Discord.

Чтобы установить обе зависимости, выполните npm installих в папке проекта.

Наконец, чтобы завершить установку, создайте.envфайл в корне проекта. Добавьте одну переменную среды, вызываемую TOKENв файл, следующим образом:

TOKEN=my-unique-bot-token

Шаг 5: Изучение Discord.js

Давайте посмотрим на index.jsфайл, расположенный в корне проекта:

require ('dotenv’).config () ;

const Discord = require ('discord.js’) ;

const bot = new Discord.Client () ;

const TOKEN = process.env.TOKEN;

bot.login (TOKEN) ;

Сначала мы загружаем переменные среды, которые мы определили, запрашивая конфигурацию из.envфайла среды. Это позволяет нам использовать TOKENпеременную, которую мы определили с помощью process.env.ToKEN. Последняя строка приведенного выше фрагмента показывает, как мы передаем токен в функцию входа, чтобы получить доступ к созданному нами боту.

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

Слушайте «готовое» событие

Далее мы можем прослушивать события. Прежде всего, мы слушаем readyсобытие. Событие ready запускается, как только мы подключаемся к боту:

bot.on ('ready’, () => {

console.info (`Logged in as ${bot.user.tag}! `) ;

}) ;

Если вы использовали право TOKENвхода в бота, ваш терминал должен напечатать имя вашего бота bot.user.tag.

Вы можете запустить бота, просто выполнив node index.jsего в своем терминале. Убедитесь, что вы выполняете эту команду в корне вашего проекта.

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

Бот подключен

Прослушать событие «сообщение»

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

bot.on ('message’, msg => {

if (msg.content === 'ping’) {

msg.reply ('pong’) ;

msg.channel.send ('pong’) ;

}

}) ;

Если мы изучим код немного дальше, вы увидите, что мы ищем сообщение с содержимым ping. Если мы получим сообщение, содержащее только ping, бот ответит pong. После этого msg.channel.sendснова используем для отправки pongв канал.

Обратите внимание на разницу между обеими командами:

msg.reply: помечает первого пользователя, отправившего сообщение

msg.channel.send: отправляет сообщение на канал, никого не отмечая

Попробуйте запустить бота с помощью node index.jsи отправить сообщение pingна generalканал. Проверьте, видите ли вы тот же результат.

Пинг-сообщение

Ищите отмеченных пользователей

Чтобы добавить новую команду, мы должны расширить ifпредложение, которое у нас есть, с помощью else... if:

if (msg.content === 'ping’) {

msg.reply ('pong’) ;

msg.channel.send ('pong’) ;

} else if (msg.content.startsWith ('! kick’)) {

if (msg.mentions.users.size) {

const taggedUser = msg.mentions.users.first () ;

msg.channel.send (`You wanted to kick: ${taggedUser.username}`) ;

} else {

msg.reply ('Please tag a valid user!') ;

}

}

Допустим, мы хотим выгнать кого-то, отправив сообщение вроде! kick @username. Итак, сначала мы ищем! kickв содержании сообщения. Если мы находим сообщение, начинающееся с! kick, мы можем проверить, были ли пользователи отмечены в сообщении с помощью этого msg.mentions.usersсвойства.

Если есть отмеченные пользователи, мы можем выбрать первого упомянутого пользователя с помощью msg.mentions.users.first (). Далее мы отвечаем каналу с именем пользователя в сообщении.

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

Шаг 6: Проблема с else... ifцепочкой

Далее давайте обсудим проблему со всеми этими else... ifутверждениями. Если у вас есть только несколько команд, определенных для прослушивания в событии сообщения, код вполне читабелен.

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

легче стать жертвой спагетти-кода

код плохо читается

это не легко отлаживать

трудно организовать код

это непросто поддерживать по мере роста кода

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

Реализация обработчика команд

Обработчик команд — это подход, поддерживаемый discord.jsпакетом. Прежде чем мы продолжим, проверьте advancedветку с git checkout advanced. Эта ветвь содержит реализацию обработчика команд.

Папка команд

Во-первых, давайте изучим папку команд. Эта папка содержит index.jsфайл, который экспортирует все команды, которые мы определим. Для простоты мы определим только одну команду ping:

module.exports = {

Ping: require ('. /ping’),

};

Далее давайте посмотрим на реализацию pingкоманды, которая в основном экспортирует объект, содержащий следующее:

name: имя команды.

description: рекомендуется добавлять описание для каждой команды.

execute: функция, которая принимает msgи argsвводит. Эта функция имеет ту же логику, что и в нашей else... ifцепочке.

module.exports = {

name: 'ping’,

description: 'Ping!',

execute (msg, args) {

msg.reply ('pong’) ;

msg.channel.send ('pong’) ;

},

};

Импорт команд

Продолжая, давайте импортируем команды в index.jsфайл. Обратите внимание, что мы определяем коллекцию команд для бота Discord. Мы перебираем все команды и добавляем их одну за другой в коллекцию команд.

Функция bot.commands.setпринимает имя команды и весь объект команды:

const Discord = require ('discord.js’) ;

const bot = new Discord.Client () ;

bot.commands = new Discord.Collection () ;

const botCommands = require ('. /commands’) ;

Object.keys (botCommands).map (key => {

bot.commands.set (botCommands[key].name, botCommands[key]) ;

}) ;

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

bot.on ('message’, msg => {

const args = msg.content.split (/ +/) ;

const command = args.shift ().toLowerCase () ;

console.info (`Called command: ${command}`) ;

if (! bot.commands.has (command)) return;

try {

bot.commands.get (command).execute (msg, args) ;

} catch (error) {

console.error (error) ;

msg.reply ('there was an error trying to execute that command!') ;

}

}) ;

Сначала мы пытаемся разделить содержимое сообщения пробелами, используя.split (/ +/). Мы предполагаем, что первый элемент в этом argsмассиве — это наша команда. Чтобы проверить, существует ли команда в нашей коллекции, коллекция предоставляет has () функцию, которая просто возвращает true или false. Если команда не существует, мы возвращаем пустой ответ.

Однако, если команда существует, мы используем get () функцию, чтобы получить правильную команду и выполнить ее с входными параметрами msgи args.

Это удобный для чтения динамический способ вызова команд без написания спагетти-кода. Это позволяет масштабировать проект до многих сотен команд, если это необходимо.

Опять же, если вы хотите протестировать новую версию нашего кода, убедитесь, что вы проверили advancedветку с расширением git checkout advanced. Затем установите все зависимости с помощью npm installи запустите бота с расширением node index.js.

Подведение итогов

Поначалу установка и настройка нового бота Discord может показаться сложной задачей. Однако API, предлагаемый discord.jsпакетом, прост, и на сайте Discord есть отличные примеры.

Поскольку в этом руководстве рассматриваются только два разрешения, можно найти гораздо больше. Вы можете узнать больше о разрешениях на сайте Discordjs.guide.

Удачи в создании вашего первого бота Discord!

3D-печать5GABC-анализAndroidAppleAppStoreAsusCall-центрChatGPTCRMDellDNSDrupalExcelFacebookFMCGGoogleHuaweiInstagramiPhoneLinkedInLinuxMagentoMicrosoftNvidiaOpenCartPlayStationPOS материалPPC-специалистRuTubeSamsungSEO-услугиSMMSnapchatSonyStarlinkTikTokTwitterUbuntuUp-saleViasatVPNWhatsAppWindowsWordPressXiaomiYouTubeZoomАвдеевкаАктивные продажиАкцияАлександровск ЛНРАлмазнаяАлчевскАмвросиевкаАнализ конкурентовАнализ продажАнтимерчандайзингАнтрацитАртемовскАртемовск ЛНРАссортиментная политикаБелгородБелицкоеБелозерскоеБердянскБизнес-идеи (стартапы)БрендБрянкаБукингВахрушевоВендорВидеоВикипедияВирусная рекламаВирусный маркетингВладивостокВнутренние продажиВнутренний маркетингВолгоградВолновахаВоронежГорловкаГорнякГорскоеДебальцевоДебиторкаДебиторская задолженностьДезинтермедитацияДзержинскДивизионная система управленияДизайнДимитровДирект-маркетингДисконтДистрибьюторДистрибьюцияДобропольеДокучаевскДоменДружковкаЕкатеринбургЕнакиевоЖдановкаЗапорожьеЗимогорьеЗолотоеЗоринскЗугрэсИжевскИловайскИрминоКазаньКалининградКировскКировскоеКомсомольскоеКонстантиновкаКонтент-маркетингКонтент-планКопирайтингКраматорскКрасноармейскКрасногоровкаКраснодарКраснодонКраснопартизанскКрасный ЛиманКрасный ЛучКременнаяКураховоКурскЛисичанскЛуганскЛутугиноМакеевкаМариупольМаркетингМаркетинговая информацияМаркетинговые исследованияМаркетинговый каналМаркетинг услугМаркетологМарьинкаМедиаМелекиноМелитопольМенеджментМерчандайзерМерчандайзингМиусинскМолодогвардейскМоскваМоспиноНижний НовгородНиколаевНиколаевкаНишевой маркетингНовоазовскНовогродовкаНоводружескНовосибирскНумерическая дистрибьюцияОдессаОмскОтдел маркетингаПартизанский маркетингПервомайскПеревальскПетровскоеПлата за кликПоисковая оптимизацияПопаснаяПравило ПаретоПривольеПрогнозирование продажПродвижение сайтов в ДонецкеПроизводство видеоПромоПромоушнПрямой маркетингРабота для маркетологаРабота для студентаРазработка приложенийРаспродажаРегиональные продажиРекламаРеклама на асфальтеРемаркетингРетро-бонусРибейтРитейлРовенькиРодинскоеРостов-на-ДонуРубежноеСамараСанкт-ПетербургСаратовСватовоСвердловскСветлодарскСвятогорскСевастопольСеверодонецкСеверскСедовоСейлз промоушнСелидовоСимферопольСинергияСколковоСлавянскСнежноеСоздание сайтов в ДонецкеСоледарСоциальные сетиСочиСтаробельскСтаробешевоСтахановСтимулирование сбытаСуходольскСчастьеТелемаркетингТельмановоТираспольТорговый представительТорезТрейд маркетингТрейд промоушнТюменьУглегорскУгледарУкраинскХабаровскХарцызскХерсонХостингЦелевая аудиторияЦифровой маркетингЧасов ЯрЧелябинскШахтерскЮжно-СахалинскЮнокоммунаровскЯндексЯсиноватая