Перейти к публикации

thuwsi

Активный игрок
  • Публикаций

    582
  • Зарегистрирован

  • Посещение

Изменения репутации

  1. Нравится
    thuwsi получил репутацию от Bequietlife в [Гайд] Создание Discord бота.   
    Часть -1: Предисловие
    Привет. В этом "курсе", вы научитесь создавать своих ботов для мессенджера Discord. Буду вам давать простые домашние задания.
    Вы уже должны знать основы JavaScript, node.js и npm
    Полезные ссылки:
    Документация библиотеки - https://discord.js.org
    Мой Discord, где вы можете задавать мне вопросы - thuwsi#7989
    Примерный план обучения:
    0. Регистрация бота, создание "Hello, world!" местного розлива
    1. Написание обработчика команд(одна команда - один файл)
    2. Разберем Message Embed
    3. Напишем команды модерации
    4. Разберем события клиента
    5. Создадим команду для получения информации о пользователе и сервере
    6. Напишем систему уровней
    7. Научимся отслеживать реакции и сообщения
    8. Разбор объекта Message
    9. Практика! Пишем своего бота модератора
    10. Написание музыкального бота(перевод статьи)
    Часть 0: Регистрация бота, создание "Hello, world!" местного розлива
    1. Заходим на https://discordapp.com/developers
    2. Нажимаем на New Application
    3. Придумываем название
    4. Копируем Client ID
    5. Заходим во вкладку Bot
    6. Нажимаем Add bot
    7. Ставим аватарку для бота
    8. Копируем токен, сохраняем его где-нибудь
    9. Идем на https://discordapi.com/permissions.html
    10. В поле Client ID вставляем ID бота, если поле ввода все еще красное, то стираем последнюю цифру и пишем её заново
    11. Отмечаем все галочки
    12. Переходим по ссылке и добавляем бота
    Пишем Ping-pong
    1. Создаем папку
    2. Открываем в ней консоль
    3. Пишем:
    Код:npm init4. Затем:
    Код:npm install discord.js5. Создаем 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Результат: http://prntscr.com/pyxmeh
    Извиняюсь, что было натянуто. В следующем уроке пишем обработчик. Будет уже больше в формате статьи, а не списка пунктов
    Часть 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}`); //Подключим нашу команду
    cmds.set(currentCommand.info.name, currentCommand); //Добавляем нашу команду в список, т.е. название команды - команда
    console.log(`Подключена команда ${currentCommand.info.name} в файле ${files}`); //Отладка
    }Обработчик сообщений:
    Код:cmds.forEach(element => {
    let command = message.content.split(" ")[0]; //Получаем название команды
    if(command.toLowerCase() == `${config.prefix}${element.info.name.toLowerCase()}`)
    element.run(message);
    });Структура проекта:
    http://prntscr.com/pzeora
    Структура файла с командой:
    Код:module.exports.run = message => { //Функция для запуска команды
    message.reply("pong!");
    };
    module.exports.info = { //Информация о команде
    "name": "ping"
    };Достаем двойные листочки, ой бля, не туда.
    Домашнее задание:
    Создать команду pong, пользователь пишет "!pong", бот отвечает "ping!"
    Тут я сделал улучшенный обработчик команд, основанный на ООП: https://gitlab.com/kislball/guineabot
    Алгоритм улучшенного обработчика:
    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.org/"); //Указываем автора
    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.org");
    message.channel.send(embed);
    };
    module.exports.info = {
    name: "embed"
    }; 
  2. Вышка
    thuwsi получил репутацию от Elasticity в взаимная репутация   
    +
  3. Вышка
    thuwsi получил репутацию от KateLobanova в Заявка на должность модератора сервера MG   
    За, удачи
  4. Вышка
    thuwsi изменил репутацию Okssi в Заявление на пост модератора.   
    Принят.
    Вся информация на форуме.

  5. Вышка
    thuwsi изменил репутацию SqdXoezi в Вы крипы я рапира (конкурс)   
    Условия прочитай бро  :wub: 
              Конкурс то на 50 чистокровных вимеров 

                 1. Ваш красивейший NickName
                  2. Ваша очередь за вимерами 
                   3. А для меня reputation up 
                           Пруф : 

    Итоги этого величайшего конкурса : 4 марта 2020-го года 
      
  6. Вышка
    thuwsi изменил репутацию Swetty_girl1 в Заявление на пост модератора.   
    За.
  7. Вышка
    thuwsi изменил репутацию Semi в Заявление на пост модератора.   
    За.
  8. Вышка
    thuwsi изменил репутацию LOWStAriX в Заявление на пост модератора.   
    За, удачи :)  
  9. Вышка
    thuwsi изменил репутацию OnlyRobbyPvP_ в Заявление на пост модератора.   
    Неплохая заявка, удачи :3
  10. Вышка
    thuwsi изменил репутацию scrafton14 в Заявление на пост модератора.   
    За.
    Удачи парень!
  11. Вышка
    thuwsi изменил репутацию _DontWorry_2 в 伝 classic-minecraft   
    [ok=Меры приняты.][/ok]
  12. Вышка
    thuwsi изменил репутацию Okssi в Подстава   
    Меры приняты.
    AIII забанен за подставу игроков.

  13. Вышка
    thuwsi получил репутацию от Rayner_ в Заявка на должность Модератор.   
    За, удачи.
  14. Вышка
    thuwsi изменил репутацию fl3shko в 伝 classic-minecraft   
    [ok=Меры приняты.][/ok]
  15. Вышка
    thuwsi изменил репутацию Rayner_ в Заявление на пост модератора.   
    За.
  16. Вышка
    thuwsi изменил репутацию XXLove_GirlXX в Заявление на пост модератора.   
    За! Удачки! :wub:
  17. Вышка
    thuwsi изменил репутацию DragonReali в Заявление на пост модератора.   
    Нейтрал.
    Удачки)
  18. Вышка
    thuwsi изменил репутацию MeGa_Cekcuu в Заявление на пост модератора.   
    Удачки ^^
  19. Вышка
    thuwsi получил репутацию от DragonReali в Заявка на должность модератора   
    Удачи.
  20. Вышка
    thuwsi изменил репутацию LexaNT в Оск Родных   
    [ok=Меры приняты.][/ok]
  21. Вышка
    thuwsi изменил репутацию Okssi в Заявка на пост модератора.   
    Отказ.
    А где актив на форуме?
    http://i.imgur.com/j51uHm1.gif
  22. Вышка
    thuwsi получил репутацию от Fen0nim в Честная взаимная репутация!   
    +
  23. Вышка
    thuwsi получил репутацию от Angel_Lol в На модератора :)   
    Пропускаешь запятые. Удачи!
  24. Вышка
    thuwsi получил репутацию от BlazerLord в Заявка на должность "Модератор" на сервере MiniGames   
    За, удачи.
  25. Вышка
    thuwsi получил репутацию от sweet_dealer в конкурс на стик паков в вк!   
    8
    https://vk.com/id566298273
×
×
  • Создать...