Обработчик команд discord js

Обновлено: 07.07.2024

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

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

Creation date : 06.12.2019

Давайте начнём создание бота. Если у вас установлена 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Image alt

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

Image alt

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

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

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

Image alt

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

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

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

Так-же увы, но я не буду объяснять, как создать бота и установить node.js, моя цель показать вам функционал discord.js, а не то, как делаются базовые действия бота.

Создаём папку скажем. на рабочем столе, и называем её любым названием, например это будет имя нашего бота! у меня это бот Pixi (Все права защищены, за использование названия вас приведут к ответственности!)

И так, для начала установим библиотеки!

Далее после установки данных библиотек мы можем приступить к формулировке проекта!

Для этого в консоль пишем:

Далее мы просто нажимаем enter, хотя можно ещё заполнить последнее поле.. Это автор! Указываем ваше имя на Английском.

Далее создаём файл config.json, index.js, и в файл config.json пишем:

И меняем на свои значения, префикс - это начальная точка команды, например $help, где $ выступает префиксом, а токен - это циферки и буквы которые можно получить в настройках бота), так-же токен никому нельзя говорить, иначе вашим ботом смогут управлять другие!

Далее в файле index.js пишем:

Что мы сделали можно посмотреть в подсказках, а теперь расскажу зачем нужна эта коллекция команд!

Дело в том, что по факту можно писать команды в client.on('message', message => <>, но это не правильно и именно по этому мы создаём коллекцию команд и делаем следующие действия.

После этого создаём в папке с нашим ботом ещё одну папку - commands, в этой папке и буду хранится все наши команды!

И так, давайте создадим первую команду!

Пускай это будет.. команда hi, бот будет отвечать нам привет!

И так. Создаём файл hi.js и пишем в него следующее:

Дальше запускаем бота (Переходим в консоль и идём через неё в папку с ботом и пишем node index.js) и видим.


Хорошо, у нас получилось!

В папке commands создаём ещё один файл (ping.js) и там пишем:

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

Создаём файл fox.js и пишем в него следующее:

Вы сможете сделать больше рандомных картинок зная сайт. Так вот!


Далее поговорим про эффекты, это будет экран wasted на аватарке пользователя дискорд!

Создаём файл wasted.js ( Вы уже знаете где) )


Я новичок в программировании на JavaScript, и я настраиваю простого бота событий для сервера Discord.

Концепция очень проста, все, что на самом деле делает бот, - это позволяет любому назначить «мертвую» роль любому члену, которого он упоминает.

Однако у меня возникают следующие проблемы:

• Команда kill, хотя она работает, давая людям роль Мертвого и объявляя об исключении участника, она не вызывает соответствующих ошибок, если участник уже мертв или имеет Персонал роль. Он просто объявляет, что участник был исключен, независимо от того, какие роли у него есть.

• Ввод любого слова с ! перед ним (например, ! Test ) приводит к ошибке «Необходимо упомянуть член» . (Сюда входит команда ! Ping )

Что я здесь делаю не так? Я проверил документацию Discord.js для v13 и, похоже, не нашел ответа. Заранее спасибо!

РЕДАКТИРОВАТЬ: Исправлено все! Я забыл return для проверки связи, и в итоге я использовал неправильные функции для команды kill. Это последний код, и он работает как задумано.

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

3 ответа

Это потому, что код выполняет все ваши условия. Если вы хотите, чтобы ping выполнял только ping, а не выполнял остальную часть команды, вы можете добавить к нему return .

Я вижу, что вы уже использовали return в своем коде, но, например, в ответе команды ping нет оператора return, поэтому он проверит, является ли member нулевым или нет

Проверка ролей

Элемент member.roles.cache, в котором вы пытаетесь выполнить поиск, является объектом Collection, который расширяет обычную карту JavaScript. Карты хранят свои значения в паре "ключ-значение". В этом случае роли - это значение, а ключ - это автоматически сгенерированная снежинка, которая, по сути, является уникальным идентификатором. Теперь, что, возможно, противоречит интуиции, функция .has () на самом деле не ищет, имеет ли ваш кеш (Map) значение, соответствующее тому, что вы анализируете в качестве параметра, но если у него есть ключ, который ему соответствует.

Поискать, есть ли на карте определенное значение, немного сложнее. Есть несколько способов сделать это. Один из них - быстро преобразовать карту в массив и вызвать .includes () для этого массива следующим образом:

В качестве альтернативы вы можете перебрать все значения карты и проверить их все на соответствие вашим ролям следующим образом:

Честно говоря, я не сторонник того и другого, но, поскольку у вас нет выбора в том, как хранятся роли, вы должны сделать это, верно?

«Необходимо упомянуть члена»

В программировании очень важно отслеживать, по какому пути будет следовать ваша программа при ее выполнении. В вашей функции .on ('messageCreate') мы можем взглянуть на это.

Решение

Чтобы решить эту проблему, вы можете очень просто переместить оператор if, который проверяет наличие упомянутого члена, в блок оператора if, который выполняется после того, как мы узнаем, что это команда! Kill. Таким образом, упомянутый член потребуется только в том случае, если мы действительно выполняем команду! Kill.

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

Что касается первой проблемы, вам нужно проверить роли по идентификатору роли. Это потому, что cache диспетчера ролей является коллекцией, которая отображается идентификатором того, что есть в этой коллекции. Так что просто добавьте .id в конце, и все должно работать нормально.

В настоящее время боты используются для автоматизации различных задач. С момента выпуска устройств Amazon от Amazon, шумиха вокруг роботов автоматизации только начала расти. Помимо Alexa, другие инструменты коммуникации, такие как Discord и Telegram, предлагают API для разработки пользовательских ботов.

Давайте начнем с создания собственного бота Discord.

Предпосылки

  • Node.js v10 или выше установлен (базовые знания)
  • учетная запись Discord и клиент Discord
  • базовые знания по использованию терминала

Шаг 1: Настройка тестового сервера

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

нажмите создать сервер

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

выберите создать сервер

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

имя сервера

Если все прошло хорошо, вы должны увидеть свой только что созданный сервер.

новый сервер

Шаг 2: Генерация токена авторизации

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

Чтобы зарегистрировать бота, перейдите на Портал разработчиков Discord и войдите под своей учетной записью.

После входа в систему вы должны увидеть панель инструментов. Давайте создадим новое приложение, нажав кнопку « Новое приложение» .

панель разработчика

Далее вы увидите всплывающее окно, которое попросит вас ввести имя для вашего приложения. Давайте назовем нашего бота my-greeter-bot . Нажав кнопку « Создать» , Discord создаст приложение API.

создать приложение

Когда приложение будет создано, вы увидите обзор только что созданного приложения my-greeter-bot . Вы увидите такую ​​информацию, как идентификатор клиента и секрет клиента. Этот секрет будет использован позже как токен авторизации.

обзор встречающего бота

Теперь нажмите на пункт меню Bot в меню настроек . Discord создаст наше приложение my-greeter-bot и добавит в него пользователя бота.

добавить бота

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

обзор вкладки бота

Шаг 3: Определите разрешения и добавьте бота на сервер

В-третьих, мы хотим определить права доступа для бота и добавить его на наш сервер Discord.

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

Вы можете заметить, что приведенный ниже URL авторизации изменился. Однако раздел permissions=0 указывает, что мы еще не установили разрешения.

Область действия OAuth2

Когда вы выбираете оба варианта, обратите внимание, что номер изменился для параметра полномочий в URL авторизации.

Добавить разрешения

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

Если вы можете успешно добавить бота на свой сервер, вы должны увидеть следующий экран успеха.

Успех добавить бот

Успешное добавление канала бота

Успех!

Шаг 4: Настройка проекта

Проект зависит от двух зависимостей, dotenv и discord.js . Первая зависимость позволяет нам использовать файл .env который содержит токен бота, который мы записали. Очевидно, что нам нужна вторая зависимость, discord.js , для разработки бота Discord.

Чтобы установить обе зависимости, выполните npm install в папке проекта.

Наконец, для завершения установки создайте файл .env в корне проекта. Добавьте одну переменную среды с именем TOKEN в файл следующим образом:

Шаг 5: Изучение Discord.js

Давайте посмотрим на файл index.js расположенный в корне проекта:

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

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

Слушайте «готовое» событие

Далее мы можем слушать события. Прежде всего, мы слушаем ready событие. Готовое событие запускается, как только мы подключаемся к боту:

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

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

Бот подключен

Обратите внимание на разницу между обеими командами:

Ищите пользователей с тегами

Чтобы добавить новую команду, мы должны расширить предложение if с помощью else … if :

Kick user

Шаг 6: Проблема с else … if цепь

Однако, когда мы решаем построить обширный проект таким образом, мы в конечном итоге получаем цепочку else … if утверждений. Вот небольшой список причин, почему вы не должны использовать else … if цепочки для чего-то, что не маленький проект:

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

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

Реализация обработчика команд

Папка команд

Сначала давайте рассмотрим папку команд. Эта папка содержит файл index.js который экспортирует все команды, которые мы определим. Для простоты мы определим только одну команду, ping :

Далее, давайте посмотрим на реализацию команды ping , которая в основном экспортирует объект, который содержит следующее:

  • name : имя команды.
  • description : рекомендуется добавлять описание для каждой команды.
  • execute : функция, которая принимает msg и args . Эта функция содержит ту же логику, что и в нашей цепочке else … if .

Импорт команд

Продолжая, давайте импортируем команды в файл index.js . Обратите внимание, что мы определяем коллекцию команд на боте Discord. Мы перебираем все команды и добавляем их одну за другой в коллекцию команд.

После этого мы должны удалить нашу цепочку else … if и заменить ее динамическим кодом, чтобы найти правильную команду, которую мы хотим вызвать:

Однако, если команда существует, мы используем функцию get() чтобы получить правильную команду и выполнить ее с входными параметрами msg и args .

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

Читайте также: