Бэкап переписки в telegram

Оригинал поста на хабре

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

Предупреждаю сразу - для бэкапа вам потребуется Linux, или хотя бы виртуалка с ним. При наличии рук можно и на Mac OS, и может даже можно на том огрызке, что нынче встроен в Windows - но я ничего не гарантирую.

Поехали!

Бэкапить мы будем при помощи двух милых программ:

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

1
sudo apt install git

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

1
mkdir telegram-backup

Затем клонируем себе консольного клиента и переходим в его папку:

1
git clone --recursive https://github.com/vysheng/tg.git && cd tg

Теперь устанавливаем всякие зависимости для его сборки. Если у вас не убунта, то на странице программы описаны альтернативные методы сборки:

1
sudo apt-get install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev libjansson-dev libpython-dev make 

Затем - классика

1
2
./configure
make

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

1
bin/telegram-cli -k tg-server.pub

Если всё прошло успешно, то вы увидите примерно следующее:

Telegram-cli version 1.4.1, Copyright (C) 2013-2015 Vitaly Valtman Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type show_license' This is free software, and you are welcome to redistribute it under certain conditions; type show_license’ for details. Telegram-cli uses libtgl version 2.1.0 Telegram-cli includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/) I: config dir=[/home/jehy/.telegram-cli] [/home/jehy/.telegram-cli] created [/home/jehy/.telegram-cli/downloads] created

Дальше из консоли у вас запросят номер телефона, введите его:

1
phone number: 79166666666

И запросят код, который придёт в смс или в другого открытого клиента, сообщение с клиента примерно так выглядит:

Your login code: 123456

This code can be used to log in to your Telegram account. We never ask it for anything else. Do not give it to anyone, even if they say they’re from Telegram!!

If you didn’t request this code by trying to log in on another device, simply ignore this message.

Вводим код:

1
code ('CALL' for phone code):123456

И вводим пароль (если он у вас установлен, что вообще очень неплохо):

1
password :xxx

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

User Jehy updated flags User Jehy updated flags [19:41] Александр Жаров >>> Привет! [19:41] Александр Жаров >>> Как дела?

Отлично! Теперь вырубаем клиента (Ctrl+C) и запускаем его в режиме сервера:

1
bin/telegram-cli --json -P 9009

После чего оставляем эту консоль в покое, открываем вторую, приходим в нашу папочку telegram-backup и ставим туда вторую программу:

1
git clone https://github.com/tvdstaaij/telegram-history-dump.git

Переходим в его директорию

1
cd telegram-history-backup

И запускаем

1
ruby telegram-history-dump.rb

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

ruby telegram-history-dump.rb I, [2018-04-26T19:43:38.286782 #11274] INFO – : Attaching to telegram-cli control socket at localhost:9009 I, [2018-04-26T19:43:39.689541 #11274] INFO – : Skipping 34 dialogs: “Mila_Milan”, “Stormy_Daniels”, “Amila_Miley”, “Sasha_Gray” I, [2018-04-26T19:43:39.689946 #11274] INFO – : Backing up 181 dialogs: “user#1299351”, “Canela_Skin”, “Dana_DeAmond”, “Lita_Phoenix”, “Erica_Lauren”, “Naomi_Woods”, “Ну_вы_поняли” I, [2018-04-26T19:43:39.690609 #11274] INFO – : Dumping “user#122679361” (range 1-100) I, [2018-04-26T19:43:40.975234 #11274] INFO – : Dumping “Jessa_Rhodes” (range 1-100) I, [2018-04-26T19:43:42.262817 #11274] INFO – : Dumping “Anya_Ivu” (range 1-100)
I, [2018-04-26T19:43:43.548510 #11274] INFO – : Dumping “Brandi_Bae” (range 1-100) I, [2018-04-26T19:44:42.541472 #11274] INFO – : Dumping “Бесконечное_лето” (range 101-200) I, [2018-04-26T19:44:43.541788 #11274] INFO – : Dumping “Бесконечное_лето” (range 201-300) I, [2018-04-26T19:44:44.542101 #11274] INFO – : Dumping “Бесконечное_лето” (range 301-400) I, [2018-04-26T19:44:45.542446 #11274] INFO – : Dumping “Бесконечное_лето” (range 401-500)

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

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

1
cd output/json

Там будет куча файликов в формате JSON, каждый из которых содержит переписку с каким-то из контактов. Конечно, читать это довольно сложно, но из JSON можно легко эскпортировать в любой другой читабельный формат. Кстати, ещё можно было указать другой формат при экспорте истории - например, чтобы вам сгенерилось по HTML страничке на контакт. А если вы любите хардкор, то можете просто грепать по истории, типа так:

1
2
3
4
5
6
7
8
9
grep "porn" . -R
./КотоНод.jsonl:{"event":"message","id":"02040050001310087a8e0200000000000000000000000000","flags":228,"from":{"id":"$0120000078745a00625f8a35c922bb6c","p
eer_type":"user","peer_id":3328156,"print_name":"Jehy","flags":721597,"first_name":"Jehy","when":"2018-04-26 20:09:54","last_name":"","phone":"7123456
","username":"Jehy_rus"},"to":{"id":"$02000001005310020000000000000000","peer_type":"chat","peer_id":115391548,"print_name":"КотоНод","flags":1,"title":"К
отоНод","admin":{"id":"$01000000001000000000001000000000","peer_type":"user","peer_id":0,"print_name":"user#0"},"members_num":3},"out":true,"unread":false
,"service":false,"date":1504003822,"text":"https://tjournal.ru/58619-polzovatel-reddit-zaarhiviroval-dva-petabayta-porno-chtoby-proverit-bezlimitnoe-oblac
hnoe-hranilishche-amazon?from=digest\n\n@navalny ты?","media":{"type":"webpage","url":"https://tjournal.ru/58619-polzovatel-reddit-zaarhiviroval-dva-pe
tabayta-porno-chtoby-proverit-bezlimitnoe-oblachnoe-hranilishche-amazon?from=digest","title":"Пользователь Reddit заархивировал два петабайта порно, чтобы
проверить безлимитное облачное хранилище Amazon","description":"Он тестировал сервис полгода с целью найти в нём ограничения."}}

Вот как-то так. При этом напоминаю:

  • Естественно, история приватных чатов не сохраняется;
  • Медиа файлы тоже не сохраняются. Может это как-то и можно сделать, но меня не очень волновало;
  • Пожалуйста, храните бекапы своей переписки в безопасных местах. А то в многолетней переписке может найтись вообще что угодно.
  • Вполне возможно, что вы где-то найдёте более удобный инструмент для экспорта или подготовленный докер образ со всем этим софтом или что угодно другое. Будьте внимательны, проверяйте такие инструменты трижды.

А вообще возникает у меня потихоньку ощущение, что скоро всё опять будет как в 90е - музыка, фильмы и файлы на локальных машинах, и в интернет могут зайти только программисты. Не сказать, чтобы это меня радовало.

Не очень полезные ссылки с альтернативными вариантами: