Префикс бота discord что это
Перейти к содержимому

Префикс бота discord что это

  • автор:

Смена префикса команды discord.py

Как я могу поменять префикс бота через команду в discord.py? Пробовал использовать этот код, но говорит что не найдена команда setprefix, понимаю что она идёт после bot.run но в коде так и было. Если ставлю её перед bot.run и меняю @commands.command на @bot.command то выдаёт ошибку str object has no attribute guild. Также не понимаю зачем в переменной bot вторым аргументом пишутся три точки. Помогите пожалуйста.

miha barinov's user avatar

Почему вы не сделаете через БД, это удобнее и в будущем если ваш бот будет на многих серверах то список не справиться с таким объемом информации

Name already in use

discord-py-guide / discord-py.md

  • Go to file T
  • Go to line L
  • Copy path
  • Copy permalink

1 contributor

Users who have contributed to this file

  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents

Copy raw contents

Copy raw contents

Руководство по использованию библиотеки discord-py

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

Вероятнее всего у вас уже имеется созданный бот, поэтому инструкция по его созданию будет пропущена (но, возмжно появится позже).

Прежде чем начать.

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

Бот

Включите параметры PRESENCE INTENT и SERVER MEMBERS INTENT

введите сюда описание изображения

После этого выдайте намерения в коде при инициализации бота

Намерения нужны для работы с некоторыми событиями, объектами пользователей серверов ( участник / member ) и др. Они вам точно понадобятся, поэтому лучше включить их сразу, чтобы потом не спрашивать, почему вам не удается получить данные о пользователе сервера или чего-либо еще.

Начало работы с ботом и discord-py

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

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

    — фактически, самый базовый бот, на котором основаны другие. Умеет обрабатывать события по типу получения сообщений on_message() , установки реакции on_raw_reaction_add() и другие. — тот же discord.Client , только умеет находить в сообщениях и обрабатывать отдельные команды, которые начинаются с какого-либо префикса, например !test — про этого бота ничего сказать не могу, так как ни разу не использовал. Насколько мне известно, он нужен в тех случаях, когда вы планируете задать боту кучу разных комманд, событий и организовать все это в один отдельный класс.

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

Если помимо того, что я написал выше, вы хотите добавить еще и обработку команд по типу !ban <@User> , !play <Ссылка на видео с YouTube> , !погода и т.п., то использовать надо именно discord.ext.commands.Bot .

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

Для начала подключим библиотеку.

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

В случае, если вы хотите использовать discord.ext.commands.Bot , я бы сразу отдельно подключил еще и этот пакет

Теперь создадим объект бота, который будет обрабатывать события и команды:

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

Он принимает строку ( str ), по которой бот будет определять, то что сообщение является командой и обрабатывать его нужно именно как команду.

Помимо этого, выдадим боту намерения ( intents ), инструкция по настройке которых была в начале.

В качестве префикса команды укажем ! , намерения нужно выдавать именно те, которые вы будете использовать, но на первое время можно выдать все, то есть discord.Intents.all()

Если у вас discord.ext.commands.Bot :

Если у вас discord.Client , то префикс указывать не нужно (класс не принимает такого аргумента):

Основные обработчики событий

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

В качестве обработчиков событий используются асинхронные ( async ) функции ( def ), помеченные декоратором @bot.event , где bot — название объекта вашего бота. Функция должна иметь название, строго как в документации — иначе событие просто не будет обработано.

Если коротко, то все, что делает декоратор @bot.event — это помещает написанную вами функцию в другую функцию из библиотеки discord , которая, в свою очередь, передает вашей функции какие-либо параметры. Поэтому, если не пометить функцию декоратором, discord не обратит на нее внимание и она не будет вызвана.

async def on_ready()

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

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

Выглядеть это будет вот так:

async def on_message(message)

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

В списке событий находим событие on_message(message) , которое принимает обязательный аргумент message . Этот аргумент имеет тип discord.Message из которого вы можете получить текст сообщения, а также объекты автора сообщения, сервер, канал, вложения, реакции, упоминания, ссылку на сообщение и много чего еще

Здесь вы можете прописать любую логику взаимодействия. Хоть даже удалять все только что переданные обработчиком сообщения (главное чтобы у бота были на то права). Самое главное — задать функции аргумент, который будет принимать объект сообщения. Вы можете назвать его как хотите, например даже так: async def on_message(собщение) , главное чтобы он был.

Если аргумент не указать, то при вызове события нового сообщения, discord-py отправит в функцию on_message() аргумент, содержащий объект сообщения, но получит ошибку о том, что указанная функция не принимает аргументов и ничего работать не будет. Это равноценно созданию функции, которая должна считать сумму 2 переданных в виде аргументов числа, но при этом она не принимает их.

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

Примеры других часто используемых событий:

on_raw_reaction_add(payload) , on_raw_reaction_remove(payload) — события добавления и удаления реакции с сообщения, соответствено. Из объекта payload вы можете получить сервер, сообщения и прочую инфу

on_member_join(member) , on_member_remove(member) — события подключения и выхода участника с сервера, в качестве аргумента принимает объект участника из которого можно получить всю информацию о пользователе.

Остальное вы можете найти в списке событий.

У вас уже есть объект бота и, вероятно, обработчики событий. Теперь бота нужно запустить.

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

Для этого у объекта bot нужно вызвать функцию run() :

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

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

Чтобы бот работал без вашего участия, его можно поставить на хостинг — тогда он будет постоянно запущен на удаленном сервере, а не на вашем устройстве. Например, можно использовать бесплатный (уже не бесплатный) хостинг Heroku. В интернете есть куча разных туториалов по настройке. Возможно, когда-нибудь здесь появится ссылка на мой 🙂

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

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

Для этого примера достаточно было бы простого бота discord.Client , так как он обрабатывает только события. Но я наперед прописал в коде бота discord.ext.commands.Bot , так как дальше в этот код мы будем добавлять обработку команд.

Обработка отдельных команд

Данный раздел содержит информацию об устаревших в дискорде prefix-командах ( !command / >command / $command и т.п.). На данный момент актуально создавать именно slash-команды ( /command ), которые интегрируются в дискорд и позволяют более комфортно разделять аргументы и добавлять к ним описание.

Так или иначе, руководство по slash-командам подразумевает знание материала по работе с prefix-командами. Поэтому прежде чем переходить к slash-командам, я рекомендую ознакомиться с материалом ниже.

Напоминаю, что для работы с командами, в качестве бота нужно использовать объект discord.ext.commands.Bot , а не discord.Client ! Не забудьте также про префикс

Команды бота, как и обработчики событий, являются асинхронными функциями ( async def ).

Чтобы discord-py обнаружил команду в коде, функцию нужно пометить декоратором @bot.command() , где bot — название объекта вашего бота.

Скобки в декораторе @bot.command() обязательны, в отличии от @bot.event , так как декторатор discord.ext.commands.Command() принимает необязательные аргументы. Без скобок декоратор корректно работать не будет. *Подробнее про декораторы можно почитать выше

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

Любая функция, являющаяся командой, должна принимать обязательный аргумент ctx (можно назвать как угодно). Аргумент является контекстом ( discord.ext.commands.Context ) выполнения команды, из которого можно получить сервер, автора, сообщение, канал и др. информацию. При вызове команды, Контекст в функцию передает библиотека discord-py .

Перед созданием первой команды

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

Из документации видим, что у объекта пользователя ( discord.User ) есть свойство bot , имеющее тип bool . Значит, если свойство имеет значение True — пользователь является ботом, иначе — не является)

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

Для этого, кстати, в on_message() нужно добавить еще одну строку await bot.process_commands(message) , которую можно найти в списке методов объекта discord.ext.commands.Bot . Метод принимает в качестве аргумента сообщение с типом discord.Message и нужен для того, чтобы проверять, являестя ли сообщение командой. Многие, забыв добавить эту строку, потом не понимают, почему их бот игнорирует команды (подробный разбор проблемы)

Ключевое слово return завершает выполнение функции, то есть код, который идет дальше, так или иначе не будет выполнен.

Создание первой команды

Создадим команду с названием test , при вызове которой бот будет отвечать в чат «Успешный тест!»:

Результат:

image

Реализацию такой команды можно было бы сделать через обычного бота discord.Client прямо в on_message() , проверяя, наличие префикса и конкретного названия команды. Однако при большом количестве команд запихивать все в одну функцию не очень хорошо, да и не удобно разделять аргументы, про которые, кстати, можно почитать далее.

*Почитать подробнее, почему не стоит делать команды через on_message() можно здесь

Для создания нескольких названий одной команды можно передать в декоратор @bot.command() аргумент aliases , принимающий список ( list ) или кортеж ( tuple ) с названиями команды. При этом самого названия функции там быть не должно.

Работа с аргументами команды

Предположим, вам нужно при вызове функции принять от пользователя число , значение типа bool и участника сервера discord.Member

image

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

Поскольку Python — язык с динамической типизацией, по умолчанию все полученные значения принимают строковый тип str , так как фактически были получены из строки ( str ), содержащей текст сообщения.

Тогда

  • number будет равно ’16’
  • boolean будет равно ‘True’
  • member будет равно ‘<@!239863351063144451>’

То есть из number нельзя будет вычесть число, boolean == True примет значение False , а member просто примет строку, содержащую форму упоминания пользователя.

Вместо того, чтобы вручную выполнять приведение типов ( number = int(number) , boolean = bool(boolean) и т.д.), можно сразу же явно указать тип аргумента функции:

И вот теперь уже все будет работать корректно. Помимо discord.Member можно указать любой другой тип библиотеки discord-py .

Из объекта member , например, можно получить id ( member.id ), ссылку на аватар ( member.avatar_url ) и другую информацию, которую можно найти в документации по объекту discord.Member .

Получить весь текст как один аргумент

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

image

text будет иметь тип str и значение ‘это тестовый текст для проверки функции’

Если сделать так:

text будет иметь тип tuple и значение (‘это’, ‘тестовый’, ‘текст’, ‘для, ‘проверки’, ‘функции’)

Также можно сначала получить несколько отдельных слов, а уже потом оставшийся текст:

  • first_word будет иметь тип str и значение ‘это’
  • second_word будет иметь тип str и значение ‘тестовый’
  • other_text будет иметь тип str и значение ‘текст для проверки функции’

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

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

Создание бота Discord Bot с помощью Node.js

Создание бота Discord Bot с помощью Node.js

Discord — это приложение чата, позволяющее миллионам пользователей со всего мира обмениваться сообщениями и общаться в голосовом чате в сообществах, называемых «гильдии» или «серверы». Discord также включает функциональный API, который разработчики смогут использовать для построения мощных ботов Discord. Боты могут выполнять разнообразные действия, в том числе отправлять сообщения на серверы, отправлять пользователям сообщения DM, модерировать серверы и воспроизводить звук в голосовых чатах. Это позволяет разработчикам создавать мощных ботов со сложными и продвинутыми функциями, включая инструменты модерирования и даже игры. Например, служебный бот Dyno обслуживает миллионы гильдий и содержит множество полезных функций, включая защиту от спама, музыкальный проигрыватель и другие служебные функции. Научившись создавать боты Discord, вы получите множество возможностей, с которыми тысячи людей смогут взаимодействовать каждый день.

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

Предварительные требования

Для начала вам потребуется следующее:

Node.js, установленный на вашем компьютере для разработки. Чтобы установить его в macOS или Ubuntu 18.04, следуйте указаниям руководства Установка Node.js и создание локальной среды разработки в macOS или раздела Установка с помощью PPA руководства Установка Node.js в Ubuntu 18.04.

Любой текстовый редактор по вашему усмотрению, например, Visual Studio Code, Atom, Sublime или Nano.

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

Шаг 1 — Настройка бота Discord

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

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

Изображение панели приложений Discord после первого посещения сайта https://discord.com/developers/applications

Для начала нажмите New Application (Новое приложение). Discord предложит вам ввести имя нового приложения. Затем нажмите Create (Создать) для создания приложения.

Изображение командной строки для создания приложения с введенным именем приложения "Test Node.js Bot"

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

Теперь откройте свою панель приложения. Чтобы добавить бота в приложение, откройте вкладку Bot (Бот) на панели навигации слева.

Изображение вкладки Bot на панели приложений

Нажмите кнопку Add Bot (Добавить бота), чтобы добавить бота в приложение. Нажмите кнопку Yes, do it! (Да, сделать это!) в диалоге запроса подтверждения. Откроется панель с подробными сведениями об имени вашего бота, токене аутентификации и изображении в профиле.

Панель с подробными сведениями о боте

На этой панели вы можете изменить имя бота или изображение профиля. Также необходимо скопировать токен аутентификации бота, нажав Click to Reveal Token (Нажмите для показа токена) и скопировав отображаемый токен.

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

Теперь нужно создать приглашение, которое позволяет добавить гильдии ботов Discord, где вы можете протестировать бот. Вначале перейдите на вкладку OAuth2 на панели приложения. Чтобы создать приглашения, прокрутите страницу и выберите бота в разделе scopes. Также необходимо установить разрешения, чтобы определить, какие действия бот может выполнять в гильдиях. Для целей этого обучающего модуля выберите пункт Administrator (Администратор), которые дадут вашему боту разрешения для выполнения в гильдиях практически любых действий. Скопируйте ссылку с помощью кнопки Copy.

Вкладка OAuth2 с установленной сферой действия bot и уровнем разрешений administator

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

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

Теперь нажмите кнопку Continue (Продолжить). Обязательно установите отметку рядом с полем Administrator, чтобы предоставить боту разрешения администратора. Затем нажмите Authorize (Авторизация). Discord предложит вам решить головоломку CAPTCHA, прежде чем бот сможет подключиться к серверу. Теперь наш бот Discord отображается в списке пользователей сервера, на который вы добавили бота, со статусом offline (не в сети).

Список пользователей сервера Discord с новым ботом в разделе offline списка пользователей

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

Шаг 2 — Создание проекта

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

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

Создайте папку проекта:

Перейдите в только что созданную папку проекта:

Далее используйте текстовый редактор для создания файла с именем config.json для сохранения токена аутентификации вашего бота:

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

Сохраните и закройте файл.

Затем мы создадим файл package.json , где будут храниться детали нашего проекта и информация о зависимостях, используемых в проекте. Для создания файла package.json запустите следующую команду npm :

Сейчас мы установим пакет discord.js , который будем использовать для взаимодействия с Discord API. Вы можете установить discord.js через npm с помощью следующей команды:

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

Вначале создайте файл с именем index.js в папке discord-bot для кода:

Начните программирование бота, запросив зависимость discord.js и файл конфигурации с токеном бота:

После этого добавьте следующие две строки кода:

Сохраните и закройте файл.

Первая строка кода создает новый клиент Discord.Client и назначает его как значение константы client . Этот клиент частично обеспечивает взаимодействие с Discord API и получает уведомления Discord о событиях, например, о новых сообщениях. Фактически клиент представляет бот Discord.

Во второй строке кода метод login используется на клиенте для входа в созданный бот Discord с использованием токена в файле config.json в качестве пароля. Токен сообщает Discord API, для какого бота предназначена программа, а также подтверждает вашу аутентификацию для использования бота.

Теперь запустите файл index.js с помощью Node:

Теперь статус вашего бота на сервере Discord, куда вы его добавили, изменится на online (в сети).

Изображение бота со статусом online

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

Шаг 3 — Обработка первой команды пользователя

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

Сначала необходимо обеспечить обнаружение и получение любых отправляемых пользователями сообщений, чтобы бот мог обрабатывать любые команды. Используя метод on клиента Discord, Discord будет отправлять вам уведомления о новых событиях. Метод on принимает два аргумента: название ожидаемого события и функцию, которая будет запускаться каждый раз, когда будет возникать это событие. С этим методом вы можете ожидать события message , которое будет возникать каждый раз при отправке сообщения в гильдию, где у бота имеется разрешение на просмотр сообщений. Поэтому мы создадим функцию, которая будет запускаться для обработки команд каждый раз при отправке сообщения.

Вначале откройте свой файл:

Добавьте в файл следующий код:

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

Добавьте следующую строку кода в функцию обработки команд:

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

Теперь мы напишем обработчик команд. Для этого важно понимать обычный формат команды Discord. Обычно структура команды Discord содержит три части в следующем порядке: префикс, имя команды и (иногда) аргументы команды.

Изображение типичной команды Discord "! add 1 2"

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

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

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

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

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

Первая строка кода добавляется, чтобы присвоить значение "!" константе prefix , которую мы будем использовать в качестве префикса бота.

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

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

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

Вторая строка принимает сообщение с удаленным префиксом и использует на нем метод split с пробелом в качестве разделителя. Он разделяет команду на массив субстрок, проводя разделение после каждого пробела. В результате получается массив, содержащий имя команды, за которым идут аргументы (если они содержатся в сообщении). Мы назначаем этот массив константе args .

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

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

Добавьте следующий код, чтобы начать реализацию команды ping :

Это выражение if проверяет соответствие обработанного имени команды (назначенного константе command ) значению "ping" . Такое соответствие означает, что пользователь хочет использовать команду "ping" . Мы вложим код определенной команды в блок выражения if . Впоследствии вы сможете использовать этот шаблон для других команд.

Теперь вы можете реализовать код для команды "ping" :

Сохраните и закройте файл.

Мы добавляем блок команды "ping" , который рассчитывает разницу между текущим временем, определяемым с помощью метода now объекта Date , и временной меткой создания сообщения, выражаемую в миллисекундах. Таким образом рассчитывается время обработки сообщения и ответа бота на команду "ping" .

Вторая строка отвечает на команду пользователя, используя метод reply с константой message . Метод reply отправляет запрос ping (уведомляющий пользователя и выделяющий сообщение для указанного пользователя) пользователю, который отправил команду, добавляя после запроса содержание, указанное в качестве первого аргумента метода. Мы указали литераль шаблона, содержащую сообщение и рассчитанное значение ping, в качестве ответа, который будет использоваться методом reply .

На этом мы завершаем реализацию команды "ping" .

Запустите свой бот с помощью следующей команды (в той же папке, что и index.js ):

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

Изображение бота, отвечающего в Discord на запрос "! ping" ответом "@T0M, Pong! This message had a latency of 1128ms."

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

Шаг 4 — Реализация команды Sum

Теперь мы расширим нашу программу, реализовав команду "! sum" . Эта команда принимает любое количество аргументов, складывает их и возвращает пользователю сумму всех аргументов.

Если ваш бот Discord еще работает, вы можете остановить его процессы, нажав CTRL + C .

Откройте файл index.js снова:

Чтобы начать реализацию команды "! sum" , мы используем блок else-if . После проверки имени команды ping бот будет проверять, имеет ли имя команды значение "sum" . Мы используем блок else-if , потому что одновременно будет обрабатываться только одна команда, и если программа определит совпадение с именем команды "ping" , ей не нужно будет проводить проверку на совпадение с именем команды "sum" . Добавьте в файл следующие выделенные строки:

Теперь вы можете начать реализацию кода для команды "sum" . Код команды "sum" будет размещен в только что созданном нами блоке else-if . Теперь добавьте следующий код:

Мы используем метод map для списка аргументов, чтобы создать новый список, используя функцию parseFloat для каждого элемента в массиве args . При этом создается новый массив (назначенный константе numArgs ), где все элементы являются числами, а не строками. Это означает, что в дальнейшем вы можете определить сумму чисел, выполнив операцию сложения.

Вторая строка использует метод reduce на константе numArgs , предоставляя функцию, суммирующую все элементы в списке. Мы назначаем сумму всех элементов в numArgs как значение константы sum .

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

Это завершает реализацию команды "sum" . Теперь запустите бот, используя следующую команду (в той же папке, что и index.js ):

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

Изображение бота, отвечающего "The sum of all the arguments you provided is 6!" на "! sum 1 2 3", а затем отвечающего "The sum of all the arguments you provided is 13! на "! sum 1.5 1.5 10"

Далее приведена законченная версия скрипта бота index.js :

На этом шаге мы дополнили наш бот Discord, реализовав в нем команду sum .

Заключение

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

При создании ботов Discord всегда помните об условиях обслуживания Discord API, определяющих требования к использованию Discord API разработчиками. Также вам может быть полезен этот набор рекомендаций, показывающий наилучшие способы построения бота Discord и содержащий советы по проектированию ботов Discord. Если вы хотите узнать больше о Node.js, ознакомьтесь с нашей серией материалов «Программирование в Node.js».

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Создаём Discord-бота на Python

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

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

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

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

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

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

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

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

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

Эхо-бот

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

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

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

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *