Intent discord py, как включить

Обновлено: 24.11.2024

Намерения — это новая функция в discord.py 1.5. При этом вы можете выбрать «получать некоторые события, а не некоторые события». Вы можете уменьшить объем обмена данными и использование памяти.

  • Не было подтверждено, насколько она может быть уменьшена.

-- Намерение присутствия (выше): требуется для получения Member.status , Member.activity , ʻon_member_update (только для статуса и активности). Если установлено, присутствия = True --Server Members Intent (ниже): требуется для получения событий, начинающихся с ʻon_member и ʻon_user_update . Это также требуется для Guild.get_member и т. д. Если установлено, members = True`

Примечание. Для ботов с более чем 100 серверами привилегированные намерения можно использовать только с аутентификацией Discord. Если ваш бот уже аутентифицирован, свяжитесь с Discord.

После внесения вышеуказанных настроек, давайте начнем их использовать! Поскольку ʻon_typing используется редко, вот пример неполучения ʻon_typing .

main.py

Вторая строка, discord.Intents.default() , создает объект Intents по умолчанию. По умолчанию для участников и присутствия установлено значение False, а для остальных — True .

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

Да Да вопрос! Какие намерения следует использовать?

В зависимости от человека, для небольших ботов (продолжающих использовать традиционный код и имеющих менее 100 серверов) установите для всех Intents значение True ʻintents = discord.Intents.all ()` Нет проблем!

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

Из-за изменений в Discord API также произошли изменения в загрузке участников. Раньше одновременно можно было запросить 75 серверов, и требовались только серверы с Guild.large, равным True (= 250 или более участников), но теперь это нужно всем серверам, и 1 на запрос. Теперь вы можете запрашивать только сервер. Это приводит к снижению скорости примерно в 75 раз.

Ниже приведена цитата из официальной документации по проверке скорости.

Пример: бот, принадлежащий 840 серверам, из которых 95 серверов принадлежат более чем 250 людям (Guild.large == True).

В настоящее время: примерно 60 секунд (75 серверов, 20 серверов) ʻIntents.members == True и Intents.presences == False : примерно 7 минут (840 запросов, ограничение скорости 120 серверов в минуту) ʻIntents.members = = True и Intents.presences == True : примерно 100 секунд (95 запросов)

Вернуть механизм запроса

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

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

Загрузка участников смены

Далее, если вы установите для аргумента chunk_guilds_at_startup клиента или бота значение False , участники не будут загружаться при запуске, поэтому запуск будет быстрее. После этого используйте Guild.cunk и т. д. (при необходимости), чтобы получить членов сервера. Другие методы получения описаны в Справочнике.

На данный момент старый API все еще доступен, поэтому discord.py 1.4 будет доступен до прекращения поддержки шлюза v6, но рекомендуется обновить код на новый для будущего вашего бот. Для понижения

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

Если вам интересно, что такое Gateway Intent, что такое Privileged Intent, почему ваш бот не может видеть статусы или почему ваш бот больше не может видеть присоединение участников, эта страница должна объяснить вам это!

если вы не знаете, что такое намерения, прочтите эту страницу целиком

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

Что такое намерения шлюза?

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

Нужна помощь в настройке намерений в коде? Эти ссылки должны помочь: discord.js, discord.py, JDA

Discord сделал 3 намерения привилегированными намерениями: GUILD_MEMBERS (члены сервера), GUILD_PRESENCES (присутствие) и содержимое сообщения. Эти намерения теперь отключены по умолчанию в Gateway v6.

Для чего нужны эти привилегированные намерения?

Члены гильдии (намерение членов сервера) используется для:

  • Что-то делать, когда кто-то присоединяется к серверу (событие "Добавление члена гильдии")
  • Выполнение каких-либо действий при обновлении данных члена/пользователя (событие обновления члена гильдии)
  • Что-то делать, когда кто-то покидает сервер (событие "Удаление члена гильдии")
  • Получение полного списка участников на сервере (запрос/список членов гильдии)

Не требуется для:

  • Просмотр данных об авторе сообщения (которые включены в данные сообщения)
  • Получение определенного участника/пользователя по идентификатору
  • Получение члена гильдии по имени
  • Получение количества участников гильдии (которое можно получить с помощью конечной точки Get Guild)

Присутствие гильдии (намерение присутствия) используется для получения сведений о присутствии участников, в том числе:

  • "Игра"/"Трансляция"/"Просмотр"/"Соревнование"
  • Пользовательский статус
  • Статус пользователя: в сети, бездействует, не беспокоит или не в сети

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

Это не требуется для настройки статуса/присутствия бота.

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

Намерение «Контент сообщения» используется для чтения содержимого, вложений, вложений и компонентов сообщения. Он не нужен для отправки сообщений, влияет только на чтение. Вы должны использовать Slash-команды вместо использования сообщений для команд; вы не получите намерения, если ваш иск по этому поводу можно заменить взаимодействием. Для получения дополнительной информации ознакомьтесь с часто задаваемыми вопросами и политикой.

Намерение содержания сообщения вступит в силу в апреле 2022 года.

Распространенные заблуждения о привилегированных намерениях

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

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

Получение привилегированных намерений

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

для ботов менее чем на 76 серверах:

  • Перейдите на портал разработчика, выберите своего бота и перейдите на вкладку "Бот".
  • Включите переключатели для нужных намерений.

для больших ботов:

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

Примечание: вы не будете одобрены для привилегированных намерений для команд userinfo/serverinfo.

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

На шлюзах версий 8 и 9 для подключения требуется отправка намерений. В версии 6 боты теперь получают события из всех намерений, на которые они претендуют. Сюда входят все непривилегированные намерения, а также все намерения, которые вы включили (для ботов в разделе «Проверенные боты»: не знаете, внесены ли вы в белый список? Щелкните, чтобы увидеть изображение, показывающее состояния переключателей намерений для проверенных ботов.

Намерения шлюза были введены Discord, чтобы разработчики ботов могли выбирать, какие события их бот будет получать, исходя из того, какие данные ему необходимы для работы. Намерения — это именованные группы предопределенных событий WebSocket, которые получит клиент discord.js. Например, если вы опустите DIRECT_MESSAGE_TYPING , вы больше не будете получать события ввода из личных сообщений. Если вы не укажете никаких намерений, discord.js выдаст ошибку.

Discord определяет некоторые намерения как «привилегированные» из-за конфиденциального характера данных. На момент написания этой статьи привилегированными намерениями были GUILD_PRESENCES и GUILD_MEMBERS. Если ваш бот не проверен и состоит менее чем из 100 гильдий, вы можете включить намерения привилегированного шлюза на портале разработчиков Discord

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

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

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

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

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

Если вы получите сообщение об ошибке с префиксом [DISALLOWED_INTENTS] , проверьте настройки панели управления разработчика для всех используемых вами привилегированных намерений. Ознакомьтесь с документацией Discord API

открыть в новом окне для получения актуальной информации.

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

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

открыть в новом окне. Если вам нужно, чтобы ваш бот получал сообщения (MESSAGE_CREATE — «messageCreate» в discord.js), вам нужно намерение GUILD_MESSAGES. Если вы хотите, чтобы ваш бот публиковал приветственные сообщения для новых участников ( GUILD_MEMBER_ADD - "guildMemberAdd" в discord.js), вам потребуется намерение GUILD_MEMBERS и т. д.

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

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

discord.js предоставляет служебную структуру намерений

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

Вы можете использовать методы .add() и .remove() для добавления или удаления флагов (строковых литералов Intent, представляющих определенный бит) и изменения битового поля. Вы можете предоставить отдельные флаги, а также массив или битовое поле. Чтобы использовать набор намерений в качестве шаблона, вы можете передать его конструктору. Обратите внимание, что пустой конструктор new Intents() создает пустой экземпляр Intents, не представляющий никаких намерений или битовое поле 0 :

Если вы хотите просмотреть встроенные флаги, вы можете использовать методы .toArray() , .serialize(). Первый возвращает массив флагов, представленных в этом битовом поле, второй — объект, отображающий все возможные значения флагов в логическое значение на основе их представления в этом битовом поле.

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

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

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

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

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

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

30 апреля мы удалим проверенным приложениям доступ к содержимому сообщений, если они не были одобрены для привилегированного намерения.

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

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

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

К ЧЕМ ПОТЕРЯЕТ ДОСТУП НЕУТВЕРЖДЕННЫЙ БОТ?

Если ваш бот или приложение не одобрены для содержимого сообщения, следующие поля объекта сообщения в полезных нагрузках Gateway и API будут пустыми — либо пустой строкой, либо пустым массивом, в зависимости от типа данных, — когда вы получаете сообщение. :

  • контент
  • встраивает
  • вложения
  • компоненты

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

  • Сообщения, которые отправляет бот
  • Сообщения, которые бот получает в личных сообщениях
  • Сообщения, в которых упоминается бот

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

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

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

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

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

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

ЧТО О НЕПРОВЕРЕННЫХ БОТАХ?

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

СКОЛЬКО ВРЕМЕНИ У МЕНЯ ЕСТЬ НА ПЕРЕНОС?

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

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

СМОЖЕТ ЛИ МОЙ БОТ ЧИТАТЬ СООБЩЕНИЯ В ПРЯМЫХ СООБЩЕНИЯХ?

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

ЧТО О МОДЕРАЦИОННЫХ БОТАХ?

Нам известно, что многие боты и приложения предназначены специально для чтения, модерации и иного управления сообщениями, отправляемыми пользователями Discord. Мы ожидаем, что эти запросы на содержание сообщения будут удовлетворены без проблем.

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

КОГДА Я МОГУ ПОДАТЬ ЗАЯВКУ НА НОВОЕ НАМЕРЕНИЕ?

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

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

КТО ПОЛУЧИТ НАМЕРЕНИЕ?

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

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

ЧТО ПРОИСХОДИТ, ЕСЛИ Я ЗАПРОШУ НАМЕРЕНИЕ, А ОН ПОЛУЧИТ ОТКАЗ?

После окончания переходного периода 30 апреля 2022 года доступ всех проверенных приложений к содержимому сообщений будет отозван, если им не предоставлено привилегированное намерение.

Как следует из названия, доступ к любым особым намерениям — это привилегия! Мы внимательно читаем все заявки и в некоторых случаях сообщаем, почему ваш запрос Intent не был удовлетворен.

ГДЕ МОЖНО ПОДАТЬ ЗАЯВКУ НА НАМЕРЕНИЕ СООБЩЕНИЯ?

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

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