Skip to content

TrueMajner/DiscordBotsTutorial

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

89 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

⛔ 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.

Редакторы кода.

Далее рекомендую установить один из следующих редакторов кода :

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.

Пример.

Думаю вы все видели как боты отправляют сообщения такого типа.

Image alt

Это называется RichEmbed (Embed). Давайте отправим простой эмбед похожий на данный. (Картинка ниже)

Image alt

Команда.

Для этого создадим новую команду !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}); //Отправляем.
}
})

Вышло так

Image alt

Команда !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("Вы забыли упомянуть пользователя."); //Это вряд-ли сможет произойти, но на всякий случай

Вышло так.

Image alt

Мой дискорд сервер!

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

В разработке..

About

Репозиторий - туториал по созданию ботов для discord.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published