Как реализовать игнор заблокированных пользователей в группах Telegram?
Я хотел бы попросить помощи у сообщества, потому что все собственные возможности я полностью исчерпал.
Можно было бы задать вопрос на сервисе Q&A (он же бывший Тостер) — но я уже сделал это, но большой пользы мне это не принесло.
Тем не менее, просто задавать вопрос под видом статьи мне кажется не очень корректным. Поэтому я попытаюсь добавить в текст предысторию всего этого процесса.
Если повезёт, то кто-нибудь в комментариях подскажет решение. И тогда нашедшие эту статью в поисковиках тоже смогут эту проблему решить.
Проблема и предыстория
Как хорошо знают все пользователи Telegram, в групповых чатах этого мессенджера не существует функции игнора пользователя. Вы можете заблокировать неприятного вам пользователя, но это всего лишь запрещает ему писать вам личные сообщения. В групповом чате — а нынче групповые чаты, кажется, вмещают до 10 тысяч пользователей — вы просто обязаны видеть всё, что скинут прочие участники группы.
В «Чёрном Зеркале» даже была серия про это.
Продолжайте смотреть! Продолжайте смотреть! Продолжайте смотреть!
Если мы попытаемся найти решение этой проблемы в интернете, мы столкнёмся с типичной историей войны крупной корпорации и маленькой группы недовольных людей. Этапы этой войны хорошо видны на Гитхабе.
Вот первый запрос этой функции от 2015 года. В этой теме можно найти ссылки на последующие темы, люди постоянно просили эту функцию в последующие годы, но каждое обращение оказывалось закрытым с довольно глупым ответом «Это не проблема клиента, а проблема API».
Даже не программисту понятно, что данные показывают пользователю с помощью клиента. И даже если API передаёт вам все сообщения с сервера — нет никакой проблемы спрятать часть из них на стороне клиента.
Но вот уже пять лет, каждый год, а иногда по нескольку раз в год, люди добираются до Гитхаба с требованием ввести игнор в группах — и каждый раз получают отказ и закрытие темы. Больше полугода назад, видимо, утомившись от постоянных требований, разработчики вывесили ни к чему не обязывающую отговорку: мол, да-да, мы всё сделаем, когда-нибудь в далёком будущем.
Я тебя услышал! Я просто это озвучил, пока не готов тебе ответить, скажем так, я понял твою позицию. Давай, на созвоне, не теряйся!
Польза от этой отговорки ровно одна — теперь на все жалобы администраторы tdesktop на Гитхабе отсылают к этому сообщению. Дескать — вот смотрите, они всё знают, они всё сделают, извините, ветка закрыта. За полгода в телеграме произошло множество трудоёмких изменений, например в чаты добавили КрАсИвЕнЬкИе шевелящиеся формы для опросов. Но никакого игнора даже близко не появилось. Думаю, не появится и через год.
При этом ситуация выглядит даже немного зловеще — есть ощущение, что какими-то специальными инструкциями для официальных форков вводить эту функцию запрещается. У Телеграма есть не меньше десятка широко известных форков (вроде Unigram) и под сотню малоизвестных, но ни в одном из них эта функция не реализована. Я писал в поддержку всех известных форков, но не получил никакого ответа.
При этом управлять со стороны клиента сообщениями заблокированных пользователей можно. Это подтверждается существованием Telegreat. Это форк Телеграма, в котором была заявлена опция игнора заблокированных пользователей.
Увы, этот игнор ненастоящий. Всё, что делает опция «Игнорировать заблокированных пользователей» — раскрашивает текст сообщений заблокированных пользователей в серый цвет. Картинки, видео, музыка или стикеры от заблокированных пользователей видны по-прежнему; кроме того серый цвет на тёмных темах отлично читается.
В чат к разработчику, где я сидел какое-то время, регулярно приходят люди и просят сделать «настоящий игнор». Раньше он просто отказывался; в последние же полгода он совсем забросил своё проект, потому что у него «нет времени». Что ж, это обычное дело для бесплатных открытых проектов.
Я упоминаю об этом проекте по двум причинам.
- Во-первых, он рекламируется именно как «клиент с функцией игнора» и его советуют люди, которые читают только описание, не зная, как на самом деле там этот «игнор» реализован. На самом деле игнора там нет.
- Во-вторых, он является живым подтверждением того, что в клиенте телеграма можно определить сообщение заблокированного пользователя и изменить его. То есть на самом деле игнор на стороне клиента возможен.
Однако никто этого не делает.
Лучше всего передаёт мои чувства комментарий в похожей теме на Реддите четырёхлетней давности:
I'm shocked you can't do it.
Seriously?
If I just don't want to read anything some user writes I should be able to do so… it's like, one of the very basic features of every communication protocols EVER!
You could do it in the 90s with emails and newsgroups!
Причём всюду, где идёт речь о причинах отсутствия игнора, повторяются одни и те же вещи:
— Вы будете видеть не все сообщения и из-за этого не будете понимать что происходит в чате.
— Вы будете дублировать сообщения.
— Нарушится функциональность системы «ответов»
И, опять же, я использую цитату, просто потому, чтобы показать вам — это не мои личные мысли, это наша общая позиция, людей, которые хотят ввести эту функцию:
I can assure you 100.00% of people asking for this feature, are fully aware of the side effects it has, and could not care less about those.
Yes just not show it at all. Yes including if it's a reply. Yes if the admin needs to see everything to moderate, then they don't have the luxury of using ignore. And most certainly we can compare TG groups to IRC, because they are both a mechanism for accomplishing the same thing, namely multi-user communication.
Вот просто пример из жизни, касающийся дублирования — я сижу в нескольких телеграм-чатах и в течение дня ОБЯЗАТЕЛЬНО несколько пользователей бросают в чат одну и ту же новость / смешной скриншот / новый популярный мем. Несмотря на то, что до них это уже было. Несмотря на то, что никакого игнора не существует — они всё равно просто не читают историю чата и дублируют сообщения. Про то, как люди не умеют пользоваться поиском на форумах, и многократно дублируют любые вопросы — я даже не буду упоминать, наверняка большинство читателей с этим сталкивались. Опять же, безо всякого игнора эта проблема уже существует. И игнор к ней ничего не добавит.
Так почему же на самом деле эта функция не существует?
Ну, конспирологическая версия гласит, что основная цель Телеграма — это сбор персональных данных и графов взаимодействия пользователей. В этом смысле каждая телеграм-группа позволяет зафиксировать типовую малую группу, которую пользователь как минимум может выдержать, и которая может выдержать его. В противном случае либо его выкидывают из группы, либо он уходит сам. Введение игнора нарушит чистоту эксперимента.
Версия маркетинговая немного проще.
Когда в 1995 году Халед Мардам-Бей создал mIRC — он написал программу для людей. В смысле, для самостоятельных людей, которые знают, что они хотят, выбирают то, что считают правильным, и несут ответственность за последствия своих действий. С одной стороны это вызывало проблемы, например, со скриптовыми уязвимостями — запускаешь строку с командами и всё, ты взломан. С другой стороны — это был мессенджер, которым пользовались взрослые и ответственные люди.
Когда в 2013 году Паша Дуров сделал Telegram — он сделал программу «для домохозяек». Для тупого массового пользователя, которому нужен добрый опекун. Отсюда вся эта регистрация по номеру телефона, рассылка сообщений всем по телефонной книге, флажки и запреты со всех сторон. Ведь они «нажмут что-нибудь и всё исчезнет!». А потом будут писать жалобы в поддержку! Отсюда и такие глупые оправдания — «ведь если вы включите игнор, то вы не увидите сообщений других людей». Когда делаешь массовый продукт — ты вынужден ограничивать любую функциональность, выше базовой. Продукт для дурака должен иметь защиту от дурака.
Тут появляется коронный аргумент, который всегда приводят в конце: «не нравится — так не пользуйся». Я не буду объяснять, что с ним не так, это этический вопрос формата «почему нельзя есть людей» — кто его задаёт, тому бессмысленно объяснять.
Но в случае с Телеграмом этот аргумент немножко видоизменяют: «не нравится — так сделай как тебе нравится, это же open source».
Попытка решения
Устав от многолетней борьбы, я решил действительно попытаться что-то изменить самостоятельно.