Best way to create a Discord bot dashboard (events between API and bot)
I have a Discord bot and I want to make a frontend and backend to control it.
The frontend could be made on any framework.
But for the backend, I want it to be an isolated REST API built on ExpressJS that can control the bot.
For example, there will be custom setting for the bot per guild which will be customizable from the frontend which communicates to the API and writes the information on a database shared between the ExpressJS backend and the bot. Right?
But, for example, if I want to have an API endpoint on my ExpressJS server that m akes the bot send a message to certain channel. How could I do that? I could I make my bot listen to events sent by the ExpressJS backend?
Создание бота Discord Bot с помощью Node.js
Discord — это приложение чата, позволяющее миллионам пользователей со всего мира обмениваться сообщениями и общаться в голосовом чате в сообществах, называемых «гильдии» или «серверы». Discord также включает функциональный API, который разработчики смогут использовать для построения мощных ботов Discord. Боты могут выполнять разнообразные действия, в том числе отправлять сообщения на серверы, отправлять пользователям сообщения DM, модерировать серверы и воспроизводить звук в голосовых чатах. Это позволяет разработчикам создавать мощных ботов со сложными и продвинутыми функциями, включая инструменты модерирования и даже игры. Например, служебный бот Dyno обслуживает миллионы гильдий и содержит множество полезных функций, включая защиту от спама, музыкальный проигрыватель и другие служебные функции. Научившись создавать боты Discord, вы получите множество возможностей, с которыми тысячи людей смогут взаимодействовать каждый день.
В этом обучающем модуле мы создадим бот Discord с нуля, используя Node.js и библиотеку Discord.js, позволяющую пользователям взаимодействовать с Discord API напрямую. Мы настроим профиль бота Discord, получим токены аутентификации для бота и запрограммируем бот для обработки отправляемых пользователями команд с аргументами.
Предварительные требования
Для начала вам потребуется следующее:
- Node.js, установленный на вашем компьютере для разработки. Чтобы установить его в macOS или Ubuntu 18.04, следуйте указаниям руководства Установка Node.js и создание локальной среды разработки в macOS или раздела Установка с помощью PPA руководства Установка Node.js в Ubuntu 18.04.
- Любой текстовый редактор по вашему усмотрению, например, Visual Studio Code, Atom, Sublime или Nano.
- Бесплатная учетная запись Discord с подтвержденной учетной записью электронной почты и бесплатный сервер Discord, который вы будете использовать для тестирования вашего бота Discord.
Шаг 1 — Настройка бота Discord
На этом шаге вы будете использовать графический интерфейс разработчиков Discord для настройки бота Discord и получения токена бота, который вы передадите в свою программу.
Чтобы зарегистрировать бота на платформе Discord, используйте панель приложений Discord. Здесь разработчики могут создавать приложения Discord, включая ботов Discord.

Для начала нажмите New Application (Новое приложение). Discord предложит вам ввести имя нового приложения. Затем нажмите Create (Создать) для создания приложения.

Примечание. Имя приложения не связано с именем бота, и эти имена могут не совпадать.
Теперь откройте свою панель приложения. Чтобы добавить бота в приложение, откройте вкладку Bot (Бот) на панели навигации слева.

Нажмите кнопку Add Bot (Добавить бота), чтобы добавить бота в приложение. Нажмите кнопку Yes, do it! (Да, сделать это!) в диалоге запроса подтверждения. Откроется панель с подробными сведениями об имени вашего бота, токене аутентификации и изображении в профиле.

На этой панели вы можете изменить имя бота или изображение профиля. Также необходимо скопировать токен аутентификации бота, нажав Click to Reveal Token (Нажмите для показа токена) и скопировав отображаемый токен.
Предупреждение. Никогда не публикуйте и не выгружайте в сеть свой токен бота, поскольку это позволит любому пользователю выполнить вход в бот.
Теперь нужно создать приглашение, которое позволяет добавить гильдии ботов Discord, где вы можете протестировать бот. Вначале перейдите на вкладку OAuth2 на панели приложения. Чтобы создать приглашения, прокрутите страницу и выберите бота в разделе scopes. Также необходимо установить разрешения, чтобы определить, какие действия бот может выполнять в гильдиях. Для целей этого обучающего модуля выберите пункт Administrator (Администратор), которые дадут вашему боту разрешения для выполнения в гильдиях практически любых действий. Скопируйте ссылку с помощью кнопки Copy.

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

Теперь нажмите кнопку Continue (Продолжить). Обязательно установите отметку рядом с полем Administrator, чтобы предоставить боту разрешения администратора. Затем нажмите Authorize (Авторизация). Discord предложит вам решить головоломку CAPTCHA, прежде чем бот сможет подключиться к серверу. Теперь наш бот Discord отображается в списке пользователей сервера, на который вы добавили бота, со статусом offline (не в сети).

Вы успешно создали бота Discord и добавили его на сервер. Далее мы напишем программу для входа в бот.
Шаг 2 — Создание проекта
На этом шаге мы настроим базовую среду программирования, где выполним сборку бота и войдем в него программным путем.
Вначале необходимо настроить папку проекта и необходимые файлы проекта для бота.
Создайте папку проекта:
Перейдите в только что созданную папку проекта:
Далее используйте текстовый редактор для создания файла с именем config.json для сохранения токена аутентификации вашего бота:
Затем добавьте в файл конфигурации следующий код, заменяя выделенный текст токеном аутентификации вашего бота:
config.json
"BOT_TOKEN": "YOUR BOT TOKEN" >
Сохраните и закройте файл.
Затем мы создадим файл package.json , где будут храниться детали нашего проекта и информация о зависимостях, используемых в проекте. Для создания файла package.json запустите следующую команду npm :
Сейчас мы установим пакет discord.js , который будем использовать для взаимодействия с Discord API. Вы можете установить discord.js через npm с помощью следующей команды:
Мы настроили файл конфигурации, установили необходимую зависимость и теперь можем начать сборку бота. В реальном приложении мы бы разделили код большого бота на несколько файлов, но в этом обучающем модуле мы поместим весь код бота в один файл.
Вначале создайте файл с именем index.js в папке discord-bot для кода:
Начните программирование бота, запросив зависимость discord.js и файл конфигурации с токеном бота:
const Discord = require("discord.js"); const config = require("./config.json");
После этого добавьте следующие две строки кода:
. const client = new Discord.Client(); client.login(config.BOT_TOKEN);
Сохраните и закройте файл.
Первая строка кода создает новый клиент Discord.Client и назначает его как значение константы client . Этот клиент частично обеспечивает взаимодействие с Discord API и получает уведомления Discord о событиях, например, о новых сообщениях. Фактически клиент представляет бот Discord.
Во второй строке кода метод login используется на клиенте для входа в созданный бот Discord с использованием токена в файле config.json в качестве пароля. Токен сообщает Discord API, для какого бота предназначена программа, а также подтверждает вашу аутентификацию для использования бота.
Теперь запустите файл index.js с помощью Node:
Теперь статус вашего бота на сервере Discord, куда вы его добавили, изменится на online (в сети).

Мы успешно настроили среду программирования и создали базовый код для входа в бот Discord. На следующем шаге мы займемся пользовательскими командами и заставим бота выполнить определенные действия, например, отправить сообщения.
Шаг 3 — Обработка первой команды пользователя
На этом шаге мы создадим бот, который может обрабатывать команды пользователя. Вы запустите свою первую команду ping , на которую будет отправлен ответ pong с указанием времени ответа на команду.
Сначала необходимо обеспечить обнаружение и получение любых отправляемых пользователями сообщений, чтобы бот мог обрабатывать любые команды. Используя метод on клиента Discord, Discord будет отправлять вам уведомления о новых событиях. Метод on принимает два аргумента: название ожидаемого события и функцию, которая будет запускаться каждый раз, когда будет возникать это событие. С этим методом вы можете ожидать события message , которое будет возникать каждый раз при отправке сообщения в гильдию, где у бота имеется разрешение на просмотр сообщений. Поэтому мы создадим функцию, которая будет запускаться для обработки команд каждый раз при отправке сообщения.
Вначале откройте свой файл:
Добавьте в файл следующий код:
. const client = new Discord.Client(); client.on("message", function(message) >); client.login(config.BOT_TOKEN);
Эта функция, выполняемая для события message , принимает параметр message . Параметр message имеет значение экземпляра Discord.js message, содержащее информацию об отправленном сообщении и методах, которые помогут боту ответить на него.
Добавьте следующую строку кода в функцию обработки команд:
. client.on("message", function(message) if (message.author.bot) return; >); .
Эта строка проверяет, является ли автор сообщения ботом, и если это так, останавливает обработку команды. Это важно, поскольку обычно нам не нужно обрабатывать сообщения ботов или отвечать на них. Другим ботам обычно не требуется использовать наш бот, и поэтому игнорирование их сообщений позволит нам сэкономить вычислительную мощность и предотвратить случайные ответы.
Теперь мы напишем обработчик команд. Для этого важно понимать обычный формат команды Discord. Обычно структура команды Discord содержит три части в следующем порядке: префикс, имя команды и (иногда) аргументы команды.

- Префикс: префикс может быть любым, но обычно это знак пунктуации или абстрактная фраза, которая обычно не может располагаться в начале сообщения. Это означает, что при добавлении префикса в начало сообщения бот будет знать, что это команда, которую ему необходимо обработать.
- Имя команды: имя команды, которое пользователь хочет использовать. Это означает, что бот может поддерживать несколько команд с разными функциями и разрешать пользователям выбирать между ними, используя разные имена команд.
- Аргументы: иногда команда запрашивает или использует дополнительную информацию от пользователя, и пользователь может указывать аргументы после имени команды, разделяя их пробелами.
Примечание. Принудительно устанавливаемой структуры команд нет, и боты могут обрабатывать команды как угодно, однако здесь мы описываем эффективную структуру, которую использует большинство ботов.
Чтобы начать создание синтаксического анализатора команд, поддерживающего этот формат, добавьте следующие строки кода в функцию обработки сообщений:
. const prefix = "!"; client.on("message", function(message) if (message.author.bot) return; if (!message.content.startsWith(prefix)) return; >); .
Первая строка кода добавляется, чтобы присвоить значение «!» константе prefix , которую мы будем использовать в качестве префикса бота.
Вторая строка кода проверяет, начинается ли содержание обрабатываемого ботом сообщения с заданного префикса, и останавливает дальнейшую обработку сообщения, если префикса нет.
Теперь необходимо конвертировать остальную часть сообщения в название команды и любые аргументы, которые могут присутствовать в сообщении. Добавьте следующие выделенные строки:
. client.on("message", function(message) if (message.author.bot) return; if (!message.content.startsWith(prefix)) return; const commandBody = message.content.slice(prefix.length); const args = commandBody.split(' '); const command = args.shift().toLowerCase(); >); .
Первая строка используется для удаления префикса из содержания сообщения и назначения результата константе commandBody . Это необходимо, поскольку нам не нужно, чтобы префикс входил в обработанное имя команды.
Вторая строка принимает сообщение с удаленным префиксом и использует на нем метод split с пробелом в качестве разделителя. Он разделяет команду на массив субстрок, проводя разделение после каждого пробела. В результате получается массив, содержащий имя команды, за которым идут аргументы (если они содержатся в сообщении). Мы назначаем этот массив константе args .
Третья строка удаляет первый элемент из массива args (это будет имя команды), конвертирует его в нижний регистр и назначает константе command . Это позволяет изолировать имя команды и оставить в массиве только аргументы. Также мы используем метод toLowerCase , поскольку команды в ботах Discord обычно не учитывают регистр.
Мы завершили построение синтаксического анализатора команд с реализацией обязательного префикса и получением имени команды и всех аргументов из сообщений. Теперь мы реализуем и создадим код для определенных команд.
Добавьте следующий код, чтобы начать реализацию команды ping :
. const args = commandBody.split(' '); const command = args.shift().toLowerCase(); if (command === "ping") > >); .
Это выражение if проверяет соответствие обработанного имени команды (назначенного константе command ) значению «ping» . Такое соответствие означает, что пользователь хочет использовать команду «ping» . Мы вложим код определенной команды в блок выражения if . Впоследствии вы сможете использовать этот шаблон для других команд.
Теперь вы можете реализовать код для команды «ping» :
. if (command === "ping") const timeTaken = Date.now() - message.createdTimestamp; message.reply(`Pong! This message had a latency of $timeTaken>ms.`); > .
Сохраните и закройте файл.
Мы добавляем блок команды «ping» , который рассчитывает разницу между текущим временем, определяемым с помощью метода now объекта Date , и временной меткой создания сообщения, выражаемую в миллисекундах. Таким образом рассчитывается время обработки сообщения и ответа бота на команду «ping» .
Вторая строка отвечает на команду пользователя, используя метод reply с константой message . Метод reply отправляет запрос ping (уведомляющий пользователя и выделяющий сообщение для указанного пользователя) пользователю, который отправил команду, добавляя после запроса содержание, указанное в качестве первого аргумента метода. Мы указали литераль шаблона, содержащую сообщение и рассчитанное значение ping, в качестве ответа, который будет использоваться методом reply .
На этом мы завершаем реализацию команды «ping» .
Запустите свой бот с помощью следующей команды (в той же папке, что и index.js ):
Теперь вы можете использовать команду «! ping» на любом канале, где бот может просматривать и принимать сообщения, а также отправлять ответы.

Вы успешно создали бот, который может обрабатывать команды пользователей, и реализовали свою первую команду. На следующем шаге мы продолжим разработку бота, реализовав команду sum.
Шаг 4 — Реализация команды Sum
Теперь мы расширим нашу программу, реализовав команду «! sum» . Эта команда принимает любое количество аргументов, складывает их и возвращает пользователю сумму всех аргументов.
Если ваш бот Discord еще работает, вы можете остановить его процессы, нажав CTRL + C .
Откройте файл index.js снова:
Чтобы начать реализацию команды «! sum» , мы используем блок else-if . После проверки имени команды ping бот будет проверять, имеет ли имя команды значение «sum» . Мы используем блок else-if , потому что одновременно будет обрабатываться только одна команда, и если программа определит совпадение с именем команды «ping» , ей не нужно будет проводить проверку на совпадение с именем команды «sum» . Добавьте в файл следующие выделенные строки:
. if (command === "ping") const timeTaken = Date.now() - message.createdTimestamp; message.reply(`Ping! This message had a latency of $timeTaken>ms.`); > else if (command === "sum") > >); .
Теперь вы можете начать реализацию кода для команды «sum» . Код команды «sum» будет размещен в только что созданном нами блоке else-if . Теперь добавьте следующий код:
. else if (command === "sum") const numArgs = args.map(x => parseFloat(x)); const sum = numArgs.reduce((counter, x) => counter += x); message.reply(`The sum of all the arguments you provided is $sum>!`); > .
Мы используем метод map для списка аргументов, чтобы создать новый список, используя функцию parseFloat для каждого элемента в массиве args . При этом создается новый массив (назначенный константе numArgs ), где все элементы являются числами, а не строками. Это означает, что в дальнейшем вы можете определить сумму чисел, выполнив операцию сложения.
Вторая строка использует метод reduce на константе numArgs , предоставляя функцию, суммирующую все элементы в списке. Мы назначаем сумму всех элементов в numArgs как значение константы sum .
Затем мы используем метод reply на объекте сообщений, чтобы ответить на команду пользователя, отправив литераль шаблона, содержащую сумму всех аргументов, отправленных пользователем боту.
Это завершает реализацию команды «sum» . Теперь запустите бот, используя следующую команду (в той же папке, что и index.js ):
Теперь вы можете использовать команду «! sum» на любом канале, где бот может просматривать и отправлять сообщения.

Далее приведена законченная версия скрипта бота index.js :
const Discord = require("discord.js"); const config = require("./config.json"); const client = new Discord.Client(); const prefix = "!"; client.on("message", function(message) if (message.author.bot) return; if (!message.content.startsWith(prefix)) return; const commandBody = message.content.slice(prefix.length); const args = commandBody.split(' '); const command = args.shift().toLowerCase(); if (command === "ping") const timeTaken = Date.now() - message.createdTimestamp; message.reply(`Pong! This message had a latency of $timeTaken>ms.`); > else if (command === "sum") const numArgs = args.map(x => parseFloat(x)); const sum = numArgs.reduce((counter, x) => counter += x); message.reply(`The sum of all the arguments you provided is $sum>!`); > >); client.login(config.BOT_TOKEN);
На этом шаге мы дополнили наш бот Discord, реализовав в нем команду sum .
Заключение
Мы успешно создали бот Discord, который может обрабатывать разные команды пользователей и аргументы команд. Если вы хотите расширить возможности вашего бота, вы можете реализовать дополнительные команды или использовать другие части Discord API для построения мощного бота Discord. Вы можете ознакомиться с документацией по Discord.js или Discord API, чтобы узнать больше о Discord API.
При создании ботов Discord всегда помните об условиях обслуживания Discord API, определяющих требования к использованию Discord API разработчиками. Также вам может быть полезен этот набор рекомендаций, показывающий наилучшие способы построения бота Discord и содержащий советы по проектированию ботов Discord. Если вы хотите узнать больше о Node.js, ознакомьтесь с нашей серией материалов «Программирование в Node.js».
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
Как создать бота Discord с Node.js, Discord.js и OpenAI GPT-3
В настоящее время ИИ набирает стремительные темпы развития, и многие разработчики начинают задействовать его в создании проектов. Однако обучение собственного ИИ может оказаться непростой задачей для новичков в этой области.
К счастью, в последние годы работать с ИИ стало намного проще: все благодаря таким компаниям, как OpenAI, которые публикуют API для взаимодействия с предварительно обученными крупными нейронными сетями.
В данном руководстве мы создадим гениального бота Discord, который сможет отвечать на сложные вопросы и выполнять требуемые задания. Для этой цели воспользуемся Node.js, Discord.js и OpenAI API для GPT-3, одной из самых крупных и умных обученных нейронных сетей.
Переходим от слов к делу и погружаемся в увлекательную работу с ИИ.
Требования к проекту
Для создания проекта потребуются пара аккаунтов и установка нужного ПО.
Аккаунты:
- бета-аккаунт OpenAI (регистрация по ссылке);
- аккаунт Discord (скачивание и регистрация по ссылке).
Установка ПО:
- Node.js (скачивание и установка по ссылке);
- VS Code (скачивание и установка по ссылке), если отсутствует редактор кода.
Подготовка Discord
Шаг 1. Вход в Discord и создание сервера
Данный этап касается тех, у кого нет сервера. Обратите внимание, вы должны иметь собственный сервер или знать кого-то с правом на добавление аккаунта бота на дальнейших этапах. Создаем новый сервер, нажимая на значок + в левом боковом меню.
Шаг 2. Добавление нового приложения разработчика
Переходим по ссылке https://discord.com/developers/applications , в верхнем правом углу нажимаем кнопку New Application и создаем новое приложение:
Шаг 3. Именование приложения
Выбираем имя AiBot и нажимаем Create :
Шаг 4. Создание бота
Переходим в раздел Bot в левом боковом меню и нажимаем Add bot в правой части экрана:
Шаг 5. Создание токена бота
Нажимаем на кнопку сброса Reset token для создания нового токена бота. Данный токен является конфиденциальной информацией и не допускает разглашения. Сохраняем его в текстовом файле для дальнейшего использования, поскольку он отображается только один раз.
Шаг 6. Установка области действия бота и выбор разрешений
В меню настроек переходим в раздел OAuth2 > URL Generator :
Устанавливаем область действия на bot и выбираем следующие разрешения: Read messages / View channels (чтение сообщений/просмотр каналов), Send messages (отправка сообщений). Благодаря таким настройкам бот сможет читать и писать сообщения в чате сервера:
Шаг 7. Копирование URL-приглашения и вставка его в браузер
Прокручиваем вниз и находим Generated URL (сгенерированный URL-адрес). Он выглядит следующим образом:
Вставляем этот URL в адресную строку браузера. Выбираем сервер, предназначенный для авторизации бота, и нажимаем Next или Weiter :
Принимаем необходимые разрешения и завершаем процедуру нажатием Authorize .
Шаг 8. Встреча с созданным ботом на сервере
Закрываем вкладку и возвращаемся на сервер. Если все сделано правильно, то бот появляется среди участников сервера:
Активация бота ИИ
Теперь, когда бот отображается на сервере, приведем его в действие с помощью кода.
Шаг 9. Инициализация нового проекта
Выбираем место на компьютере, создаем там новую папку и называем ее aiBot . В данном случае папка на рабочем столе:
Открываем приложение VSCode и вновь созданную папку в разделе File > Open Folder :
В строке меню в разделе Terminal > New Terminal открываем новый терминал, который появляется снизу.
В терминале с помощью следующей команды инициализируем новое приложение Node.js:
npm init -y
Нажимаем Enter . В файловом проводнике слева видим результат выполнения команды — создание нового файла package.json :
Шаг 10. Создание нового файла с кодом для бота
Редактируем файл package.json , чтобы при запуске выполнялся скрипт файла с кодом для бота.
Нажимаем на значок New File для создания нового скрипта Node. Присваиваем файлу имя bot.js и пишем в нем код по типу “Hello world”, после чего сохраняем:
Далее переходим к файлу package.json и редактируем его, а именно вносим изменения в строки с main и start , как показано на скриншоте:
Теперь выполняем команду:
npm start
В терминале выводится сообщение Hello AI bot! :
Шаг 11. Установка зависимостей Discord.js
Мы сделали все необходимое для выполнения скрипта bot.js , приступаем к установке библиотеки Discord.js для взаимодействия с Discord.
В терминале выполняем команду:
npm install discord.js
Данная команда устанавливает библиотеку Discord.js, которая упрощает взаимодействие с API Discord. Если вы получаете только предупреждения, то проблем быть не должно. Однако в случае возникновения ошибок следует поискать решения в интернете.
Шаг 12. Написание кода для активации бота
Открываем файл bot.js , в котором пишем следующий код:
//В bot.js
const token = ; //Токен, сохраненный на 5-м шаге данного руководства
const = require("discord.js");
const client = new Client( intents:[
Intents.FLAGS.GUILDS,
Intents.FLAGS.GUILD_MESSAGES
]
>);
client.on("ready", () => console.log("The AI bot is online"); //Сообщение, когда бот в сети
>);
client.login(token);
Заменяем на токен, сохраненный для дальнейшей работы на 5-ом шаге руководства, и заключаем его в кавычки. Далее сохраняем файл.
Токен не подлежит разглашению, поэтому не следует отправлять код для данного проекта прямо на GitHub. Можно воспользоваться пакетом dotenv в сочетании с файлом .gitignore и таким образом безопасно сохранить токен. В этом же руководстве больше хотелось сосредоточиться на простоте процесса, чем на IT-безопасности.
Шаг 13. Бот активирован
В терминале выполняем следующую команду и смотрим на сервер: в сети должен появиться бот.
npm start
Устранение ошибок. При получении сообщения об ошибке Error: Cannot find module ‘node:events (Ошибка: Не удается найти модуль ‘node:events ) убедитесь, что установленная версия Node.js новее, чем 16.6.0. Узнать текущую версию Node можно с помощью команды:
node -v
Если же ваша версия предшествует 16.6.0, перейдите на сайт Node.js и установите поновее. Вы всегда можете закрыть команду, которая зависла в терминале с помощью:
[Ctrl + C] (на Windows) или [Cmd + C] на MacOS
Пробуем перезапустить команду npm start и снова проверяем сервер Discord. Бот AiBot должен появиться в сети!
Шаг 14. Обеспечение бота кодом для ответов на сообщения на сервере
Редактируем файл bot.js , снабжая его кодом для ответа на сообщения, содержащие восклицательный знак ! в качестве первого символа:
//В bot.js
const token = ; //Токен, сохраненный на 5-м шаге данного руководства
const = require("discord.js");
const client = new Client( intents:[
Intents.FLAGS.GUILDS,
Intents.FLAGS.GUILD_MESSAGES
]
>);
client.on("ready", () => console.log("The AI bot is online"); //Сообщение, когда бот в сети
>);
client.on("message", (message) => if (message.content.substring(0, 1) === "!") message.channel.send("Hello from AI bot"); //Ответ на сообщение, если оно содержит "!" в качестве первого символа
>
>);
client.login(token);
Сохраняем изменения. Перезапускаем приложение, нажимая в терминале Ctrl + C и снова выполняя команду npm start .
Отправляем на сервер сообщение с восклицательным знаком в качестве первого символа. В ответ бот AiBot реагирует приветственной фразой Hello from AI bot . Он не будет отвечать на сообщения, не соответствующие заданному формату:
Подготовка OpenAI GPT-3
Созданный бот отвечает на сообщения, теперь добавим ему интеллекта. Для этого необходимо получить токен с сайта OpenAI.
Шаг 15. Получение токена OpenAI API
Переходим по ссылке https://beta.openai.com/account/api-keys . На момент создания руководства сервис GPT-3 все еще находился на этапе бета-тестирования. Возможно, сейчас вышеуказанный URL уже изменился. В этом случае нужно войти в свой аккаунт OpenAI, перейти в раздел Personal в правом верхнем углу веб-сайта, нажать на Personal и выбрать опцию просмотра ключей API View API keys :
Открывается следующий раздел:
Нажимаем на Reveal (“Показать”) и сохраняем ключ API в надежном месте. Нельзя разглашать ключи API или загружать их на GitHub. В случае отсутствия секретного ключа нажимаем на Create new secret key для его создания.
Отметим, что бесплатный аккаунт ограничивает размер и, возможно, количество задаваемых ИИ вопросов.
Подключение к OpenAI GPT-3
Получив требуемый токен с сайта OpenAI, приступаем к написанию кода для взаимодействия с GPT-3.
Шаг 16. Установка библиотеки OpenAI
Переходим в VSCode. Если бот в настоящий момент работает, останавливаем его командой Ctrl + C в терминале.
Устанавливаем библиотеку OpenAI для Node.js следующей командой:
npm install openai
Шаг 17. Создание скрипта для взаимодействия с GPT-3
В VSCode создаем новый файл ai.js :
Вставляем в этот файл нижеуказанный код и заменяем на токен API, полученный на 15-м шаге. Не забываем заключить его в двойные кавычки:
//В ai.js
const < Configuration, OpenAIApi >= require("openai");
const configuration = new Configuration( apiKey: ,
>);
const openai = new OpenAIApi(configuration);
async function ask(prompt) const response = await openai.createCompletion( model: "text-davinci-002",
prompt,
temperature: 0.7,
max_tokens: 256,
top_p: 1,
frequency_penalty: 0,
presence_penalty: 0,
>);
const answer = response.data.choices[0].text;
console.log(answer);
>
//Пример вопроса: Как называются планеты Солнечной системы?
ask("What are the names of the planets in the solar system?");
Шаг 18. Проверка подключения к OpenAI GPT3
Сохраняем файл и переходим в терминал. Далее выполняем команду:
node ai.js
Если все сработало правильно, то в терминале появится ответ ИИ:
Прокачаем бота суперинтеллектом
Почти готово! Уже проделана большая работа! Осталось соединить все части вместе и вывести бота на уровень супергения.
Шаг 19. Подключение бота Discord к GPT-3
В файле ai.js удаляем примерный вызов функции ask и экспортируем функцию с помощью module.exports . Помимо этого, убираем console log и возвращаем ответ в функции ask :
//В ai.js
const < Configuration, OpenAIApi >= require("openai");
const configuration = new Configuration( apiKey: ,
>);
const openai = new OpenAIApi(configuration);
async function ask(prompt) const response = await openai.createCompletion( model: "text-davinci-002",
prompt,
temperature: 0.7,
max_tokens: 256,
top_p: 1,
frequency_penalty: 0,
presence_penalty: 0,
>);
const answer = response.data.choices[0].text;
return answer;
>
//Экспорт функции "ask"
module.exports = ask,
>;
Переходим в файл bot.js и применяем следующие изменения:
//В bot.js
const < ask >= require("./ai.js"); //Импорт функции "ask" из файла "ai.js"
const token = ; //Токен, сохраненный на 5-м шаге руководства
const = require("discord.js");
const client = new Client( intents:[
Intents.FLAGS.GUILDS,
Intents.FLAGS.GUILD_MESSAGES
]
>);
client.on("ready", () => console.log("The AI bot is online"); //Сообщение, когда бот в сети
>);
client.on("message", async (message) => if (message.content.substring(0, 1) === "!") const prompt = message.content.substring(1); //Удаление восклицательного знака из сообщения
const answer = await ask(prompt); //Ответ GPT-3
message.channel.send(answer); //Ответное сообщение в Discord с ответом от GPT-3
>
>);
client.login(token);
Сохраняем изменения. В последний раз с помощью Ctrl + C останавливаем работу бота и перезапускаем его командой:
npm start
Переходим на сервер Discord и проверяем, все ли работает должным образом. Напишем в чате сообщение с вопросом или заданием, поставив в начале восклицательный знак:
На следующем скриншоте бота просят рассказать анекдот про программистов:
— Why did the programmer quit his job? Почему программист бросил свою работу?
— Because he didn’t get arrays (игра слов: arrays — массивы и a raise — прибавка к зарплате). Потому что он не получил прибавки к зарплате.
Поздравляем!
Вы создали своего первого ИИ-бота в Discord с использованием Node.js, Discord.js и API OpenAI. Теперь можно показать его друзьям или позадавать ему разные интересные вопросы!
- Генерация видео из текста стала возможной
- Создание музыкального бота с помощью Discord.js
- Будущее практического применения чат-ботов
Читайте нас в Telegram, VK и Дзен
