Команда say discord py
Обновлено: 21.11.2024
Цель этого поста — представить подход к созданию и структурированию бота разногласий в Python с использованием discord.py для более крупных проектов. Цель этого состоит в том, чтобы не повторять информацию, доступную в популярных учебниках. Вместо этого цель состоит в том, чтобы углубиться в детали создания подклассов компонентов в discord.py и использования Cogs для продвижения модульного, масштабируемого и удобного в сопровождении кода. Примеры, представленные в этом посте, будут общими и высокого уровня, если вы хотите увидеть пример из реального мира, посмотрите мой проект Broken Jukebox Discord Bot.
Важное примечание. В примерах в этом посте токен Discord является жестко закодированным значением, это сделано для демонстрационных целей. Жесткие секреты кодирования — это плохо, вместо этого установите это значение с помощью динамически загружаемого значения конфигурации или переменной среды.
Боты Discord – отличный способ улучшить функциональность сервера и улучшить взаимодействие с пользователем. Существует множество руководств, которые предлагают быстрый и грязный подход к созданию бота для разногласий. Например, учебные пособия, такие как «Как создать бота Discord в Python» от Real Python и «Руководство по ботам Discord от Digital Ocean». Эти учебные пособия обеспечивают отличную основу, но пропускают более структурированные и масштабируемые подходы. Это, вероятно, потому, что было бы запутанно и нелогично начинать работу как можно быстрее. Я написал этот пост, чтобы разобраться в некоторых недостающих деталях после собственного расследования.
В discord.py клиент представляет собой подключение клиента к Discord. Этот объект можно использовать для взаимодействия с Discord API/WebSocket. Следующий фрагмент кода взят из discord.py Quickstart и демонстрирует, как создать базовый клиент:
По мере роста функциональности бота для разногласий будет возрастать и сложность кода. По логике, в какой-то момент имеет смысл расширить клиентский объект, создав его подкласс, как показано ниже:
Эта же концепция может быть применена к Bot Client. Bot Client — это расширенный объект Client, предоставляемый discord.py. Бот-клиенты особенно полезны при обработке пользовательского ввода/команд, поскольку в бот-клиент встроено множество служебных функций поверх обычного клиента. В приведенном ниже коде показано, как создать подкласс клиента Bot, как мы делали выше, с обычным клиентом.
Файл custom_bot_client.py содержит только код, относящийся к пользовательскому клиенту. Содержимое можно увидеть ниже:
Затем мы можем создать точку входа в приложение, я назвал этот файл run.py . Затем файл run.py может ссылаться на custom_botclient.py , содержимое run.py можно увидеть ниже:
Теперь мы отделили логику бота от логики установки, сделав код более модульным. Однако это лишь небольшой шаг в правильном направлении.
В предыдущем разделе мы расширили бот-клиент discord.py по умолчанию, чтобы он мог выполнять некоторые пользовательские функции модульным образом. Если бы мы продолжали создавать custom_botclient.py, это в конечном итоге привело бы к монолитному классу, перемещая проблему, а не решая ее. Вот тут-то и появляются Cogs. Cogs предоставляют возможность организовать набор команд, прослушивателей и состояний в модульные классы. Cog — это просто класс, у которого есть свои собственные прослушиватели событий и команды.
Чтобы продемонстрировать это, я создал новый файл Greetings.py в каталоге, который я назвал cogs . Структура папок теперь выглядит так:
В файле Greetings.py есть пример прослушивателя команд и прослушивателя событий. Слушатель команды просто говорит «Привет, author_name», когда член сервера пишет $hey в канале. Прослушиватель событий прослушивает метод жизненного цикла on_member_join, который вызывается, когда участник присоединяется к серверу. Слушатель подписывается на это событие, поэтому всякий раз, когда это событие происходит, он вызывает наш пользовательский код. В этом случае просто будет пост в системном канале Появился дикий _insert_user_name_! . Код для Greetings.py приведен ниже:
Затем эту шестерню можно добавить к боту, который мы создали ранее, с помощью функции add_cog. Чтобы продемонстрировать это, я обновил файл run.py, добавив шестеренку приветствия.
Возможно, вы заметили некоторые изменения, касающиеся намерений в run.py. Чтобы иметь возможность прослушивать события в discord.py, ваш бот должен подписаться на события через намерения. Намерение в основном позволяет боту подписываться на определенные сегменты событий, см. страницу Primer to Gateway Intents для получения более подробной информации. В демонстрационных целях я хотел продемонстрировать как команду, так и прослушиватель событий.
Плохой побочный эффект модульного кода, использующего общие компоненты, заключается в том, что часто приходится повторять логику обработки ошибок. Это может привести к непоследовательной обработке ошибок и появлению пограничных случаев. К счастью, есть достойное решение с винтиками в discord.py. Ранее мы видели, что винтики действуют как вложение/расширение к бот-клиенту. При возникновении ошибки discord.py отправит событие всем слушателям, подписавшимся на событие on_command_error.Чтобы продемонстрировать это, мы можем расширить Cog Greetings.py для обработки ошибки CommandNotFound:
При вводе неизвестной команды, такой как $foobar, бот ответит: Я не знаю эту команду?! . Вместо того, чтобы повторять эту логику или беспокоиться о дублировании обработки ошибок, мы можем разделить логику обработки ошибок на отдельный процессор обработки ошибок. В демонстрационных целях я поместил это в файл, который я назвал command_err_handler.py , структура каталогов теперь следующая:
Файл command_err_handler.py содержит ошибку on_command_error, которая ранее была в файле Greetings.py. Файл command_err_handler.py содержит следующий код:
Для справки, файл Greetings.py был обновлен, чтобы не включать прослушиватель on_command_error. Теперь Greetings.py содержит:
Экземпляр CustomBotClient, созданный в файле run.py, можно затем обновить, включив в него cog command_err_handler.py. run.py содержит:
При запуске бота и вводе команды, которую мы не определили, например $foobar , обратите внимание, что ошибка обрабатывается классом CommandErrHandler. Бот отвечает Я не знаю эту команду?! . Наша логика обработки ошибок для команд, централизованная в одном классе, — это лишь один пример, который можно применить к любому из исключений discord.py. Здесь и здесь для вдохновения можно найти более продвинутые примеры обработчиков ошибок Cog.
Написание бота для Discord – отличный побочный проект, который поможет улучшить качество вашей жизни, когда вы играете в игры или общаетесь с друзьями. Примеры и подходы, представленные в этом посте, демонстрируют модульный и удобный способ структурирования вашего бота для разногласий. Исходя из личного опыта, небольшие проекты ботов для разногласий могут быстро выйти из-под контроля и привести к болезненному рефакторингу. Я надеюсь, что этот пост избавит некоторых людей от ненужного стресса при работе над личным проектом, таким как я.
Ссылки:
Спасибо, что прочитали!
Меня зовут Никола Чукакович, я инженер по безопасности. Мне нравится что-то строить, ломать и чинить, особенно игры. Меня особенно интересуют мобильные, веб- и облачные технологии. См. обо мне, чтобы узнать больше.
Discord.py — очень мощный API. Он направлен на то, чтобы сделать создание ботов Discord невероятно простым, но при этом дать пользователю много возможностей. Люди создали игровых ботов, ролевых ботов, модерационных ботов, экономических ботов и многое другое! Carl-bot, Auttaja и многие другие боты используют discord.py. С помощью этого руководства вы сможете научиться им пользоваться.
Установка discord.py
Если у вас уже установлен Python, вам следует установить discord.py с помощью
Выйти из полноэкранного режима
Та-да! discord.py готов к использованию!
Вам нужно будет создать учетную запись для вашего бота. Руководство по этому поводу написано здесь.
Основы бота
При запуске и создании бота вам нужно решить, использовать ли discord.Client или commands.Bot .
- Легче, чем commands.Bot.
- Лучше всего, если вы не собираетесь использовать команды
- Обширная система команд
- Лучше всего, если у вашего бота будут команды
- Поддерживает большое количество кода, разбиваемого на "винтики".
- Поддерживает простое преобразование объектов разногласий.
В этом руководстве мы создадим бота с командами, поэтому мы будем использовать commands.Bot.
Выйти из полноэкранного режима
Мы только что инициализировали класс как объект. Это похоже на идею изобретения, а затем его создание. Мы определили этот класс для переменной bot, которую можно назвать как угодно. Большинство людей используют бота или клиента .
Теперь, когда наш бот определен, мы можем начать с первых команд. команды discord.py.Bot создает такие команды:
Выйти из полноэкранного режима
Выйти из полноэкранного режима
ctx — это контекст нашей команды, который содержит множество данных, которые можно использовать. У него также есть метод send, который позволит нам отправить сообщение на канал, в котором использовалась команда.
Теперь давайте произнесем имя пользователя команды! Для этого мы можем использовать ctx.author :
Выйти из полноэкранного режима
Теперь, когда мы приветствуем пользователя, он скажет Hello mikey 🌌!
Поздравляем! Вы только что написали бота с помощью discord.py! Запустите код, и ваш бот должен подключиться к сети! Когда вы наберете !hello , бот ответит!
Окончательный код:
ПСССТ! Нужны ресурсы для веб-разработки? Ознакомьтесь с этой статьей @devlorenzo!
Ваша идеальная библиотека взаимодействий Discord для discord.py.
Что такое discord-py-взаимодействия?
discord-py-interactions — это, проще говоря, расширение библиотеки, которое основано на существующей в настоящее время оболочке API discord.py.Хотя мы используем собственный код базового класса для нашей собственной библиотеки, большая часть этой библиотеки использует базовые события discord.py, чтобы сделать контекстуализацию взаимодействий относительно простой для нас.
Когда это началось?
В середине декабря 2020 года Discord выпустил самый первый тип компонентов — слэш-команды. Они были относительно примитивными во время своего дебюта, однако со временем они постепенно становились более сложными и изменчивыми. Эта библиотека была создана через 2 дня после выпуска слеш-команд в Discord и с тех пор активно пополняется.
Что мы сейчас поддерживаем?
В настоящее время мы можем предоставить вам неполный список (поскольку Discord в настоящее время активно создает больше взаимодействий) всех компонентов, интегрированных как взаимодействия:
- Команды косой черты
- Кнопки
- Выборы (также известные как раскрывающиеся списки или меню)
Мы рекомендуем использовать pip для установки нашей библиотеки. Вы можете сделать это, введя следующую строку ниже:
pip install -U discord-py-interactions
Команды косой черты
В этом примере показано очень быстрое и простое решение для реализации команды косой черты.
Этот пример служит альтернативным методом использования косой черты в шестеренке.
Кнопки
В этом базовом примере показано, как легко интегрировать кнопки в ваши команды. Кнопки не ограничиваются командами косой черты и могут использоваться и в обычных командах discord.py.
Дополнительно
Для более продвинутого использования см. нашу официальную документацию по кнопкам здесь.
Выбирает
В этом базовом примере показано, как добавить выборки в нашего бота. Элементы выбора предлагают те же возможности доступа, что и кнопки, но с некоторыми ограничениями.
Дополнительно
Для более продвинутого использования обратитесь к нашей официальной документации по выбору здесь.
Контекстные меню
В этом простом примере показано, как добавить контекстное меню сообщения.
Дополнительно
Для более продвинутого использования обратитесь к нашей официальной документации по контекстным меню здесь.
Читайте также: