Всем привет друзья, я trvq и сегодня мы пишем своего бота discord.
Для начала разработки нам необходимо установить программную платформу «Node.JS», данный софт помогает взаимодействовать JavaScript с вашим или каким-либо API
Скачать платформу можно на официальном сайте: nodejs.org (Не является рекламой)
На момент написания статьи стабильной версией является: 14.16.0 (LTS); её разработчик рекомендует для обычных пользователей.
Так, отлично я надеюсь вы уже установили «ноду» и готовы двигаться дальше, сейчас я расскажу про редакторы кода.
По моему мнению лучшим редактором кода является непосредственно продукт от «Microsoft» под названием «Visual Studio Code», почему? А я вам отвечу
• Удобная подсветка синтаксиса
• Множество плагинов
• Возможность русифицировать софт
• Да это чёрт возьми продукт от «Microsoft»
Отлично с редактором разобрались, теперь:
- Создаём любую папку на рабочем столе (скрин-шот)
- Жмём правой кнопкой мыши по ней (скрин-шот)
- И открываем с помощью «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!
- Как-же добавить бота на своё сервер? Копируем это:
Идём обратно на портал разработчиков Discord и заходим в раздел «General Information» и копируем Application ID, в моём случае это:https://discordapp.com/oauth2/authorize?&client_id=Сюда вставляем айди бота&scope=bot&permissions=8Кодhttps://discordapp.com/oauth2/authorize?&client_id=Сюда вставляем айди бота&scope=bot&permissions=8
«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]
Хостинг: https://zelenka.guru/threads/2416280/
Загрузка...
