Гайд Как сделать Discord Бота на Javascript | Урок 3

Статус
В этой теме нельзя размещать новые ответы.
  • 258
  • 140
Бля ебись оно в рот, делаем command handler чтобы бот читал файлы из команд.
Пойду пока кофейка заварю
Вторая часть
Первая часть

Первая наперва нам надо ебануть коллекцию где мы и будем хранить наши команды
index.js:
client.commands = new Collection();

Затем стоит подключить fs (Эта такая штучка которая файлы из пк читает)
index.js:
const fs = require("fs")

Создаём папку src в нашем боте, а в ней создаём папку commands, а в ней создаём папку Fun
src/commands/Fun
Ну а дальше начинается жёсктое по***
Я даже не знаю как это объяснять поэтому объясню в коде
Читайте комментарии (Начинаются с //)

index.js:
fs.readdir("./src/commands", (err, folders) => {
    //Читаем нашу директори
    for(let folder of folders) {
        //Проходимся циклом по каждой папке отдельно
        fs.readdir("./src/commands/" + folder, (err, files) => {
            //Читаем каждую папку
            if(files == undefined) return
    
            let jsfiles = files.filter(f => f.split(".").pop() === "js")
            //Фильтруем наши файлы, если они не являются файлами Javascript, то скипаем
            if (jsfiles.length <= 0) return console.log(`No commands to log in in ${folder}`)
            //Если файлов нету тогда пишем что их нету
        
            console.log(`\n[Commands] Loading ${jsfiles.length} commands from ${folder} folder...`)
            //Пишем количество файлов и их название (бесполезная штука но так лучше понять)
        
            jsfiles.forEach((file, i) => {
                //Проходимся по каждому файлу отдельно
                let props = require("./src/commands/" + folder + "/" + file)
                //Эта штука которая будет отвечать за выполнение самой команды, имени, описании и прочего
                //Из module.exports
                console.log(`${i + 1}: ${file} loaded!`)
                client.commands.set(file, props)
                //Добавляем файл и наши дополнения в коллекцию
            })
        })
    }
 
    client.on('messageCreate', message => {
        if (!message.content.startsWith(PREFIX) || message.author.bot) return;
        const args = message.content.slice(PREFIX.length).trim().split(/ +/);
        const command = args.shift().toLowerCase();
 
        try {
            let cmd = client.commands.get(command + ".js") || client.commands.find(options => options.aliases && options.aliases.includes(command));
            //Если наша команди называется как файл или совпадает с aliases, то выполняем
            if(cmd) cmd.run(client, message, args)
            //Client - наш клиент
            //Message - json от дискорда с данными от сообщения
            //Аргументы после нашей команы
        } catch (error) {
            console.error(error);
        }
    });
})

Теперь наша задача создать команду.
command.js:
module.exports = {
  name: "",
  description: "",
  aliases: [],
  run: async (client, message, args) => {

  }
}

Идём в нашу папку src/commands/Fun и там создаём файл gay.js
Пишем там данные и подключаем Embed. За одно и функцию рандома которую я спиздил с MDN
gay.js:
const { MessageEmbed } = require("discord.js")
function random(min, max) {
    return Math.floor(Math.random() * (max - min + 1) ) + min;
}

module.exports = {
    name: "Gay",
    description: "Возвращает случайно число с твоим гейством",
    aliases: ["pidor"],
    run: async (client, message, args) => {
 
    }
}

После чего нам осталось написать саму функцию


gay.js:
const { MessageEmbed } = require("discord.js")
function random(min, max) {
    return Math.floor(Math.random() * (max - min + 1) ) + min;
}
module.exports = {
    name: "Gay",
    description: "Возвращает случайно число с твоим гейством",
    aliases: ["pidor"],
    run: async (client, message, args) => {
        let member = message.mentions.users.first() || client.users.cache.get(args[0]) || message.author
        //Проверка. Возвращает первого кого вы упомянули, человека по айди либо автора
 
        const embed = new MessageEmbed()
          .setTitle("Gay Check")
          .setColor("RANDOM")
          .setDescription(`🏳️‍🌈 ${member} gay on ${random(0, 100)}%`)
          .setAuthor("Requested by " + message.author.tag, message.author.displayAvatarURL({ size: 1024, dynamic: true, format: "png" }))
          .setTimestamp(Date.now())
    
        message.reply({embeds: [embed]})
    }
}

И так, aliases отвечает за "ссылку" на нашу команду
message.author возвращает нам автора, тоесть User у которого мы можем взять tag и avatar пользуясь документацией discord.js

Ну и собственно всё что нам остается это запустить бота

1655312228915.png


1655312472251.png


И вуаля!
На этом всё, дальше мы подключим нашего бота к базе данных через JSON файл и сделаем какую нибудь чушь с ней
А так-же воспользуемся axios и научимся делать запросы к JSON на сайте

index.js:
const { Client, Intents, Collection, MessageEmbed } = require('discord.js');
const { TOKEN, PREFIX } = require("./data.json")
const fs = require("fs")
const client = new Client({intents: [
    Intents.FLAGS.GUILDS,
    Intents.FLAGS.GUILD_MEMBERS,
    Intents.FLAGS.GUILD_MESSAGES,
    Intents.FLAGS.GUILD_PRESENCES
]});

client.on('ready', () => {
    console.log("Bot is ready!");
});

client.commands = new Collection();

fs.readdir("./src/commands", (err, folders) => {
    //Читаем нашу директори
    for(let folder of folders) {
        //Проходимся циклом по каждой папке отдельно
        fs.readdir("./src/commands/" + folder, (err, files) => {
            //Читаем каждую папку
            if(files == undefined) return
     
            let jsfiles = files.filter(f => f.split(".").pop() === "js")
            //Фильтруем наши файлы, если они не являются файлами Javascript, то скипаем
            if (jsfiles.length <= 0) return console.log(`No commands to log in in ${folder}`)
            //Если файлов нету тогда пишем что их нету
         
            console.log(`\n[Commands] Loading ${jsfiles.length} commands from ${folder} folder...`)
            //Пишем количество файлов и их название (бесполезная штука но так лучше понять)
         
            jsfiles.forEach((file, i) => {
                //Проходимся по каждому файлу отдельно
                let props = require("./src/commands/" + folder + "/" + file)
                //Эта штука которая будет отвечать за выполнение самой команды, имени, описании и прочего
                //Из module.exports
                console.log(`${i + 1}: ${file} loaded!`)
                client.commands.set(file, props)
                //Добавляем файл и наши дополнения в коллекцию
            })
        })
    }
 
    client.on('messageCreate', message => {
        if (!message.content.startsWith(PREFIX) || message.author.bot) return;
        const args = message.content.slice(PREFIX.length).trim().split(/ +/);
        const command = args.shift().toLowerCase();
 
        try {
            let cmd = client.commands.get(command + ".js") || client.commands.find(options => options.aliases && options.aliases.includes(command));
            //Если наша команди называется как файл или совпадает с aliases, то выполняем
            if(cmd) cmd.run(client, message, args)
            //Client - наш клиент
            //Message - json от дискорда с данными от сообщения
            //Аргументы после нашей команы
        } catch (error) {
            console.error(error);
        }
    });
})

client.login(TOKEN);


gay.js:
const { MessageEmbed } = require("discord.js")
function random(min, max) {
    return Math.floor(Math.random() * (max - min + 1) ) + min;
}

module.exports = {
    name: "Gay",
    description: "Возвращает случайно число с твоим гейством",
    aliases: ["pidor"],
    run: async (client, message, args) => {
        let member = message.mentions.users.first() || client.users.cache.get(args[0]) || message.author
        //Проверка. Возвращает первого кого вы упомянули, человека по айди либо автора
 
        const embed = new MessageEmbed()
          .setTitle("Gay Check")
          .setColor("RANDOM")
          .setDescription(`🏳️‍🌈 ${member} gay on ${random(0, 100)}%`)
          .setAuthor("Requested by " + message.author.tag, message.author.displayAvatarURL({ size: 1024, dynamic: true, format: "png" }))
          .setTimestamp(Date.now())
     
        message.reply({embeds: [embed]})
    }
}
 
Последнее редактирование:
  • 258
  • 140
Если кто-то что-то не понял то не стесняйтесь спрашивать, лучше показаться другим тупым чем вообще ничего не понять
 
  • LauX
  • Заблокирован
  • 678
  • 12
  • 232
Контакты для связи отсутствуют.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Тема очень круто оформлена. Замечательные посты пишешь, продолжай!
 
я НЕГР не осуждайте😉😛😛😛😛:D:
ЕБАТЬ я конечно нихуя не читал поскольку а нахуя оно мне нравиться
ГОДНЫЙ КОНТЕНТ так сказать🧨🧨🧨
Комент выше какойта фейк
 
  • LauX
  • Заблокирован
  • 678
  • 12
  • 232
Контакты для связи отсутствуют.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
  • 258
  • 140
Короче, я это, заебался. Но если вам что-то интересно по поводу дискорда то можете написать в тему и если мне понравится я сделаю отдельный туториал как с этим работать
 
Статус
В этой теме нельзя размещать новые ответы.
Активность
Пока что здесь никого нет
Сверху Снизу