На фоне новости о датасатанисте, который "клонировал" своих друзей в цифровое пространство, обучив LLM на 500.000 сообщений в групповом чате (на самом деле не только, но причину каждый найдёт для себя сам), будем кормить паранойю и пошагово разбираться, как же уничтожить свой "цифровой след" в мессенджере Telegram.
Дисклеймер: данная статья предоставляется исключительно в информационных и образовательных целях. Обратите внимание, что использование описанных скриптов может привести (и приведёт) к безвозвратному удалению ваших сообщений в группах и супергруппах Telegram (а то и вообще всех), для всех и навсегда. Используйте эти скрипты на свой страх и риск. Автор статьи не несёт ответственности за любые возможные негативные последствия, возникшие вследствие применения информации, предоставленной в данной статье.
TL;DR
Для начала скачаем и настроим проект, который позволит вычищать все ваши публичные группы от ваших же сообщений, оставленных там за последние несколько лет (сколько бы этих сообщений там ни было). Да, можно попросить админа группы удалить их за вас, но можно и не просить. Далее настроим облачную функцию, которая сделает все ваши сообщения в любом публичном чате самоуничтожающимися по таймеру.
telegram-delete-all-messages
Данный Python-проект позволяет зачищать свою историю сообщений в публичных Telegram-чатах на выбор (хоть во всех сразу). Все действия будут описаны с упором на близкого к IT человека, но не IT-специалиста, поэтому обойдёмся без консоли и консольных команд (почти) и базовой операционной системой выберем Windows (для линуксоидов не составит труда всё повторить, они прекрасно знают как).
Для начала скачаем архив репозитория с github: https://github.com/gurland/telegram-delete-all-messages, выберем Code → Download ZIP.
Вторым пунктом скачаем и установим CPython 3: https://www.python.org/ (очень странно, если во времена такого дичайшего распространения Python у вас его до сих пор нет)
-
Далее нам надо получить Telegram API id и hash для регистрации нашего собственного Telegram-клиента. Для этого переходим на https://my.telegram.org/ (делать это лучше всего с телефона, так как при регистрации с десктопа частенько вылетает неопознанная ошибка), вводим свой номер телефона, и в личных сообщениях видим Web login code. Его и надо ввести в форму. Далее переходим в пункт API development tools и создаём новое приложение. Вводим App title, Short name, сохраняем и получаем искомые App api_id и App api_hash, которые нам понадобятся далее.
-
Распаковываем полученный в первом пункте архив (скорее всего, он будет называться telegram-delete-all-messages-master), заходим в папку и запускаем последовательно install.bat и start.bat, которые устанавливают и запускают Telegram-клиент Pyrogram соответственно. После старта клиента появится запрос Enter your Telegram API id, куда надо ввести api_id из п.3, далее Enter your Telegram API hash, соответственно, api_hash из п.3. Далее Pyrogram попросит: Enter phone number or bot token, вводим свой номер телефона, привязанный к Telegram-аккаунту, подтверждаем. Далее клиент просит - Enter confirmation code, и подскажет, каким образом этот код был доставлен, скорее всего, это будет личное сообщение в залогиненном мессенджере, с заголовком Login code. Вводим код. Все эти операции надо проделать единожды, все ключи будут закешированы, а сессия сохранена.
Если предыдущие пункты были успешными, вы увидите список ваших публичных групп и супергрупп, в которых вы состоите на данный момент (если вы вышли из группы - вы не можете удалять в ней сообщения, что очевидно). Можете вводить номера групп через запятую, и клиент будет удалять из них всю вашу активность, для всех и навсегда. Есть также отдельный пункт, чтобы зачистить вообще всю активность, но будьте с ним предельно осторожны!
Для последующей зачистки достаточно запускать только start.bat и следовать подсказкам.
А где автоматизация?
Теперь возьмём, к примеру, случай, когда администратор группы решил по каким-то причинам не активировать таймер автоудаления сообщений, а мы хотим, чтобы наши сообщения в этой группе надолго не оставались. Воспользуемся сервисом облачных вычислений, да еще и таким, за который можно платить рублями. Называется он Yandex Cloud Functions. Для этого:
Переходим на страницу сервиса и нажимаем "Подключиться": https://cloud.yandex.ru/services/functions
Логинимся под своей учёткой Яндекса (она же у вас есть?), попадаем в "Консоль управления Yandex Cloud", соглашаемся с условиями и создаём своё первое облако.
Далее выбираем из списка сервисов Cloud Functions и создаём нашу первую функцию, назовём её "telegram-terminator".
Сервис попросит заполнить платёжную информацию и привязать карту (за вычислительные мощности всё же придётся платить, хоть и совсем копеечную цену). Создание платёжного аккаунта требует некоторого количества времени.
-
Далее в редакторе выбираем Python и снимаем галочку "Добавить файлы с примерами кода"
Теперь подготовим код нашей функции. Для этого скачаем адаптированный мною под облачное выполнение оригинальный скрипт cleaner.py с github-репозитория: https://github.com/dnfesenk/telegram-delete-all-messages (я ни разу не Python-разработчик, если есть замечания - welcome to issues). Загружаем архив (Code → Download ZIP), распаковываем.
-
Далее нам надо передать функции сохранённую ранее сессию. Pyrogram использует для этого СУБД SQLite, но так как Yandex Cloud Functions — эфемерная платформа без сохранения состояния (stateless), просто подложить файл базы данных к исполняемому скрипту не получится. Но выход есть - мы подложим файл СУБД в сам скрипт. Для этого предварительно закодируем базу данных в base64-строку. Перейдём в каталог, куда мы скачивали telegram-delete-all-messages из первой части этой статьи, и найдём там файл client.session (он совсем крохотный). Далее запустим Windows PowerShell (для этого достаточно в Проводнике Windows в поле, где указан путь к каталогу, вбить powershell и нажать Enter)
В PowerShell вбиваем следующее:
[System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes("client.session")) | Set-Content -Path "client_session_base64.txt"
В каталоге получаем файл client_session_base64.txt, открываем его любым текстовым редактором, копируем получившуюся строку.
-
Далее возвращаемся к пункту 6, открываем файл cleaner.py в текстовом редакторе и вставляем строку из предыдущего пункта в значение
base64_string
. Готовим функцию к загрузке. Для этого добавляем файлы cleaner.py и requirements.txt в zip-архив telegram-terminator.zip.
-
Возвращаемся в пункт 5 и выбираем "Способ - ZIP-архив", нажимаем "Прикрепить файл" и выбираем наш архив telegram-terminator.zip. Указываем точку входа
cleaner.handler
, в пункте "Переменные окружения" пишем: API_ID и api_id из п.3 первой части, API_HASH - api_hash оттуда же, и INCLUDE - список названий групп через запятую и без пробелов, которые мы собираемся в автоматическом режиме подчищать от наших сообщений. Остальные параметры оставляем по умолчанию. Далее нажимаем Создать версию.
-
В принципе, можно переходить в раздел "Тестирование" и запускать нашу функцию, но мы повесим на неё триггер. Для этого заходим в раздел "Триггеры" и создаём новый триггер. Указываем имя триггера ("telegram-terminator-trigger"), Cron-выражение (надо учесть, что на сервере время по UTC, соответственно, чтоб наши сообщения исчезали каждую полночь, надо указывать
0 3 ? * * *
), выбираем нашу функцию telegram-terminator и тег $latest. Для триггера также нужен сервис-аккаунт с рольюserverless.functions.invoker
, создаём тут же. Остальные параметры не трогаем. Нажимаем "Создать триггер". Следует учитывать, что на данный момент параметры, кроме имени и описания триггера, редактированию не подлежат, надо создавать триггер заново. Также в разделе "Триггеры" можно управлять состоянием уже созданного триггера, запуская его или останавливая.
После всех этих манипуляций мы имеет самодельный таймер удаления наших сообщений в указанных в переменных окружения функции группах, даже если администратор группы такую опцию не включал. Правила тарификации функции описаны на официальном сайте: https://cloud.yandex.ru/docs/functions/pricing, но с учётом бонусов и нетарифицируемых лимитов стоимость использования будет стремиться к нулю. Ну а также огромная просьба помнить, что "интернет ничего не забывает", и не факт, что удалённые вами сообщения больше никогда и нигде не всплывут.
dartraiden
В чате, где я сижу, людям, которые, получив ответ на свой вопрос, удаляют свои сообщения, выписывают бан. Потому что потом читать историю с дырками — мало приятного. Сообщения с ответами теряют смысл.
volkovcawa68
Полностью согласен, что удаление сообщений после получения ответа не является проверенной практикой. Это может привести к потере контекста и усложнить общение в чате. Ведение истории сообщений с ответами и комментариями может быть наблюдаемым для будущих участников, которые столкнутся с похожими вопросами или проблемами. Поэтому, я считаю, что удаление сообщений в данной ситуации является неуважительным по отношению к стойкости чата. Однако, прежде всего, чем банить участников, стоит дать небольшое предупреждение о негативных последствиях выделения сообщений, чтобы они могли воспринимать, как это может влиять на взаимодействие с коммуникацией.