Помогите команде discord js

Обновлено: 04.07.2024

В этой главе предполагается, что вы ознакомились с главой "Начало работы" и код вашего бота скомпилирован. Кроме того, я должен повторить: если вы не понимаете код, который собираетесь увидеть, кодирование бота может быть не для вас. Перейдите в CodeAcademy и изучите Javascript.

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

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

Это событие:

В частности, это событие в discord.js, но оно похоже на то, как другие API обрабатывают события. Это событие срабатывает каждый раз, когда бот видит сообщение. Сюда входят все каналы, к которым у бота есть доступ, а также любые прямые или личные сообщения, которые он получает. Если кто-то отправляет 5 сообщений на канал, это событие срабатывает 5 раз.

Почему это важно? Ну, если вы собираетесь использовать своего бота на большом сервере или если вы хотите, чтобы он был на нескольких серверах, это становится большим количеством событий, запускаемых в каждый момент. Я не хочу слишком много говорить об оптимизации, но хочу сказать одно: используйте одну функцию обработки событий для каждого события.

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

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

С этого момента я буду опускать код, который требует и инициирует discord.js, и сосредоточусь на конкретных частях кода.

Сохраните код и перезапустите бота. Для этого используйте CTRL+C в командной строке и повторно запустите node index.js. Да, есть лучшие способы перезагрузить код, как вы увидите далее в этой книге.

Вы можете протестировать свою новую команду, сказав foo в канале, которым вы делитесь с ботом. Вы также можете подтвердить, что ping по-прежнему возвращает pong !

Вы могли заметить, что многие боты реагируют на команды с префиксом. Это может быть восклицательный знак (!), точка (.), вопросительный знак (?) или другой символ, но с введением косой черты настоятельно не рекомендуется использовать / . Но это полезно по двум причинам.

Во-первых, если вы не используете уникальный префикс и имеете более одного бота на сервере, оба будут отвечать на одни и те же команды. На серверах разработчиков ввод !help приводит к потоку ответов и личных сообщений, чего следует избегать.

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

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

Изменения в коде по-прежнему просты. Давайте пройдемся по ним:

  • константный префикс = "!"; определяет префикс как восклицательный знак. Конечно, вы можете изменить его на что-то другое.
  • Строка if (!message.content.startsWith(prefix)) return; это небольшая оптимизация, которая гласит: «Если сообщение не начинается с моего префикса, прекратите то, что вы делаете». Это предотвратит работу остальных функций, благодаря чему ваш бот станет быстрее и быстрее откликнется.
  • Команды изменились, поэтому используйте этот префикс, при котором startWith(\ $ping`) будет запускаться только тогда, когда сообщение начинается с !ping`.

Второй момент так же важен, как наличие одного обработчика событий messageCreate. Допустим, бот получает сотню сообщений каждую минуту (не большое преувеличение для популярных ботов). Если функция не обрывается в начале, вы обрабатываете эти сотни сообщений в каждом из ваших условий команды. Если, с другой стороны, вы обрываете, когда префикса нет, вы экономите все эти циклы процессора для лучших вещей. Если команды составляют 1 % ваших сообщений, вы экономите 99 % вычислительной мощности.

Хорошо, извините, я немного вру. Это не 99%, это преувеличение. Однако правда, что вы значительно экономите на мощности процессора и оперативной памяти.

Мы почти закончили с базовым ботом. И последнее, о чем я хочу поговорить: боты отвечают друг другу. Давайте на мгновение представим, что у вас есть два бота на вашем сервере, и каждый из них может ответить на одну и ту же команду с префиксом !помощь . Но когда эта команда вызывается, она отвечает: !help команды: введите !help, а затем один из следующих, чтобы увидеть подробности: ping , foo .

Теперь один человек набирает !help в канале, и оба бота отвечают. Но они также увидят, как другой бот произносит команды !help: [. ] , увидят это как просьбу о помощи, ответят друг другу. в бесконечном цикле. Чтобы этого не произошло, мы можем добавить второе условие в наш обработчик события сообщения, прямо под тем, которое проверяет префикс:

Это условие содержит оператор ИЛИ ( || ), который выглядит следующим образом:

Если префикс отсутствует или автор этого сообщения — бот, остановить обработку. Это включает и самого бота.

И теперь у нас есть бот, который реагирует только на 2 команды и не тратит силы на то, чтобы понять что-то еще. Это полноценный базовый бот? Конечно! Итак, давайте закончим эту страницу здесь, а затем мы рассмотрим некоторые новые концепции.

Полный код бота теперь будет таким:

Каждый раз, когда я вижу этот SuperSecretBotTokenHere , я немного съеживаюсь. Видите ли, не рекомендуется иметь токены и элементы аутентификации в вашем коде, это действительно должно быть в отдельном файле! Перейдите к разделу Добавление файла конфигурации, и давайте сделаем это.

Если ваш проект бота не является небольшим, не очень хорошая идея иметь один файл с гигантской цепочкой if/else if для команд. Если вы хотите внедрить функции в своего бота и сделать процесс разработки менее болезненным, вам нужно реализовать обработчик команд. Давайте приступим к этому!

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

  • index.js
  • deploy-commands.js
  • config.json

Каталог вашего проекта должен выглядеть примерно так:

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

Мы будем использовать служебные методы из @discordjs/builders

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

Затем создайте файл commands/ping.js для вашей команды ping:

Вы можете сделать то же самое для остальных команд, поместив соответствующие блоки кода в функцию execute().

открыть в новом окне — это способ экспорта данных в Node.js, чтобы вы могли требовать()

Если вам нужно получить доступ к вашему экземпляру клиента из командного файла, вы можете получить к нему доступ черезinteraction.client. Если вам нужен доступ к внешним файлам, пакетам и т. д., вы должны использовать метод require() в начале файла.

Внесите в файл index.js следующие дополнения:

открыть в новом окне — собственный модуль файловой системы Node. Коллекция

открыть в новом окне — это класс, который расширяет нативную карту JavaScript

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

Следующий шаг заключается в динамическом извлечении командных файлов. fs.readdirSync()

Используйте тот же подход для файла deploy-commands.js, но вместо этого используйте .push() для массива команд с данными JSON для каждой команды.

Сначала выберите команду с таким именем в коллекции и назначьте ее переменной command . Если команда не существует, она вернет undefined , поэтому выйдите раньше с помощью return . Если он существует, вызовите метод команды .execute() и передайте переменную взаимодействия в качестве аргумента. Если что-то пойдет не так, зарегистрируйте ошибку и сообщите об этом участнику.

И все! Всякий раз, когда вы хотите добавить новую команду, создайте новый файл в каталоге команд, назовите его так же, как и команду с косой чертой, а затем сделайте то же, что и для других команд. Не забудьте запустить node deploy-commands.js, чтобы зарегистрировать свои команды!

Если вы хотите сравнить свой код с кодом, который мы уже создали, вы можете просмотреть его в репозитории GitHub здесь

Далее приступим

Шаг 1. Настройка проекта

Создайте новую папку (убедитесь, что в имени папки нет пробелов) в вашей системе и откройте командную строку или Power Shell в папке.

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

После этого вы увидите новый файл с именем package.json в вашей папке.

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

Теперь вы увидите новую папку с именем node-modules в папке вашего бота, и вы готовы приступить к программированию бота.

Шаг 2. Запись файла index.js

Создайте новый файл в папке вашего бота с именем index.js и откройте его в своем любимом текстовом редакторе.

Теперь напишите следующий код в начале файла index.js.

Эти строки импортируют необходимые библиотеки для использования.

Далее напишите следующий код

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

Теперь мы импортируем команды по умолчанию для нашего бота.

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

Затем настройте поставщика настроек. Commando поставляется со встроенным поставщиком настроек sqlite, чтобы команды по умолчанию, такие как префикс , работали правильно.

В последнюю очередь войдите в бота

Проверка значений по умолчанию

Запустите бота с помощью команды node index в консоли.

Через некоторое время вы увидите сообщение, похожее на это: -

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

Используйте команду справки, в моем случае это ==help

В ваших личных сообщениях отображается что-то вроде этого: -

Подробнее

группы: команды в боте-коммандос сгруппированы по категориям. команда group может быть использована для перечисления этих категорий.

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

загрузить/выгрузить: эти команды можно использовать для регистрации команд вне кода.

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

help: встроенная функция справки (очень подробная).

префикс: Commando также имеет функцию изменения префикса по умолчанию на разных серверах, команда префикса помогает пользователям сделать это.

ping: делает именно то, что говорит справка.

eval: запускает код, переданный как расширение файла index.js, и возвращает результат (рекомендуется не использовать).

Эти команды встроены в коммандо.

Создание собственных команд

Сначала создайте папку с именем commands в корневом каталоге вашего бота.

Далее внесите в код следующие изменения

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

В папке с командами создайте другую папку с именем test и внутри папки с тестами создайте файл с именем foo.js, поскольку первая команда будет простая команда foo-bar.

Откройте файл foo.js и измените его содержимое на

Подробнее

Первая строка импортирует предопределенный класс Command из Commando Framework.

Затем мы создали команду как расширение класса Command .

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

name, memberName: задайте имя команды.

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

описание, подробности: опишите, что делает команда.

примеры: показывает пользователю пример использования команды.

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

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

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

Наконец, module.exports = fooCommand экспортирует команду, делая ее доступной для чтения в нашем файле index.js.

Теперь давайте проверим нашу команду foo.

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

В конце меню справки вы увидите что-то новое

Давайте воспользуемся справкой о нашей команде, воспользуемся командой help foo. Вы должны увидеть что-то вроде: -

Давайте воспользуемся нашей командой, сейчас есть 4 способа сделать это.

  • Используйте ==foo или ==f на сервере
  • Используйте foo или f в личных сообщениях.

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

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

Создайте новый файл с именем say.js в тестовой папке.

Напишите следующий код в файле say.js.

Давайте посмотрим, что нового!
  • client_permissions: определяет список разрешений, которые вам не потребуются для правильной работы команды.
  • args: определяет, какие аргументы должен ввести пользователь.
    • ключ: определяет имя аргумента.
    • подсказка: определяет, что скажет бот, если пользователь не предоставил аргумент
    • type: определяет тип аргумента.

    Давайте протестируем нашу команду say
    Если вы воспользуетесь командой help сейчас, внизу вы увидите новую запись для команды say.< /p>

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

    Вы должны увидеть что-то похожее на: -

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

    Используйте команду say сейчас без передачи каких-либо аргументов.

    Вы увидите, что бот запрашивает текст, а также сообщение типа

    Еще одна функция платформы Commando – отмена команды.

    Вы можете либо сказать что-то, чтобы бот повторил это, либо подождать 30 секунд, чтобы отменить команду, либо сказать "Отмена" самостоятельно.

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

    Проверка и регулирование

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

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

    Всем привет! В этой статье давайте узнаем, как создать простого бота Discord с помощью Node.js. Это руководство предназначено для начинающих с нулевыми знаниями о том, как создать бота Discord.

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

    • Редактор кода (например, VS Code)
    • Базовые знания JavaScript
    • На вашем компьютере установлены Node и npm
    • Учетная запись Discord и настроенный сервер

    Шаг 1. Создайте приложение в Discord

    После входа в систему нажмите "Новое приложение" в правом верхнем углу окна.

    Создание приложения в Discord

    Затем введите сведения о своем приложении (например, название), и вы попадете на панель инструментов своего приложения. Перейдите к разделу «Бот» и нажмите «Добавить бота», чтобы включить приложение в качестве бота.

    Создание приложения в Discord

    Теперь у вас есть бот, и вы увидите этот раздел.

    Создание приложения в Discord

    Нажмите «Копировать», чтобы скопировать токен и сохранить его где-нибудь, он понадобится нам позже.

    Шаг 2. Установите бота на сервер

    Создайте новый сервер Discord с вашей учетной записью Discord, чтобы установить на него бота.

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

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

    Внизу вы увидите сгенерированный URL. Скопируйте этот URL-адрес и вставьте его на новую вкладку. Вы будете перенаправлены на страницу, как показано ниже:

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

    Установите этого бота на предпочитаемый вами сервер Discord. Например, мой сервер MyBot, который я только что создал.

    Если все работает правильно, ваш бот должен появиться на вашем сервере Discord.

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

    Шаг 3. Создайте папку проекта

    Теперь давайте заставим этого бота работать! Создайте новый проект с помощью следующих команд терминала:

    Шаг 4. Установите пакеты

    Теперь нам нужно установить пакеты npm для этого проекта. Запустите эту команду ниже:

    Шаг 5: index.js

    В каталоге нашего проекта запустите:

    Это создаст файл index.js, в котором будут записаны функции нашего бота.

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

    Импортируйте пакет discord.js и создайте новый клиент следующим образом:

    Помните токен, который мы скопировали на шаге 1? Создайте файл .env и сохраните в нем токен.

    В вашем файле .env:

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

    Статус бота изменился на онлайн

    Статус бота изменился на онлайн.

    Шаг 6. Написание первой команды для бота

    Давайте напишем очень простую команду для бота: когда мы набираем ping , бот ответит нам "Pong!".

    Это так просто:

    Добавьте этот блок кода над файлом client.login(process.env.CLIENT_TOKEN); строка, и если вы снова запустите node index.js, ваш бот должен ответить вам, когда вы наберете ping .

    Отлично! И вот, вы написали свою первую команду для бота!

    Шаг 7. Получение из API + отправка изображений

    Бот, который просто отвечает "Pong!" всякий раз, когда вы набираете ping, это не очень полезно, не так ли? Давайте сделаем еще один шаг вперед, попросив у бота изображение. Как насчет мема, например?

    Мы можем ввести "meme", и бот извлечет мем из API и отправит нам случайный мем!

    Для лучшей практики команды бота обычно начинаются с восклицательного знака, поэтому давайте вместо этого напишем "!meme", чтобы проинструктировать бота для мема.

    Мы хотим, чтобы бот отправил нам свойство url этих данных, и оно отобразится в виде изображения в Discord.

    Давайте создадим функцию для получения мема. Мы назовем его getMeme(). Вот как это выглядит в index.js:

    Не забудьте импортировать аксиомы вверху файла:

    Теперь мы можем переписать наш блок client.on('message'. с нашей новой командой !meme:

    Чтобы сохранить чистоту кода нашего бота для разногласий, давайте использовать операторы switch-case вместо блоков if.

    При запуске бот должен работать, как показано ниже:

    Шаг 8. Отправка повторяющихся сообщений

    Давайте добавим еще одну классную команду нашему боту! Как насчет того, чтобы наш бот отправлял нам автоматические сообщения через заданные промежутки времени?

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

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

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

    Отлично, работает! Но не имеет смысла позволять боту постоянно присылать нам эти напоминания, верно? Что, если мы захотим, чтобы это прекратилось?

    Давайте создадим для этого команду !stop. Для этого мы просто используем clearInterval().

    Если вы не уверены в методах setInterval и clearInterval, посетите этот сайт, чтобы узнать о них больше.

    Итак, вот наша команда !stop:

    И это должно работать правильно, как показано ниже:

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

    Вывод: это еще не все!

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

    Спасибо, что прочитали. Я надеюсь, что это было полезное введение в то, как сделать бота Discord. Если это было полезно, поставьте лайк или поделитесь этой статьей, чтобы расширить охват.

    Если вы создали классного бота для Discord, поделитесь им в комментариях ниже. Я хотел бы проверить это! Здоровья!

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