Разработка собственного бота используя Discord.JS

Разработка собственного бота используя Discord.JS
​​

Всем привет друзья, я trvq и сегодня мы пишем своего бота discord.

Для начала разработки нам необходимо установить программную платформу «Node.JS», данный софт помогает взаимодействовать JavaScript с вашим или каким-либо API

Скачать платформу можно на официальном сайте: nodejs.org (Не является рекламой)
На момент написания статьи стабильной версией является: 14.16.0 (LTS); её разработчик рекомендует для обычных пользователей.


Так, отлично я надеюсь вы уже установили «ноду» и готовы двигаться дальше, сейчас я расскажу про редакторы кода.

По моему мнению лучшим редактором кода является непосредственно продукт от «Microsoft» под названием «Visual Studio Code», почему? А я вам отвечу
• Удобная подсветка синтаксиса
• Множество плагинов
• Возможность русифицировать софт
• Да это чёрт возьми продукт от «Microsoft»

Переходим на официальный сайт ПО: code.visualstudio.com и качаем настольную версию


  • Открываем первый
  • Жмём «Install»
  • Видим это и нажимаем «Restart»
  • Готово, программа теперь на русском языке

Отлично с редактором разобрались, теперь:

    • Создаём любую папку на рабочем столе (скрин-шот)
    • Жмём правой кнопкой мыши по ней (скрин-шот)
    • И открываем с помощью «Visual Studio Code» (3 пункт в меню на скрин-шоте второго пункта)
    • Нажимаем сочетание клавиш «CTRL + SHIFT + `»
    • Открывается терминал «VSC» (скрин-шот)
    • Прописываем команду в «консоль»:

      npm init

      Код

      Код:
      npm init
    • Видим проблему при использования кириллицы в название папки (скрин-шот)
    • Исправляем это и пишем допустимое название, не конфликтующее с ссылками, допустим:

      lzt

      Код

      Код:
      lzt
    • Жмём «enter» пока не надоест, шутка, ждём этого: скрин-шот
    • Мы видим что у нас создался файл конфигурации проекта (package.json)
    • Теперь необходимо создать файл «index.js» (скрин-шот)

    • Нажимаем сочетание клавиш «CTRL + SHIFT + `»
    • Пишем команду:

      npm i discord.js

      Код

      Код:
      npm i discord.js
      или если хотите что-б работало точно как у меня:

      npm i discord.js@12.5.1

      Код

      Код:
      npm i discord.js@12.5.1
      это вынужденная мера, т. к. на момент написания статьи это последняя версия библиотеки
    • Вставляем общепринятый стандарт отрывка кода для discord.js разработчиков:

      const Discord = require('discord.js'); // Запрос в Discord.JS
      const bot = new Discord.Client(); // Теперь используем не client, а bot
      let config = require('./config.json'); // Подключение к конфигурации бота, а затем:
      let token = config.token; // Достаем токен из файла
      let prefix = config.prefix; // Достаем префикс из файла

      bot.on('ready', () => {
      console.log(`Бот ${bot.user.tag} запущен | По гайду с лолза (c) trvq!`);
      });

      bot.on('message', msg => {
      if (msg.content === '/lolz') { // Здесь пока не использую переменную префикса из конфига, для более простого понимания
      msg.reply('lolzteam a really gang');
      }
      });

      bot.login(token)

      Код

      Код:
      const Discord = require('discord.js'); // Запрос в Discord.JS
      const bot = new Discord.Client(); // Теперь используем не client, а bot
      let config = require('./config.json'); // Подключение к конфигурации бота, а затем:
      let token = config.token; // Достаем токен из файла
      let prefix = config.prefix; // Достаем префикс из файла
      
      bot.on('ready', () => {
        console.log(`Бот ${bot.user.tag} запущен | По гайду с лолза (c) trvq!`);
      });
      
      bot.on('message', msg => {
        if (msg.content === '/lolz') {    // Здесь пока не использую переменную префикса из конфига, для более простого понимания 
          msg.reply('lolzteam a really gang');
        }
      });
      
        bot.login(token)
      Но тут не всё как нам нужно...
      Мы хотим как профессионалы и поэтому:
    • Создаём файл config.json и заполняем его следующим:

      {

      "token":"Ваш токен",
      "prefix":"/"

      }

      Код

      Код:
      {
        
          "token":"Ваш токен",
          "prefix":"/"
      
      }
      И тут появляется вопрос: где взять токен?

      Заходим на этот сайт и видим это:


      Жмём кнопку «New Application» и в поле ввода пишем название, но обратите внимание, что это еще не имя бота!

      У нас получается примерно это:

      Переходим во вкладку «Bot» и жмём кнопку «Add Bot»

      И вот тут, уже можно думать над названием и дизайном вашего бота, ведь вам предстоит установить аватарку (необязательно) и задать nametag бота:


      Скроллим вниз и видим права по умолчанию которые будут даваться при добавлении бота на сервер. Нам достаточно нажать одну кнопку «Administrator»:


      Теперь собственно берём наш токен; для этого необходимо проскроллить вверх и нажать кнопку «Copy»
    • Возвращаемся в наш конфиг (config.json) и вставляем во вторые ковычки токен:
    • Бот готов: жмём «CTRL + S» далее «CTRL + SHIFT + `» и пишем в терминал:

      node index.js

      Код

      Код:
      node index.js
      И видим в терминале это:

      Бот Lolz | Гайд#8594 запущен | По гайду с лолза (c) trvq!

      Код

      Код:
      Бот Lolz | Гайд#8594 запущен | По гайду с лолза (c) trvq!
    • Как-же добавить бота на своё сервер? Копируем это:

      https://discordapp.com/oauth2/authorize?&client_id=Сюда вставляем айди бота&scope=bot&permissions=8

      Код

      Код:
      https://discordapp.com/oauth2/authorize?&client_id=Сюда вставляем айди бота&scope=bot&permissions=8
      Идём обратно на портал разработчиков Discord и заходим в раздел «General Information» и копируем Application ID, в моём случае это:
      «827137790205755413»
      Заменяем слова «Сюда вставляем айди бота» на ваш айди в моём случае получается:

      https://discordapp.com/oauth2/authorize?&client_id=827137790205755413&scope=bot&permissions=8

      Код

      Код:
      https://discordapp.com/oauth2/authorize?&client_id=827137790205755413&scope=bot&permissions=8
    • Добавляем бота на ваш сервер и пишем команду «/lolz» и видим, что всё работает

Сейчас мы узнаем что такое «Embed-msg» в discord и как его вызвать, напишем команду кика и говорилки с прикольным оформлением



Давайте разберём этот скрин-шот, тут бот отправляет embed, что написано жирным задаётся как описание
[CODE].setDescription(`**Пример простейшего embed-сообщения**`)[/CODE]Так-же мы видим дерево с яблоками, вызывается следующим образом:
[CODE].setFooter(`Отправил - ${message.author.tag}`, 'https://i.imgur.com/axXA8Ll.png')[/CODE]Оранжевая полоска слева от текста придаёт сообщению прикольный вид, вызвать это можно:
[CODE].setColor(0xFF8000)[/CODE]Полный пример (Код оставлять в текстовом варианте не буду, попробуйте заучить это и написать своими руками)

Добавляем данный код перед ивентом запуска бота:

[CODE]function findFiles(folderPath){
let files = []
folderPath = path.isAbsolute(folderPath) ? folderPath : path.join(process.cwd(), folderPath)
const thisFolder = fs.readdirSync(folderPath, { withFileTypes: true })

for(const file of thisFolder){
const pathFile = path.join(folderPath, file.name)
if(file.isDirectory()){
files = [ ...files, ...findFiles(pathFile) ]
continue
}
files.push(pathFile)
}
return files
}

function folderHandler(handlerPath, fn){
for(const file of findFiles(handlerPath)){
const { dir, base } = path.parse(file)
const props = require(file)
fn(props, base, path.parse(dir).name)
}
}

folderHandler('./cmds/', (props, file, folder) => {
bot.commands.set(props.help.name,props)
console.log(`[cmds] (${folder}) ${file}`)
})

bot.on(`message`, async message => {
if(message.author.bot) return;
if(message.channel.type == "dm") return;
let uid = message.author.id;
bot.send = function (msg){
message.channel.send(msg);
};
let messageArray = message.content.split(" ");
let command = messageArray[0].toLowerCase();
let args = messageArray.slice(1);
if(!message.content.startsWith(config.prefix)) return;
let cmd = bot.commands.get(command.slice(config.prefix.length));
if(cmd) cmd.run(bot,message,args);
bot.rUser = message.guild.member(message.mentions.users.first() || message.guild.members.cache.get(args[0]));
bot.uId = message.author.id;
});[/CODE]И после строки
[CODE]const bot = new Discord.Client(); [/CODE]пишем:
[CODE]bot.commands = new Discord.Collection() [/CODE]

Создаём папку с названием cmds в корне бота
Создаём в этой папке файл kick.js

И далее уже пишем код...

Объявляем переменные:
[CODE]
const Discord = module.require("discord.js");
let config = require('../config.json')
[/CODE]Далее открываем терминал (CTRL+SHIFT+`) и пишем туда:
[CODE]npm i fs[/CODE]Этим действием мы установили файловую систему и теперь объявляем еще одну переменную:
[CODE]const fs = require("fs");[/CODE]Пишем данную строку:
[CODE]module.exports.run = async (bot,message,args) => {[/CODE]И делаем проверку на права:
Если нет права KICK_MEMBERS, то кикнуть не получится!
[CODE]if(!message.member.hasPermission('KICK_MEMBERS'))return(message.channel.send("**Анти-феменизм — у вас нет прав! Ты вообще кто такой?"))[/CODE]Объявляем жертву изгнания, задаём ему переменную:
[CODE]let tokick = message.mentions.members.first()[/CODE]Ещё одна проверка на упоминание юзера которого хотим кикнуть:
[CODE]if(!tokick)return(message.channel.send("**А кого кикнуть-то надо? Я тебе че шерлок хомс???"))[/CODE]Объявляем переменную причины кика:
[CODE]
let reason = args.slice(1).join(" ")
[/CODE]Ну и по дефолтику сделаем проверку на указание причины и автоудаление этого сообщения через 12000 единиц времени и про последнее напишу через двойной слэш (так можно комментировать код):

[CODE]if (!reason) {
message.channel.send(`**Ты чё совсем?**Причину-то укажи! \`'/kick [user] [причина]'\``).then(msg => msg.delete({timeout: 12000}));
return message.delete(); // Удаляем сообщения модератора который хочет кого-то кикнуть
}[/CODE]Ну и давайте для красоты залогируем кик?

[CODE]let kick_embed = new Discord.MessageEmbed()
.setColor(0xFF8000)
.setTitle("Лолзтим модератор бот, хули нам-то авитоскамерам")
.setDescription(`[Ок] — **Папик ${message.author.tag} кикнул ${tokick.user.tag}** \n [Ладно] — Причина **\`${reason}\`**`)
.setTimestamp()[/CODE]Ну и конечно-же сам кик:

[CODE]
tokick.kick([`${reason}`]) // Кикаем
message.channel.send(kick_embed); // Отправили лог
}[/CODE]Ну и пишем в заключении:

[CODE]module.exports.help = {
name: "kick"

};[/CODE]И оп:



Фулла не будет мужики, вы чего.. Ладно:

[CODE]
const Discord = module.require("discord.js");
let config = require('../config.json')
const fs = require("fs");

module.exports.run = async (bot,message,args) => {
if(!message.member.hasPermission('KICK_MEMBERS'))return(message.channel.send("**Анти-феменизм — у вас нет прав! Ты вообще кто такой?"))
let tokick = message.mentions.members.first()
if(!tokick)return(message.channel.send("**А кого кикнуть-то надо? Я тебе че шерлок хомс???"))
let reason = args.slice(1).join(" ")
if (!reason) {
message.channel.send(`**Ты чё совсем?**Причину-то укажи! \`'/kick [user] [причина]'\``).then(msg => msg.delete({timeout: 12000}));
return message.delete(); // Удаляем сообщения модератора который хочет кого-то кикнуть
}

let kick_embed = new Discord.MessageEmbed()
.setColor(0xFF8000)
.setTitle("Лолзтим модератор бот, хули нам-то авитоскамерам")
.setDescription(`[Ок] — **Папик ${message.author.tag} кикнул ${tokick.user.tag}** \n [Ладно] — Причина **\`${reason}\`**`)
.setTimestamp()

tokick.kick([`${reason}`]) // Кикаем
message.channel.send(kick_embed); // Отправили лог
}

module.exports.help = {
name: "kick"
};

[/CODE]

Делаем всё как обычно, объявляем переменные и готовим почву под модульную команду:

[CODE]const Discord = module.require("discord.js");
const fs = require("fs");
module.exports.run = async (bot,message,args) => {[/CODE]Делаем проверку на админа или право управлять сообщениями, учим бота читать аргументы:

[CODE] if(!message.member.hasPermission("MANAGE_MESSAGES") && message.author.id !== "691931296750108702") return message.channel.send("У вас нет прав");
let botmessage = args.join(" ");
message.delete().catch();[/CODE]Теперь наш любимый embed:

[CODE] const embed = new Discord.MessageEmbed()
.setColor(0xFF8000) // Цвет
.setDescription(`**${botmessage}**`) // Само сообщение
.setFooter(`Отправил - ${message.author.tag}`, 'https://i.imgur.com/axXA8Ll.png') // Что-б было понятно кто говорит от имени бота
[/CODE]Теперь выводим результат:
[CODE] bot.send(embed);[/CODE]Удаляем сообщение «/send ...»
[CODE] return message.delete()
};
[/CODE]Ну и стандартно завершаем модульную команду:

[CODE]module.exports.help = {
name: "send"
};[/CODE]

Хостинг:
0caf3468f9bdf9c617d14271b577bfbb.webp

Разработка собственного бота используя Discord.JS

ашкудишечка Статьи 1 апр 2021

[IMG]https://i.imgur.com/FWGjiG1.png[/IMG]​​

Всем привет друзья, я trvq и сегодня мы пишем своего бота discord.

Для начала разработки нам необходимо установить программную платформу «Node.JS», данный софт помогает взаимодействовать JavaScript с вашим или каким-либо API

Комментарии 0

Пока нет комментариев. Начните обсуждение.
Войдите, чтобы оставить комментарий.
Назад
Верх