IT
April 5, 2022

Будущее discord.py

Перевод обращения основателя библиотеки discord.py к сообществу, нюансы взаимодействия представителей Discord с мейнтейнерами open-source библиотек и история развития Discord API.

Disclaimer: это перевод поста Rapptz, создателя библиотеки discord.py для программирования Discord-ботов нa Python. Перевод, казалось бы, не совсем профильного материала, предназначен для вскрытия грязи от представителей Discord к сообществу, и как следствие, для того, чтоб поставить русскоязычных в курс дела. Любой кодер, использующий или использовавший в своих проектах discord.py, должен прочесть этот пост.

Приветствую. Я Дэнни, если вы не знаете. Я основной (и единственный) мейнтейнер (прим. переводчика – сопровождающий и ведущий разработчик) библиотеки discord.py. Вопреки распространенному мнению, на самом деле я не сотрудник Discord. По сути, я даже не профессиональный программист. Я вообще медицинский работник и работаю в больнице. Несмотря на все это, я действительно наслаждаюсь программированием, как хобби, и в своё свободное время я работал над discord.py.

Я работал над discord.py около 6 лет – довольно значительная часть моей жизни ушла на поддержание этой библиотеки совершенно бесплатно. Я никогда не принимал пожертвований. Я никогда не просил пожертвований. Эта библиотека была проектом, в который я вкладывал душу, и рожденным полностью из желания увидеть больше ботов в Discord, написанных на Python. На протяжении многих лет многие пользователи моей библиотеки говорили мне, что discord.py изменил их жизнь. Это дало им возможность бросить вызов самим себе, создавать забавные вещи и находить новые возможности. Для меня, как человека, всегда ценившего образовательные проекты с открытым исходным кодом, так много значит знать, что discord.py оказал положительное влияние на жизнь людей.

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

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

Массовое движение

Я присоединился к Discord 10 августа 2015 года. У меня были друзья, которые порекомендовали его мне и мы хотели перенести наши турнирные манипуляции с IRC/Skype на новую платформу из-за огромных претензий к этим платформам. В первый раз, когда я использовал Discord, я был очень впечатлён; однако, чтобы перейти на него, нам понадобился API для работы моих ботов. К сожалению, в то время не существовало “официального” API. К счастью, я нашел API wrapper (прим. переводчика – оболочку) под названием node-discord и использовал ее. Эта оболочка API была очень минимальной, содержала только debug event (прим. переводчика – событие отладки), которое сбрасывало сообщения шлюза (в то время v2) и message event (прим. переводчика – событие сообщения), которое было только для сообщений. Этот опыт заставил меня по-настоящему заинтересоваться выяснением того, как работает API. Я создал своего бота RoboDanny на следующий же день (11 августа) и добавил его на сервер r/Splatoon.

Я не был полностью удовлетворен node-discord и использованием ECMAScript 5, поэтому я взял на себя смелость самостоятельно начать реверс-инжиниринг API с использованием Python. На данный момент все ранние участники экосистемы ботов и API находились на сервере под названием Discord Developers, однако он отличался от того, который сегодня носит то же имя. На этом сервере было много энтузиастов и сотрудников Discord и это было очень похоже на сегодняшний новый сервер разработчиков Discord. Там были такие люди, как izy521 (создатель вышеупомянутого node-discord) и Voltana. Мы говорили про Discord API и его реверс-инжиниринге, пока в конце концов все мы, единомышленники, не создали наш собственный сервер под названием Discord API, который принадлежал Voltana. Это произошло 13 августа, очень скоро после моей собственной регистрации.

Я продолжал работать над своей оболочкой API, удачно названной discord.py, наряду с другими людьми, которые создали свои собственные библиотеки, такие как Discord.NET, discord.rb, discord.js, discord4J и другие. Вместе мы провели реверс-инжиниринг API в течение следующих нескольких месяцев без какой-либо документации, которая могла бы нам помочь. Наша маленькая экосистема процветала и было создано множество ботов. В конце концов, Discord сами написали пост в блоге с подробным описанием наших приключений, чтобы привлечь больше людей к использованию наших библиотек. Было много надежд и волнений по поводу будущего ботов Discord. Нам было обещано многое! Будущее обещало быть светлым; мы собирались получить слэш-команды, вебхуки, “наблюдатели каналов”, надлежащую голосовую поддержку и т.д.

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

Пренебрежение

Когда Discord представила свой официальный API еще в 2016 году, было дано много обещаний относительно функций, которые будут реализованы. К сожалению, большинство из того, что нам обещали, так и не осуществилось. Когда мы спрашивали сотрудников Discord о состоянии API, они всегда упоминали, что им не хватает ресурсов для работы над API и что не имеет смысла расставлять приоритеты или широко работать над платформой API. Это было вполне объяснимо, поскольку Discord в то время был небольшой компанией, у которой было много забот. Однако это отсутствие приоритета означало, что API не развивался в течение следующих 3 лет. В сообществе ботов Discord росло разочарование из-за того, что нас не слушали.

Наш сервер Discord API изначально был местом, где сотрудники Discord и разработчики библиотек могли обсуждать изменения друг с другом. Наш сервер не был лишен драматизма, но и не был идеальным. Некоторые сотрудники Discord уволились из-за этой драмы, а некоторые вообще мало разговаривали. Несмотря на все это, наш сервер Discord API был главным местом общения между сотрудниками Discord и разработчиками библиотек. Это было главное место, где разработчики библиотек могли получить представление о предстоящих изменениях и предоставить обратную связь. Со временем число сотрудников Discord, желающих сотрудничать с разработчиками библиотек, сократилось до двух: Jake и b1nzy. Мы часто шутили, что эти двое были нашей последней надеждой, поскольку они были единственными сотрудниками Discord, которые проявляли искренний интерес к тому, чтобы выслушивать наши отзывы и действовать в соответствии с ними. К сожалению, b1nzy покинул Discord и Jake стал все больше и больше занят другими областями приложения, поэтому наше разобщение с внутренней командой Discord продолжало расти.

Только примерно в ноябре 2019 года Discord начал уделять больше внимания своим ресурсам на платформе разработки ботов.

Сервер инфраструктуры Discord

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

Следует отметить, что на этом сервере было не так много разработчиков библиотек, поэтому мы особо не наблюдали за тем, что там происходило. Были приглашены только два разработчика библиотек и только потому, что они также помогали в разработке больших ботов. Они были там не для того, чтобы выполнять свою роль разработчиков библиотек. Сотрудники Discord постепенно начали обсуждать изменения API на сервере инфраструктуры Discord, а не на нашем сервере Discord API. Discord больше не держал нас, разработчиков библиотек, в курсе предлагаемых изменений API и не давал нам много возможностей для обратной связи. К счастью для нас, разработчиков библиотек, у нас было несколько “кротов” на сервере инфраструктуры Discord, которые были готовы обмениваться с нами информацией, чтобы мы могли получить информацию о предстоящих изменениях, которые нам необходимо будет учесть.

Одним из таких изменений стало введение функции под названием guild_subscriptions, которая была способом уменьшить пропускную способность большого бота, отказавшись от событий PRESENCE_UPDATE и TYPING_START. Эти события обычно составляли около 95% пропускной способности (прим. переводчика – в оригинале использовался термин bandwidth) бота и загрузки ЦП и это был обычный запрос на удаление этих событий из потока событий шлюза. К сожалению, этот логический переключатель сопровождался предупреждением о том, что он также отключал события, связанные с участниками, и это было нежелательно для многих ботов. Необходимо было создать более совершенную систему. Эта система стала известна как намерения (прим. переводчика – в оригинале использовался термин intents).

Привилегированные намерения

Примерно в декабре 2019 года на сервере инфраструктуры Discord обсуждалась новая функция под названием “намерения”. Цель этой системы была в том, чтобы иметь более детальный подход к отключению событий, на которые надеялись многие разработчики ботов. Это изменение, по-видимому, было бы обратно совместимо с тем, как все делалось в то время. К сожалению, в то же время возрастали опасения по поводу кооперации юзерботов, с помощью которых был создан веб-сайт и скрапер, известный как “dis.cool”, который собирал и обрабатывал информацию о пользователях.

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

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

Первоначальная спецификация намерений имела только PRESENCE_UPDATE в качестве привилегированного намерения. Для “большого бота” с более чем 100 серверами это блокировало возможность добавления бота на большее количество серверов, если разработчик явно не запросил одобрения у Discord на эту функцию или не отключил намерение. В то время процесс внесения в белый список сводился к галочке и текстовому полю, которые нужно было заполнить, чтобы объяснить Discord, для чего это необходимо боту, при необходимости прикрепив видео, показывающее использование ботом этой функции.

Большинство разработчиков библиотек и участников не были довольны изменениями, поскольку то, как исторически проходила бюрократия в Discord, означало бы, что бот будет молча ломаться в ожидании ответа от Discord. В то время крупная система сегментации (прим. переводчика – в оригинале используется термин sharding) ботов, на которую должны были подать заявки боты, находящиеся на более чем 250000 серверах, уже вступила в силу, поэтому росли опасения по поводу влияния бюрократии на наших ботов. Нам обещали, что система будет в порядке и что бюрократия не окажет негативного влияния.

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

Discord неоднократно упоминал, что порог в 100 серверов окажет минимальное влияние и что большинство ботов не преодолели этот предел. Для нас же крупные боты – это боты, которые находятся на более чем 100 серверах и обслуживающие более 100 тысяч пользователей. В то время событие PRESENCE_UPDATE было сильно перегружено, предоставляя не только присутствие и статусы, но и обновления на уровне пользователя (например, имя, аватар и дискриминатор (прим. переводчика – код из 4-х цифр после имени пользователя). Нам сказали, что до того, как изменение вступило в силу, они разделят его, и это действительно было сделано в API v8 10 месяцев спустя.

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

По поводу этого добавления было много шума, не только на сервере Discord API, но и на GitHub. По сей день этот пулл-реквест на GitHub самый обсуждаемый из всех вопросов и пулл-реквестов в репозитории. Это было связано с тем, что в то время данные участников были необходимы для большого объема функций в API, таких как проверка разрешений и модерация. Аналогичным образом сотрудники Discord утверждали, что последствия для бюрократии будут минимальными и что все боты будут проверены в течение одного дня. Они также утверждали, что в будущем данные участников должны стать ненужны. Крайний срок для соответствия этим изменениям – 27 октября 2020 года. Датой введения этого намерения было 3 февраля 2020 года.

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

Верификация

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

Мы не знали, что планирует делать Discord, пока они не обнародовали свой план на будущее в посте 7 апреля 2020 года. В нём команда Bot & API представила свое видение платформы на будущее, продемонстрировав примеры на Figma о том, как они надеялись интегрировать ботов в экосистему. Было показано множество концепций, таких как контекстные меню, кнопки и эфемерные сообщения. Многие из нас наконец-то обрадовались грядущим переменам.

К сожалению, вместе с новостями о будущем платформы появилось предостережение о дополнительных ограничениях. Нам больше не нужно было бы заполнять обычную форму с двумя текстами и флажками, вместо этого нужно было бы заполнить целую анкету. Кроме того, для проверки вашего бота необходимо предоставить удостоверение личности государственного образца, чтобы бот получил галочку верификации, а также значок профиля (который позже был отменен). Больше не было возможности попасть в белый список для привилегированных намерений, не проходя через систему проверки, нарушающую конфиденциальность. Больше не было возможности заставить вашего бота присоединиться к более чем 100 серверам без прохождения верификации.

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

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

Что вы думаете о верификации для ботов, находящихся на более чем 100 серверах? Синий: Я думаю, что верификация и требование предоставить фото удостоверения личности – это хорошо Красный: Я считаю, что верификация – это хорошая идея, но не нахожу ничего хорошего в требовании предоставить фото удостоверения личности Жёлтый: Мне не нравится идея с верификацией и предоставлением фото удостоверения личности Зелёный: Мне всё равно

Это большой объём данных о том, как разработчики ботов отнеслись к изменениям, который я в конечном итоге не смог предоставить сотрудникам Discord из-за того, что они не хотели принимать это во вниание. Примерно в этот момент большая часть моей мотивации пошла на убыль. Я был против системы верификации по своей сути, поскольку считал ее инвазивной и ненужной. Задав невинный вопрос Mason’у, руководителю проекта команды Bot & API, о том, может ли мой бот подключиться к шлюзу без проверки, он грубо ответил и назвал меня “мучеником” излишне угрожающим тоном:

>Ты знаешь, могу ли я всё ещё подключить своего бота, если я не верифицирован? Пока я здесь, то нет, мы не будем блокировать твоё подключение к шлюзу Если только ты этого не хочешь. Рад услужить, как могу, в деле мученика

Бюрократическая катастрофа

После намерения проверить ботов в экосистеме сотрудники службы поддержки были немедленно завалены запросами, в результате чего их предыдущее обещание проверять ботов в течение 5 дней по SLA (прим. переводчика: Service Level Agreement — соглашение об уровне сервиса) полностью развалилось. Вся команда Bot & API должна была работать вместе, чтобы гарантировать, что они смогут удовлетворить спрос людей, верифицирующих своих ботов. Однако, несмотря на все их усилия, они постоянно отставали на несколько недель, даже месяцев, в течение всего 2020 года, и это продолжается по сей день в 2021 году.

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

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

Я вернулся, чтобы сказать одну вещь. Машины времени не существует. Вот что было написано на веб-странице, пока её не обновили и не убрали раздел со значками. Значок – это не “признание успешности”. Если вы интерпретировали это так, то это ваша проблема. Я слышал, что тут есть значки. Это не вопрос, но да! После верификации вы и другие члены вашей команды получите значок верифицированного разработчика на ваши профили Discord, как доказательство вашей успешности в качестве Discord-разработчиков. Ваш бот также получит значок верифицированного бота. Если же вы или кто-то из членов вашей команды не получил значок, то, пожалуйста, напишите в поддержку.

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

Слэш-команды

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

Если у бота есть доступ ко всему содержимому сообщений, мы, скорее всего, добавим дополнительные предупреждения Но у ботов-модераторов будет возможность сохранить доступ ко всему содержимому сообщений Другие боты смогут получать только некоторое подмножество отфильтрованных данных Я не думаю, что мы строго будем соблюдать slash-команды… Всегда найдется способ использовать команды в старом стиле, но вам потребуется приложить дополнительные усилия, чтобы получить содержимое сообщений в таком случае Боты, имеющие доступ к содержанию сообщений, пугают Мы бы не стали удалять возможность доступа к событиям MESSAGE_CREATE Только содержимое внутри сообщения (или ограничить это) Таким образом, вы все равно будете знать, что сообщение было отправлено кем-то куда-то Это все кошерно Они планируют заблокировать доступ к содержимому сообщений в событии MESSAGE_CREATE для ботов без привилегированных намерений, заставляя разработчиков ботов использовать slash-команды

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

Вскоре после этого участники сервера инфраструктуры Discord получили раннюю бета-версию слэш-команд. Мой крот также дал мне описание (недоступное для общественности), объяснив, как будет работать система. Сотрудники Discord не делились с нами этим описанием или хоть какой-то информацией. Когда они всё же наконец рассказали нам про это, они планировали провести встречу с нами по теме работы этой системы. Я не присутствовал, потому что был на работе. Разработчики библиотек, принявшие участие во встрече, сказали, что они поделились множеством идей о том, как они хотели, чтобы работали slash-команды. Большая часть этих идей в конечном итоге не была принята во внимание.

Когда слэш-команды выпустили в открытый бета-тест, многие из простых людей повторили те же критические замечания и отзывы, которые разработчики библиотек и разработчики крупных ботов высказали ранее команде Bot & API. После некоторого давления со стороны сообщества в Discord наконец-то поменяли кое-что, но разрешения оставались серьезной проблемой. По сути, слэш-команды имели фатальный недостаток: они не были привязаны к пользователю. Это означало, что традиционные разрешения не работали с слэш-командами. В случае с обычными ботами администратор сервера может блокировать разных ботов в разных каналах, запретив им читать сообщения. Для бота с слэш-командами это было бы невозможно, поскольку слэш-команды обходили все формы разрешений.

Нам сказали, что система разрешений со временем улучшится, хотя этого так и не произошло. Возможность слэш-команд (она же взаимодействие (прим. переводчика – в оригинале Interaction)) обходить запрет доступа к @everyone была исправлена только в мае 2021 года, через 6 месяцев после того, как об этом было сообщено.

Содержимое сообщений – привилегированное намерение

Примерно в начале июня 2021 года Discord связались с 8 самыми популярными разработчиками библиотек по поводу специальной встречи на тему, которая была важна для всех нас и экосистемы. Мы знали о том, что содержимое сообщений подпадёт под включение в систему намерений, и решили, что это наш последний шанс на защиту экосистемы от разрушения и надежда заставить разработчиков Discord изменить своё мнение обо всем этом. Встреча была под NDA (прим. переводчика – договор о неразглашении), из-за чего мы неохотно согласились на участие, но мы верили в успех, и к тому же нам сказали, что это будет наш последний шанс получить место за столом для обсуждения этого изменения, поэтому мы все и согласились с единственной целью убедить разработчиков в том, что это направление – плохая идея.

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

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

Направление на будущее

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

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

>Нашей целью было сделать что-то побыстрее.Спасибо за честность. Я ценю это.

Я не верю в исполнение обещаний чего-то лучшего, потому что всегда эти обещания были пустыми. Я не думаю, что ситуация радикально улучшится к апрелю 2022 года, и не считаю, что это изменение стоит того постоянного воздействия, которое оно окажет на экосистему. К сожалению, это решение окончательное, и единственное, что я могу реально сделать на данном этапе – это наблюдать издалека. У меня нет мотивации идти в ногу с экосистемой, в которую я больше не верю. Я хотел, чтобы богатая экосистема ботов росла и процветала, чтобы боты могли полностью раскрыть свой потенциал, но Discord неоднократно решал, что ограничения – лучший путь. Вот почему я решил уйти с поста мейнтейнера этого проекта. Мое участие в discord.py и API всегда подпитывалось страстью и надеждой. Недавние изменения полностью лишили меня этих факторов.

FAQ

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

Почему вы останавливаете разработку?

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

Для меня доступ к содержанию сообщений только под системой привилегированных намерений означает окончание творческой свободы и низового уровня доступа к системе, во что все мы, разработчики библиотек, верили. Контроль теперь отобран и всё строится вокруг ограничений Discord. Боты больше не будут процветать в песочнице, ограниченной только вашим воображением, а вместо этого теперь только Discord решает, что вы можете делать. Будущее ботов Discord зависит исключительно от системы взаимодействия; все должно быть четко написано и поддержано сотрудниками Discord, а творческие решения придётся отложить в сторону. Я не удивлюсь, если в будущем весь API шлюза станет ограниченным и устаревшим, а единственным рекомендуемым способом создания бота останется либо только система взаимодействий, либо HTTP. У меня нет реальной надежды на будущее ботов Discord.

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

Что теперь будет?

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

Что я могу с этим поделать?

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

Что будет с моим ботом?

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

Следует отметить, что Discord хочет, чтобы все боты, находящиеся на более чем 75 серверах перешли на слэш-команды в обозримом будущем. Если вы хотите подать заявку на доступ к содержимому сообщений, то вы не сможете использовать его для обработки команд; вам точно откажут. Таким образом, фактически каждый должен перейти на слэш-команды, чтобы его бот мог функционировать.

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

Так можно ли считать, что желание использовать старую систему команд является уважительной причиной? Я могу сказать, что просто “Мне нравится старый способ и я хочу использовать его вместо этого” не будет причиной для одобрения, нет.

Я хочу, чтобы мой бот продолжал работать!

Во время сессии вопросов и ответов для разработчиков 4 августа Mason, руководитель проекта команды Bot & API, призвал вас переписать своего бота, так как это “легко” и “круто”.

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

“Э-э, популярные библиотеки. Мы, очевидно, не имеем контроля над сторонними библиотеками. Они являются третьей стороной. Хм, мы стараемся работать с ними очень тесно, чтобы информировать их об изменениях, хм, и отвечать на их вопросы о реализации, API и согласованности, а также “эй, этот API отстой или нет”. Слэш-команды находятся в открытой бета-версии для разработчиков с декабря прошлого года. Изменения произойдут только через 9 месяцев. Выходит 1 год и 4 месяца, всего получается 16 месяцев, если я правильно помню момент первого выпуска слэш-команд. Гм, у многих библиотек есть поддержка. У некоторых есть неофициальные форки. Я также скажу, что некоторые бесстрашные разработчики могут хорошо обходиться и без библиотек, но я знаю, что это гораздо более сложная задача. Гм, но если вы еще не проверили использование слэш-команд через HTTP и исходящие вебхуки, то это довольно круто и действительно легко масштабируемо.”

Поэтому, если вы хотите, чтобы ваш бот продолжал работать, у вас есть несколько вариантов:

  1. Внедрите систему слэш-команд самостоятельно. Библиотека (v2) предоставляет on_interaction, чтобы помочь вам в этом, и все эндпойнты технически находятся в bot.http.
  2. Реализуйте систему слэш-команд, используя raw API.
  3. Дождитесь форка discord.py с новым функционалом.
  4. Перепишите своего бота, используя новую библиотеку или на другом языке программирования.
Разве все не будет хорошо в апреле 2022 года? У нас достаточно времени!

Discord неоднократно заявлял, что, по их мнению, к апрелю 2022 года все будет хорошо:

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

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

discord.py - Не поддерживается
Discord.NET - Не поддерживается
disgord - Не поддерживается
discordjl - Не поддерживается
Dimscord - Не поддерживается
DSharpPlus - Не поддерживается
DiscordPHP - Не поддерживается - Поддержка больше не работает
Sleepy Discord C++ - Поддерживается частично - Нестабильно/Не выпущено
Discordia - Поддерживается частично - Нестабильно/Не выпущено
Eris - Поддерживается частично - Нестабильно/Не выпущено
discord.rb - Поддерживается частично - Нестабильно/Не выпущено
discordgo - Поддерживается частично - Нестабильно/Не выпущено
nyxx - Поддерживается частично - Не выпущено
Ackcord - Поддерживается частично - Не выпущено
discord.js - Поддерживается
JDA - Поддерживается
Discord4J - Поддерживается
Javacord - Поддерживается
Serenity - Поддерживается
Twilight - Поддерживается
nostrum - Поддерживается
Kord - Поддерживается

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

Discord будет предоставлять сообщения, в которых есть упоминания, а это значит, что все будет лучше… верно?

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

Могу я взять на себя управление библиотекой за вас? Я могу её поддерживать!

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

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

Почему бы не реализовать слэш-команды?

Проще говоря: это не весело. Для меня не особенно сложно реализовать слэш-команды и у меня уже была в основном рабочая, но прискорбно неполная локальная копия, сделанная еще в мае 2021 года. Тем не менее, моя мотивация продолжать работать над этим на данный момент практически отсутствует. Слэш-команды представляют собой изменение направления Discord, с которым я в корне не согласен. К сожалению, эта функция была вброшена, чтобы добавить больше ограничений на платформу.

Обратите внимание, что моя реализация слэш-команд полностью отличалась от реализации discord.ext.commands, поскольку эти две модели строго несовместимы. Поэтому, даже если бы я выпустил свою реализацию, большинству пользователей пришлось бы полностью переписать своего бота, чтобы поддержать его.

Что случится с сервером discord.py?

В идеале ничего. Я не планирую ничего делать с сервером и он может остаться как есть. Библиотека всё ещё функционирует и там все еще много кода, написанного на discord.py. Что еще более важно, сервер занимает особое место в моем сердце вместе с сообществом, которым я горжусь, и я не вижу причин сжигать его дотла.

А как насчет сервера Discord API?

То же самое. Там ничего не случится.

Что будет с RoboDanny?

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

Мои боты

У меня есть бот RoboDanny. На самом деле это самый старый бот в Discord. Я создал этого бота через несколько часов после того, как присоединился к Discord. Я помню, как в первый день, когда я зарегистрировался в Discord, 10 августа 2015 года, мой друг пытался убедить меня перенести наши операции из Skype и IRC в этот чат, который он только что нашел сегодня, под названием Discord. Поэтому я вошел и повозился с ним, и моё первое впечатление было сильным. Я провел тот день в поисках API для Discord и ничего не мог найти, пока не наткнулся на пакет с именем node-discord от izy852. Этот пакет node-discord был невероятно простым, это была просто оболочка WebSocket с двумя событиями, message и debug. С таким же успехом это мог бы быть самый простой синтаксический сахар. Но я посмотрел на него, поигрался с ним некоторое время и решил, что для меня возможно перенести наши турниры в Discord с тем, что у меня там было.

Я не использовал node-discord особо долго, я использовал его, примерно, только первые два дня, прежде чем выбросить его и самостоятельно начать реверс-инжиниринг API с помощью discord.py. Мне не очень нравился JS и я хотел создать библиотеку, чтобы мой бот действительно сиял. Я, по сути, сделал discord.py ради моего бота. Именно в это время Voltana, Izy и я создали сервер, известный сегодня как Discord API. На этом сервере мы бросили все наши силы на реверс-инжиниринг API по приколу. Stan присоединился и дал нам анонсы API о вещах, которые будут отличаться между v1, v2 и v3, а также о новых функциях, которые могут повлиять на нашу действительно крошечную экосистему. Наша экосистема была небольшой – в то время у нас было едва 200 участников и это было очень много! Но это была наша милая маленькая экосистема.

Я создал RoboDanny с намерением использовать его на сервере r/Splatoon. По сути, он был там с 1-го дня. С его помощью мы делали всевозможные интересные вещи, такие как теги, профили и проверка внутриигровой информации, такой как карты и оборудование. Это был жизненно важный ресурс для этого сервера. Я помню, что люди были впечатлены тем, что у меня был бот, и спрашивали меня, как я это сделал. Я побудил нескольких других начать создавать собственного бота. Одним из этих людей был тот, кого вы, возможно, знаете как jagrosh. Он хотел создать своего собственного бота и добавить его также на сервер r/Splatoon. В итоге он стал крупным разработчиком ботов для платформы, создав популярных ботов, таких как GiveawayBot и Yggdrasil. Люди до сих пор и по сей день упоминают, как мой бот повлиял на них и улучшил их опыт.

RoboDanny был первым ботом, в котором была система оценивания (прим. переводчика – в оригинале starboard). В наши дни её часто копируют другие люди, и это прекрасно. Эта функция появилась в чате StackOverflow, где я обычно зависал до того, как появился в Discord, и я хотел придумать способ перенести ее, чтобы мои друзья перешли в Discord. Я реализовал множество важных функций с помощью RoboDanny и использовал его как способ управления дизайном discord.py вплоть до того, что есть сегодня. Большинство разработчиков библиотек не поддерживали общедоступных ботов – раньше я был единственным исключением.

Во время моего фиаско с верификацией, мой бот стал неуправляемым. Я был против системы верификации и не оценил, что мое хобби было нейтрализовано из-за проблем, которыми я не поделился с недавно сформированной командой API. Мой бот – жизненно важный бот-модератор для всех сообществ, в которых я нахожусь. Mason оскорбил потенциальную смерть моего бота. Я все еще принимаю это очень близко к сердцу. Из-за ошибки и счастливой случайности у моего бота все еще есть доступ к участникам через систему намерений, несмотря на то, что он не верифицирован. Это была счастливая случайность – я поставил галочку перед переключением намерений и он так и не выключился. Это осталось незамеченным, так как я не рассказывал об этом никому из персонала. Пожалуйста, не исправляй это.

К сожалению для меня, когда доступ к содержимому сообщений будет только через систему намерений, мне придется официально закрыть RoboDanny и всех моих ботов. Настоящая буквальная смерть моего старейшего бота и всего, что значило для меня это хобби. Кусочек моей истории и моего времени. Кусочек истории Discord. Я уверен, что многим людям в Discord Inc. вообще наплевать на моего бота. Может быть, некоторые даже ударят меня ещё раз за то, что я эмоционально привязан к нему. Но для меня это действительно имеет значение.

Это вгоняет меня в депрессию.

Ты бы когда-нибудь подумал о том, чтобы снова взяться за этот проект?

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

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

Моего вопроса здесь нет!

Виноват. Если во время обсуждения возникнут дополнительные вопросы, я добавлю их сюда, или вы можете просто задать их мне напрямую на сервере discord.py и я постараюсь ответить.

Я действительно зол на тебя!

Извини.

Благодарности

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

  • aj. Спасибо за то, что вы самый отзывчивый сотрудник Discord, с которым я когда-либо общался. Ваша готовность и проактивность при работе с нами не имели себе равных и были высоко оценены.
  • Bryan Forbes. Спасибо, что потратили время и усилия на то, чтобы добавить подсказки в библиотеку. Это было хорошей помощью.
  • Gary. Спасибо за то, что поддерживаете меня на сервере discord.py, и за то, что вы так добры ко всем на сервере и ко мне. Я очень ценю это.
  • Hornwitser. Спасибо за предоставление ранних отзывов о дизайне для discord.py и распутывание спагетти в исходном коде отправки.
  • Ian Mitchell. Спасибо, что выслушали мои бессвязные разглагольствования и разочарования и попытались все исправить.
  • Ian Webster. Спасибо, что на самом деле были достаточно любезны, чтобы связаться с нами, когда все пошло наперекосяк.
  • Imayhaveborkedit. Спасибо за то, что все эти годы спорил со мной в голосовом чате, когда меня это не беспокоило.
  • Jake. Спасибо за то, что вы действительно являетесь нашей опорой и поддерживаете здравомыслие на нашем сервере Discord API. Без вас мы бы потеряли наше самоосознание и многое другое было бы ещё хуже. Мы часто говорим, что без вашего присутствия наш сервер прекратил бы своё существование.
  • LeoV. Спасибо, что были на раннем этапе и помогли разработать логотип для документации.
  • “Крот”, ты знаешь, кто ты такой. Спасибо, что пролили свет на неравенство, с которым столкнулись разработчики библиотек.
  • NCPlayz. Спасибо за то, что вы один из немногих постоянных контрибьютеров библиотеки. Без вас реализация некоторых функций была бы слишком утомительной, чтобы делать это в одиночку.
  • spoopy. Спасибо за поддержку кода на раннем этапе и предоставление бесценной обратной связи.
  • Stanislav. Спасибо за то, что вы были нашим контактным лицом в начале работы API. Это было весело.
  • Сообщество discord.py. Спасибо за то, что вы есть.
  • Другие разработчики библиотек. Спасибо, что держались вместе, несмотря на всю эту чушь. Я почти уверен, что без нашего единства я бы давно ушёл.
  • Сообщество Red-DiscordBot. Спасибо за то, что были добры и уважительны ко мне. Отзывы, которые вы, ребята, давали при работе с структурой команд, были для меня бесценны.
  • Контрибьютеры discord.py. Спасибо за улучшение различных вещей в библиотеке; даже самый незначительный вклад оказывает большое влияние.
  • Хелперы на сервере discord.py. Спасибо, что взяли на себя большую часть тяжелой работы, которая обычно остается недооцененной.

И конечно же, спасибо вам за то, что прочитали всё это.

До следующего раза.