Время на прочтение
12 мин
Количество просмотров 152K
Введение
В этой статье я подробно расскажу о том, как работать с библиотекой discord.js, создать своего Discord-бота, а также покажу несколько интересных и полезных команд.
Сразу хочу отметить, что я планирую сделать ряд подобных статей, начиная с простых команд, заканчивая музыкой, системой экономики и распознаванием голоса ботом.
Начало работы
Если вы уже знакомы с приведёнными ниже материалами, — смело можете пролистать этот раздел.
Установка среды разработки
Для начала работы с кодом нам нужно установить среду разработки, это может быть:
- Sublime Text
- Notepad++
- Atom
- Brackets
- InteliJ Idea
- Eclipse
- Visual Studio Code
… и так далее.
Среда разработки выбирается по удобству использования и практичности, она у вас может быть любая, но мы рассмотрим её на примере Visual Studio Code, так как она является одной из самых приемлемых для новичков, а также для опытных программистов.
Для установки переходим по этой ссылке.
Выбираем свою операционную систему и запускаем скачивание.
Установка среды выполнения
Для создания бота мы используем среду выполнения node.js. Для её установки нам необходимо перейти на этот сайт.
На данный момент нас интересует версия долгосрочной поддержки (LTS), скачиваем её.
Установка полезных расширений
В Visual Studio Code присутствует возможность устанавливать расширения.
Для этого, кликните по отмеченной ниже иконке.
В открывшемся окне вписываем название название/идентификатор нужного нам расширения, после чего устанавливаем его.
Из полезных расширений могу отметить:
- Discord Presence — расширение, позволяющее отображать рабочую область и файл, в котором вы работаете в вашей игровой активности (функция работает только при использовании приложения Discord).
Идентификатор расширения: icrawl.discord-vscode
- Code runner — расширение, с помощью которого предоставляется возможность запускать определённые фрагменты кода.
Идентификатор расширения: 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
Вставляем в него следующий код:
{
"token" : "Ваш_токен",
"prefix" : "Ваш_префикс"
}
* Для получения токена зайдите на портал разработчиков, перейдите во вкладку «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Я не советую вам из привилегий выбирать только ADMINISTRATOR, поэтому лучше указать только те привилегии, которые бот действительно использует для корректной работы
Полезные и интересные команды
В предыдущем разделе я показал вам, как запустить бота и как писать для него команды.
Теперь я хочу поделиться с вами несколькими своими командами.
- !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)
- !heads_or_tails — игра «Орёл или Решка».
Код:
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: Монета упала ребром!') }
- !clear — удаление определённого количества сообщений.
Код:
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(`Удалено ${amount} сообщений!`) }) }; delete_messages(); // Вызов асинхронной функции
- !random_name — генерация случайного имени.
Не стоит пугаться большого кода, здесь всё предельно просто.
Код:
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 в ваше приложение, вам понадобятся токен бота (для настройки модуля) и ID канала, в который вы будете отправлять сообщения (для формы отправки).
Расскажем, как создать сервер, канал и бота Discord, а после добавить созданного бота на ваш сервер. О том, как настроить отправку сообщений на платформе AppMaster.io, можно прочитать в этой статье.
Создать сервер и канал, скопировать ID канала
Для начала вам нужно создать новый сервер в Discord (или получить права администратора на уже существующем). Откройте страницу вашей учетной записи Discord в браузере — так будет удобнее перемещаться между страницами настроек.
1. Нажмите на «+» на левой панели.
2. Выберите шаблон сервера в зависимости от вашей сферы или создайте собственный.
3. Укажите, для каких целей хотите его использовать.
4. Выберите изображение будущего сервера и укажите его название (1), затем нажмите Create. (2).
5. Сервер создан. По умолчанию в него уже добавлены два канала — текстовый и голосовой (1). Чтобы изменить настройки канала, нажмите значок шестеренки (2). Добавить новый канал можно, нажав на «+» рядом с названием раздела. Мы не будем создавать новый канал и для подключения нашего бота используем уже существующий канал general.
6. Теперь нужно получить ID выбранного канала. Для этого нужно сначала включить режим разработчика в настройках вашего профиля. Нажмите на значок шестеренки рядом с вашим никнеймом и фотографией.
7. Перейдите в раздел APP SETTINGS, на вкладку Advanced (1) и переместите селектор Developer mode — режим разработчика активируется (2).
8. Вернитесь из меню настроек и кликните по нужному каналу правой клавишей мыши (1), во всплывающем меню выберите Copy ID — идентификатор вашего канала будет скопирован (2). Сохраните его в любом текстовом документе, чтобы не возвращаться к этому шагу.
Создать бота и добавить его на сервер, скопировать токен бота
Чтобы создать бота, перейдите на специальную страницу Discord для разработчиков: https://discord.com/developers/. Откройте ее в соседней вкладке браузера, не выходя из вашей учетной записи Discord.
Сначала вам нужно создать приложение, затем в этом приложении создать бота и настроить для него разрешения, и только после этого — добавлять бота на сервер.
1. На вкладке Applications выберите New Application.
2. Введите название будущего приложения (1) и нажмите Create (2).
3. Приложение создано. Перейдите не вкладку Bot (1) и нажмите Add Bot, чтобы добавить нового бота.
4. Согласитесь добавить бота в ваше приложение.
5. Бот создан. На вкладке Bot отобразится вся информация о нем. Тут можно изменить его имя, добавить изображение и скопировать токен бота (1). Этот токен понадобится вам для настройки модуля Discord на платформе Appmaster.i. Каждый раз при внесении изменений портал разработчика будет предлагать вам сохранить их (2).
Сохраните токен бота, чтобы при последующей настройке не возвращаться к этому шагу.
6. Теперь перейдите на вкладку OAuth2 (1) — тут можно настроить разрешения и получить ссылку на вашего бота. В разделе SCOPES выберите bot(2), в BOT PERMISSIONS отметьте разрешения, которые хотите ему предоставить, в нашем случае — только отправка сообщений, поэтому выберите Send Message(3). После скопируйте автоматически сгенерированную Discord ссылку(4).
7. Вставьте скопированную ссылку в адресную строку браузера и перейдите по ней — откроется окошко вашего приложения. Выберите ваш сервер в раскрывающемся списке (1) и нажмите Continue (2).
8. Убедитесь, что приложению (а значит, и созданному в нем боту) даны только необходимые разрешения, после чего добавьте его на ваш сервер.
9. Теперь вернитесь на ваш сервер. Бот оставил приветственное сообщение — значит, что он успешно добавлен и функционирует.
Через AppMaster.io Studio подключить бота в приложение
Итак, все готово. Вы получили токен бота для модуля Discord и ID канала для формы отправки сообщения. Теперь перейдите в AppMaster.io Studio и настройте отправку сообщений из вашего приложения, следуя инструкции Модуль Discord: подключение бота и отправка сообщений.
Следите за нашим блогом и присоединяйтесь к чату комьюнити, чтобы узнавать о новостях платформы и новых статьях.
Всем привет, сегодня мы напишем Discord-бота на Python и discord.py + бонусом посмотрим на примеры ботов. Приступим 🙂
Перед работой
Перед тем, как начать, вам нужны:
- Python 3;
- discord.py;
- Discord-аккаунт и свой сервер.
Для установки discord.py воспользуйтесь пакетным менеджером:
pip3 install discord.py
Создаём нашего бота
Перейдите на Developer Portal и нажмите на New application.
Вы создали своё приложение, на странице приложение перейдите в Bot >> Add Bot и создайте своего Discord-бота.
Сохраните токен бота! Дальше он нам понадобится!
Если всё прошло успешно, поздравляю, половина дела сделана 😀
Добавление бота на сервер
Теперь можно добавить бота на сервер.
Перейдите в OAuth2 >> URL Generator, в Scopes выбираем Bot и ниже — права бота, копируем сгенерированный URL. Вставляем в браузер, и добавляем на наш сервер.
Эхо-бот
Напишем традиционного эхо-бота, и разберём каждую строчку кода.
Код:
import discord
from discord.ext import commands
config = {
'token': 'your-token',
'prefix': 'prefix',
}
bot = commands.Bot(command_prefix=config['prefix'])
@bot.event
async def on_message(ctx):
if ctx.author != bot.user:
await ctx.reply(ctx.content)
bot.run(config['token'])
Пример работы:
Разбор:
import discord
from discord.ext import commands
Нужные нам импорты.
config = {
'token': 'your-token',
'prefix': 'prefix',
}
Вспомогательный словарь config в котором храним токен и префикс команд (далее расскажу зачем нужен префикс команд).
bot = commands.Bot(command_prefix=config['prefix'])
Создаём нашего бота, в аргументе передаём префикс.
@bot.event
Декоратор, предназначенный для обработки событий, подробнее здесь.
async def on_message(ctx):
Создаём асинхронную функцию, с параметром ctx, представляет из себя сообщение.
if ctx.author != bot.user:
Проверка, не является ли автор сообщения нашим Discord-ботом. Дело в том, что если бот отправит сообщение, это будет новым событием, и тогда получается цикл.
await ctx.reply(ctx.content)
Отвечаем на сообщение (ctx.reply), в аргументы передаём сообщение (ctx.content).
bot.run(config['token'])
Запускаем нашего бота, в аргументы передаём токен бота.
Надеюсь вы разобрались с кодом, и мы можем переходить далее.
Обработка команд
Перед тем, как обрабатывать команды, нам пригодится наш префикс.
Рассмотрим код:
import random
import discord
from discord.ext import commands
config = {
'token': 'your-token',
'prefix': '$',
}
bot = commands.Bot(command_prefix=config['prefix'])
@bot.command()
async def rand(ctx, *arg):
await ctx.reply(random.randint(0, 100))
bot.run(config['token'])
Результат работы:
Разбор:
@bot.command()
Декоратор обработки команд
async def rand(ctx, *arg):
Асинхронная функция rand
await ctx.reply(random.randint(0, 100))
Отвечаем на сообщение, в аргументы передаём случайное число от 0 до 100
Бонус
Проверка роли:
import random
import discord
from discord.ext import commands
config = {
'token': 'your-token',
'prefix': '$',
}
bot = commands.Bot(command_prefix=config['prefix'])
@bot.command()
@commands.has_role("Хозяин")
async def rand(ctx, *arg):
await ctx.reply(random.randint(0, 100))
bot.run(config['token'])
Выгнать пользователя
import discord
from discord.ext import commands
config = {
'token': 'your-token',
'prefix': '$',
}
bot = commands.Bot(command_prefix=config['prefix'])
@bot.command()
async def kick(ctx, user : discord.User(), *arg, reason='Причина не указана'):
await bot.kick(user)
await ctx.send('Пользователь {user.name} был изгнан по причине "{reason}"')
bot.run(config['token'])
Содержание
- Создание приложения и авторизация бота
- Выбор среды разработки
- Вариант 1: Python и библиотека discord
- Шаг 1: Установка Python и библиотеки discord
- Шаг 2: Создание словаря бота
- Шаг 3: Создание тела бота
- Шаг 4: Запуск бота
- Вариант 2: JavaScript и discord.js
- Шаг 1: Установка Node.js и discord.js
- Шаг 2: Работа с файлами бота
- Шаг 3: Запуск бота
- Примеры полезных команд
В статье мы расскажем о том, как создается приложение для бота, выполняется первая авторизация на сервере и пишется общий код для нормализации работы. Имея «каркас», вы уже можете добавлять пользовательские команды и сразу проверять, как они работают.
Создание приложения и авторизация бота
Далее речь пойдет о двух разных методах создания бота — при помощи JavaScript и Python. Каждый из них имеет свои особенности и нюансы, но вот метод создания приложения и авторизации бота на сервере остается одинаков, поскольку не зависит от выбранного языка программирования. После этого вы сможете перейти к подбору библиотеки и работе с кодом.
Перейти на Discord Developer Portal
- Перейдите по ссылке выше, чтобы оказаться на главной странице портала для разработчиков в Discord. Используйте личные авторизационные данные для входа в аккаунт.
- Создайте новое приложение, нажав кнопку «New Application».
- Введите имя приложения и подтвердите его создание.
- Разверните меню сайта, щелкнув по кнопке с тремя горизонтальными линиями.
- Из появившегося списка выберите раздел настроек «Bot».
- Приступите к добавлению нового бота для данного приложения.
- Подтвердите отобразившееся уведомление, нажав «Yes, do it».
- По завершении сайт обновится и откроется страница бота, где вы можете изменить его название, скопировать токен или добавить иконку, которая будет отображаться и в Дискорде.
- Однако сейчас бот еще не отмечен таковым и для него не установлены разрешения, поэтому через то же самое меню перейдите в раздел «OAuth2».
- В списке «Scopes» отметьте галочкой «bot», обозначив тип созданного приложения.
- Найдите следующий блок — «Bot Permissions» и установите галочки напротив всех разрешений, которые вы хотите предоставить создаваемому боту.
- То же самое сделайте и с остальными типами разрешений, они соответствуют доступным непосредственно в Discord для ролей.
- Теперь бот готов для авторизации. На этой же странице найдите строку со ссылкой и скопируйте ее.
- Вставьте в адресную строку и перейдите по ней. В появившейся форме выберите сервер для авторизации. Если у вас еще нет собственного сервера, создайте его, а затем вернитесь к процессу подключения бота.
Подробнее: Создание сервера в Discord
- Ознакомьтесь со списком всех разрешений и нажмите на «Авторизовать».
- Осталось только подтвердить появившуюся на экране капчу.
- Откройте соответствующий сервер в Discord и убедитесь в том, что бот находится в списке участников. Пока что он еще офлайн, а запуск станет доступен после написания «тела» бота при помощи Python или JS, чем мы и займемся далее.
Выбор среды разработки
Перед началом работы с кодом в упомянутых языках программирования уточним, что вам понадобится установить текстовый редактор или специальную среду разработки, поддерживающую синтаксис Python или JavaScript (в зависимости от выбранного). Конечно, можно использовать просто «Блокнот», но по удобству он уступает специализированным программам. Просмотрите их списки в обзорах по следующим ссылкам и выберите для себя подходящий софт.
Подробнее:
Выбор среды разработки для программирования
Текстовые редакторы для Windows
Вариант 1: Python и библиотека discord
Если ранее вы не сталкивались с языками программирования или знакомы с ними только поверхностно, создание бота для Discord на Python — лучший выбор. Этот ЯП проще учится, компактный и имеет логически понятный синтаксис, поэтому идеально подходит новичкам. К тому же в сети есть огромное количество исходников с различными командами или уже готовыми ботами, которые ничего не мешает скопировать и использовать в своих целях. В следующих шагах вы узнаете, как создать «каркас» бота на Python и запустить его, чтобы проверить работу.
Шаг 1: Установка Python и библиотеки discord
По умолчанию в Windows нет встроенных функций и утилит, предназначенных для работы с Питоном, поэтому их придется установить отдельно, не забыв про подключаемую библиотеку discord, которая позволит взаимодействовать с полезными функциями и командами, связанными исключительно с Дискордом.
Перейти на официальный сайт Python
- Воспользуйтесь ссылкой выше, чтобы перейти на официальный сайт Python и нажмите кнопку для загрузки его последней версии.
- На новой странице отыщите инсталлятор для Windows и начните его загрузку.
- Дождитесь завершения скачивания и запустите установщик.
- Можно запустить установку без изменений, но обязательно отметьте галочкой «Add Python X.X to PATH», чтобы все переменные среды добавились автоматически и не возникло проблем при дальнейшем вводе команд.
- Ожидайте завершения установки и на всякий случай перезагрузите компьютер, чтобы все изменения вступили в силу.
- Откройте «Командную строку» удобным для вас способом, например, отыскав приложение в меню «Пуск».
- Напишите команду
pip install discord
и подтвердите ее нажатием клавиши Enter. - Начнется загрузка файлов и в консоли «побегут» строки. Не закрывайте данное окно до завершения скачивания.
- Как только появилась информация «Successfully installed», закрывайте «Командную строку» и переходите далее.
Если Python у вас установлен, но команда для добавления подключаемой библиотеки не работает, выполните обновление компонента PIP, о чем рассказывается в другой статье на нашем сайте. Там же вы найдете инструкцию и по изменению переменных среды, если этого не произошло во время установки.
Подробнее: Обновление PIP для Python
Шаг 2: Создание словаря бота
В этом варианте мы будем использовать словарь для бота, то есть конфигурационный файл, хранящий в разных именах значения токена, префикса и имени бота. Это существенно упрощает весь процесс написания кода и не заставляет каждый раз вспоминать данные приложения, чтобы ввести их в одной строке.
- Начните с запуска IDLE, отыскав добавленное приложение через меню «Пуск». Если вы скачали другую среду разработки, откройте ее и создайте новый проект на базе Python.
- После открытия нового окна вызовите меню «File» и выберите пункт «New File». Сделать это можно и при помощи комбинации клавиш Ctrl + N.
- В новом окне, которое и предназначено для написания кода, вставьте блок
settings = {
'token': 'Ваш токен',
'bot': 'Имя бота',
'id': Client ID бота, без кавычек,
'prefix': 'Префикс бота'
} - Теперь понадобится отыскать информацию для ее замены в словаре. Сначала найдите Client ID приложения на сайте разработчиков. Скопируйте его и замените в соответствующую строку.
- Вызовите меню и перейдите в раздел «Bot».
- Скопируйте его уникальный токен, щелкнув по специально отведенной для этого кнопке.
- Вставьте токен вместо надписи, сделайте то же самое с именем бота и используемым префиксом (префикс нужен для вызова команд и всегда идет перед ними, например
!play
, а вы можете заменить восклицательный знак на любые другие символы). - Как только вся информация была заменена, снова вызовите меню «File» и выберите вариант «Save As».
- Создайте отдельную папку для файлов бота, назовите этот как
config
и подтвердите сохранение.
Шаг 3: Создание тела бота
Для обеспечения базового функционирования бота ему нужно создать «тело» — основной код для запуска и работы на сервере. Понадобится отдельный файл, который можно назвать как угодно, но обязательно сохранить его в том же месте, где находится созданный ранее словарь.
- В среде разработки откройте меню «File» и создайте новый файл.
- Вставьте туда три команды, которые предназначены для импорта установленных библиотек и созданного ранее файла:
import discord
from discord.ext import commands
from config import settings - Добавьте строку
bot = commands.Bot(command_prefix = settings['prefix']) # Так как мы указали префикс в settings, обращаемся к словарю с ключом prefix
. - Основной код таков:
@bot.command() # Не передаём аргумент pass_context, так как он был нужен в старых версиях.
async def hello(ctx): # Создаём функцию и передаём аргумент ctx.
author = ctx.message.author # Объявляем переменную author и записываем туда информацию об авторе.
await ctx.send(f'Hello, {author.mention}!') # Выводим сообщение с упоминанием автора, обращаясь к переменной author
. - Обращайте внимание на комментарии, идущие после знака «#» — они позволят разобраться с предназначением каждой строки.
- Команда для запуска выглядит так:
bot.run(settings['token']) # Обращаемся к словарю settings с ключом token, для получения токена
. - По завершении снова откройте уже знакомое меню и перейдите к сохранению файла.
- Задайте для него любое название и поместите в папку с конфигом.
Далее вы видите полный код, о котором шла речь выше, поэтому при надобности просто можете скопировать его.
import discord
from discord.ext import commands
from config import settings
bot = commands.Bot(command_prefix = settings['prefix'])
@bot.command() # Не передаём аргумент pass_context, так как он был нужен в старых версиях.
async def hello(ctx): # Создаём функцию и передаём аргумент ctx.
author = ctx.message.author # Объявляем переменную author и записываем туда информацию об авторе.
await ctx.send(f'Hello, {author.mention}!') # Выводим сообщение с упоминанием автора, обращаясь к переменной author.
bot.run(settings['token']) # Обращаемся к словарю settings с ключом token, для получения токена
Дополнительно уточним, что вы можете использовать альтернативную схему, избавившись от файла со словарем и получив немного другое «тело» для бота. Решите, подходит ли вам этот код больше. Указанные строки с токеном нужно будет отредактировать под себя.
import discord
from discord.ext import commands
TOKEN = 'Ваш токен'
bot = commands.Bot(command_prefix='!')
@bot.command(pass_context=True) # разрешаем передавать аргументы
async def test(ctx, arg): # создаем асинхронную функцию бота
await ctx.send(arg) # отправляем обратно аргумент
bot.run(TOKEN)
Шаг 4: Запуск бота
Теперь можно запустить бота для проверки, для чего понадобится созданный в Шаге 3 основной файл. Скомпилируйте его прямо через среду разработки или вызовите «Командную строку» и введите там python bot.py
, где bot.py — название созданного файла. Если файл найти не удалось, укажите его полный путь, например python C:UsersUSER_NAMEbot.py
.
Перейдите в Дискорд и проверьте текущее состояние бота. Он должен отображаться в списке участников в разделе «В сети» вместе с зеленой точкой.
Воспользуйтесь открытыми источниками или собственными знаниями, чтобы написать команды для бота или реализовать другие задачи, которые он должен выполнять. Для этого редактируйте его основной файл или создавайте другие, связывая все в единый проект.
Вариант 2: JavaScript и discord.js
Следующий вариант создания бота для Discord — использование JS и подключаемой библиотеки discord.js, которая добавляет все необходимые компоненты для работы с ботами. Принцип действий отличается от предыдущего варианта лишь инструментами и разницей в синтаксисах языков программирования, но остается примерно таким же.
Шаг 1: Установка Node.js и discord.js
Расширить функциональность JS и превратить его в язык программирования общего назначения поможет платформа Node.js, установкой которой и рекомендуем заняться в первую очередь. Для этого выполните простейший алгоритм действий:
Перейти на официальный сайт Node.js
- Откройте страницу Node.js в интернете и выберите последнюю рекомендованную версию для скачивания.
- Дождитесь получения исполняемого файла и запустите его.
- Следуйте появившимся на экране инструкциям, завершите установку и перезагрузите компьютер.
- Раскройте «Пуск» и через поиск отыщите классическое приложение «Командная строка».
- В ней напишите команду
npm init
и активируйте ее нажатием Enter. - Создайте стандартный пакет с пользовательской информацией, нажимая Enter после ввода каждого параметра, или оставьте все по умолчанию.
- Когда все параметры пакета окажутся заданы, вы получите предупреждение, которое нужно подтвердить, снова нажав Enter.
- Введите команду
npm install
для установки недостающих стандартных компонентов. - Дождитесь завершения их загрузки и появления строки ввода.
- Напишите
npm install discord.js
. - Как только и эта команда выполнена, откройте папку своего пользователя и убедитесь в наличии созданных файлов пакета формата JSON.
Шаг 2: Работа с файлами бота
Все действия, связанные с файлами бота и программным кодом, рассмотрим в рамках одного этапа, поскольку делить их на несколько просто не имеет смысла. Вам понадобятся три основных файла, куда и вписываются все необходимые функции: один отвечает за конфигурацию бота, второй — за «тело», а третий хранит список добавленных команд.
- Для начала создайте файлы «bot.js» и «config.json» в одном каталоге.
- Откройте через текстовый редактор или среду разработки «config.json» и добавьте туда такие строки:
{
"token" : "Ваш_токен",
"prefix" : "Ваш_префикс"
}Соответственно, выражения в двойных кавычках замените на уникальный токен бота и предпочитаемый префикс.
- Откройте для редактирования файл «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;
Для дальнейшей работы с командами достаточно будет объявить их функции и пополнить список соответствующими блоками кода. На примере готовый файл «comms.js» выглядит так:
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;
Шаг 3: Запуск бота
Первые действия с ботом на JavaScript завершены, а значит, можно запустить его и проверить работу. Для этого вам понадобится выполнить следующее:
- Откройте меню «Пуск» через поиск отыщите «Командную строку» и запустите ее.
- Введите
node bot.js
, где bot.js — название основного файла с кодом для бота. Если он находится не в вашей домашней папке, указывайте полный путь к файлу или сначала перейдите к расположению, используя командуcd
.
Примеры полезных команд
В завершение этого варианта вкратце расскажем о двух полезных командах, которые могут пригодиться при настройке бота. Их можно использовать в качестве тестовых, когда работа над проектом еще находится на стадии развития. Первая команда — !clear
— удаляет указанное количество сообщений в чате. Ее код выглядит следующим образом:
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 {
mess.channel.bulkDelete(messages)
mess.channel.send(`Удалено ${amount} сообщений!`)
})
};
delete_messages(); // Вызов асинхронной функции
Вторая команда предназначена для подбрасывания монетки и запускается путем ввода !heads_or_tails
в чате. Здесь код не такой сложный, поскольку действий мало и бот должен откликнуться всего на один запрос без огромного количества переменных.
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: Монета упала ребром!')
}
В интернете вы можете найти другие полезные команды, которые хотите включить в своего бота, однако для работы с ними все же понадобятся продвинутые знания в JavaScript или Python, чтобы самостоятельно исправлять ошибки или редактировать код под себя.
Пользователи часто спрашивают, как создать бота в Дискорде и тем самым получить программу с необходимыми функциями. Сразу отметим, что достижение такой цели — непростая задача, а реализовать ее можно несколькими способами, к примеру, на основе discord.js, на Python или с помощью программы Discord Bot Maker.
Как создать Дискорд-бота на основе discord.js
На практике API Discord представляет собой удобный инструмент, позволяющий создать, а впоследствии использовать бота. С его помощью легко разработать помощника для решения разных задач, а далее задать необходимый набор команд. Для примера рассмотрим общий алгоритм создания бота для музыки. При правильном подходе он сможет проигрывать, пропускать и останавливать музыкальные файлы. Кроме того, в его функции будет входить поддержка очереди на проигрывание мелодии.
Выполните следующие шаги:
- Войдите на сайт discord.com/developers/applications/.
- Жмите на кнопку New Application.
- Введите название будущего бота Дискорд, к примеру, Music Bot.
- Перейдите на вкладку Bot, а после жмите на кнопку Add Bot.
Этих действий достаточно, чтобы создать бота Дискорд, после чего нужно его добавить на сервер с помощью OAuth2 URL-генератора. Сделайте следующие шаги:
- Переместитесь в раздел OAuth2 и выберите Bot в панели Scopes.
- Укажите необходимые разрешения для проигрывания музыки и чтения.
- Копируйте созданный URL и вставьте его в веб-проводник.
- Выберите сервер, куда нужно добавить URL.
- Жмите на кнопку авторизации (Authorize).
На следующем этапе нужно создать проект с применением терминала. Для этого создайте директорию и перейдите ее с помощью следующих команд — mkdir musicbot && cd musicbot. Далее сделайте следующее:
- Создайте модули проекта с применением nmp init.
- Ответьте на несколько вопросов, которые необходимы, чтобы создать бота в Дискорд.
- Сделайте два файла, где будет вестись работа — touch index.js && touch config.json.
- Откройте проект в редакторе, к примеру, с помощью VS Code с применением приказа code.
- Установите группу зависимостей, необходимых для дальнейшей работы — npm install discord.js ffmpeg-binaries opusscript ytdl-core –save.
- Продолжите создание файла на config.json. На этом этапе сохраните префикс и токен для бота.
{
«prefix»: «!»,
«token»: «your-toke»
}
- Войдите на портал создания Дискорд и копируйте токен из раздела Bot (жмите на кнопку Copy).
Теперь нужно создать код javascript. Для этого копируйте следующие зависимости:
const Discord = require(‘discord.js’);
const {
prefix,
token,
} = require(‘./config.json’);
const ytdl = require(‘ytdl-core’);
После этого нужно создать с применением токена клиент и логин.
const client = new Discord.Client();
client.login(token);
Далее добавьте несколько listeners, которые выполняют console.log при пуске.
client.once(‘ready’, () => {
console.log(‘Ready!’);
});
client.once(‘reconnecting’, () => {
console.log(‘Reconnecting!’);
});
client.once(‘disconnect’, () => {
console.log(‘Disconnect!’);
});
После этого начните работать с ботом Дискорд с применением node. Важно, чтобы вновь созданный Discord-бот был онлайн. В консоли появится Ready!. Команда — node index.js.
Задание команд для бота Дискорд
Теперь остается задать необходимые команды.
Для чтения сообщений
Чтобы Дискорд-бот мог читать, напишите функцию.
client.on(‘message’, async message => {
}
Далее сделайте listener для massage-события, получите сообщение и сохраните его в massage. Если информация пришла от бота Дискорд, игнорируйте ее. Выполните проверку с помощью следующей команды.
if (message.author.bot) return;
Если сообщение вернулось, значит, его смог создать бот. Теперь проверьте, с какого префикса оно начинается.
if (!message.content.startsWith(prefix)) return;
Далее проверьте команду, которую нужно активировать. Используйте следующие команды.
if (message.content.startsWith(`${prefix}play`)) {
execute(message, serverQueue);
return;
} else if (message.content.startsWith(`${prefix}skip`)) {
skip(message, serverQueue);
return;
} else if (message.content.startsWith(`${prefix}stop`)) {
stop(message, serverQueue);
return;
} else {
message.channel.send(‘You need to enter a valid command!’)
}
После получения списка команд, которые можно запустить, переходите к их созданию.
Добавление песен
Здесь нужна гильдия, песня и библиотека ytdl (должна быть установлена заранее). Сделайте map с названием очереди, где будут храниться песни.
const queue = new Map();
Теперь создайте async0-функцию с названием execute и убедитесь, находится ли пользователь в чате, и имеется ли необходимое разрешение. При его отсутствии пишете сообщение об ошибке.
async function execute(message, serverQueue) {
const args = message.content.split(‘ ‘);
const voiceChannel = message.member.voiceChannel;
if (!voiceChannel) return message.channel.send(‘You need to be in a voice channel to play music!’);
const permissions = voiceChannel.permissionsFor(message.client.user);
if (!permissions.has(‘CONNECT’) || !permissions.has(‘SPEAK’)) {
return message.channel.send(‘I need the permissions to join and speak in your voice channel!’);
}
}
Перейдите к получению данных о песне и сохраните ее в song. Для этого потребуется ytdl-библиотека, получающая данные по ютуб-ссылке.
const songInfo = await ytdl.getInfo(args[1]);
const song = {
title: songInfo.title,
url: songInfo.video_url,
};
Необходимые данные сохраняются в song. Теперь нужно создать контракт, обеспечивающий добавление в очередь. Проверьте факт определения serverQueue (проигрывание музыки), а после отправьте сообщение о достижении результата. Если это не удалось сделать, нужно его создать и соединиться с голосовым каналом и начать играть песню.
if (!serverQueue) {
}else {
serverQueue.songs.push(song);
console.log(serverQueue.songs);
return message.channel.send(`${song.title} has been added to the queue!`);
}
В раздел serverQueue, если он пустой, добавьте трек. В случае, когда serverQueue имеет параметр null, сделайте контракт.
// Creating the contract for our queue
const queueContruct = {
textChannel: message.channel,
voiceChannel: voiceChannel,
connection: null,
songs: [],
volume: 5,
playing: true,
};
// Setting the queue using our contract
queue.set(message.guild.id, queueContruct);
// Pushing the song to our songs array
queueContruct.songs.push(song);
try {
// Here we try to join the voicechat and save our connection into our object.
var connection = await voiceChannel.join();
queueContruct.connection = connection;
// Calling the play function to start a song
play(message.guild, queueContruct.songs[0]);
} catch (err) {
// Printing the error message if the bot fails to join the voicechat
console.log(err);
queue.delete(message.guild.id);
return message.channel.send(err);
}
Проигрывание трека
Теперь нужно создать опцию play для бота Дискорд с параметрами гильдия и песня, а также проверкой объекта song.
function play(guild, song) {
const serverQueue = queue.get(guild.id);
if (!song) {
serverQueue.voiceChannel.leave();
queue.delete(guild.id);
return;
}
}
Если да, нужно уйти с голосового канала и удалить очередь.
Далее трек играет с применением URL и playStream.
const dispatcher = serverQueue.connection.playStream(ytdl(song.url))
.on(‘end’, () => {
console.log(‘Music ended!’);
// Deletes the finished song from the queue
serverQueue.songs.shift();
// Calls the play function again with the next song
play(guild, serverQueue.songs[0]);
})
.on(‘error’, error => {
console.error(error);
});
dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);
Здесь создается stream, а его URL передается адресу песни.
Пропуск трека
Здесь оформите завершение диспетчера, который был сделан в опции play. Такое действие необходимо, чтобы начал играть очередной трек.
function skip(message, serverQueue) {
if (!message.member.voiceChannel) return message.channel.send(‘You have to be in a voice channel to stop the music!’);
if (!serverQueue) return message.channel.send(‘There is no song that I could skip!’);
serverQueue.connection.dispatcher.end();
}
Здесь проверяется, есть ли пользователь в голосовом канале, и имеется ли трек для пропуска.
Остановка
Опция stop подразумевает очистку массива song, удаления очереди и выхода из чата.
function stop(message, serverQueue) {
if (!message.member.voiceChannel) return message.channel.send(‘You have to be in a voice channel to stop the music!’);
serverQueue.songs = [];
serverQueue.connection.dispatcher.end();
}
Полный код бота для Дискорд
const Discord = require(‘discord.js’);
const {
prefix,
token,
} = require(‘./config.json’);
const ytdl = require(‘ytdl-core’);
const client = new Discord.Client();
const queue = new Map();
client.once(‘ready’, () => {
console.log(‘Ready!’);
});
client.once(‘reconnecting’, () => {
console.log(‘Reconnecting!’);
});
client.once(‘disconnect’, () => {
console.log(‘Disconnect!’);
});
client.on(‘message’, async message => {
if (message.author.bot) return;
if (!message.content.startsWith(prefix)) return;
const serverQueue = queue.get(message.guild.id);
if (message.content.startsWith(`${prefix}play`)) {
execute(message, serverQueue);
return;
} else if (message.content.startsWith(`${prefix}skip`)) {
skip(message, serverQueue);
return;
} else if (message.content.startsWith(`${prefix}stop`)) {
stop(message, serverQueue);
return;
} else {
message.channel.send(‘You need to enter a valid command!’)
}
});
async function execute(message, serverQueue) {
const args = message.content.split(‘ ‘);
const voiceChannel = message.member.voiceChannel;
if (!voiceChannel) return message.channel.send(‘You need to be in a voice channel to play music!’);
const permissions = voiceChannel.permissionsFor(message.client.user);
if (!permissions.has(‘CONNECT’) || !permissions.has(‘SPEAK’)) {
return message.channel.send(‘I need the permissions to join and speak in your voice channel!’);
}
const songInfo = await ytdl.getInfo(args[1]);
const song = {
title: songInfo.title,
url: songInfo.video_url,
};
if (!serverQueue) {
const queueContruct = {
textChannel: message.channel,
voiceChannel: voiceChannel,
connection: null,
songs: [],
volume: 5,
playing: true,
};
queue.set(message.guild.id, queueContruct);
queueContruct.songs.push(song);
try {
var connection = await voiceChannel.join();
queueContruct.connection = connection;
play(message.guild, queueContruct.songs[0]);
} catch (err) {
console.log(err);
queue.delete(message.guild.id);
return message.channel.send(err);
}
} else {
serverQueue.songs.push(song);
console.log(serverQueue.songs);
return message.channel.send(`${song.title} has been added to the queue!`);
}
}
function skip(message, serverQueue) {
if (!message.member.voiceChannel) return message.channel.send(‘You have to be in a voice channel to stop the music!’);
if (!serverQueue) return message.channel.send(‘There is no song that I could skip!’);
serverQueue.connection.dispatcher.end();
}
function stop(message, serverQueue) {
if (!message.member.voiceChannel) return message.channel.send(‘You have to be in a voice channel to stop the music!’);
serverQueue.songs = [];
serverQueue.connection.dispatcher.end();
}
function play(guild, song) {
const serverQueue = queue.get(guild.id);
if (!song) {
serverQueue.voiceChannel.leave();
queue.delete(guild.id);
return;
}
const dispatcher = serverQueue.connection.playStream(ytdl(song.url))
.on(‘end’, () => {
console.log(‘Music ended!’);
serverQueue.songs.shift();
play(guild, serverQueue.songs[0]);
})
.on(‘error’, error => {
console.error(error);
});
dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);
}
client.login(token);
Как создать бота в Дискорд на Python
Еще один способ — сделать Дискорд бота на Python. Общий алгоритм действий следующий:
- Установите текстовый редактор.
- Подготовьте Python 3.4.2+ и Pip3 (менеджер пакетов, необходимый для установки библиотек).
- Создайте пустой файл с названием, к примеру, chatbot.py.
- Откройте его с помощью текстового редактора и вставьте код. Для его написания необходимо владеть языком Python.
- Пример кода — gist.github.com/Tetraquark/911eb07052be10f0bb1323adb4056f86.
- Поменяйте значение переменной DISCORD_BOT_TOKEN, где нужно сохранить токен бота. Для получения информации перейдите по ссылке discord.com/developers/applications, выберите нужный бот Дискорд или создайте новый, а после жмите на clich to reveal, где откроется токен приложения. Занести его в переменную DISCORD_BOT_TOKEN.
- Сохраните файл и запустите бот Дискорд.
Для выполнения указанной выше работы необходимо обладать определенным набором знаний.
Применение Discord Bot Maker
Как вариант, можно создать бота с помощью Discord Bot Maker. Это мощный инструмент, позволяющий сделать помощника, умеющего отправлять файлы, генерировать и отправлять сообщения, манипулировать эмодзи, редактировать изображения и т. д.
Чтобы создать Дискорд-бота, сделайте следующее:
- Скачайте и установите утилиту.
- Жмите на кнопку создания бота.
- Установите необходимые команды.
- Сохраните и запустите bot для Дискорд
Процесс создания интуитивно понятен, поэтому не будем останавливаться на нем подробнее.
Итоги
Теперь вы знаете, как сделать своего бота Discord, и что потребуется для решения задачи. Для этого нужно иметь определенные навыки программирования или, как вариант, использовать Discord Bot Maker. Если у вас нет лишнего времени, лучше скачать готового помощника и пользоваться его возможностями.
Из этого туториала Вы узнаете, как полностью создать собственного бота Discord в облаке.
Вам не нужно ничего устанавливать на свой компьютер, и вам не нужно ничего платить за размещение своего бота.
Мы будем использовать целый ряд инструментов, в том числе Discord API, библиотеки Python, и платформы облачных вычислений под названием Repl.it.
Как создать учетную запись Discord Bot
Чтобы работать с библиотекой Python и API Discord, мы должны сначала создать учетную запись Discord Bot.
Вот шаг к созданию учетной записи Discord Bot.
1. Убедитесь, что вы вошли на сайт Discord.
2. Перейдите на страницу приложения.
3. Щелкните кнопку «Новое приложение».
4. Дайте приложению имя и нажмите «Создать».
5. Перейдите на вкладку «Бот» и нажмите «Добавить бота». Вам нужно будет подтвердить действие, нажав «Yes, do it!»
Оставьте настройки по умолчанию для Public Bot и Require OAuth2 Code Grant.
Ваш бот создан. Следующим шагом будет копирование токена.
Этот токен является паролем вашего бота, поэтому не сообщайте его никому. Это может позволить кому-то войти в ваш бот и делать разные плохие вещи.
Вы можете регенерировать токен, если он случайно станет доступен.
Как пригласить вашего бота присоединиться к серверу
Теперь вам нужно подключить своего пользователя-бота к серверу. Для этого вы должны создать для него URL-адрес приглашения.
Перейдите на вкладку «OAuth2». Затем выберите «бот» в разделе «scopes».
Теперь выберите нужные разрешения для бота. Наш бот будет в основном использовать текстовые сообщения, поэтому нам не нужно много разрешений. Вам может потребоваться больше, в зависимости от того, что вы хотите, чтобы ваш бот делал. Будьте осторожны с разрешением «Администратор».
После выбора соответствующих разрешений нажмите кнопку «Copy» над разрешениями. Это скопирует URL-адрес, который можно использовать для добавления бота на сервер.
Вставьте URL-адрес в свой браузер, выберите сервер, на который будет приглашен бот, и нажмите «Авторизовать».
Чтобы добавить бота, вашей учетной записи необходимы разрешения «Управление сервером».
Теперь, когда вы создали пользователя-бота, мы начнем писать код Python для бота.
Как написать код для базового бота Discord с помощью библиотеки discord.py
Мы будем использовать библиотеку Python discord.py, чтобы написать код для бота. discord.py — это оболочка API для Discord, которая упрощает создание бота Discord на Python.
Как создать реплику и установить disocrd.py
Вы можете разработать бота на своем локальном компьютере с помощью любого редактора кода. Однако в этом уроке мы будем использовать Repl.it, потому что это упростит всем пользователям следовать его указаниям. Repl.it — это онлайн-среда IDE, которую вы можете использовать в своем веб-браузере.
Создайте новый Repl и выберите «Python» в качестве языка.
Чтобы использовать библиотеку discord.py, просто напишите import discord
вверху main.py
. Repl.it автоматически установит эту зависимость, когда вы нажмете кнопку «Run».
Если вы предпочитаете кодировать бота локально, вы можете использовать эту команду в MacOS для установки discord.py:
python3 -m pip install -U discord.py
Возможно, вам придется использовать pip3
вместо pip
.
Если вы используете Windows, вы должны вместо этого использовать следующую строку:
py -3 -m pip install -U discord.py
Как настроить события Discord для вашего бота
discord.py вращается вокруг концепции событий. Событие — это то, что вы слушаете, а затем реагируете. Например, когда происходит сообщение, вы получаете событие об этом, на которое можете ответить.
Сделаем бота, который отвечает на конкретное сообщение. Этот простой код бота вместе с объяснением кода взят из документации discord.py. Позже мы добавим в бота дополнительные функции.
Добавьте этот код в main.py. (Вы можете назвать файл как-нибудь иначе, только не discord.py.) Я вскоре объясню, что делает весь этот код.
import discord
import os
client = discord.Client()
@client.event
async def on_ready():
print('We have logged in as {0.user}'.format(client))
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.content.startswith('$hello'):
await message.channel.send('Hello!')
client.run(os.getenv('TOKEN'))
Когда вы создали своего пользователя-бота в Discord, вы скопировали токен. Теперь мы собираемся создать файл .env
для хранения токена. Если вы запускаете свой код локально, вам не нужен файл .env
. Просто замените os.getenv('TOKEN')
токеном.
.env
файлы используются для объявления переменных среды. На Repl.it большинство создаваемых вами файлов видны всем, но .env
файлы видны только вам. Другие люди, просматривающие публичный ответ, не смогут увидеть содержимое файла .env
.
Поэтому, если вы разрабатываете на Repl.it, включайте в файл .env
только личную информацию, такую как токены или ключи.
Нажмите кнопку «Добавить файл» и создайте файл с именем .env
.
Внутри файла добавьте следующую строку, включая ваш фактический токен, который вы скопировали ранее:
Теперь давайте рассмотрим, что делает каждая строка в коде вашего бота Discord.
- Первая строка импортирует библиотеку discord.py.
- Вторая строка импортирует библиотеку os, но она используется только для получения переменной
TOKEN
из файла.env
. Если вы не используете.env
файл, эта строка вам не нужна. - Затем мы создаем экземпляр
Client
. Это связь с Discord. - Декоратор
@client.event()
используется для регистрации события. Это асинхронная библиотека, поэтому все делается с помощью обратных вызовов. Обратный вызов — это функция, которая вызывается, когда происходит что-то еще. В этом коде событиеon_ready()
вызывается, когда бот готов к использованию. Затем, когда бот получает сообщение, вызывается событиеon_message()
. - Триггер событий каждый раз вызывает
on_message()
, когда принимается сообщение, но мы не хотим, что-то делать, если сообщение от самих себя. Поэтому, еслиMessage.author
это то же самое, что иClient.user
, просто делаем return. - Затем мы проверяем
Message.content
, начинается ли с'$hello'
. Если да, то бот отвечает'Hello!'
в канал, в котором он использовался. - Теперь, когда бот настроен, последняя строка запускает бот с токеном входа. Он получает токен из файла
.env
.
У нас есть код для бота, поэтому теперь нам просто нужно его запустить.
Как запустить бота
Теперь нажмите кнопку запуска вверху, чтобы запустить своего бота в repl.it.
Если вы пишете бота локально, вы можете использовать эти команды в терминале для запуска бота:
В Windows:
В других системах:
Теперь перейдите в свою комнату в Discord и введите «$hello». Ваш бот должен ответить «Hello!».
Как улучшить бота
Теперь, когда у нас есть базовый бот, мы его улучшим. Не зря он называется «Encourage Bot».
Этот бот будет отвечать сообщением ‘Hello!’ всякий раз, когда кто-то отправляет сообщение, содержащее грустное или удручающее слово.
Любой желающий сможет добавить ободряющие сообщения для использования бота, а отправленные пользователем сообщения будут храниться в базе данных Repl.it.
Бот также вернет случайную вдохновляющую цитату из API, когда кто-то наберет в чате сообщение «$inspire».
Мы начнем с добавления функции «$inspire».
Как добавить в бота вдохновляющие цитаты
Мы будем получать вдохновляющие цитаты из API под названием zenquotes.io. Нам нужно импортировать еще пару модулей Python, добавить функцию get_quote()
и обновить код нашего бота, чтобы вызвать функцию.
Вот обновленный код. После кода я объясню новые части.
import discord
import os
import requests
import json
client = discord.Client()
def get_quote():
response = requests.get("https://zenquotes.io/api/random")
json_data = json.loads(response.text)
quote = json_data[0]['q'] + " -" + json_data[0]['a']
return(quote)
@client.event
async def on_ready():
print('We have logged in as {0.user}'.format(client))
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.content.startswith('$inspire'):
quote = get_quote()
await message.channel.send(quote)
client.run(os.getenv('TOKEN'))
Теперь нам нужно импортировать модуль requests
. Этот модуль позволяет нашему коду делать HTTP-запрос для получения данных из API. API возвращает JSON, и модуль json
упрощает работу с возвращенными данными.
Функция get_quote()
очень проста. Во-первых, она использует модуль запросов для запроса данных из URL-адреса API. API возвращает случайную вдохновляющую цитату. Эту функцию можно легко переписать для получения котировок из другого API, если текущий перестанет работать.
Затем внутри функции мы используем json.loads()
для преобразования ответа API в JSON. Методом проб и ошибок я понял, как перевести цитату из JSON в нужный строковый формат. Цитата возвращается из функции в виде строки.
Последняя часть кода обновляется ближе к концу. Ранее он искал сообщение, которое начиналось с «$hello». Теперь он ищет «$inspire». Вместо того, чтобы возвращать «Hello!», Он получает цитату quote = get_quote()
и возвращает цитату.
На этом этапе вы можете запустить свой код и попробовать его.
Как добавить в бота обнадеживающие сообщения
Теперь мы реализуем функцию, при которой бот отвечает обнадеживающими сообщениями, когда пользователь отправляет сообщение с грустным словом.
Как добавить грустные слова в бота
Для начала нам нужно создать список Python, содержащий грустные слова, на которые будет отвечать бот.
Добавьте следующую строку после создания переменной client
:
sad_words = ["sad", "depressed", "unhappy", "angry", "miserable"]
Не стесняйтесь добавлять в список больше слов.
Как добавить в бота обнадеживающие сообщения
Теперь мы добавим список ободряющих сообщений, которыми бот ответит.
Добавьте следующий список после созданного вами списка sad_words
:
starter_encouragements = [
"Cheer up!",
"Hang in there.",
"You are a great person / bot!"
]
Как и раньше, не стесняйтесь добавлять в список другие фразы по вашему выбору. Сейчас я использую всего три элемента, потому что позже мы добавим возможность пользователям добавлять больше ободряющих фраз для использования ботом.
Как отвечать на сообщения
Теперь нам нужно обновить нашего бота, чтобы он использовал два созданных нами списка. Во-первых, импортируйте модуль random
, потому что бот будет случайным образом выбирать сообщения из списка. Добавьте следующую строку в операторы импорта в верхней части кода:
Теперь мы обновим функцию on_message()
, чтобы проверять все сообщения, чтобы увидеть, содержат ли они слово из списка sad_words
. Если будет найдено грустное слово, бот отправит случайное сообщение из списка.
Вот обновленный код:
async def on_message(message):
if message.author == client.user:
return
msg = message.content
if msg.startswith('$inspire'):
quote = get_quote()
await message.channel.send(quote)
if any(word in msg for word in sad_words):
await message.channel.send(random.choice(starter_encouragements))
Это хорошее время для тестирования бота. Теперь вы знаете достаточно, чтобы создать собственного бота.
⛔ DEPRECATED
discordbotstut
Начнём. Ссылка на мой youtube канал.
Discord bot туториал. Туториал по созданию ботов для дискорда на node.js используя discord.js.
Creation date : 06.12.2019
Также отдельное спасибо Top Bots List и его создателю Angrymoyse#0444 за помощь в написании.
Установка node.js.
Давайте начнём создание бота. Если у вас установлена node.js, то пропустите сделающие 2 строчки.
Заходим на сайт node.js, скачиваем, устанавливаем. Скриншотов процесса установки нету, тк переустанавливать node.js нету желания. Но там всё интуитивно понятно.
Создание файлов, инициализация проекта, установка библиотек.
Создаём папку bot. Желательно не использовать кирилицу, юникод и т. п. в названии.
Сразу же создаём файл index.js или bot.js. Это не несёт особого смысла. Можно назвать как угодно, но принятно index.js / bot.js.
Это будет главный файл бота, т.е. первым запускается, в нём основной код бота.
Далее открываем консоль / терминал если у вас linux.
Для быстрого открытия консоли на windows можно нажать WIN + R, ввести cmd.
Далее переходим в папку бота, думаю как это сделать через консоль всем понятно. Пишим :
npm init — инициализация проекта.
Жмём enter до конца. Если ошибка в package name, то напишите bot.
npm i discord.js — установка библиотеки discord.js.
Редакторы кода.
Далее рекомендую установить один из следующих редакторов кода :
Atom.
VScode.
WebStorm (спасибо за подсказку Mice V 4.4.4#0444 )
Если очень слабый компьюер можете поставить notepad++, но это для постоянной основы не самый хороший вариант.
Лично я использую Atom.
Аккаунт бота.
Вы можете зарегистрировать его на сайте discord developers.
Жмём кнопку «New Application». Вводим название бота. Жмём «Create».
Переходим во вкладку «Bot», нажимаем «Add Bot», затем «Yes, do it!»
Находим строку «token», немного ниже есть кнопка «Copy», нажимаем. Теперь в вашем буфере обмена есть токен бота.
Код.
Начало.
Создадим первый код. Пишем :
const Discord = require("discord.js"); //Подключаем discord.js для дальнейшего использования. const client = new Discord.Client(); client.login("token"); //Где token пишем токен бота.
Запуск.
Открываем консоль, переходим в папку проекта и пишем :
node название-файла-с-кодом.js
в зависимости от названия файла.
Если у вас windows, то вы можете создать файл start.bat с текстом
node название-файла-с-кодом.js
pause
Если линукс, то вы можете создать файл start.sh
node название-файла-с-кодом.js
Это будет запускать бота. Далее я не буду говорить про запуск. Делайте это сами.
Конфиг.
Создаем файл config.json
с конфигурацией нашего бота.
{ "version" : "1.0", "prefix" : "!" }
В начале кода бота напишем :
const config = require("./config.json");
Еще вы можете создать конфиг прямо в коде бота.
let config ={ "version" : "1.0", "prefix" : "!" }
Но второй вариант крайне не рекомендуется использовать, ведь для того что-бы изменить конфиг бота нам придется изменять его код.
Реагирование на сообщение.
Теперь давайте делать что-то когда приходит новое сообщение.
Например логировать его текст.
client.on("message", message => { //Пришло сообщение. console.log(message.content); //console.log логирует в консоль, message - объект сообщения, message.content - строка объекта с текстом сообщения. })
Получение информации о авторе сообщения (отправителе).
Давайте залогируем тег автора.
client.on("message", message => { //Пришло сообщение. console.log(message.author.tag); //message.author.tag содержит в себе тег автора. })
Команда !ping
Давайте в ответ на сообщение !ping отправлять такое сообщение : «@user, мой пинг равен » далее пинг.
client.on("message", message => { //Пришло сообщение. if(message.content.toLowerCase()==config.prefix + "ping") //Если текст сообщения равен префиксу плюс ping, то происходит код в {} Часть кода .toLowerCase() превращает текст в строчный. (Делает из заглавных букв обычные.) { message.reply("мой пинг равен " + client.ping) //message.reply отвечает на сообщение. //Также можно использовать message.channel.send(message.author + ", мой пинг равен " + client.ping); } })
Также можно писать не
if(message.content.toLowerCase()==config.prefix + "ping")
А
if(message.content.toLowerCase().startsWith(config.prefix + "ping"))
.startsWith проверят начинается ли строка с символов в аргументах.
Об отправке сообщений.
Теперь рассмотрим message.channel.send();
Когда я только начинал программировать я не понимал смысл этой фразы, но сейчас понимаю и могу рассказать вам. message — объект сообщения, в нём есть channel — канал в который было отправлено, то есть с помощью message.channel мы получаем канал, а .send() отправляет туда сообщение.
client.on("message", message => { //Пришло сообщение. if(message.content.toLowerCase()==config.prefix + "test") { message.channel.send("I am working now!"); } })
Также можно отправлять сообщение по ID канала.
Делается это так :
//some code...
client.channels.get('ID канала').send("Hi!");
client.channels — все каналы которые есть на серверах с ботом.
.get(‘ID’) получает канал из них по ID.
.send(«Text»); Отправляет сообщение.
ID канала можно получить используя devepoer mode
Eval.
Также даже начинающим программистам будет очень полезна в боте команда !eval для выполнения кода не пиша его в коде бота, т.е. вы пишите !eval какой-то код
и бот выполняет этот код.
Я нашёл хороший туториал по этой команде на github. Рекомендую ознакомиться и взять себе команду в код бота. Принцип её работы мы разберём позже. Тык.
RichEmbed.
Пример.
Думаю вы все видели как боты отправляют сообщения такого типа.
Это называется RichEmbed (Embed).
Давайте отправим простой эмбед похожий на данный. (Картинка ниже)
Команда.
Для этого создадим новую команду !ping
.
client.on("message", message => { //Пришло сообщение. if(message.content.toLowerCase()==config.prefix + "ping") //Выше было { let embed = new Discord.RichEmbed() //Создаём новый эмбед. .setTitle('Пинг бота.') //Устанавливаем заголовок. .setColor(`GREEN`) //Цвет зелёный. Можно указать hex. .setDescription("Пинг : " + client.ping); //Устанавливаем описание. message.channel.send(embed); //Отправляем. } })
Параметры.
В Embed есть много различных параметров, вы можете прочесть их далее, либо посмотреть на оффициальном сайте discord.js
embed.setColor("Цвет в hex или один из встроенных."); // Устанавливает цвет боковой полосы. embed.setDescription("Описание") //Устанавливает описание. embed.serFooter("Подпись") //Устанавливает подпись мелким шрифтом под эмбедом. embed.setThumbnail("url") //Миниатюра эмбеда. embed.setAuthor("Имя", "Url") //Устанавливает автора. embed.addField("Заголовок", "Текст") //Добавляет поле. embed.setImage("URL") //Добавляет картинку.
Пример.
Команда !avatar
.
client.on("message", message => { //Пришло сообщение. if(message.content.toLowerCase().startsWith(config.prefix + "avatar")) //Выше было { let mb = message.mentions.members.first() || message.member; // Если есть упомянание человека в сообщении, то берём его, если нету, то себя. Расскажу чуть позже. let color = mb.displayHexColor; //Цвет самой высокой роли человека, если цвет невидимый то самой высокой отображаемой роли. if (color == '#000000') color = mb.hoistRole.hexColor;//Цвет самой высокой роли человека. let embed = new Discord.RichEmbed() //Создаём эмбед .setImage(mb.user.avatarURL) //Устанавливаем картинку - аватар человека. .setColor(color) //Цвет. .setFooter("Аватар пользователя " + mb.user.tag); //Устанавливаем в подпись чей это аватар. message.channel.send({embed}); //Отправляем. } })
Вышло так
Команда !userinfo
.
Давайте сделаем команду для получения информации о пользователе. Команда взята из моего бота.
Будем использовать библиотеку moment.js
, устанавливаем npm i moment.js
const status = { //Создадим переменную со статусами чтобы они были не английском. "online": "Онлайн.", "idle": "Не на месте.", "dnd": "Не беспокоить.", "offline": "Оффлайн." } let mbr = message.mentions.members.first() || message.member; //Если есть упомянание, то mbr = тот кого упомянули, если нету то автору сообщения. if (mbr){ //Если всё ок. let embed = new Discord.RichEmbed() //Создаём эмбед .setAuthor(mbr.user.tag, mbr.user.avatarURL) //Устанавливаем автора .setColor(`GREEN`) //Цвет зелёный .setTitle("Тег") //Устанавливаем заголовок .setDescription(mbr.user.tag) //Описание - тег юзера. .addField("ID", mbr.user.id) //Первое поле - айди автора. .addField("Никнейм", mbr.nickname !== null ? mbr.nickname : "No nickname") //Второе поле - никнейм (НЕ ПУТАТЬ С НИКОМ И ТЕГОМ)! .addField("Статус", status[mbr.user.presence.status]) //Статус человека .addField("Играет в ", mbr.user.presence.game ? mbr.user.presence.game.name : "Ничего") //Во что играет .addField("Присоединился", moment(mbr.joinedAt).format('MMMM Do YYYY h:mm:ss')) //Когда зашёл на сервер .addField("Аккаунт создан", mbr.user.createdAt.toLocaleString()) //Когда создан аккаунт .addField("Роли на сервере", mbr.roles.filter(r => r.id !== message.guild.id).map(roles => ``${roles.name}``).join(" **|** ") || "No Roles") //Роли человека на сервере .setThumbnail(mbr.user.displayAvatarURL) //Аватар человека .setFooter("Информация о пользователе.") //Футер message.channel.send({embed}); //Отправляем } else message.reply("Вы забыли упомянуть пользователя."); //Это вряд-ли сможет произойти, но на всякий случай
Вышло так.
Мой дискорд сервер!
Прошу зайти на мой дискорд сервер, ведь я долго делал туториал, а вам не сложно зайти на мой сервер в виде благодарности.