Создание Discord-бота, используя библиотеку discord.js | Часть №1
В этой статье я подробно расскажу о том, как работать с библиотекой discord.js, создать своего Discord-бота, а также покажу несколько интересных и полезных команд.
Сразу хочу отметить, что я планирую сделать ряд подобных статей, начиная с простых команд, заканчивая музыкой, системой экономики и распознаванием голоса ботом.
Начало работы
Если вы уже знакомы с приведёнными ниже материалами, — смело можете пролистать этот раздел.
Установка среды разработки
Для начала работы с кодом нам нужно установить среду разработки, это может быть:
Среда разработки выбирается по удобству использования и практичности, она у вас может быть любая, но мы рассмотрим её на примере Visual Studio Code, так как она является одной из самых приемлемых для новичков, а также для опытных программистов.
Для установки переходим по этой ссылке.

Выбираем свою операционную систему и запускаем скачивание.
Установка среды выполнения
Для создания бота мы используем среду выполнения node.js. Для её установки нам необходимо перейти на этот сайт.

На данный момент нас интересует версия долгосрочной поддержки (LTS), скачиваем её.
Установка полезных расширений
В Visual Studio Code присутствует возможность устанавливать расширения.
Для этого, кликните по отмеченной ниже иконке.

В открывшемся окне вписываем название название/идентификатор нужного нам расширения, после чего устанавливаем его.

Из полезных расширений могу отметить:
-
Discord Presence — расширение, позволяющее отображать рабочую область и файл, в котором вы работаете в вашей игровой активности (функция работает только при использовании приложения Discord).

Идентификатор расширения: icrawl.discord-vscode
Идентификатор расширения: formulahendry.code-runner
Создание бота
Теперь, когда вы установили все нужные компоненты, мы можем приступить к созданию самого бота.
Здесь всё просто. Переходим на портал разработчиков и нажимаем на кнопку с надписью «New Application» — она находится в правом верхнем углу.
В открывшемся окне вписываем имя бота, после чего, нажимаем на кнопку с надписью «Create».

На этой странице мы можем изменить имя бота, загрузить для него иконку, заполнить описание.
Теперь наша задача — воплотить бота в жизнь. Для этого переходим во вкладку «Bot».

Нажимаем на кнопку с надписью «Add Bot» и воплощаем бота в жизнь.
Поздравляю! Вы создали аккаунт для вашего бота. Теперь у него есть тег, токен, ник и иконка.
Подготовка к написанию кода
После создания аккаунта для бота, мы должны установить нужные пакеты и модули, чтобы в дальнейшем он корректно работал.
Первым делом создаём папку, после чего открываем её в VS Code (Файл > Открыть папку) / (Ctrl + K Ctrl + O)
Далее нам нужно открыть терминал (Терминал > Создать терминал) / (Ctrl + Shift + `)

Теперь мы должны создать файл с неким «описанием» нашего бота, сделаем это через терминал.
Вписываем данную строку в терминал и нажимаем Enter:
npm init
После каждой появившейся строки нажимаем Enter или вписываем свои значения.
Значения в этом файле можно будет изменить в любой момент.
Далее, мы должны поочерёдно вводить в терминал эти строки:
npm install
npm install discord.js
«Install» также можно сокращать в «I», но необязательно.
Итого, если вы следовали инструкциям и всё сделали правильно, в вашей папке должны были появиться 3 объекта:

Написание кода
Об удобстве написания кода
Для того, чтобы наш бот появился в сети и мог реагировать на команды, нам нужно написать для него код.
Существует множество вариантов для его написания: используя один файл, два, несколько, и т.д
Мы рассмотрим вариант с двумя файлами, так как его использовать очень легко и удобно, но у каждого варианта есть свои недостатки — например, у этого недостатком является сложность в написании начального кода.
Но не волнуйтесь, весь код вам писать не придётся.
О хранении данных
Для начала, нам нужно где-то хранить основные параметры и информацию о боте.
Мы можем сделать это двумя способами:
- Создать отдельный файл
- Записать всё в константы
Разберём хранение параметров в отдельном файле.
Итак, создаем файл config.json
Вставляем в него следующий код:
* Для получения токена зайдите на портал разработчиков, перейдите во вкладку «Bot» и скопируйте его.

* Самым распространённым среди разработчиков префиксом является !
Далее нам нужно создать файл bot.js и вставить в него данный код:
const Discord = require('discord.js'); // Подключаем библиотеку discord.js const robot = new Discord.Client(); // Объявляем, что robot - бот const comms = require("./comms.js"); // Подключаем файл с командами для бота const fs = require('fs'); // Подключаем родной модуль файловой системы node.js let config = require('./config.json'); // Подключаем файл с параметрами и информацией let token = config.token; // «Вытаскиваем» из него токен let prefix = config.prefix; // «Вытаскиваем» из него префикс robot.on("ready", function() < /* При успешном запуске, в консоли появится сообщение «[Имя бота] запустился!» */ console.log(robot.user.username + " запустился!"); >); robot.on('message', (msg) => < // Реагирование на сообщения if (msg.author.username != robot.user.username && msg.author.discriminator != robot.user.discriminator) < var comm = msg.content.trim() + " "; var comm_name = comm.slice(0, comm.indexOf(" ")); var messArr = comm.split(" "); for (comm_count in comms.comms) < var comm2 = prefix + comms.comms[comm_count].name; if (comm2 == comm_name) < comms.comms[comm_count].out(robot, msg, messArr); >> > >); robot.login(token); // Авторизация бота
Теперь создаём файл comms.js, в нём будут сами команды.
В нём должен быть следующий код:
const config = require('./config.json'); // Подключаем файл с параметрами и информацией const Discord = require('discord.js'); // Подключаем библиотеку discord.js const prefix = config.prefix; // «Вытаскиваем» префикс // Команды // function test(robot, mess, args) < mess.channel.send('Test!') >// Список команд // var comms_list = [< name: "test", out: test, about: "Тестовая команда" >]; // Name - название команды, на которую будет реагировать бот // Out - название функции с командой // About - описание команды module.exports.comms = comms_list;
Чтобы добавить больше команд — просто объявляйте больше функций и добавляйте их в список, например:
const config = require('./config.json'); const Discord = require('discord.js'); const prefix = config.prefix; const versions = config.versions; // Команды // function test(robot, mess, args) < mess.channel.send("Тест!") >function hello(robot, mess, args) < mess.reply("Привет!") >// Список комманд // var comms_list = [< name: "test", out: test, about: "Тестовая команда" >, < name: "hello", out: hello, about: "Команда для приветствия!" >> module.exports.comms = comms_list;
И вот, мы вышли на финишную прямую!
Осталось всего ничего — запустить бота.
Для этого открываем терминал и вставляем в него следующую строку:
node bot.js

Готово! Бот запущен и вы можете им пользоваться, ура!
Чтобы пригласить бота на свой сервер, воспользуемся нам уже известным порталом разработчиков.
Перейдём во вкладку OAuth2, пролистаем чуть ниже, выберем «Bot» и отметим нужные боту привилегии.
Теперь осталось скопировать ссылку-приглашение и добавить бота на свой сервер.

Как вывести ссылку-приглашение в терминал, при запуске бота?
Существует два способа:
-
Заранее отметить нужные привилегии.
Для этого, сначала мы должны скопировать ссылку-приглашение.
После чего перейти в файл bot.js и вставить данную строчку кода сюда:
robot.on("ready", function()< console.log(robot.user.username + " запустился!"); console.log("Ссылка-приглашение") // )
Итоговый код должен быть таким:
const Discord = require('discord.js'); const robot = new Discord.Client(); var comms = require("./comms.js"); const fs = require('fs'); let config = require('./config.json'); let token = config.token; let prefix = config.prefix; robot.on("ready", function()< console.log(robot.user.username + " запустился!"); console.log("Ссылка-приглашение") >) robot.on('message', (msg) => < if(msg.author.username != robot.user.username && msg.author.discriminator != robot.user.discriminator)< var comm = msg.content.trim()+" "; var ok = false; var comm_name = comm.slice(0, comm.indexOf(" ")); var messArr = comm.split(" "); for(comm_count in comms.comms)< var comm2 = prefix + comms.comms[comm_count].name; if(comm2 == comm_name)< comms.comms[comm_count].out(robot, msg, messArr); >> > >); robot.login(token) robot.login(token);
robot.on("ready", function() < console.log(robot.user.username + " запустился!"); robot.generateInvite(["ADMINISTRATOR"]).then((link) =>< // < // console.log(link); // < // >)>)
const Discord = require('discord.js'); const robot = new Discord.Client(); var comms = require("./comms.js"); const fs = require('fs'); let config = require('./config.json'); let token = config.token; let prefix = config.prefix; robot.on("ready", function() < console.log(robot.user.username + " запустился!"); robot.generateInvite(["ADMINISTRATOR"]).then((link) =>< console.log(link); >)>) robot.on('message', (msg) => < if(msg.author.username != robot.user.username && msg.author.discriminator != robot.user.discriminator)< var comm = msg.content.trim()+" "; var ok = false; var comm_name = comm.slice(0, comm.indexOf(" ")); var messArr = comm.split(" "); for(comm_count in comms.comms)< var comm2 = prefix + comms.comms[comm_count].name; if(comm2 == comm_name)< comms.comms[comm_count].out(robot, msg, messArr); >> > >); robot.login(token);
Чтобы указать несколько привилегий, мы должны перечислить их в квадратных скобках, через запятую:
robot.generateInvite(['KICK_MEMBERS', 'BAN_MEMBERS', 'SEND_MESSAGES']).then((link) => < console.log(link);
* Все привилегии указываются заглавными буквами
Список доступных привилегий:
ADMINISTRATOR
CREATE_INSTANT_INVITE
KICK_MEMBERS
BAN_MEMBERS
MANAGE_CHANNELS
MANAGE_GUILD
ADD_REACTIONS
VIEW_AUDIT_LOG
PRIORITY_SPEAKER
STREAM
VIEW_CHANNEL
SEND_MESSAGES
SEND_TTS_MESSAGES
MANAGE_MESSAGES
EMBED_LINKS
ATTACH_FILES
READ_MESSAGE_HISTORY
MENTION_EVERYONE
USE_EXTERNAL_EMOJIS
VIEW_GUILD_INSIGHTS
CONNECT
SPEAK
MUTE_MEMBERS
DEAFEN_MEMBERS
MOVE_MEMBERS
USE_VAD
CHANGE_NICKNAME
MANAGE_NICKNAMES
MANAGE_ROLES
MANAGE_WEBHOOKS
MANAGE_EMOJIS
Полезные и интересные команды
В предыдущем разделе я показал вам, как запустить бота и как писать для него команды.
Теперь я хочу поделиться с вами несколькими своими командами.
-
!say — с помощью этой команды бот может повторить ваше сообщение.
if (!mess.member.hasPermission("MANAGE_MESSAGES")) return mess.channel.send("У вас нет прав"); /* Если у исполнителя команды нету привилегии MANGAGE_MESSAGES, он не сможет её использовать */ args = mess.content.split(' '); args.shift(); args = args.join(' '); mess.delete().catch(); // Удаление сообщения пользователя после отправки mess.channel.send(args)
mess.channel.send('Монета подбрасывается. ') var random = Math.floor(Math.random() * 4) + 1; // Объявление переменной random - она вычисляет случайное число от 1 до 3 if (random === 1) < // Если вычислено число 1, то выпадает орёл. mess.channel.send(':full_moon: Орёл!') >else if (random === 2) < // Если вычислено число 2, то выпадает решка. mess.channel.send(':new_moon: Решка!') >else if (random === 3) < // Если вычислено число 3, то монета падает ребром. mess.channel.send(':last_quarter_moon: Монета упала ребром!') >
const arggs = mess.content.split(' ').slice(1); // Все аргументы за именем команды с префиксом const amount = arggs.join(' '); // Количество сообщений, которые должны быть удалены if (!amount) return mess.channel.send('Вы не указали, сколько сообщений нужно удалить!'); // Проверка, задан ли параметр количества if (isNaN(amount)) return mess.channel.send('Это не число!'); // Проверка, является ли числом ввод пользователя if (amount > 100) return mess.channel.send('Вы не можете удалить 100 сообщений за раз'); // Проверка, является ли ввод пользователя числом больше 100 if (amount < 1) return mess.channel.send('Вы должны ввести число больше чем 1'); // Проверка, является ли ввод пользователя числом меньше 1 async function delete_messages() < // Объявление асинхронной функции await mess.channel.messages.fetch(< limit: amount >).then(messages => < mess.channel.bulkDelete(messages) mess.channel.send(`Удалено $сообщений!`) >) >; delete_messages(); // Вызов асинхронной функции
Не стоит пугаться большого кода, здесь всё предельно просто.
var name = [ // Объявление массива name и занесение в него большого количества имён 'Абрам', ' Аваз', ' Аввакум', ' Август', ' Августин', ' Авдей', ' Авраам', ' Автандил', ' Агап', ' Агафон', ' Аггей', ' Адам', ' Адис', ' Адольф', ' Адриан', ' Азамат', ' Айдар', ' Айнур', ' Айрат', ' Аким', ' Алан', ' Алей', ' Александр', ' Алексей', ' Али', ' Альберт', ' Альфред', ' Амадей', ' Амадеус', ' Амаяк', ' Амвросий', ' Ананий', ' Анастасий', ' Анатолий', ' Анвар', ' Ангел', ' Андоим', ' Андрей', ' Аникита', ' Антон', ' Арам', ' Арий', ' Аристарх', ' Аркадий', ' Арман', ' Арно', ' Арнольд', ' Арон', ' Арсен', ' Арсений', ' Арслан', ' Артем', ' Артемий', ' Артур', ' Архип', ' Аскар', ' Аскольд', ' Аслан', ' Афанасий', ' Ахмет', ' Ашот', ' Бальтазар', ' Бежен', ' Бенедикт', ' Берек', ' Бернард', ' Бертран', ' Богдан', ' Болеслав', ' Борис', ' Бронислав', ' Булат', ' Вадим', ' Валентин', ' Валерий', ' Вальтер', ' Варфоломей', ' Василий', ' Вацлав', ' Велизар', ' Венедикт', ' Вениамин', ' Викентий', ' Виктор', ' Вилли', ' Вильгельм', ' Виссарион', ' Виталий', ' Витольд', ' Владимир', ' Владислав', ' Владлен', ' Володар', ' Вольдемар', ' Всеволод', ' Вячеслав', ' Гавриил', ' Галактион', ' Гарри', ' Гастон', ' Гаяс', ' Гевор', ' Геннадий', ' Генрих', ' Георгий', ' Геракл', ' Геральд', ' Герасим', ' Герман', ' Глеб', ' Гордей', ' Гордон', ' Горислав', ' Градимир', ' Григорий', ' Гурий', ' Густав', ' Давид', ' Дамир', ' Даниил', ' Даниэль', ' Данияр', ' Дарий', ' Дементий', ' Демид', ' Демосфен', ' Демьян', ' Денис', ' Джамал', ' Джордан', ' Дмитрий', ' Добрыня', ' Дональд', ' Донат', ' Дорофей', ' Евгений', ' Евграф', ' Евдоким', ' Евсевий', ' Евсей', ' Евстафий', ' Егор', ' Елеазар', ' Елисей', ' Емельян', ' Еремей', ' Ермолай', ' Ерофей', ' Ефим', ' Ефрем', ' Жан', ' Ждан', ' Жорж', ' Захар', ' Зиновий', ' Ибрагим', ' Иван', ' Игнатий', ' Игорь', ' Илларион', ' Ильдар', ' Ильнар', ' Ильнур', ' Илья', ' Ильяс', ' Иннокентий', ' Иоанн', ' Иосиф', ' Ипполит', ' Искандер', ' Ислам', ' Камиль', ' Карим', ' Карл', ' Кирилл', ' Клим', ' Кондрат', ' Константин', ' Корней', ' Кузьма', ' Лавр', ' Лаврентий', ' Лев', ' Леон', ' Леонид', ' Леонтий', ' Леопольд', ' Лука', ' Лукьян', ' Любим', ' Макар', ' Максим', ' Максимилиан', ' Марат', ' Марк', ' Марсель', ' Мартин', ' Матвей', ' Мирон', ' Мирослав', ' Митрофан', ' Михаил', ' Михей', ' Мишель', ' Мстислав', ' Мурат', ' Муслим', ' Назар', 'Абрам', ' Аваз', ' Аввакум', ' Август', ' Августин', ' Авдей', ' Авраам', ' Автандил', ' Агап', ' Агафон', ' Аггей', ' Адам', ' Адис', ' Адольф', ' Адриан', ' Азамат', ' Айдар', ' Айнур', ' Айрат', ' Аким', ' Алан', ' Алей', ' Александр', ' Алексей', ' Али', ' Альберт', ' Альфред', ' Амадей', ' Амадеус', ' Амаяк', ' Амвросий', ' Ананий', ' Анастасий', ' Анатолий', ' Анвар', ' Ангел', ' Андоим', ' Андрей', ' Аникита', ' Антон', ' Арам', ' Арий', ' Аристарх', ' Аркадий', ' Арман', ' Арно', ' Арнольд', ' Арон', ' Арсен', ' Арсений', ' Арслан', ' Артем', ' Артемий', ' Артур', ' Архип', ' Аскар', ' Аскольд', ' Аслан', ' Афанасий', ' Ахмет', ' Ашот', ' Бальтазар', ' Бежен', ' Бенедикт', ' Берек', ' Бернард', ' Бертран', ' Богдан', ' Болеслав', ' Борис', ' Бронислав', ' Булат', ' Вадим', ' Валентин', ' Валерий', ' Вальтер', ' Варфоломей', ' Василий', ' Вацлав', ' Велизар', ' Венедикт', ' Вениамин', ' Викентий', ' Виктор', ' Вилли', ' Вильгельм', ' Виссарион', ' Виталий', ' Витольд', ' Владимир', ' Владислав', ' Владлен', ' Володар', ' Вольдемар', ' Всеволод', ' Вячеслав', ' Гавриил', ' Галактион', ' Гарри', ' Гастон', ' Гаяс', ' Гевор', ' Геннадий', ' Генрих', ' Георгий', ' Геракл', ' Геральд', ' Герасим', ' Герман', ' Глеб', ' Гордей', ' Гордон', ' Горислав', ' Градимир', ' Григорий', ' Гурий', ' Густав', ' Давид', ' Дамир', ' Даниил', ' Даниэль', ' Данияр', ' Дарий', ' Дементий', ' Демид', ' Демосфен', ' Демьян', ' Денис', ' Джамал', ' Джордан', ' Дмитрий', ' Добрыня', ' Дональд', ' Донат', ' Дорофей', ' Евгений', ' Евграф', ' Евдоким', ' Евсевий', ' Евсей', ' Евстафий', ' Егор', ' Елеазар', ' Елисей', ' Емельян', ' Еремей', ' Ермолай', ' Ерофей', ' Ефим', ' Ефрем', ' Жан', ' Ждан', ' Жорж', ' Захар', ' Зиновий', ' Ибрагим', ' Иван', ' Игнатий', ' Игорь', ' Илларион', ' Ильдар', ' Ильнар', ' Ильнур', ' Илья', ' Ильяс', ' Иннокентий', ' Иоанн', ' Иосиф', ' Ипполит', ' Искандер', ' Ислам', ' Камиль', ' Карим', ' Карл', ' Кирилл', ' Клим', ' Кондрат', ' Константин', ' Корней', ' Кузьма', ' Лавр', ' Лаврентий', ' Лев', ' Леон', ' Леонид', ' Леонтий', ' Леопольд', ' Лука', ' Лукьян', ' Любим', ' Макар', ' Максим', ' Максимилиан', ' Марат', ' Марк', ' Марсель', ' Мартин', ' Матвей', ' Мирон', ' Мирослав', ' Митрофан', ' Михаил', ' Михей', ' Мишель', ' Мстислав', ' Мурат', ' Муслим', ' Назар' ]; var RandElement = name[Math.floor(Math.random() * (name.length))]; // Выбор случайного элемента из массива mess.channel.send(RandElement) // Отправка сообщения со случайным элементом из массива в чат
Заключение
Вот и подошла к концу первая часть обучения, как вы могли заметить, создать бота, используя библиотеку discord.js очень просто.
Итого, из этой статьи мы выяснили:
- Как установить нужные модули и пакеты
- Как установить среду разработки
- Как установить среду выполнения
- Как установить полезные расширения
- Как создать аккаунт для бота
- Как воплотить бота в жизнь
- Как запустить бота
- Как научить бота реагировать на команды
- Как пригласить бота на свой сервер
- Как писать код для работы команд
Надеюсь, что вам понравилась моя статья и вы узнали из неё что-то новое.
Сайты для самостоятельного изучения
- Основная документация discord.js
- Документация discord.js №2
- Руководство discord.js
- Руководство discord.js №2
Гайд Как сделать Discord Бота на Javascript | Урок 1
2) Нужные данные
- Сразу же скачиваем Node.js (current версию, на момент написания статьи это 18.3.0) | Не забудьте перезапустить пк после устаноки
// Git (Он нам не нужен, но если вы будете пользоваться гитхабом то понадобится)
3) Инициализация проекта
- На этом моменте мы начнем полу-практическую часть. Я буду использовать IDE Visual Studio Code
Вы же можете по старинке иницализировать через cmd/powershell
- Создаём файл index.js , он будет "отправной точкой", там мы и будем писать код для бота.
- Создаём файл data.json , там будет храниться токен, префикс и API-Ключи в будущем
- Открываем файл, в нём делаем фигурные скобки, и пишем
- Открываем терминал (через папку с ботом конечно) и пишем npm init
Видём вот такое чудо и начинаем с ним работать. Если вы ничего не понимаете то можете просто нажимать Enter до тех пор, пока не создастся файл package.json
И так, после всех наших действий, наша папка выглядит вот так
Надо импортировать discord.js для запуска
Возвращаемся в терминал и пишем npm i discord.js и ждём загрузки.
После всех действий переходим к получению токена
Спойлер: Создание бота в дискорде и его токен
Идём на сайт Discord Developer Portal
Жмякаем на New Application справа сверху, рядом с вашим аватаром
И создаём нашего бота
- Name: Имя нашего бота
- Team: нам нахуй не надо, Personal ставим
Идём во вкладку Bot и жмякаем Add Bot
Листаем вниз и включаем Intent'ы
Важная часть с токеном
Жмякаем Copy и возвращаемся в Data.json
Теперь в наш токен собственно и пишем его.
И так наш файл теперь выглядит вот так.
Никому не показывайте токен, с помощью него можно войти в вашего бота!
Я его после этого ресетнул 😀
Ну а вам не надо.
Затем идём OAuth2 > URL Generator
Ищем здесь бот и кликаем, затем на Administrator
Листаем вниз, ищем GENERATED URL
Жмякаем Copy и приглашаем бота на наш тестовый сервер по этой ссылке
И так, главная часть сделана, осталось написать код
Писать будем на Javascript, typescript я в рот ебал. Начнёмс
const < Client, Intents, Collection >= require('discord.js'); const < TOKEN, PREFIX >= require("./data.json")
Здесь мы импортируем discord.js и получаем из него сколько свойств
Client - Собственно сам бот или клиент
Intents - что-то вроде разрешений для бота
Collection - Дискордовская коллекция, в будущем будем хранить в ней команды
Так-же получаем информацию из data.json (token, prefix)
const client = new Client();
Создаём нового клиента и даём им права на Гильдии, Мемберов, Сообщений и Пресенсов
client.on('ready', () => < console.log("Bot is ready!"); >); client.login(TOKEN);
Ну а здесь мы его запускам. После всех этих действий наш файл index.js выглядит следующим образом
const < Client, Intents, Collection >= require('discord.js'); const < TOKEN, PREFIX >= require("./data.json") const client = new Client(); client.on('ready', () => < console.log("Bot is ready!"); >); client.login(TOKEN);
Осталось только его запустить, открываем терминал и пишем node index
Вуаля, наш бот готов.
В следующем уроке мы сделаем команду и подключим бота к гитхабу.
Всем спасибо, буду рад если вы укажите на ошибки в оформлении темы либо описании функций
Как создать бота 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 и Дзен
Создание бота Дискорд на основе discord.js
Я заинтересовался созданием бота для 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.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
После чего остаётся добавить бота на сервер по полученной ссылке.

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