Загрузка...
Авторская статья Разработка собственного бота используя Discord.JS
  1. ашкудишечка
    ашкудишечка Автор темы 1 апр 2021 Заблокирован(а) 1814 17 окт 2020
    [IMG]

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

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

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

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

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

    [IMG]

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

    Отлично с редактором разобрались, теперь:
      • Создаём любую папку на рабочем столе (скрин-шот)
      • Жмём правой кнопкой мыши по ней (скрин-шот)
      • И открываем с помощью «Visual Studio Code» (3 пункт в меню на скрин-шоте второго пункта)
      • Нажимаем сочетание клавиш «CTRL + SHIFT + `»
      • Открывается терминал «VSC» (скрин-шот)
      • Прописываем команду в «консоль»:
        Код
        npm init
      • Видим проблему при использования кириллицы в название папки (скрин-шот)
      • Исправляем это и пишем допустимое название, не конфликтующее с ссылками, допустим:
        Код
        lzt
      • Жмём «enter» пока не надоест, шутка, ждём этого: скрин-шот
      • Мы видим что у нас создался файл конфигурации проекта (package.json)
      • Теперь необходимо создать файл «index.js» (скрин-шот)
      • Нажимаем сочетание клавиш «CTRL + SHIFT + `»
      • Пишем команду:
        Код
        npm i discord.js
        или если хотите что-б работало точно как у меня:
        Код
        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)
        Но тут не всё как нам нужно...
        Мы хотим как профессионалы и поэтому:
      • Создаём файл config.json и заполняем его следующим:

        Код
        {

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

        }
        И тут появляется вопрос: где взять токен?

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

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

        У нас получается примерно это:
        [IMG]
        Переходим во вкладку «Bot» и жмём кнопку «Add Bot»
        [IMG]
        И вот тут, уже можно думать над названием и дизайном вашего бота, ведь вам предстоит установить аватарку (необязательно) и задать nametag бота:
        [IMG]

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

        Теперь собственно берём наш токен; для этого необходимо проскроллить вверх и нажать кнопку «Copy»[IMG]

      • Возвращаемся в наш конфиг (config.json) и вставляем во вторые ковычки токен:
        [IMG]
      • Бот готов: жмём «CTRL + S» далее «CTRL + SHIFT + `» и пишем в терминал:
        Код
        node index.js
        И видим в терминале это:
        Код
        Бот Lolz | Гайд#8594 запущен | По гайду с лолза (c) trvq!
      • Как-же добавить бота на своё сервер? Копируем это:
        Код
        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
      • Добавляем бота на ваш сервер и пишем команду «/lolz» и видим, что всё работает



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

    [IMG]

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

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

    [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]И оп:

    [IMG]

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

    [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]

    Хостинг: https://zelenka.guru/threads/2416280/
     
    Этот материал оказался полезным?
    Вы можете отблагодарить автора темы путем перевода средств на баланс
    Отблагодарить автора
    1 апр 2021 Изменено

Комментарии

Top