Discord bot на Js | самый информативный гайд | Discord Js 12

Сегодня будет делать Дискорд бота на Джээс!

Что-же нам потребуется?

  • Node.js

  • Discord.js

  • Node-fetch

Так-же увы, но я не буду объяснять, как создать бота и установить node.js, моя цель показать вам функционал discord.js, а не то, как делаются базовые действия бота.

Создаём папку скажем... на рабочем столе, и называем её любым названием, например это будет имя нашего бота! у меня это бот Pixi (Все права защищены, за использование названия вас приведут к ответственности!)

И так, для начала установим библиотеки!

Пишем:

npm i discord.js node-fetch

Далее после установки данных библиотек мы можем приступить к формулировке проекта!

Для этого в консоль пишем:

npm init

Далее мы просто нажимаем enter, хотя можно ещё заполнить последнее поле.. Это автор! Указываем ваше имя на Английском...

Далее создаём файл config.json, index.js, и в файл config.json пишем:

{
	"prefix": "Тут ваш префикс",
	"token": "Тут ваш токен"
}

И меняем на свои значения, префикс - это начальная точка команды, например $help, где $ выступает префиксом, а токен - это циферки и буквы которые можно получить в настройках бота), так-же токен никому нельзя говорить, иначе вашим ботом смогут управлять другие!

Далее в файле index.js пишем:

const Discord = require('discord.js')
const fs = require('fs') // подключаем fs к файлу
const client = new Discord.Client()
const config = require('./config.json')
const fetch = require('node-fetch')
client.commands = new Discord.Collection() // создаём коллекцию для команд

fs.readdir('./commands', (err, files) => { // чтение файлов в папке commands
    if (err) console.log(err)

    let jsfile = files.filter(f => f.split('.').pop() === 'js') // файлы не имеющие расширение .js игнорируются
    if (jsfile.length <= 0) return console.log('Команды не найдены!') // если нет ни одного файла с расширением .js

    console.log(`Загружено ${jsfile.length} команд`)
    jsfile.forEach((f, i) => { // добавляем каждый файл в коллекцию команд
        let props = require(`./commands/${f}`)
        client.commands.set(props.help.name, props)
    })
})

client.on('ready', () => {
    console.log(`Бот ${client.user.username} запустился`);
})

client.on('message', message => {
    let prefix = config.prefix
    if (!message.content.startsWith(prefix) || message.author.bot) return;
    let messageArray = message.content.split(' ') // разделение пробелами
    let command = messageArray[0] // команда после префикса
    let args = messageArray.slice(1) // аргументы после команды

    let command_file = client.commands.get(command.slice(prefix.length)) // получение команды из коллекции
    if (command_file) command_file.run(client, message, args, prefix)
})

client.login(config.token)

Что мы сделали можно посмотреть в подсказках, а теперь расскажу зачем нужна эта коллекция команд!

Дело в том, что по факту можно писать команды в client.on('message', message => {}, но это не правильно и именно по этому мы создаём коллекцию команд и делаем следующие действия.

После этого создаём в папке с нашим ботом ещё одну папку - commands, в этой папке и буду хранится все наши команды!


И так, давайте создадим первую команду!

Пускай это будет.. команда hi, бот будет отвечать нам привет!

И так... Создаём файл hi.js и пишем в него следующее:

const Discord = module.require("discord.js");
const fs = require("fs");

module.exports.run = async (client,message,args,prefix) => {

	const exampleEmbed = new Discord.MessageEmbed() // Создаём наш эмбэд
		.setColor('#43e2f7') // Цвет нашего сообщения
		.setTitle('Приветик :>') // Название эмбэд сообщения
		.setAuthor(message.guild.name) // Автором будет название сервера
		.setDescription(':^Мы любим вас!^:') // комментарий
		.setTimestamp() // Дата  отправки сообщения
		.setFooter('Ваш бот Bot © 2021'');

	message.channel.send(exampleEmbed); // Отправляем сообщение

};
module.exports.help = {
    name: "hi" // Название команды
};

Дальше запускаем бота (Переходим в консоль и идём через неё в папку с ботом и пишем node index.js) и видим...

Хорошо, у нас получилось!

Давайте.. Сделаем пинг! (Бот будет отправлять нам задержку к отправки сообщения в миллисекундах)

В папке commands создаём ещё один файл (ping.js) и там пишем:

const Discord = module.require("discord.js");
const fs = require("fs");

module.exports.run = async (client,message,args,prefix) => {
	const ping = new Date(message.createdTimestamp);
  const timeTaken = Date.now() - message.createdTimestamp;
  
	message.channel.send(`Пинг: ${timeTaken}ms`);

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

Далее я хочу научить вас работать с рандомными изображениями и гифками, ну и эффектами :3

Создаём файл fox.js и пишем в него следующее:

const Discord = require('discord.js') // подключение discord.js к файлу
const fetch = require('node-fetch')

module.exports.run = (client, message, args) => {
	let res = fetch('https://some-random-api.ml/img/fox') //Извлекаем json от сайта
		.then(res => res.json()) // Просматриваем текст
		.then(json => {
			const embed = new Discord.MessageEmbed()
			    .setColor("RANDOM")
			    .setTitle(`${message.guild.name}, лисички :)`)
			    .setImage(json.link) // Ставим лисичку картинкой!
			message.channel.send(embed); // Отсылаем сообщение
		});
}
module.exports.help = {
    name: 'fox' // название команды
}

Вы сможете сделать больше рандомных картинок зная сайт... Так вот!

https://some-random-api.ml

Нажимаем например на картинку котика и пишет этот-же код, но вставляем вместо https://some-random-api.ml/img/fox -> https://some-random-api.ml/img/cat/ , а ещё меняем название команды и файла на cat.js / cat

Далее поговорим про эффекты, это будет экран wasted на аватарке пользователя дискорд!

Создаём файл wasted.js ( Вы уже знаете где) )

И пишем:

const Discord = module.require("discord.js");
const fetch = require('node-fetch')
const fs = require("fs");

module.exports.run = async (client,message,args) => {

	if (!message.mentions.users.size) { // если написано $wasted, то показываем аватарку автора сообщения
		let link = `https://some-random-api.ml/canvas/wasted/?avatar=${message.author.avatarURL({ format: 'png'})}` // Считываем эффект и говорим что картинка для эффекта - аватарка
		const attachmentt = new Discord.MessageAttachment(link, 'triggered.gif');
		const embed = new Discord.MessageEmbed()
			.setTitle(`${message.author.username} ПОТРАЧЕНО!`)
		    .attachFiles(attachmentt)
		    .setImage('attachment://triggered.gif')
		return message.channel.send(embed);
	}
	const WastedList = message.mentions.users.map(user => { // Если написали $wasted @test, то показываем триггер аватарки пользователя test
		let link = `https://some-random-api.ml/canvas/wasted/?avatar=${user.avatarURL({ format: 'png'})}`
		const attachmentt = new Discord.MessageAttachment(link, 'triggered.gif');
		const embed = new Discord.MessageEmbed()
		    .setTitle(`${user.username} ПОТРАЧЕНО!`)
		    .attachFiles(attachmentt)
		    .setImage('attachment://triggered.gif')

		return embed
	});
	message.channel.send(WastedList);
	return
};
module.exports.help = {
    name: "wasted"
};

Теперь сделаем команду say, бот будет удалять команду пользователя и напишет то что написано собственно после самой команды! Пример: $say Привет *Сообщение удалено * И бот пишет - Привет!

В файл say.js пишем:

// client.channels.cache.get('CHANNEL ID').send('Hello here!')

const Discord = module.require("discord.js");
const fs = require("fs");

module.exports.run = async (client,message,args) => {

	if (message.member.hasPermission('MANAGE_MESSAGES')){ // Делаем проверку, что-бы не все могли использовать эту команду, смогут только те, кто может удалять сообщения на сервере
		let sms = args.join(" "); // Считываем то, что хотим отправить!
	    message.channel.bulkDelete(1); // Удаляем сообщение с командой
		message.channel.send(sms); // Отправляем сообщение
		console.log(`Пользователь ${message.author.username} отправил через say: ${args.join(" ")}`); // Пишем в консоль о том, что кто-то написал сообщение через бота)
	}else {
		const adminerr2 = new Discord.MessageEmbed() // Если права нет, то пишем это
            .setColor('#fc5184')
            .setTitle(`${message.author.username}, вы не имеете прав на эту команду!`)
            .setAuthor(message.guild.name)
            .setFooter('Ваш бот bot © 2021')
        message.channel.send(adminerr2) // Отправка ошибки
	}
};
module.exports.help = {
    name: "say"
};

И... На этом всё! Спасибо за чтение данной статьи и пока!

Tags:
Discord.js, JavaScript, Bot

You can't comment this post because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author's username will be hidden by an alias.