Как написать discord bot

Время на прочтение
12 мин

Количество просмотров 152K

Введение

В этой статье я подробно расскажу о том, как работать с библиотекой discord.js, создать своего Discord-бота, а также покажу несколько интересных и полезных команд.

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

Начало работы

Если вы уже знакомы с приведёнными ниже материалами, — смело можете пролистать этот раздел.

Установка среды разработки

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

  • Sublime Text
  • Notepad++
  • Atom
  • Brackets
  • InteliJ Idea
  • Eclipse
  • Visual Studio Code

… и так далее.

Среда разработки выбирается по удобству использования и практичности, она у вас может быть любая, но мы рассмотрим её на примере Visual Studio Code, так как она является одной из самых приемлемых для новичков, а также для опытных программистов.

Для установки переходим по этой ссылке.


Выбираем свою операционную систему и запускаем скачивание.

Установка среды выполнения

Для создания бота мы используем среду выполнения node.js. Для её установки нам необходимо перейти на этот сайт.

На данный момент нас интересует версия долгосрочной поддержки (LTS), скачиваем её.

Установка полезных расширений

В Visual Studio Code присутствует возможность устанавливать расширения.
Для этого, кликните по отмеченной ниже иконке.

В открывшемся окне вписываем название название/идентификатор нужного нам расширения, после чего устанавливаем его.

Из полезных расширений могу отметить:

  1. Discord Presence — расширение, позволяющее отображать рабочую область и файл, в котором вы работаете в вашей игровой активности (функция работает только при использовании приложения Discord).

    Идентификатор расширения: icrawl.discord-vscode

  2. Code runner — расширение, с помощью которого предоставляется возможность запускать определённые фрагменты кода.
    Идентификатор расширения: formulahendry.code-runner

Создание бота

Теперь, когда вы установили все нужные компоненты, мы можем приступить к созданию самого бота.

Здесь всё просто. Переходим на портал разработчиков и нажимаем на кнопку с надписью «New Application» — она находится в правом верхнем углу.

В открывшемся окне вписываем имя бота, после чего, нажимаем на кнопку с надписью «Create».

На этой странице мы можем изменить имя бота, загрузить для него иконку, заполнить описание.

Теперь наша задача — воплотить бота в жизнь. Для этого переходим во вкладку «Bot».

Нажимаем на кнопку с надписью «Add Bot» и воплощаем бота в жизнь.

Поздравляю! Вы создали аккаунт для вашего бота. Теперь у него есть тег, токен, ник и иконка.

Подготовка к написанию кода

После создания аккаунта для бота, мы должны установить нужные пакеты и модули, чтобы в дальнейшем он корректно работал.

Первым делом создаём папку, после чего открываем её в VS Code (Файл > Открыть папку) / (Ctrl + K Ctrl + O)

Далее нам нужно открыть терминал (Терминал > Создать терминал) / (Ctrl + Shift + `)

Теперь мы должны создать файл с неким «описанием» нашего бота, сделаем это через терминал.

Вписываем данную строку в терминал и нажимаем Enter:

npm init

После каждой появившейся строки нажимаем Enter или вписываем свои значения.
Значения в этом файле можно будет изменить в любой момент.

Далее, мы должны поочерёдно вводить в терминал эти строки:

npm install

npm install discord.js

«Install» также можно сокращать в «I», но необязательно.

Итого, если вы следовали инструкциям и всё сделали правильно, в вашей папке должны были появиться 3 объекта:

Написание кода

Об удобстве написания кода

Для того, чтобы наш бот появился в сети и мог реагировать на команды, нам нужно написать для него код.

Существует множество вариантов для его написания: используя один файл, два, несколько, и т.д

Мы рассмотрим вариант с двумя файлами, так как его использовать очень легко и удобно, но у каждого варианта есть свои недостатки — например, у этого недостатком является сложность в написании начального кода.

Но не волнуйтесь, весь код вам писать не придётся.

О хранении данных

Для начала, нам нужно где-то хранить основные параметры и информацию о боте.

Мы можем сделать это двумя способами:

  1. Создать отдельный файл
  2. Записать всё в константы

Я не советую вам использовать второй вариант, так как в будущем вам придётся работать с большим объёмом информации, и такая запись будет доставлять неудобства.

Разберём хранение параметров в отдельном файле.

Итак, создаем файл config.json

Вставляем в него следующий код:

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

* Для получения токена зайдите на портал разработчиков, перейдите во вкладку «Bot» и скопируйте его.

* Самым распространённым среди разработчиков префиксом является !

Далее нам нужно создать файл bot.js и вставить в него данный код:

const Discord = require('discord.js'); // Подключаем библиотеку discord.js
const robot = new Discord.Client(); // Объявляем, что robot - бот
const comms = require("./comms.js"); // Подключаем файл с командами для бота
const fs = require('fs'); // Подключаем родной модуль файловой системы node.js  
let config = require('./config.json'); // Подключаем файл с параметрами и информацией
let token = config.token; // «Вытаскиваем» из него токен
let prefix = config.prefix; // «Вытаскиваем» из него префикс

robot.on("ready", function() {
  /* При успешном запуске, в консоли появится сообщение «[Имя бота] запустился!» */
  console.log(robot.user.username + " запустился!");
});


robot.on('message', (msg) => { // Реагирование на сообщения
  if (msg.author.username != robot.user.username && msg.author.discriminator != robot.user.discriminator) {
    var comm = msg.content.trim() + " ";
    var comm_name = comm.slice(0, comm.indexOf(" "));
    var messArr = comm.split(" ");
    for (comm_count in comms.comms) {
      var comm2 = prefix + comms.comms[comm_count].name;
      if (comm2 == comm_name) {
        comms.comms[comm_count].out(robot, msg, messArr);
      }
    }
  }
});


robot.login(token); // Авторизация бота

Теперь создаём файл comms.js, в нём будут сами команды.

В нём должен быть следующий код:

const config = require('./config.json'); // Подключаем файл с параметрами и информацией
const Discord = require('discord.js'); // Подключаем библиотеку discord.js
const prefix = config.prefix; // «Вытаскиваем» префикс

// Команды //

function test(robot, mess, args) {
  mess.channel.send('Test!')
}


// Список команд //

var comms_list = [{
  name: "test",
  out: test,
  about: "Тестовая команда"
}];

// Name - название команды, на которую будет реагировать бот
// Out - название функции с командой
// About - описание команды 

module.exports.comms = comms_list;

Чтобы добавить больше команд — просто объявляйте больше функций и добавляйте их в список, например:

const config = require('./config.json');
const Discord = require('discord.js');
const prefix = config.prefix;
const versions = config.versions;


// Команды //

function test(robot, mess, args) {
  mess.channel.send("Тест!")
}

function hello(robot, mess, args) {
  mess.reply("Привет!")
}


// Список комманд //

var comms_list = [{
    name: "test",
    out: test,
    about: "Тестовая команда"
  },
  {
    name: "hello",
    out: hello,
    about: "Команда для приветствия!"
  }
}

module.exports.comms = comms_list;

И вот, мы вышли на финишную прямую!

Осталось всего ничего — запустить бота.

Для этого открываем терминал и вставляем в него следующую строку:

node bot.js

Готово! Бот запущен и вы можете им пользоваться, ура!

Чтобы пригласить бота на свой сервер, воспользуемся нам уже известным порталом разработчиков.

Перейдём во вкладку OAuth2, пролистаем чуть ниже, выберем «Bot» и отметим нужные боту привилегии.

Теперь осталось скопировать ссылку-приглашение и добавить бота на свой сервер.

Как вывести ссылку-приглашение в терминал, при запуске бота?

Существует два способа:

  1. Заранее отметить нужные привилегии.

    Для этого, сначала мы должны скопировать ссылку-приглашение.
    После чего перейти в файл bot.js и вставить данную строчку кода сюда:

    
    robot.on("ready", function(){
        console.log(robot.user.username + " запустился!");
        console.log("Ссылка-приглашение")  // << //
    })
    

    Итоговый код должен быть таким:

    
    const Discord = require('discord.js'); 
    const robot = new Discord.Client();
    var comms = require("./comms.js");
    const fs = require('fs');
    let config = require('./config.json');
    let token = config.token;
    let prefix = config.prefix; 
    
    robot.on("ready", function(){
        console.log(robot.user.username + " запустился!");
        console.log("Ссылка-приглашение")
    })
    
    
    robot.on('message', (msg) => {
    	if(msg.author.username != robot.user.username && msg.author.discriminator != robot.user.discriminator){
        	var comm = msg.content.trim()+" ";
    	    var ok = false;
    	    var comm_name = comm.slice(0, comm.indexOf(" "));
    	    var messArr = comm.split(" ");
    	    for(comm_count in comms.comms){
    	    	var comm2 = prefix + comms.comms[comm_count].name;
    	    	if(comm2 == comm_name){
    	    		comms.comms[comm_count].out(robot, msg, messArr);
    	    	}
    	    }
        } 
    });
    
    robot.login(token)
    
    
    
      
    
    robot.login(token);
    

  2. Отметить нужные привилегии в самом коде.

    Повторяем процедуры из первого способа, но уже с другими строками кода:

    
    robot.on("ready", function(){
        console.log(robot.user.username + " запустился!");
        robot.generateInvite(["ADMINISTRATOR"]).then((link) => { // < //
            console.log(link); // < //
    })})
    

    Итоговый код:

    
    const Discord = require('discord.js'); 
    const robot = new Discord.Client();
    var comms = require("./comms.js");
    const fs = require('fs');
    let config = require('./config.json');
    let token = config.token;
    let prefix = config.prefix;
    
    robot.on("ready", function(){
        console.log(robot.user.username + " запустился!");
        robot.generateInvite(["ADMINISTRATOR"]).then((link) => { 
            console.log(link);
    })})
    
    
    robot.on('message', (msg) => {
    	if(msg.author.username != robot.user.username && msg.author.discriminator != robot.user.discriminator){
        	var comm = msg.content.trim()+" ";
    	    var ok = false;
    	    var comm_name = comm.slice(0, comm.indexOf(" "));
    	    var messArr = comm.split(" ");
    	    for(comm_count in comms.comms){
    	    	var comm2 = prefix + comms.comms[comm_count].name;
    	    	if(comm2 == comm_name){
    	    		comms.comms[comm_count].out(robot, msg, messArr);
    	    	}
    	    }
        } 
    }); 
    
    
    
      
    
    robot.login(token);
    

    Чтобы указать несколько привилегий, мы должны перечислить их в квадратных скобках, через запятую:

    
        robot.generateInvite(['KICK_MEMBERS', 'BAN_MEMBERS', 'SEND_MESSAGES']).then((link) => { 
            console.log(link);
    

    * Все привилегии указываются заглавными буквами

    Список доступных привилегий:

    ADMINISTRATOR
    CREATE_INSTANT_INVITE
    KICK_MEMBERS
    BAN_MEMBERS
    MANAGE_CHANNELS
    MANAGE_GUILD
    ADD_REACTIONS
    VIEW_AUDIT_LOG
    PRIORITY_SPEAKER
    STREAM
    VIEW_CHANNEL
    SEND_MESSAGES
    SEND_TTS_MESSAGES
    MANAGE_MESSAGES
    EMBED_LINKS
    ATTACH_FILES
    READ_MESSAGE_HISTORY
    MENTION_EVERYONE
    USE_EXTERNAL_EMOJIS
    VIEW_GUILD_INSIGHTS
    CONNECT
    SPEAK
    MUTE_MEMBERS
    DEAFEN_MEMBERS
    MOVE_MEMBERS
    USE_VAD
    CHANGE_NICKNAME
    MANAGE_NICKNAMES
    MANAGE_ROLES
    MANAGE_WEBHOOKS
    MANAGE_EMOJIS

    Я не советую вам из привилегий выбирать только ADMINISTRATOR, поэтому лучше указать только те привилегии, которые бот действительно использует для корректной работы

Полезные и интересные команды

В предыдущем разделе я показал вам, как запустить бота и как писать для него команды.
Теперь я хочу поделиться с вами несколькими своими командами.

  1. !say — с помощью этой команды бот может повторить ваше сообщение.

    Код:

    if (!mess.member.hasPermission("MANAGE_MESSAGES")) return mess.channel.send("У  вас нет прав"); /* Если у исполнителя команды нету привилегии MANGAGE_MESSAGES, он не сможет её использовать */
    
    args = mess.content.split(' ');
    args.shift();
    args = args.join(' ');
    
    mess.delete().catch(); // Удаление сообщения пользователя после отправки 
    
    mess.channel.send(args)
    

  2. !heads_or_tails — игра «Орёл или Решка».

    Код:

    mess.channel.send('Монета подбрасывается...')
    
    var random = Math.floor(Math.random() * 4) + 1; // Объявление переменной random - она вычисляет случайное число от 1 до 3
    
    if (random === 1) { // Если вычислено число 1, то выпадает орёл.
        mess.channel.send(':full_moon: Орёл!')
    } else if (random === 2) { // Если вычислено число 2, то выпадает решка.
        mess.channel.send(':new_moon: Решка!')
    } else if (random === 3) { // Если вычислено число 3, то монета падает ребром.
        mess.channel.send(':last_quarter_moon: Монета упала ребром!')
    }
    

  3. !clear — удаление определённого количества сообщений.

    Код:

    const arggs = mess.content.split(' ').slice(1); // Все аргументы за именем команды с префиксом
    const amount = arggs.join(' '); // Количество сообщений, которые должны быть удалены
    if (!amount) return mess.channel.send('Вы не указали, сколько сообщений нужно удалить!'); // Проверка, задан ли параметр количества
    if (isNaN(amount)) return mess.channel.send('Это не число!'); // Проверка, является ли числом ввод пользователя 
    
    if (amount > 100) return mess.channel.send('Вы не можете удалить 100 сообщений за раз'); // Проверка, является ли ввод пользователя числом больше 100
    if (amount < 1) return mess.channel.send('Вы должны ввести число больше чем 1'); // Проверка, является ли ввод пользователя числом меньше 1
    
    async function delete_messages() { // Объявление асинхронной функции
    
        await mess.channel.messages.fetch({
            limit: amount
        }).then(messages => {
            mess.channel.bulkDelete(messages)
            mess.channel.send(`Удалено ${amount} сообщений!`)
        })
    };
    delete_messages(); // Вызов асинхронной функции
    
  4. !random_name — генерация случайного имени.

    Не стоит пугаться большого кода, здесь всё предельно просто.

    Код:

    var name = [ // Объявление массива name и занесение в него большого количества имён
      'Абрам', ' Аваз', ' Аввакум', ' Август', ' Августин',
      ' Авдей', ' Авраам', ' Автандил', ' Агап', ' Агафон',
      ' Аггей', ' Адам', ' Адис', ' Адольф', ' Адриан',
      ' Азамат', ' Айдар', ' Айнур', ' Айрат', ' Аким',
      ' Алан', ' Алей', ' Александр', ' Алексей', ' Али',
      ' Альберт', ' Альфред', ' Амадей', ' Амадеус',
      ' Амаяк', ' Амвросий', ' Ананий', ' Анастасий',
      ' Анатолий', ' Анвар', ' Ангел', ' Андоим', ' Андрей',
      ' Аникита', ' Антон', ' Арам', ' Арий', ' Аристарх',
      ' Аркадий', ' Арман', ' Арно', ' Арнольд', ' Арон', ' Арсен',
      ' Арсений', ' Арслан', ' Артем', ' Артемий', ' Артур', ' Архип', ' Аскар', ' Аскольд', ' Аслан', ' Афанасий', ' Ахмет', ' Ашот', ' Бальтазар', ' Бежен', ' Бенедикт', ' Берек', ' Бернард',
      ' Бертран', ' Богдан', ' Болеслав', ' Борис', ' Бронислав',
      ' Булат', ' Вадим', ' Валентин', ' Валерий', ' Вальтер',
      ' Варфоломей', ' Василий', ' Вацлав', ' Велизар', ' Венедикт', ' Вениамин', ' Викентий', ' Виктор', ' Вилли', ' Вильгельм', ' Виссарион', ' Виталий', ' Витольд', ' Владимир', ' Владислав', ' Владлен', ' Володар', ' Вольдемар', ' Всеволод', ' Вячеслав', ' Гавриил', ' Галактион', ' Гарри', ' Гастон', ' Гаяс', ' Гевор', ' Геннадий', ' Генрих', ' Георгий', ' Геракл', ' Геральд', ' Герасим', ' Герман', ' Глеб', ' Гордей', ' Гордон', ' Горислав', ' Градимир', ' Григорий', ' Гурий', ' Густав', ' Давид', ' Дамир', ' Даниил', ' Даниэль', ' Данияр', ' Дарий', ' Дементий', ' Демид', ' Демосфен', ' Демьян', ' Денис', ' Джамал', ' Джордан', ' Дмитрий', ' Добрыня', ' Дональд', ' Донат', ' Дорофей', ' Евгений', ' Евграф', ' Евдоким', ' Евсевий', ' Евсей', ' Евстафий', ' Егор', ' Елеазар', ' Елисей', ' Емельян', ' Еремей', ' Ермолай', ' Ерофей', ' Ефим', ' Ефрем', ' Жан', ' Ждан', ' Жорж', ' Захар', ' Зиновий', ' Ибрагим', ' Иван', ' Игнатий', ' Игорь', ' Илларион', ' Ильдар', ' Ильнар', ' Ильнур', ' Илья', ' Ильяс', ' Иннокентий', ' Иоанн', ' Иосиф', ' Ипполит', ' Искандер', ' Ислам', ' Камиль', ' Карим', ' Карл', ' Кирилл', ' Клим', ' Кондрат', ' Константин', ' Корней', ' Кузьма', ' Лавр', ' Лаврентий', ' Лев', ' Леон', ' Леонид', ' Леонтий', ' Леопольд', ' Лука', ' Лукьян', ' Любим', ' Макар', ' Максим', ' Максимилиан', ' Марат', ' Марк', ' Марсель', ' Мартин', ' Матвей', ' Мирон', ' Мирослав', ' Митрофан', ' Михаил', ' Михей', ' Мишель', ' Мстислав', ' Мурат', ' Муслим', ' Назар', 'Абрам', ' Аваз', ' Аввакум', ' Август', ' Августин', ' Авдей', ' Авраам', ' Автандил', ' Агап', ' Агафон', ' Аггей', ' Адам', ' Адис', ' Адольф', ' Адриан', ' Азамат', ' Айдар', ' Айнур', ' Айрат', ' Аким', ' Алан', ' Алей', ' Александр',
      ' Алексей', ' Али', ' Альберт', ' Альфред', ' Амадей', ' Амадеус', ' Амаяк', ' Амвросий', ' Ананий', ' Анастасий', ' Анатолий', ' Анвар', ' Ангел', ' Андоим', ' Андрей', ' Аникита', ' Антон', ' Арам', ' Арий', ' Аристарх', ' Аркадий', ' Арман', ' Арно', ' Арнольд', ' Арон', ' Арсен', ' Арсений', ' Арслан', ' Артем', ' Артемий', ' Артур', ' Архип', ' Аскар', ' Аскольд', ' Аслан', ' Афанасий', ' Ахмет', ' Ашот', ' Бальтазар', ' Бежен', ' Бенедикт', ' Берек', ' Бернард', ' Бертран', ' Богдан', ' Болеслав', ' Борис', ' Бронислав', ' Булат', ' Вадим', ' Валентин', ' Валерий', ' Вальтер', ' Варфоломей', ' Василий', ' Вацлав', ' Велизар', ' Венедикт', ' Вениамин', ' Викентий', ' Виктор', ' Вилли', ' Вильгельм', ' Виссарион', ' Виталий', ' Витольд', ' Владимир', ' Владислав', ' Владлен', ' Володар', ' Вольдемар', ' Всеволод', ' Вячеслав', ' Гавриил', ' Галактион', ' Гарри', ' Гастон',
      ' Гаяс', ' Гевор', ' Геннадий', ' Генрих', ' Георгий', ' Геракл',
      ' Геральд', ' Герасим', ' Герман', ' Глеб', ' Гордей', ' Гордон',
      ' Горислав', ' Градимир', ' Григорий', ' Гурий', ' Густав',
      ' Давид', ' Дамир', ' Даниил', ' Даниэль', ' Данияр',
      ' Дарий', ' Дементий', ' Демид', ' Демосфен',
      ' Демьян', ' Денис', ' Джамал', ' Джордан', ' Дмитрий', ' Добрыня',
      ' Дональд', ' Донат', ' Дорофей', ' Евгений', ' Евграф', ' Евдоким', ' Евсевий', ' Евсей', ' Евстафий', ' Егор', ' Елеазар', ' Елисей', ' Емельян', ' Еремей', ' Ермолай', ' Ерофей', ' Ефим', ' Ефрем', ' Жан', ' Ждан', ' Жорж', ' Захар', ' Зиновий', ' Ибрагим', ' Иван', ' Игнатий', ' Игорь', ' Илларион', ' Ильдар', ' Ильнар', ' Ильнур', ' Илья', ' Ильяс', ' Иннокентий', ' Иоанн', ' Иосиф', ' Ипполит', ' Искандер', ' Ислам', ' Камиль', ' Карим', ' Карл', ' Кирилл', ' Клим', ' Кондрат', ' Константин', ' Корней', ' Кузьма', ' Лавр', ' Лаврентий', ' Лев', ' Леон', ' Леонид', ' Леонтий', ' Леопольд', ' Лука', ' Лукьян', ' Любим', ' Макар', ' Максим', ' Максимилиан', ' Марат', ' Марк', ' Марсель', ' Мартин', ' Матвей', ' Мирон', ' Мирослав', ' Митрофан', ' Михаил', ' Михей', ' Мишель', ' Мстислав', ' Мурат',
      ' Муслим', ' Назар'
    ];
    
    var RandElement = name[Math.floor(Math.random() * (name.length))]; // Выбор случайного элемента из массива
    mess.channel.send(RandElement) // Отправка сообщения со случайным элементом из массива в чат
    

Заключение

Вот и подошла к концу первая часть обучения, как вы могли заметить, создать бота, используя библиотеку discord.js очень просто.

Итого, из этой статьи мы выяснили:

  • Как установить нужные модули и пакеты
  • Как установить среду разработки
  • Как установить среду выполнения
  • Как установить полезные расширения
  • Как создать аккаунт для бота
  • Как воплотить бота в жизнь
  • Как запустить бота
  • Как научить бота реагировать на команды
  • Как пригласить бота на свой сервер
  • Как писать код для работы команд

А также научились некоторым интересным и полезным командам.

Надеюсь, что вам понравилась моя статья и вы узнали из неё что-то новое.

Сайты для самостоятельного изучения

  • Основная документация discord.js
  • Документация discord.js №2
  • Руководство discord.js
  • Руководство discord.js №2

Чтобы подключить бота Discord в ваше приложение, вам понадобятся токен бота (для настройки модуля) и ID канала, в который вы будете отправлять сообщения (для формы отправки).

Расскажем, как создать сервер, канал и бота Discord, а после добавить созданного бота на ваш сервер. О том, как настроить отправку сообщений на платформе AppMaster.io, можно прочитать в этой статье.

Создать сервер и канал, скопировать ID канала

Для начала вам нужно создать новый сервер в Discord (или получить права администратора на уже существующем). Откройте страницу вашей учетной записи Discord в браузере — так будет удобнее перемещаться между страницами настроек.

1. Нажмите на «+» на левой панели.

2. Выберите шаблон сервера в зависимости от вашей сферы или создайте собственный.

3. Укажите, для каких целей хотите его использовать.

4. Выберите изображение будущего сервера и укажите его название (1), затем нажмите Create. (2).

5. Сервер создан. По умолчанию в него уже добавлены два канала — текстовый и голосовой (1). Чтобы изменить настройки канала, нажмите значок шестеренки (2). Добавить новый канал можно, нажав на «+» рядом с названием раздела. Мы не будем создавать новый канал и для подключения нашего бота используем уже существующий канал general.

6. Теперь нужно получить ID выбранного канала. Для этого нужно сначала включить режим разработчика в настройках вашего профиля. Нажмите на значок шестеренки рядом с вашим никнеймом и фотографией.

7. Перейдите в раздел APP SETTINGS, на вкладку Advanced (1) и переместите селектор Developer mode — режим разработчика активируется (2).

8. Вернитесь из меню настроек и кликните по нужному каналу правой клавишей мыши (1), во всплывающем меню выберите Copy ID — идентификатор вашего канала будет скопирован (2). Сохраните его в любом текстовом документе, чтобы не возвращаться к этому шагу.

Создать бота и добавить его на сервер, скопировать токен бота

Чтобы создать бота, перейдите на специальную страницу Discord для разработчиков: https://discord.com/developers/. Откройте ее в соседней вкладке браузера, не выходя из вашей учетной записи Discord.

Сначала вам нужно создать приложение, затем в этом приложении создать бота и настроить для него разрешения, и только после этого — добавлять бота на сервер.

1. На вкладке Applications выберите New Application.

2. Введите название будущего приложения (1) и нажмите Create (2).

3. Приложение создано. Перейдите не вкладку Bot (1) и нажмите Add Bot, чтобы добавить нового бота.

4. Согласитесь добавить бота в ваше приложение.

5. Бот создан. На вкладке Bot отобразится вся информация о нем. Тут можно изменить его имя, добавить изображение и скопировать токен бота (1). Этот токен понадобится вам для настройки модуля Discord на платформе Appmaster.i. Каждый раз при внесении изменений портал разработчика будет предлагать вам сохранить их (2).

Сохраните токен бота, чтобы при последующей настройке не возвращаться к этому шагу.

6. Теперь перейдите на вкладку OAuth2 (1) — тут можно настроить разрешения и получить ссылку на вашего бота. В разделе SCOPES выберите bot(2), в BOT PERMISSIONS отметьте разрешения, которые хотите ему предоставить, в нашем случае — только отправка сообщений, поэтому выберите Send Message(3). После скопируйте автоматически сгенерированную Discord ссылку(4).

7. Вставьте скопированную ссылку в адресную строку браузера и перейдите по ней — откроется окошко вашего приложения. Выберите ваш сервер в раскрывающемся списке (1) и нажмите Continue (2).

8. Убедитесь, что приложению (а значит, и созданному в нем боту) даны только необходимые разрешения, после чего добавьте его на ваш сервер.

9. Теперь вернитесь на ваш сервер. Бот оставил приветственное сообщение — значит, что он успешно добавлен и функционирует.

Через AppMaster.io Studio подключить бота в приложение

Итак, все готово. Вы получили токен бота для модуля Discord и ID канала для формы отправки сообщения. Теперь перейдите в AppMaster.io Studio и настройте отправку сообщений из вашего приложения, следуя инструкции Модуль Discord: подключение бота и отправка сообщений.

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

Всем привет, сегодня мы напишем Discord-бота на Python и discord.py + бонусом посмотрим на примеры ботов. Приступим 🙂

Перед работой

Перед тем, как начать, вам нужны:

  1. Python 3;
  2. discord.py;
  3. Discord-аккаунт и свой сервер.

Для установки discord.py воспользуйтесь пакетным менеджером:

pip3 install discord.py

Создаём нашего бота

Перейдите на Developer Portal и нажмите на New application.

Вы создали своё приложение, на странице приложение перейдите в Bot >> Add Bot и создайте своего Discord-бота.

Сохраните токен бота! Дальше он нам понадобится!

Если всё прошло успешно, поздравляю, половина дела сделана 😀

Добавление бота на сервер

Теперь можно добавить бота на сервер.

Перейдите в OAuth2 >> URL Generator, в Scopes выбираем Bot и ниже — права бота, копируем сгенерированный URL. Вставляем в браузер, и добавляем на наш сервер.

Эхо-бот

Напишем традиционного эхо-бота, и разберём каждую строчку кода.

Код:

import discord
from discord.ext import commands

config = {
    'token': 'your-token',
    'prefix': 'prefix',
}

bot = commands.Bot(command_prefix=config['prefix'])

@bot.event
async def on_message(ctx):
    if ctx.author != bot.user:
        await ctx.reply(ctx.content)

bot.run(config['token'])

Пример работы:

Разбор:

import discord
from discord.ext import commands

Нужные нам импорты.

config = {
    'token': 'your-token',
    'prefix': 'prefix',
}

Вспомогательный словарь config в котором храним токен и префикс команд (далее расскажу зачем нужен префикс команд).

bot = commands.Bot(command_prefix=config['prefix'])

Создаём нашего бота, в аргументе передаём префикс.

@bot.event

Декоратор, предназначенный для обработки событий, подробнее здесь.

async def on_message(ctx):

Создаём асинхронную функцию, с параметром ctx, представляет из себя сообщение.

if ctx.author != bot.user:

Проверка, не является ли автор сообщения нашим Discord-ботом. Дело в том, что если бот отправит сообщение, это будет новым событием, и тогда получается цикл.

await ctx.reply(ctx.content)

Отвечаем на сообщение (ctx.reply), в аргументы передаём сообщение (ctx.content).

bot.run(config['token'])

Запускаем нашего бота, в аргументы передаём токен бота.

Надеюсь вы разобрались с кодом, и мы можем переходить далее.

Обработка команд

Перед тем, как обрабатывать команды, нам пригодится наш префикс.

Рассмотрим код:

import random
import discord
from discord.ext import commands

config = {
    'token': 'your-token',
    'prefix': '$',
}

bot = commands.Bot(command_prefix=config['prefix'])

@bot.command()
async def rand(ctx, *arg):
    await ctx.reply(random.randint(0, 100))

bot.run(config['token'])

Результат работы:

Разбор:

@bot.command()

Декоратор обработки команд

async def rand(ctx, *arg):

Асинхронная функция rand

await ctx.reply(random.randint(0, 100))

Отвечаем на сообщение, в аргументы передаём случайное число от 0 до 100

Бонус

Проверка роли:

import random
import discord
from discord.ext import commands

config = {
    'token': 'your-token',
    'prefix': '$',
}

bot = commands.Bot(command_prefix=config['prefix'])

@bot.command()
@commands.has_role("Хозяин")
async def rand(ctx, *arg):
    await ctx.reply(random.randint(0, 100))

bot.run(config['token'])

Выгнать пользователя

import discord
from discord.ext import commands

config = {
    'token': 'your-token',
    'prefix': '$',
}

bot = commands.Bot(command_prefix=config['prefix'])

@bot.command()
async def kick(ctx, user : discord.User(), *arg, reason='Причина не указана'):
    await bot.kick(user)
    await ctx.send('Пользователь {user.name} был изгнан по причине "{reason}"')

bot.run(config['token'])

Содержание

  • Создание приложения и авторизация бота
  • Выбор среды разработки
  • Вариант 1: Python и библиотека discord
    • Шаг 1: Установка Python и библиотеки discord
    • Шаг 2: Создание словаря бота
    • Шаг 3: Создание тела бота
    • Шаг 4: Запуск бота
  • Вариант 2: JavaScript и discord.js
    • Шаг 1: Установка Node.js и discord.js
    • Шаг 2: Работа с файлами бота
    • Шаг 3: Запуск бота
    • Примеры полезных команд

Как создать бота в Дискорде

В статье мы расскажем о том, как создается приложение для бота, выполняется первая авторизация на сервере и пишется общий код для нормализации работы. Имея «каркас», вы уже можете добавлять пользовательские команды и сразу проверять, как они работают.

Создание приложения и авторизация бота

Далее речь пойдет о двух разных методах создания бота — при помощи JavaScript и Python. Каждый из них имеет свои особенности и нюансы, но вот метод создания приложения и авторизации бота на сервере остается одинаков, поскольку не зависит от выбранного языка программирования. После этого вы сможете перейти к подбору библиотеки и работе с кодом.

Перейти на Discord Developer Portal

  1. Перейдите по ссылке выше, чтобы оказаться на главной странице портала для разработчиков в Discord. Используйте личные авторизационные данные для входа в аккаунт.
  2. Авторизация на портале разработчиков для создания бота в Discord

  3. Создайте новое приложение, нажав кнопку «New Application».
  4. Переход к созданию нового приложения на портале разработчиков для создания бота в Discord

  5. Введите имя приложения и подтвердите его создание.
  6. Создание нового приложения на портале разработчиков для создания бота в Discord

  7. Разверните меню сайта, щелкнув по кнопке с тремя горизонтальными линиями.
  8. Открытие меню приложения на портале разработчиков для создания бота в Discord

  9. Из появившегося списка выберите раздел настроек «Bot».
  10. Переход в раздел Бот на портале разработчиков для создания бота в Discord

  11. Приступите к добавлению нового бота для данного приложения.
  12. Кнопка для создания бота в Discord на портале разработчиков

  13. Подтвердите отобразившееся уведомление, нажав «Yes, do it».
  14. Использование кнопки подтверждения для создания бота в Discord на портале разработчиков

  15. По завершении сайт обновится и откроется страница бота, где вы можете изменить его название, скопировать токен или добавить иконку, которая будет отображаться и в Дискорде.
  16. Основные параметры приложения для создания бота в Discord

  17. Однако сейчас бот еще не отмечен таковым и для него не установлены разрешения, поэтому через то же самое меню перейдите в раздел «OAuth2».
  18. Переход к выбору типа приложения для создания бота в Discord на портале разработчиков

  19. В списке «Scopes» отметьте галочкой «bot», обозначив тип созданного приложения.
  20. Выбор типа приложения для создания бота в Discord на портале разработчиков

    Lumpics.ru

  21. Найдите следующий блок — «Bot Permissions» и установите галочки напротив всех разрешений, которые вы хотите предоставить создаваемому боту.
  22. Выбор разрешений для создания бота в Discord на портале разработчиков

  23. То же самое сделайте и с остальными типами разрешений, они соответствуют доступным непосредственно в Discord для ролей.
  24. Выбор других разрешений для создания бота в Discord на портале разработчиков

  25. Теперь бот готов для авторизации. На этой же странице найдите строку со ссылкой и скопируйте ее.
  26. Копирование ссылки для создания бота в Discord на портале разработчиков

  27. Вставьте в адресную строку и перейдите по ней. В появившейся форме выберите сервер для авторизации. Если у вас еще нет собственного сервера, создайте его, а затем вернитесь к процессу подключения бота.

    Подробнее: Создание сервера в Discord

  28. Авторизация для создания бота в Discord через портал разработчиков

  29. Ознакомьтесь со списком всех разрешений и нажмите на «Авторизовать».
  30. Принятие списка с правами для создания бота в Discord через портал разработчиков

  31. Осталось только подтвердить появившуюся на экране капчу.
  32. Подтверждение капчи для создания бота в Discord через портал разработчиков

  33. Откройте соответствующий сервер в Discord и убедитесь в том, что бот находится в списке участников. Пока что он еще офлайн, а запуск станет доступен после написания «тела» бота при помощи Python или JS, чем мы и займемся далее.
  34. Проверка списка участников в сети для создания бота в Discord через портал разработчиков

Выбор среды разработки

Перед началом работы с кодом в упомянутых языках программирования уточним, что вам понадобится установить текстовый редактор или специальную среду разработки, поддерживающую синтаксис Python или JavaScript (в зависимости от выбранного). Конечно, можно использовать просто «Блокнот», но по удобству он уступает специализированным программам. Просмотрите их списки в обзорах по следующим ссылкам и выберите для себя подходящий софт.

Подробнее:
Выбор среды разработки для программирования
Текстовые редакторы для Windows

Выбор среды разработки для создания бота в Discord

Вариант 1: Python и библиотека discord

Если ранее вы не сталкивались с языками программирования или знакомы с ними только поверхностно, создание бота для Discord на Python — лучший выбор. Этот ЯП проще учится, компактный и имеет логически понятный синтаксис, поэтому идеально подходит новичкам. К тому же в сети есть огромное количество исходников с различными командами или уже готовыми ботами, которые ничего не мешает скопировать и использовать в своих целях. В следующих шагах вы узнаете, как создать «каркас» бота на Python и запустить его, чтобы проверить работу.

Шаг 1: Установка Python и библиотеки discord

По умолчанию в Windows нет встроенных функций и утилит, предназначенных для работы с Питоном, поэтому их придется установить отдельно, не забыв про подключаемую библиотеку discord, которая позволит взаимодействовать с полезными функциями и командами, связанными исключительно с Дискордом.

Перейти на официальный сайт Python

  1. Воспользуйтесь ссылкой выше, чтобы перейти на официальный сайт Python и нажмите кнопку для загрузки его последней версии.
  2. Кнопка скачивания компонентов языка программирования для создания бота в Discord при помощи Python

  3. На новой странице отыщите инсталлятор для Windows и начните его загрузку.
  4. Выбор версии языка программирования для создания бота в Discord при помощи Python

  5. Дождитесь завершения скачивания и запустите установщик.
  6. Загрузка установочного файла компонентов языка программирования для создания бота в Discord при помощи Python

  7. Можно запустить установку без изменений, но обязательно отметьте галочкой «Add Python X.X to PATH», чтобы все переменные среды добавились автоматически и не возникло проблем при дальнейшем вводе команд.
  8. Кнопка установки компонентов языка программирования для создания бота в Discord при помощи Python

  9. Ожидайте завершения установки и на всякий случай перезагрузите компьютер, чтобы все изменения вступили в силу.
  10. Процесс установки компонентов языка программирования для создания бота в Discord при помощи Python

  11. Откройте «Командную строку» удобным для вас способом, например, отыскав приложение в меню «Пуск».
  12. Переход в Командную строку для установки библиотек ЯП для создания бота в Discord при помощи Python

  13. Напишите команду pip install discord и подтвердите ее нажатием клавиши Enter.
  14. Команда установки библиотек ЯП для создания бота в Discord при помощи Python

  15. Начнется загрузка файлов и в консоли «побегут» строки. Не закрывайте данное окно до завершения скачивания.
  16. Процесс установки библиотек ЯП для создания бота в Discord при помощи Python

  17. Как только появилась информация «Successfully installed», закрывайте «Командную строку» и переходите далее.
  18. Успешная установка компонентов ЯП для создания бота в Discord при помощи Python

Если Python у вас установлен, но команда для добавления подключаемой библиотеки не работает, выполните обновление компонента PIP, о чем рассказывается в другой статье на нашем сайте. Там же вы найдете инструкцию и по изменению переменных среды, если этого не произошло во время установки.

Подробнее: Обновление PIP для Python

Шаг 2: Создание словаря бота

В этом варианте мы будем использовать словарь для бота, то есть конфигурационный файл, хранящий в разных именах значения токена, префикса и имени бота. Это существенно упрощает весь процесс написания кода и не заставляет каждый раз вспоминать данные приложения, чтобы ввести их в одной строке.

  1. Начните с запуска IDLE, отыскав добавленное приложение через меню «Пуск». Если вы скачали другую среду разработки, откройте ее и создайте новый проект на базе Python.
  2. Запуск среды разработки для создания бота в Discord при помощи Python

  3. После открытия нового окна вызовите меню «File» и выберите пункт «New File». Сделать это можно и при помощи комбинации клавиш Ctrl + N.
  4. Открытие нового файла в среде разработки для создания бота в Discord при помощи Python

  5. В новом окне, которое и предназначено для написания кода, вставьте блок

    settings = {
    'token': 'Ваш токен',
    'bot': 'Имя бота',
    'id': Client ID бота, без кавычек,
    'prefix': 'Префикс бота'
    }

  6. Вставка кода словаря для создания бота в Discord при помощи Python

  7. Теперь понадобится отыскать информацию для ее замены в словаре. Сначала найдите Client ID приложения на сайте разработчиков. Скопируйте его и замените в соответствующую строку.
  8. Копирование ИД на сайте приложения для создания бота в Discord при помощи Python

  9. Вызовите меню и перейдите в раздел «Bot».
  10. Переход к копированию токена для создания бота в Discord при помощи Python

  11. Скопируйте его уникальный токен, щелкнув по специально отведенной для этого кнопке.
  12. Копирование токена для создания бота в Discord при помощи Python

  13. Вставьте токен вместо надписи, сделайте то же самое с именем бота и используемым префиксом (префикс нужен для вызова команд и всегда идет перед ними, например !play, а вы можете заменить восклицательный знак на любые другие символы).
  14. Замена строк в файле словаря для создания бота в Discord при помощи Python

  15. Как только вся информация была заменена, снова вызовите меню «File» и выберите вариант «Save As».
  16. Переход к сохранению файла словаря для создания бота в Discord при помощи Python

  17. Создайте отдельную папку для файлов бота, назовите этот как config и подтвердите сохранение.
  18. Сохранение файла словаря для создания бота в Discord при помощи Python

Шаг 3: Создание тела бота

Для обеспечения базового функционирования бота ему нужно создать «тело» — основной код для запуска и работы на сервере. Понадобится отдельный файл, который можно назвать как угодно, но обязательно сохранить его в том же месте, где находится созданный ранее словарь.

  1. В среде разработки откройте меню «File» и создайте новый файл.
  2. Создание файла тела для создания бота в Discord при помощи Python

  3. Вставьте туда три команды, которые предназначены для импорта установленных библиотек и созданного ранее файла:

    import discord
    from discord.ext import commands
    from config import settings

  4. Импорт библиотек и словаря в файл тела для создания бота в Discord при помощи Python

  5. Добавьте строку bot = commands.Bot(command_prefix = settings['prefix']) # Так как мы указали префикс в settings, обращаемся к словарю с ключом prefix.
  6. Объявление бота в основном файле для создания бота в Discord при помощи Python

  7. Основной код таков:

    @bot.command() # Не передаём аргумент pass_context, так как он был нужен в старых версиях.
    async def hello(ctx): # Создаём функцию и передаём аргумент ctx.
    author = ctx.message.author # Объявляем переменную author и записываем туда информацию об авторе.


    await ctx.send(f'Hello, {author.mention}!') # Выводим сообщение с упоминанием автора, обращаясь к переменной author.

  8. Обращайте внимание на комментарии, идущие после знака «#» — они позволят разобраться с предназначением каждой строки.
  9. Добавление команд в основной файл для создания бота в Discord при помощи Python

  10. Команда для запуска выглядит так: bot.run(settings['token']) # Обращаемся к словарю settings с ключом token, для получения токена.
  11. Строка запуска приложения для создания бота в Discord при помощи Python

  12. По завершении снова откройте уже знакомое меню и перейдите к сохранению файла.
  13. Переход к сохранению основного файла для создания бота в Discord при помощи Python

  14. Задайте для него любое название и поместите в папку с конфигом.
  15. Сохранение основного файла для создания бота в Discord при помощи Python

Далее вы видите полный код, о котором шла речь выше, поэтому при надобности просто можете скопировать его.

Использование альтернативного кода для создания бота в Discord при помощи Python

import discord
from discord.ext import commands
from config import settings

bot = commands.Bot(command_prefix = settings['prefix'])

@bot.command() # Не передаём аргумент pass_context, так как он был нужен в старых версиях.
async def hello(ctx): # Создаём функцию и передаём аргумент ctx.
author = ctx.message.author # Объявляем переменную author и записываем туда информацию об авторе.
await ctx.send(f'Hello, {author.mention}!') # Выводим сообщение с упоминанием автора, обращаясь к переменной author.

bot.run(settings['token']) # Обращаемся к словарю settings с ключом token, для получения токена

Дополнительно уточним, что вы можете использовать альтернативную схему, избавившись от файла со словарем и получив немного другое «тело» для бота. Решите, подходит ли вам этот код больше. Указанные строки с токеном нужно будет отредактировать под себя.

import discord
from discord.ext import commands

TOKEN = 'Ваш токен'
bot = commands.Bot(command_prefix='!')

@bot.command(pass_context=True) # разрешаем передавать аргументы
async def test(ctx, arg): # создаем асинхронную функцию бота
await ctx.send(arg) # отправляем обратно аргумент

bot.run(TOKEN)

Шаг 4: Запуск бота

Теперь можно запустить бота для проверки, для чего понадобится созданный в Шаге 3 основной файл. Скомпилируйте его прямо через среду разработки или вызовите «Командную строку» и введите там python bot.py, где bot.py — название созданного файла. Если файл найти не удалось, укажите его полный путь, например python C:UsersUSER_NAMEbot.py.

Запуск основного файла для создания бота в Discord при помощи Python

Перейдите в Дискорд и проверьте текущее состояние бота. Он должен отображаться в списке участников в разделе «В сети» вместе с зеленой точкой.

Проверка статуса бота для создания в Discord после его создания при помощи Python

Воспользуйтесь открытыми источниками или собственными знаниями, чтобы написать команды для бота или реализовать другие задачи, которые он должен выполнять. Для этого редактируйте его основной файл или создавайте другие, связывая все в единый проект.

Вариант 2: JavaScript и discord.js

Следующий вариант создания бота для Discord — использование JS и подключаемой библиотеки discord.js, которая добавляет все необходимые компоненты для работы с ботами. Принцип действий отличается от предыдущего варианта лишь инструментами и разницей в синтаксисах языков программирования, но остается примерно таким же.

Шаг 1: Установка Node.js и discord.js

Расширить функциональность JS и превратить его в язык программирования общего назначения поможет платформа Node.js, установкой которой и рекомендуем заняться в первую очередь. Для этого выполните простейший алгоритм действий:

Перейти на официальный сайт Node.js

  1. Откройте страницу Node.js в интернете и выберите последнюю рекомендованную версию для скачивания.
  2. Кнопка скачивания расширенной платформы для создания бота в Discord при помощи JavaScript

  3. Дождитесь получения исполняемого файла и запустите его.
  4. Процесс загрузки расширенной платформы для создания бота в Discord при помощи JavaScript

  5. Следуйте появившимся на экране инструкциям, завершите установку и перезагрузите компьютер.
  6. Установка расширенной платформы для создания бота в Discord при помощи JavaScript

  7. Раскройте «Пуск» и через поиск отыщите классическое приложение «Командная строка».
  8. Переход в Командную строку для создания бота в Discord при помощи JavaScript

  9. В ней напишите команду npm init и активируйте ее нажатием Enter.
  10. Команда установки файлов пакетов для создания бота в Discord при помощи JavaScript

  11. Создайте стандартный пакет с пользовательской информацией, нажимая Enter после ввода каждого параметра, или оставьте все по умолчанию.
  12. Процесс установки файлов пакетов для создания бота в Discord при помощи JavaScript

  13. Когда все параметры пакета окажутся заданы, вы получите предупреждение, которое нужно подтвердить, снова нажав Enter.
  14. Успешная установка файлов пакетов для создания бота в Discord при помощи JavaScript

  15. Введите команду npm install для установки недостающих стандартных компонентов.
  16. Команда установки основных компонентов библиотек для создания бота в Discord при помощи JavaScript

  17. Дождитесь завершения их загрузки и появления строки ввода.
  18. Успешная установка компонентов библиотек для создания бота в Discord при помощи JavaScript

  19. Напишите npm install discord.js.
  20. Установка библиотеки для создания бота в Discord при помощи JavaScript

  21. Как только и эта команда выполнена, откройте папку своего пользователя и убедитесь в наличии созданных файлов пакета формата JSON.
  22. Проверка добавленных пакетов для создания бота в Discord при помощи JavaScript

Шаг 2: Работа с файлами бота

Все действия, связанные с файлами бота и программным кодом, рассмотрим в рамках одного этапа, поскольку делить их на несколько просто не имеет смысла. Вам понадобятся три основных файла, куда и вписываются все необходимые функции: один отвечает за конфигурацию бота, второй — за «тело», а третий хранит список добавленных команд.

  1. Для начала создайте файлы «bot.js» и «config.json» в одном каталоге.
  2. Создание основных файлов для создания бота в Discord при помощи JavaScript

  3. Откройте через текстовый редактор или среду разработки «config.json» и добавьте туда такие строки:

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

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

  4. Редактирование конфигурационного файла для создания бота в Discord при помощи JavaScript

  5. Откройте для редактирования файл «bot.js» (кстати, его название может быть любым). Вставьте туда данный блок кода.

    const Discord = require('discord.js'); // Подключаем библиотеку discord.js
    const robot = new Discord.Client(); // Объявляем, что robot - бот
    const comms = require("./comms.js"); // Подключаем файл с командами для бота
    const fs = require('fs'); // Подключаем родной модуль файловой системы node.js
    let config = require('./config.json'); // Подключаем файл с параметрами и информацией
    let token = config.token; // «Вытаскиваем» из него токен
    let prefix = config.prefix; // «Вытаскиваем» из него префикс

    robot.on("ready", function() {
    /* При успешном запуске, в консоли появится сообщение «[Имя бота] запустился!» */
    console.log(robot.user.username + " запустился!");
    });

    robot.on('message', (msg) => { // Реагирование на сообщения
    if (msg.author.username != robot.user.username && msg.author.discriminator != robot.user.discriminator) {
    var comm = msg.content.trim() + " ";
    var comm_name = comm.slice(0, comm.indexOf(" "));
    var messArr = comm.split(" ");
    for (comm_count in comms.comms) {
    var comm2 = prefix + comms.comms[comm_count].name;
    if (comm2 == comm_name) {
    comms.comms[comm_count].out(robot, msg, messArr);
    }
    }
    }
    });

    robot.login(token); // Авторизация бота

    Читайте комментарии к строчкам, идущие после слэшей («//»), чтобы самостоятельно разобраться с предназначением каждой.

  6. Редактирование файла тела для создания бота в Discord при помощи JavaScript

  7. Создайте третий файл — «comms.js», в котором в будущем будут храниться все необходимые команды.
  8. Создание файла с командами для создания бота в Discord при помощи JavaScript

  9. В него вставьте основной блок, который в будущем будет расширяться:

    const config = require('./config.json'); // Подключаем файл с параметрами и информацией
    const Discord = require('discord.js'); // Подключаем библиотеку discord.js
    const prefix = config.prefix; // «Вытаскиваем» префикс

    // Команды //

    function test(robot, mess, args) {
    mess.channel.send('Test!')
    }

    // Список команд //

    var comms_list = [{
    name: "test",
    out: test,
    about: "Тестовая команда"
    }];

    // Name - название команды, на которую будет реагировать бот
    // Out - название функции с командой
    // About - описание команды

    module.exports.comms = comms_list;

  10. Редактирование файла с командами для создания бота в Discord при помощи JavaScript

Для дальнейшей работы с командами достаточно будет объявить их функции и пополнить список соответствующими блоками кода. На примере готовый файл «comms.js» выглядит так:

const config = require('./config.json');
const Discord = require('discord.js');
const prefix = config.prefix;
const versions = config.versions;

// Команды //

function test(robot, mess, args) {
mess.channel.send("Тест!")
}

function hello(robot, mess, args) {
mess.reply("Привет!")
}

// Список команд //

var comms_list = [{
name: "test",
out: test,
about: "Тестовая команда"
},
{
name: "hello",
out: hello,
about: "Команда для приветствия!"
}
}

module.exports.comms = comms_list;

Шаг 3: Запуск бота

Первые действия с ботом на JavaScript завершены, а значит, можно запустить его и проверить работу. Для этого вам понадобится выполнить следующее:

  1. Откройте меню «Пуск» через поиск отыщите «Командную строку» и запустите ее.
  2. Переход к запуску приложения для создания бота в Discord при помощи JavaScript

  3. Введите node bot.js, где bot.js — название основного файла с кодом для бота. Если он находится не в вашей домашней папке, указывайте полный путь к файлу или сначала перейдите к расположению, используя команду cd.
  4. Запуск приложения для создания бота в Discord при помощи JavaScript через командную строку

Примеры полезных команд

В завершение этого варианта вкратце расскажем о двух полезных командах, которые могут пригодиться при настройке бота. Их можно использовать в качестве тестовых, когда работа над проектом еще находится на стадии развития. Первая команда — !clear — удаляет указанное количество сообщений в чате. Ее код выглядит следующим образом:

const arggs = mess.content.split(' ').slice(1); // Все аргументы за именем команды с префиксом
const amount = arggs.join(' '); // Количество сообщений, которые должны быть удалены
if (!amount) return mess.channel.send('Вы не указали, сколько сообщений нужно удалить!'); // Проверка, задан ли параметр количества
if (isNaN(amount)) return mess.channel.send('Это не число!'); // Проверка, является ли числом ввод пользователя

if (amount > 100) return mess.channel.send('Вы не можете удалить 100 сообщений за раз'); // Проверка, является ли ввод пользователя числом больше 100
if (amount {
mess.channel.bulkDelete(messages)
mess.channel.send(`Удалено ${amount} сообщений!`)
})
};
delete_messages(); // Вызов асинхронной функции

Вторая команда предназначена для подбрасывания монетки и запускается путем ввода !heads_or_tails в чате. Здесь код не такой сложный, поскольку действий мало и бот должен откликнуться всего на один запрос без огромного количества переменных.

mess.channel.send('Монета подбрасывается...')

var random = Math.floor(Math.random() * 4) + 1; // Объявление переменной random - она вычисляет случайное число от 1 до 3

if (random === 1) { // Если вычислено число 1, то выпадает орёл.
mess.channel.send(':full_moon: Орёл!')
} else if (random === 2) { // Если вычислено число 2, то выпадает решка.
mess.channel.send(':new_moon: Решка!')
} else if (random === 3) { // Если вычислено число 3, то монета падает ребром.
mess.channel.send(':last_quarter_moon: Монета упала ребром!')
}

В интернете вы можете найти другие полезные команды, которые хотите включить в своего бота, однако для работы с ними все же понадобятся продвинутые знания в JavaScript или Python, чтобы самостоятельно исправлять ошибки или редактировать код под себя.

Пользователи часто спрашивают, как создать бота в Дискорде и тем самым получить программу с необходимыми функциями. Сразу отметим, что достижение такой цели — непростая задача, а реализовать ее можно несколькими способами, к примеру, на основе discord.js, на Python или с помощью программы Discord Bot Maker.

Как создать Дискорд-бота на основе discord.js

На практике API Discord представляет собой удобный инструмент, позволяющий создать, а впоследствии использовать бота. С его помощью легко разработать помощника для решения разных задач, а далее задать необходимый набор команд. Для примера рассмотрим общий алгоритм создания бота для музыки. При правильном подходе он сможет проигрывать, пропускать и останавливать музыкальные файлы. Кроме того, в его функции будет входить поддержка очереди на проигрывание мелодии.

Выполните следующие шаги:

  1. Войдите на сайт discord.com/developers/applications/.

  1. Жмите на кнопку New Application.

  1. Введите название будущего бота Дискорд, к примеру, Music Bot.
  2. Перейдите на вкладку Bot, а после жмите на кнопку Add Bot.


Этих действий достаточно, чтобы создать бота Дискорд, после чего нужно его добавить на сервер с помощью OAuth2 URL-генератора. Сделайте следующие шаги:

  1. Переместитесь в раздел OAuth2 и выберите Bot в панели Scopes.

  1. Укажите необходимые разрешения для проигрывания музыки и чтения.
  2. Копируйте созданный URL и вставьте его в веб-проводник.
  3. Выберите сервер, куда нужно добавить URL.
  4. Жмите на кнопку авторизации (Authorize).


На следующем этапе нужно создать проект с применением терминала. Для этого создайте директорию и перейдите ее с помощью следующих команд — mkdir musicbot && cd musicbot. Далее сделайте следующее:

  1. Создайте модули проекта с применением nmp init.
  2. Ответьте на несколько вопросов, которые необходимы, чтобы создать бота в Дискорд.
  3. Сделайте два файла, где будет вестись работа — touch index.js && touch config.json.
  4. Откройте проект в редакторе, к примеру, с помощью VS Code с применением приказа code.
  5. Установите группу зависимостей, необходимых для дальнейшей работы — npm install discord.js ffmpeg-binaries opusscript ytdl-core –save.
  6. Продолжите создание файла на config.json. На этом этапе сохраните префикс и токен для бота.

{

«prefix»: «!»,

«token»: «your-toke»

}

  1. Войдите на портал создания Дискорд и копируйте токен из раздела Bot (жмите на кнопку Copy).

Теперь нужно создать код javascript. Для этого копируйте следующие зависимости:

const Discord = require(‘discord.js’);

const {

prefix,

token,

} = require(‘./config.json’);

const ytdl = require(‘ytdl-core’);

После этого нужно создать с применением токена клиент и логин.

const client = new Discord.Client();

client.login(token);

Далее добавьте несколько listeners, которые выполняют console.log при пуске.

client.once(‘ready’, () => {

console.log(‘Ready!’);

});

client.once(‘reconnecting’, () => {

console.log(‘Reconnecting!’);

});

client.once(‘disconnect’, () => {

console.log(‘Disconnect!’);

});

После этого начните работать с ботом Дискорд с применением node. Важно, чтобы вновь созданный Discord-бот был онлайн. В консоли появится Ready!. Команда — node index.js.

Задание команд для бота Дискорд

Теперь остается задать необходимые команды.

Для чтения сообщений

Чтобы Дискорд-бот мог читать, напишите функцию.

client.on(‘message’, async message => {

}

Далее сделайте listener для massage-события, получите сообщение и сохраните его в massage. Если информация пришла от бота Дискорд, игнорируйте ее. Выполните проверку с помощью следующей команды.

if (message.author.bot) return;

Если сообщение вернулось, значит, его смог создать бот. Теперь проверьте, с какого префикса оно начинается.

if (!message.content.startsWith(prefix)) return;

Далее проверьте команду, которую нужно активировать. Используйте следующие команды.

if (message.content.startsWith(`${prefix}play`)) {

execute(message, serverQueue);

return;

} else if (message.content.startsWith(`${prefix}skip`)) {

skip(message, serverQueue);

return;

} else if (message.content.startsWith(`${prefix}stop`)) {

stop(message, serverQueue);

return;

} else {

message.channel.send(‘You need to enter a valid command!’)

}

После получения списка команд, которые можно запустить, переходите к их созданию.

Добавление песен

Здесь нужна гильдия, песня и библиотека ytdl (должна быть установлена заранее). Сделайте map с названием очереди, где будут храниться песни.

const queue = new Map();

Теперь создайте async0-функцию с названием execute и убедитесь, находится ли пользователь в чате, и имеется ли необходимое разрешение. При его отсутствии пишете сообщение об ошибке.

async function execute(message, serverQueue) {

const args = message.content.split(‘ ‘);

const voiceChannel = message.member.voiceChannel;

if (!voiceChannel) return message.channel.send(‘You need to be in a voice channel to play music!’);

const permissions =     voiceChannel.permissionsFor(message.client.user);

if (!permissions.has(‘CONNECT’) || !permissions.has(‘SPEAK’)) {

return message.channel.send(‘I need the permissions to join and   speak in your voice channel!’);

}

}

Перейдите к получению данных о песне и сохраните ее в song. Для этого потребуется ytdl-библиотека, получающая данные по ютуб-ссылке.

const songInfo = await ytdl.getInfo(args[1]);

const song = {

title: songInfo.title,

url: songInfo.video_url,

};

Необходимые данные сохраняются в song. Теперь нужно создать контракт, обеспечивающий добавление в очередь. Проверьте факт определения serverQueue (проигрывание музыки), а после отправьте сообщение о достижении результата. Если это не удалось сделать, нужно его создать и соединиться с голосовым каналом и начать играть песню.

if (!serverQueue) {

}else {

serverQueue.songs.push(song);

console.log(serverQueue.songs);

return message.channel.send(`${song.title} has been added to the queue!`);

}

В раздел serverQueue, если он пустой, добавьте трек. В случае, когда serverQueue имеет параметр null, сделайте контракт.

// Creating the contract for our queue

const queueContruct = {

textChannel: message.channel,

voiceChannel: voiceChannel,

connection: null,

songs: [],

volume: 5,

playing: true,

};

// Setting the queue using our contract

queue.set(message.guild.id, queueContruct);

// Pushing the song to our songs array

queueContruct.songs.push(song);

try {

// Here we try to join the voicechat and save our connection into our object.

var connection = await voiceChannel.join();

queueContruct.connection = connection;

// Calling the play function to start a song

play(message.guild, queueContruct.songs[0]);

} catch (err) {

// Printing the error message if the bot fails to join the voicechat

console.log(err);

queue.delete(message.guild.id);

return message.channel.send(err);

}

Проигрывание трека

Теперь нужно создать опцию play для бота Дискорд с параметрами гильдия и песня, а также проверкой объекта song.

function play(guild, song) {

const serverQueue = queue.get(guild.id);

if (!song) {

serverQueue.voiceChannel.leave();

queue.delete(guild.id);

return;

}

}

Если да, нужно уйти с голосового канала и удалить очередь.

Далее трек играет с применением URL и playStream.

const dispatcher = serverQueue.connection.playStream(ytdl(song.url))

.on(‘end’, () => {

console.log(‘Music ended!’);

// Deletes the finished song from the queue

serverQueue.songs.shift();

// Calls the play function again with the next song

play(guild, serverQueue.songs[0]);

})

.on(‘error’, error => {

console.error(error);

});

dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);

Здесь создается stream, а его URL передается адресу песни.

Пропуск трека

Здесь оформите завершение диспетчера, который был сделан в опции play. Такое действие необходимо, чтобы начал играть очередной трек.

function skip(message, serverQueue) {

if (!message.member.voiceChannel) return message.channel.send(‘You have to be in a voice channel to stop the music!’);

if (!serverQueue) return message.channel.send(‘There is no song that I could skip!’);

serverQueue.connection.dispatcher.end();

}

Здесь проверяется, есть ли пользователь в голосовом канале, и имеется ли трек для пропуска.

Остановка

Опция stop подразумевает очистку массива song, удаления очереди и выхода из чата.

function stop(message, serverQueue) {

if (!message.member.voiceChannel) return message.channel.send(‘You have to be in a voice channel to stop the music!’);

serverQueue.songs = [];

serverQueue.connection.dispatcher.end();

}

Полный код бота для Дискорд

const Discord = require(‘discord.js’);

const {

prefix,

token,

} = require(‘./config.json’);

const ytdl = require(‘ytdl-core’);

const client = new Discord.Client();

const queue = new Map();

client.once(‘ready’, () => {

console.log(‘Ready!’);

});

client.once(‘reconnecting’, () => {

console.log(‘Reconnecting!’);

});

client.once(‘disconnect’, () => {

console.log(‘Disconnect!’);

});

client.on(‘message’, async message => {

if (message.author.bot) return;

if (!message.content.startsWith(prefix)) return;

const serverQueue = queue.get(message.guild.id);

if (message.content.startsWith(`${prefix}play`)) {

execute(message, serverQueue);

return;

} else if (message.content.startsWith(`${prefix}skip`)) {

skip(message, serverQueue);

return;

} else if (message.content.startsWith(`${prefix}stop`)) {

stop(message, serverQueue);

return;

} else {

message.channel.send(‘You need to enter a valid command!’)

}

});

async function execute(message, serverQueue) {

const args = message.content.split(‘ ‘);

const voiceChannel = message.member.voiceChannel;

if (!voiceChannel) return message.channel.send(‘You need to be in a voice channel to play music!’);

const permissions = voiceChannel.permissionsFor(message.client.user);

if (!permissions.has(‘CONNECT’) || !permissions.has(‘SPEAK’)) {

return message.channel.send(‘I need the permissions to join and speak in your voice channel!’);

}

const songInfo = await ytdl.getInfo(args[1]);

const song = {

title: songInfo.title,

url: songInfo.video_url,

};

if (!serverQueue) {

const queueContruct = {

textChannel: message.channel,

voiceChannel: voiceChannel,

connection: null,

songs: [],

volume: 5,

playing: true,

};

queue.set(message.guild.id, queueContruct);

queueContruct.songs.push(song);

try {

var connection = await voiceChannel.join();

queueContruct.connection = connection;

play(message.guild, queueContruct.songs[0]);

} catch (err) {

console.log(err);

queue.delete(message.guild.id);

return message.channel.send(err);

}

} else {

serverQueue.songs.push(song);

console.log(serverQueue.songs);

return message.channel.send(`${song.title} has been added to the queue!`);

}

}

function skip(message, serverQueue) {

if (!message.member.voiceChannel) return message.channel.send(‘You have to be in a voice channel to stop the music!’);

if (!serverQueue) return message.channel.send(‘There is no song that I could skip!’);

serverQueue.connection.dispatcher.end();

}

function stop(message, serverQueue) {

if (!message.member.voiceChannel) return message.channel.send(‘You have to be in a voice channel to stop the music!’);

serverQueue.songs = [];

serverQueue.connection.dispatcher.end();

}

function play(guild, song) {

const serverQueue = queue.get(guild.id);

if (!song) {

serverQueue.voiceChannel.leave();

queue.delete(guild.id);

return;

}

const dispatcher = serverQueue.connection.playStream(ytdl(song.url))

.on(‘end’, () => {

console.log(‘Music ended!’);

serverQueue.songs.shift();

play(guild, serverQueue.songs[0]);

})

.on(‘error’, error => {

console.error(error);

});

dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);

}

client.login(token);

Как создать бота в Дискорд на Python

Еще один способ — сделать Дискорд бота на Python. Общий алгоритм действий следующий:

  1. Установите текстовый редактор.
  2. Подготовьте Python 3.4.2+ и Pip3 (менеджер пакетов, необходимый для установки библиотек).
  3. Создайте пустой файл с названием, к примеру, chatbot.py.
  4. Откройте его с помощью текстового редактора и вставьте код. Для его написания необходимо владеть языком Python.
  5. Пример кода — gist.github.com/Tetraquark/911eb07052be10f0bb1323adb4056f86.
  6. Поменяйте значение переменной DISCORD_BOT_TOKEN, где нужно сохранить токен бота. Для получения информации перейдите по ссылке discord.com/developers/applications, выберите нужный бот Дискорд или создайте новый, а после жмите на clich to reveal, где откроется токен приложения. Занести его в переменную DISCORD_BOT_TOKEN.
  7. Сохраните файл и запустите бот Дискорд.

Для выполнения указанной выше работы необходимо обладать определенным набором знаний.

Применение Discord Bot Maker

Как вариант, можно создать бота с помощью Discord Bot Maker. Это мощный инструмент, позволяющий сделать помощника, умеющего отправлять файлы, генерировать и отправлять сообщения, манипулировать эмодзи, редактировать изображения и т. д.

Чтобы создать Дискорд-бота, сделайте следующее:

  1. Скачайте и установите утилиту.
  2. Жмите на кнопку создания бота.
  3. Установите необходимые команды.
  4. Сохраните и запустите bot для Дискорд

Процесс создания интуитивно понятен, поэтому не будем останавливаться на нем подробнее.

Итоги

Теперь вы знаете, как сделать своего бота Discord, и что потребуется для решения задачи. Для этого нужно иметь определенные навыки программирования или, как вариант, использовать Discord Bot Maker. Если у вас нет лишнего времени, лучше скачать готового помощника и пользоваться его возможностями.

Из этого туториала Вы узнаете, как полностью создать собственного бота Discord в облаке.

Вам не нужно ничего устанавливать на свой компьютер, и вам не нужно ничего платить за размещение своего бота.

Мы будем использовать целый ряд инструментов, в том числе Discord API, библиотеки Python, и платформы облачных вычислений под названием Repl.it.

Как создать учетную запись Discord Bot

Чтобы работать с библиотекой Python и API Discord, мы должны сначала создать учетную запись Discord Bot.

Вот шаг к созданию учетной записи Discord Bot.

1. Убедитесь, что вы вошли на сайт Discord.

2. Перейдите на страницу приложения.

3. Щелкните кнопку «Новое приложение».

4. Дайте приложению имя и нажмите «Создать».

5. Перейдите на вкладку «Бот» и нажмите «Добавить бота». Вам нужно будет подтвердить действие, нажав «Yes, do it!»

Оставьте настройки по умолчанию для Public Bot и Require OAuth2 Code Grant.

Ваш бот создан. Следующим шагом будет копирование токена.

Этот токен является паролем вашего бота, поэтому не сообщайте его никому. Это может позволить кому-то войти в ваш бот и делать разные плохие вещи.

Вы можете регенерировать токен, если он случайно станет доступен.

Как пригласить вашего бота присоединиться к серверу

Теперь вам нужно подключить своего пользователя-бота к серверу. Для этого вы должны создать для него URL-адрес приглашения.

Перейдите на вкладку «OAuth2». Затем выберите «бот» в разделе «scopes».

Теперь выберите нужные разрешения для бота. Наш бот будет в основном использовать текстовые сообщения, поэтому нам не нужно много разрешений. Вам может потребоваться больше, в зависимости от того, что вы хотите, чтобы ваш бот делал. Будьте осторожны с разрешением «Администратор».

После выбора соответствующих разрешений нажмите кнопку «Copy» над разрешениями. Это скопирует URL-адрес, который можно использовать для добавления бота на сервер.

Вставьте URL-адрес в свой браузер, выберите сервер, на который будет приглашен бот, и нажмите «Авторизовать».

Чтобы добавить бота, вашей учетной записи необходимы разрешения «Управление сервером».

Теперь, когда вы создали пользователя-бота, мы начнем писать код Python для бота.

Как написать код для базового бота Discord с помощью библиотеки discord.py

Мы будем использовать библиотеку Python discord.py, чтобы написать код для бота. discord.py — это оболочка API для Discord, которая упрощает создание бота Discord на Python.

Как создать реплику и установить disocrd.py

Вы можете разработать бота на своем локальном компьютере с помощью любого редактора кода. Однако в этом уроке мы будем использовать Repl.it, потому что это упростит всем пользователям следовать его указаниям. Repl.it — ​​это онлайн-среда IDE, которую вы можете использовать в своем веб-браузере.

Создайте новый Repl и выберите «Python» в качестве языка.

Чтобы использовать библиотеку discord.py, просто напишите import discord  вверху main.py. Repl.it автоматически установит эту зависимость, когда вы нажмете кнопку «Run».

Если вы предпочитаете кодировать бота локально, вы можете использовать эту команду в MacOS для установки discord.py:

python3 -m pip install -U discord.py

Возможно, вам придется использовать pip3 вместо pip.

Если вы используете Windows, вы должны вместо этого использовать следующую строку:

py -3 -m pip install -U discord.py

Как настроить события Discord для вашего бота

discord.py вращается вокруг концепции событий. Событие — это то, что вы слушаете, а затем реагируете. Например, когда происходит сообщение, вы получаете событие об этом, на которое можете ответить.

Сделаем бота, который отвечает на конкретное сообщение. Этот простой код бота вместе с объяснением кода взят из документации discord.py. Позже мы добавим в бота дополнительные функции.

Добавьте этот код в main.py. (Вы можете назвать файл как-нибудь иначе, только не discord.py.) Я вскоре объясню, что делает весь этот код.

import discord
import os

client = discord.Client()

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('$hello'):
        await message.channel.send('Hello!')

client.run(os.getenv('TOKEN'))

Когда вы создали своего пользователя-бота в Discord, вы скопировали токен. Теперь мы собираемся создать файл .env для хранения токена. Если вы запускаете свой код локально, вам не нужен файл .env. Просто замените os.getenv('TOKEN') токеном.

.env файлы используются для объявления переменных среды. На Repl.it большинство создаваемых вами файлов видны всем, но .env файлы видны только вам. Другие люди, просматривающие публичный ответ, не смогут увидеть содержимое файла .env.

Поэтому, если вы разрабатываете на Repl.it, включайте в файл .env только личную информацию, такую ​​как токены или ключи.

Нажмите кнопку «Добавить файл» и создайте файл с именем .env.

Внутри файла добавьте следующую строку, включая ваш фактический токен, который вы скопировали ранее:

Теперь давайте рассмотрим, что делает каждая строка в коде вашего бота Discord.

  1. Первая строка импортирует библиотеку discord.py.
  2. Вторая строка импортирует библиотеку os, но она используется только для получения переменной TOKEN из файла .env. Если вы не используете .env файл, эта строка вам не нужна.
  3. Затем мы создаем экземпляр Client. Это связь с Discord.
  4. Декоратор @client.event() используется для регистрации события. Это асинхронная библиотека, поэтому все делается с помощью обратных вызовов. Обратный вызов — это функция, которая вызывается, когда происходит что-то еще. В этом коде событие on_ready() вызывается, когда бот готов к использованию. Затем, когда бот получает сообщение, вызывается событие on_message().
  5. Триггер событий каждый раз вызывает on_message(), когда принимается сообщение, но мы не хотим, что-то делать, если сообщение от самих себя. Поэтому, если Message.author это то же самое, что и Client.user, просто делаем return.
  6. Затем мы проверяем Message.content, начинается ли с '$hello'. Если да, то бот отвечает 'Hello!' в канал, в котором он использовался.
  7. Теперь, когда бот настроен, последняя строка запускает бот с токеном входа. Он получает токен из файла .env.

У нас есть код для бота, поэтому теперь нам просто нужно его запустить.

Как запустить бота

Теперь нажмите кнопку запуска вверху, чтобы запустить своего бота в repl.it.

Если вы пишете бота локально, вы можете использовать эти команды в терминале для запуска бота:

В Windows:

В других системах:

Теперь перейдите в свою комнату в Discord и введите «$hello». Ваш бот должен ответить «Hello!».

Как улучшить бота

Теперь, когда у нас есть базовый бот, мы его улучшим. Не зря он называется «Encourage Bot».

Этот бот будет отвечать сообщением ‘Hello!’ всякий раз, когда кто-то отправляет сообщение, содержащее грустное или удручающее слово.

Любой желающий сможет добавить ободряющие сообщения для использования бота, а отправленные пользователем сообщения будут храниться в базе данных Repl.it.

Бот также вернет случайную вдохновляющую цитату из API, когда кто-то наберет в чате сообщение «$inspire».

Мы начнем с добавления функции «$inspire».

Как добавить в бота вдохновляющие цитаты

Мы будем получать вдохновляющие цитаты из API под названием zenquotes.io. Нам нужно импортировать еще пару модулей Python, добавить функцию get_quote() и обновить код нашего бота, чтобы вызвать функцию.

Вот обновленный код. После кода я объясню новые части.

import discord
import os
import requests
import json

client = discord.Client()

def get_quote():
  response = requests.get("https://zenquotes.io/api/random")
  json_data = json.loads(response.text)
  quote = json_data[0]['q'] + " -" + json_data[0]['a']
  return(quote)

@client.event
async def on_ready():
  print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
  if message.author == client.user:
    return

  if message.content.startswith('$inspire'):
    quote = get_quote()
    await message.channel.send(quote)

client.run(os.getenv('TOKEN'))

Теперь нам нужно импортировать модуль requests. Этот модуль позволяет нашему коду делать HTTP-запрос для получения данных из API. API возвращает JSON, и модуль json упрощает работу с возвращенными данными.

Функция get_quote() очень проста. Во-первых, она использует модуль запросов для запроса данных из URL-адреса API. API возвращает случайную вдохновляющую цитату. Эту функцию можно легко переписать для получения котировок из другого API, если текущий перестанет работать.

Затем внутри функции мы используем json.loads() для преобразования ответа API в JSON. Методом проб и ошибок я понял, как перевести цитату из JSON в нужный строковый формат. Цитата возвращается из функции в виде строки.

Последняя часть кода обновляется ближе к концу. Ранее он искал сообщение, которое начиналось с «$hello». Теперь он ищет «$inspire». Вместо того, чтобы возвращать «Hello!», Он получает цитату quote = get_quote() и возвращает цитату.

На этом этапе вы можете запустить свой код и попробовать его.

Как добавить в бота обнадеживающие сообщения

Теперь мы реализуем функцию, при которой бот отвечает обнадеживающими сообщениями, когда пользователь отправляет сообщение с грустным словом.

Как добавить грустные слова в бота

Для начала нам нужно создать список Python, содержащий грустные слова, на которые будет отвечать бот.

Добавьте следующую строку после создания переменной client:

sad_words = ["sad", "depressed", "unhappy", "angry", "miserable"]

Не стесняйтесь добавлять в список больше слов.

Как добавить в бота обнадеживающие сообщения

Теперь мы добавим список ободряющих сообщений, которыми бот ответит.

Добавьте следующий список после созданного вами списка sad_words:

starter_encouragements = [
  "Cheer up!",
  "Hang in there.",
  "You are a great person / bot!"
]

Как и раньше, не стесняйтесь добавлять в список другие фразы по вашему выбору. Сейчас я использую всего три элемента, потому что позже мы добавим возможность пользователям добавлять больше ободряющих фраз для использования ботом.

Как отвечать на сообщения

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

Теперь мы обновим функцию on_message(), чтобы проверять все сообщения, чтобы увидеть, содержат ли они слово из списка sad_words. Если будет найдено грустное слово, бот отправит случайное сообщение из списка.

Вот обновленный код:

async def on_message(message):
  if message.author == client.user:
    return

  msg = message.content

  if msg.startswith('$inspire'):
    quote = get_quote()
    await message.channel.send(quote)
    
  if any(word in msg for word in sad_words):
    await message.channel.send(random.choice(starter_encouragements))

Это хорошее время для тестирования бота. Теперь вы знаете достаточно, чтобы создать собственного бота. 

⛔ DEPRECATED

discordbotstut

Начнём. Ссылка на мой youtube канал.

Discord bot туториал. Туториал по созданию ботов для дискорда на node.js используя discord.js.

Creation date : 06.12.2019
Также отдельное спасибо Top Bots List и его создателю Angrymoyse#0444 за помощь в написании.

Установка node.js.

Давайте начнём создание бота. Если у вас установлена node.js, то пропустите сделающие 2 строчки.
Заходим на сайт node.js, скачиваем, устанавливаем. Скриншотов процесса установки нету, тк переустанавливать node.js нету желания. Но там всё интуитивно понятно.

Создание файлов, инициализация проекта, установка библиотек.

Создаём папку bot. Желательно не использовать кирилицу, юникод и т. п. в названии.
Сразу же создаём файл index.js или bot.js. Это не несёт особого смысла. Можно назвать как угодно, но принятно index.js / bot.js.
Это будет главный файл бота, т.е. первым запускается, в нём основной код бота.
Далее открываем консоль / терминал если у вас linux.
Для быстрого открытия консоли на windows можно нажать WIN + R, ввести cmd.
Далее переходим в папку бота, думаю как это сделать через консоль всем понятно. Пишим :
npm init — инициализация проекта.
Жмём enter до конца. Если ошибка в package name, то напишите bot.
npm i discord.js — установка библиотеки discord.js.

Редакторы кода.

Далее рекомендую установить один из следующих редакторов кода :

Atom.
VScode.
WebStorm (спасибо за подсказку Mice V 4.4.4#0444 )

Если очень слабый компьюер можете поставить notepad++, но это для постоянной основы не самый хороший вариант.
Лично я использую Atom.

Аккаунт бота.

Вы можете зарегистрировать его на сайте discord developers.
Жмём кнопку «New Application». Вводим название бота. Жмём «Create».
Переходим во вкладку «Bot», нажимаем «Add Bot», затем «Yes, do it!»
Находим строку «token», немного ниже есть кнопка «Copy», нажимаем. Теперь в вашем буфере обмена есть токен бота.

Код.

Начало.

Создадим первый код. Пишем :

const Discord = require("discord.js"); //Подключаем discord.js для дальнейшего использования.
const client = new Discord.Client(); 
client.login("token"); //Где token пишем токен бота.
Запуск.

Открываем консоль, переходим в папку проекта и пишем :

node название-файла-с-кодом.js

в зависимости от названия файла.
Если у вас windows, то вы можете создать файл start.bat с текстом

node название-файла-с-кодом.js
pause

Если линукс, то вы можете создать файл start.sh

node название-файла-с-кодом.js

Это будет запускать бота. Далее я не буду говорить про запуск. Делайте это сами.

Конфиг.

Создаем файл config.json с конфигурацией нашего бота.

{
"version" : "1.0", 
"prefix" : "!"
}

В начале кода бота напишем :

const config = require("./config.json");

Еще вы можете создать конфиг прямо в коде бота.

let config ={ 
"version" : "1.0",
"prefix" : "!" 
}

Но второй вариант крайне не рекомендуется использовать, ведь для того что-бы изменить конфиг бота нам придется изменять его код.

Реагирование на сообщение.

Теперь давайте делать что-то когда приходит новое сообщение.
Например логировать его текст.

client.on("message", message => { //Пришло сообщение.
console.log(message.content); //console.log логирует в консоль, message - объект сообщения, message.content - строка объекта с текстом сообщения.
})

Получение информации о авторе сообщения (отправителе).

Давайте залогируем тег автора.

client.on("message", message => { //Пришло сообщение.
console.log(message.author.tag); //message.author.tag содержит в себе тег автора.
})

Команда !ping

Давайте в ответ на сообщение !ping отправлять такое сообщение : «@user, мой пинг равен » далее пинг.

client.on("message", message => { //Пришло сообщение.
if(message.content.toLowerCase()==config.prefix + "ping") //Если текст сообщения равен префиксу плюс ping, то происходит код в {} Часть кода .toLowerCase() превращает текст в строчный. (Делает из заглавных букв обычные.) 
{
message.reply("мой пинг равен " + client.ping) //message.reply отвечает на сообщение.
//Также можно использовать message.channel.send(message.author + ", мой пинг равен " + client.ping);
}
})

Также можно писать не

if(message.content.toLowerCase()==config.prefix + "ping")

А

if(message.content.toLowerCase().startsWith(config.prefix + "ping"))

.startsWith проверят начинается ли строка с символов в аргументах.

Об отправке сообщений.

Теперь рассмотрим message.channel.send();
Когда я только начинал программировать я не понимал смысл этой фразы, но сейчас понимаю и могу рассказать вам. message — объект сообщения, в нём есть channel — канал в который было отправлено, то есть с помощью message.channel мы получаем канал, а .send() отправляет туда сообщение.

client.on("message", message => { //Пришло сообщение.
if(message.content.toLowerCase()==config.prefix + "test")
{
message.channel.send("I am working now!");
}
})

Также можно отправлять сообщение по ID канала.
Делается это так :

//some code...
client.channels.get('ID канала').send("Hi!");

client.channels — все каналы которые есть на серверах с ботом.
.get(‘ID’) получает канал из них по ID.
.send(«Text»); Отправляет сообщение.
ID канала можно получить используя devepoer mode

Eval.

Также даже начинающим программистам будет очень полезна в боте команда !eval для выполнения кода не пиша его в коде бота, т.е. вы пишите !eval какой-то код и бот выполняет этот код.
Я нашёл хороший туториал по этой команде на github. Рекомендую ознакомиться и взять себе команду в код бота. Принцип её работы мы разберём позже. Тык.

RichEmbed.

Пример.

Думаю вы все видели как боты отправляют сообщения такого типа.

Image alt

Это называется RichEmbed (Embed).
Давайте отправим простой эмбед похожий на данный. (Картинка ниже)

Image alt

Команда.

Для этого создадим новую команду !ping.

client.on("message", message => { //Пришло сообщение.
if(message.content.toLowerCase()==config.prefix + "ping") //Выше было
{
let embed = new Discord.RichEmbed() //Создаём новый эмбед.
.setTitle('Пинг бота.') //Устанавливаем заголовок.
.setColor(`GREEN`) //Цвет зелёный. Можно указать hex.
.setDescription("Пинг : " + client.ping); //Устанавливаем описание.
message.channel.send(embed); //Отправляем.
}
})
Параметры.

В Embed есть много различных параметров, вы можете прочесть их далее, либо посмотреть на оффициальном сайте discord.js

embed.setColor("Цвет в hex или один из встроенных."); // Устанавливает цвет боковой полосы.
embed.setDescription("Описание") //Устанавливает описание.
embed.serFooter("Подпись") //Устанавливает подпись мелким шрифтом под эмбедом.
embed.setThumbnail("url") //Миниатюра эмбеда.
embed.setAuthor("Имя", "Url") //Устанавливает автора.
embed.addField("Заголовок", "Текст") //Добавляет поле.
embed.setImage("URL") //Добавляет картинку.
Пример.

Команда !avatar.

client.on("message", message => { //Пришло сообщение.
if(message.content.toLowerCase().startsWith(config.prefix + "avatar")) //Выше было
{
let mb = message.mentions.members.first() || message.member; // Если есть упомянание человека в сообщении, то берём его, если нету, то себя. Расскажу чуть позже.
let color = mb.displayHexColor; //Цвет самой высокой роли человека, если цвет невидимый то самой высокой отображаемой роли.
if (color == '#000000') color = mb.hoistRole.hexColor;//Цвет самой высокой роли человека.
let embed = new Discord.RichEmbed() //Создаём эмбед
.setImage(mb.user.avatarURL) //Устанавливаем картинку - аватар человека.
.setColor(color) //Цвет.
.setFooter("Аватар пользователя " + mb.user.tag); //Устанавливаем в подпись чей это аватар.
message.channel.send({embed}); //Отправляем.
}
})

Вышло так

Image alt

Команда !userinfo.

Давайте сделаем команду для получения информации о пользователе. Команда взята из моего бота.
Будем использовать библиотеку moment.js, устанавливаем npm i moment.js

const status = { //Создадим переменную со статусами чтобы они были не английском.
  "online": "Онлайн.",
  "idle": "Не на месте.",
  "dnd": "Не беспокоить.",
  "offline": "Оффлайн."
}

let mbr = message.mentions.members.first() || message.member; //Если есть упомянание, то mbr = тот кого упомянули, если нету то автору сообщения.
      if (mbr){ //Если всё ок.
      let embed = new Discord.RichEmbed() //Создаём эмбед
      .setAuthor(mbr.user.tag, mbr.user.avatarURL) //Устанавливаем автора
      .setColor(`GREEN`) //Цвет зелёный
      .setTitle("Тег") //Устанавливаем заголовок
      .setDescription(mbr.user.tag) //Описание - тег юзера.
      .addField("ID",  mbr.user.id) //Первое поле - айди автора.
      .addField("Никнейм",  mbr.nickname !== null ? mbr.nickname : "No nickname") //Второе поле - никнейм (НЕ ПУТАТЬ С НИКОМ И ТЕГОМ)!
      .addField("Статус", status[mbr.user.presence.status]) //Статус человека
      .addField("Играет в ", mbr.user.presence.game ? mbr.user.presence.game.name : "Ничего") //Во что играет
      .addField("Присоединился", moment(mbr.joinedAt).format('MMMM Do YYYY h:mm:ss')) //Когда зашёл на сервер
      .addField("Аккаунт создан", mbr.user.createdAt.toLocaleString()) //Когда создан аккаунт
      .addField("Роли на сервере", mbr.roles.filter(r => r.id !== message.guild.id).map(roles => ``${roles.name}``).join(" **|** ") || "No Roles") //Роли человека на сервере
      .setThumbnail(mbr.user.displayAvatarURL) //Аватар человека
      .setFooter("Информация о пользователе.") //Футер
      message.channel.send({embed}); //Отправляем
}
else message.reply("Вы забыли упомянуть пользователя."); //Это вряд-ли сможет произойти, но на всякий случай

Вышло так.

Image alt

Мой дискорд сервер!

Прошу зайти на мой дискорд сервер, ведь я долго делал туториал, а вам не сложно зайти на мой сервер в виде благодарности.

В разработке..

Понравилась статья? Поделить с друзьями:
  • Как написать ddos на python
  • Как написать daw
  • Как написать curl
  • Как написать csv файл
  • Как написать css селектор