Бесплатная миграция IT-инфраструктуры в облако

Как создать бота в Discord

Виталий Богданов
Виталий Богданов
Технический писатель
24 июля 2023 г.
10163
12 минут чтения
Средний рейтинг статьи: 3.7

Боты являются неотъемлемой частью управления сервером. Они значительно экономят время и позволяют качественно решать тривиальные задачи. Существуют готовые решения, но они ограничены по функционалу и не всегда походят. В таком случае можно создать бота самостоятельно. Рассмотрим, как создать бота в Дискорде — это позволит внедрить весь необходимый функционал.

Существует несколько способов создать бота в Discord. Для этого можно воспользоваться специальным софтом, написать код на Python либо discord.js. Рассмотрим все варианты создания, а также особенности добавления на сервер. Это непростой процесс, но мы опишем его подробно.

Среда разработки

На начальном этапе нужно выбрать среду для разработки и установить ее. Мы будем рассматривать создание бота на примере Visual Studio Code, но можно воспользоваться и другими средами для разработки, например, Atom, Eclipse, Notepad ++ и другие. Выбрав среду, скачайте ее на официальном сайте для вашей версии операционной системы.

Кроме среды разработки нужно установить необходимые расширения, а также среду выполнения. В качестве среды выполнения используется node.js, а расширения можно установить непосредственно из окна среды разработки.

Какие расширения могут быть полезны при создании дискорд-бота на JS? В первую очередь, это инструменты для запуска выбранных фрагментов созданного кода, а также расширение для удобного отображения рабочей области. Если вы используете Visual Studio Code, вы сможете найти эти расширения под именами Code Runner и Discord Presence.

Процесс создания бота

Процесс создания бота начинается на портале разработчиков. Для этого нужно выбрать опцию NEW APPLICATION. 

Image5

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

Image4

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

Image7

Перед тем как приступить к написанию кода, нужно создать папку и открыть ее в Visual Studio Code. Для этого воспользуйтесь командой: файл —> открыть папку.

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

Для начала создания описания бота в терминале вводим:

npm init

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

npm install
npm install discord.js

После этого у вас должна отображаться папка с файлами и два объекта с расширением .json.

Пишем код

Перед написанием кода нужно создать файл для хранения базовых данных о боте. Для этого создайте файл config.json. В нем указываете следующее:

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

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

Image3

В роли префикса используется начальная точка команды. Например, если вводится команда $help, то значок $ и будет являться префиксом. Обычно в качестве префикса используют знак восклицания !. Однако вы можете использовать практически любой символ в качестве префикса, включая буквы, цифры и специальные символы, если они не зарезервированы или не используются в других целях в вашем боте.

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

const Discord = require('discord.js'); // Подключаем библиотеку discord.js
const robot = new Discord.Client({ intents: [ 
    Discord.GatewayIntentBits.Guilds, 
    Discord.GatewayIntentBits.GuildMessages,
    Discord.GatewayIntentBits.MessageContent //Эта директива необходима, чтобы бот реагировал на тело сообщения
]}) // Объявляем, что robot — бот. В данную часть кода вносятся данные, зависящие от версии библиотеки discord.js, в примере использована Discord.js v14
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('messageCreate', (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); // Авторизация бота

Обратите внимание, что файл config.json должен находиться в том же каталоге, что и ваш bot.js, чтобы бот мог правильно считывать параметры из файла.

Для работы с параметрами бота создаем файл, в котором будут описаны команды. Файлу присваиваем имя 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;

Это примерный вариант, если есть необходимость, вы можете добавить больше функций и команд.

cloud

Перед запуском бота

Важно! Последние версии Discord требуют последних версий Node.js. Например, Дискорд версии 13 требует для запуска версию ноды не ниже 16. По умолчанию система использует старую версию Node версии 14. 

Проверить версию можно командой: 

node -v

Обновить версию можно командами:

Для Ubuntu:

curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - &&\
sudo apt-get install -y nodejs

Для Debian:

curl -fsSL https://deb.nodesource.com/setup_20.x | bash - &&\
apt-get install -y nodejs

Ошибка Unexpected token '??=' указывает на неподходящую версию, такие сущности доступны с версии Node 16+.

Запускаем бота

Как создать бота в Discord-сервисе, мы разобрали. Теперь осталось запустить его через терминал. Это можно сделать с помощью команды:

node bot.js

После запуска можно выбрать привилегии. Для этого нужно:

  1. Перейти во вкладку OAuth2. 
  2. В блоке Scopes поставить флажок напротив bot.

Image6

  1. В появившемся блоке Bot permissions — отметить галочками нужные привилегии. Галочка «Administrator» активирует все.

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

Image2

Также включите опцию «Message Content Intent» на вкладке «Bot»:

34a5ed5f 34dc 4604 97b8 3f49a144accf

Как создать сервер и подключить бота

Для бота нужно создать канал в Discord. 

  1. Зайдите в свою учетную запись Discord в браузере. 
  2. Для добавления сервера в боковой панели нажмите значок «+» и укажите, какой шаблон сервера хотите применить, для каких целей будете его использовать. 
  3. На следующем этапе назначьте имя сервера и изображение. 
  4. После этого завершите процесс создания нажатием кнопки Create.

В новом сервере по умолчанию присутствует два канала: голосовой и текстовый. Каждый из них имеет настройки, которые можно менять, нажав на иконку шестеренки. Если этих каналов недостаточно, пользователь может добавить новый, нажав значок «+». Для присвоения ID каналу нужно перейти в режим разработчика: app settings —> advanced —> developer mode.

Чтобы подключить бота, необходимо получить ссылку в OAuth2 -> URL Generator. 

Image1

Как мы и указывали немного выше: в Scopes выставляем галочку bot, ниже в Bot permissions выбираем разрешения, галочка Administrator активирует все. 

Полученную ссылку на бота вставляем в адресную строку. 

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

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

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

Чтобы бот подбадривал пользователей, можно добавить список ключевых фраз, в ответ на которые будут выводиться приветственные или другие сообщения. Для внесения нового функционала (триггерной фразы) для бота нужно внести данные в файл comms.js, для примера модифицируем функцию test. Пример добавления и редакции триггерных фраз выглядит так:

const config = require('./config.json'); // Подключаем файл с параметрами и информацией
const Discord = require('discord.js'); // Подключаем библиотеку discord.js
const prefix = config.prefix; // «Вытаскиваем» префикс
const sad_words = ["sad", "depressed", "unhappy", "angry", "miserable"]; // Слова можно задать на любом языке 

// Команды //

function test(robot, mess, args) {
    if (sad_words.some(word => mess.content.includes(word))) {
        mess.channel.send("Почему вы грустите? Может быть, я могу вам помочь?");
    } else {
        mess.channel.send('Test!');
    }
}

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

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

module.exports.comms = comms_list;

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

Проверить внесенные изменения можно, отправив сообщение вида:

!test sad

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

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

При необходимости слова и фразы можно задавать и на русском языке. Файл comms.js в таком случае будет выглядеть так:

const config = require('./config.json'); // Подключаем файл с параметрами и информацией
const Discord = require('discord.js'); // Подключаем библиотеку discord.js
const prefix = config.prefix; // «Вытаскиваем» префикс
const sad_words = ["sad", "depressed", "unhappy", "angry", "miserable"]; // Слова можно задать на любом языке
const starter_encouragements = ["Cheer up!", "Hang in there.", "You are a great person / bot!"];

// Команды //

function test(robot, mess, args) {
    if (sad_words.some(word => mess.content.includes(word))) {
        mess.channel.send("Почему вы грустите? Может быть, я могу вам помочь?");
    } else {
        mess.channel.send('Test!');
    }
}
function encourage(robot, mess, args) {
    const encouragement = starter_encouragements[Math.floor(Math.random() * starter_encouragements.length)];
    mess.channel.send(encouragement);
}

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

var comms_list = [
    {
        name: "test",
        out: test,
        about: "Тестовая команда"
    },
    {
        name: "encourage",
        out: encourage,
        about: "Подбодрить пользователя"
    }
];

module.exports.comms = comms_list;

В примере выше мы добавили новую функцию encourage, которая будет выбирать случайную фразу из списка starter_encouragements и отправлять ее в канал. Затем мы добавили эту функцию в список comms_list (список команд), указав имя команды, функцию encourage и её описание.

Также вам потребуется внести изменения в файл bot.js (если функционал не был внесён изначально), чтобы он распознавал новую команду encourage. Убедитесь, что в файле bot.js есть следующий код:

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

Теперь вы можете использовать команду !encourage в Discord-чате, и бот будет отправлять случайную фразу поддержки из списка starter_encouragements в ответ. 

Как создать бота на Python

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

Для работы вам потребуются текстовый редактор и библиотеки Python 3.4.2+ и Pip3. Перед началом создания бота необходимо создать пустой файл и присвоить ему имя. Далее файл открывается в текстовом редакторе, где можно начинать писать код. Для сохранения токена бота используется переменная DISCORD_BOT_TOKEN.

Что такое Discord Bot Maker

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

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

Выгодные тарифы на облачные серверы

Заключение

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

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
24 июля 2023 г.
10163
12 минут чтения
Средний рейтинг статьи: 3.7
Комментарии 6
Shandy
Shandy
15.08.2023, 16:15

Команды в сообщениях уже давно неактуальны, статей на 90% ничем не отличающихся на том же Хабре десятки. Зачем это постить еще раз?

Кому надо и так их пишут, а остальным надо начинать с задач попроще. И точно не в конструкторе.

SNARKI TV
SNARKI TV
02.08.2023, 12:26

После ввода команды node bot.js ничего не происходит

Команда Timeweb Cloud
Команда Timeweb Cloud
04.08.2023, 03:34

Добрый день! Подскажите, все предыдущие шаги по инструкции вы выполнили? Какую версию Node.js вы используете, обновлена ли она до последней?

ikometa i
ikometa i
24.07.2023, 15:28

C:\Users\win\Desktop\discord\node_modules@discordjs\ws\dist\index.js:1066 throw new Error("Used disallowed intents"); ^

Error: Used disallowed intents at WebSocketShard.onClose (C:\Users\win\Desktop\discord\node_modules@discordjs\ws\dist\index.js:1066:15) at WebSocket.emit (node:events:513:28) at WebSocket.emitClose (C:\Users\win\Desktop\discord\node_modules\ws\lib\websocket.js:258:10) at TLSSocket.socketOnClose (C:\Users\win\Desktop\discord\node_modules\ws\lib\websocket.js:1264:15) at TLSSocket.emit (node:events:525:35) at node:net:322:12 at TCP.done (node:_tls_wrap:588:7)

Node.js v18.16.0

Команда Timeweb Cloud
Команда Timeweb Cloud
25.07.2023, 10:57

Судя по ошибкам, бот пытается использовать интенты, которые не были разрешены при создании сеанса WebSocket с Discord API.

Скорее всего, проблема в версии discord.js. Подскажите, пожалуйста, какую версию вы используете?

Примеры в статье написаны для версии Discord.js v14. В ней изменился способ спецификации интентов: вместо Intents.FLAGS используется GatewayIntentBits.

Shandy
Shandy
15.08.2023, 16:16

Всё проще, в панели discord developers скорее всего отключены соответствующие intents