Как стать автором
Поиск
Написать публикацию
Обновить

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"
};

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

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.