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

  • Tutorial

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


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


Поехали!


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



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


sudo apt install git

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


mkdir telegram-backup

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


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

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


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

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


./configure
make

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


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

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


Telegram-cli version 1.4.1, Copyright © 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; typeshow_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

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


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.

Вводим код:


code ('CALL' for phone code):123456

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


password :xxx

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


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

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


bin/telegram-cli --json -P 9009

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


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

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


cd telegram-history-backup

И запускаем


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 сообщений от пользователя или группы в секунду.


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


cd output/json

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


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е — музыка, фильмы и файлы на локальных машинах, и в интернет могут зайти только программисты. Не сказать, чтобы это меня радовало.


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


Поделиться публикацией
Комментарии 27
    +1
    Раз уж работаете с JSON, то проще было взять куда более стабильный TDLib, все вызывы прям из кода. Удобная и мощная библиотека.
      0
      Так это надо своего маленького клиента писать для выгрузки истории. Делается за пару часов работы, но проще было использовать уже готовый инструмент, раз он работает.
        0
        Насчет «клиент» вы преувеличиваете. У меня на Golang вышло строк 100 :)
        Если знать что делаешь, вопрос часа. Просто telegram-cli очень старый и имеет кучу багов. Возможно вы с ними не встречались, но после TDLib он неюзабельный. Забавно, что и сам автор telegram-cli развивает свой форк на TDLib — tdcli.
          0
          Багов на выгрузке нескольких лет своей истории не заметил — хотя может там внутри что-то и попорчено или пропущено.

          Если вы уже делали на Go — можете поделиться? Явно должно быть красивее, да и кроссплатформенно.
            0
            Вышенг забросил телекли ещё в 2015 году, уже тогда это был кривобилдящийся перманентно вылетающий пиздец.

            В 2018 году можно себе позволить не заниматься бессмысленным онанизмом, а сразу взять telethon, например, и решить задачу по телеге за полчасика.
        0
        Поддержу! Я тоже сделал выгрузку, но в postgres в jsonb, потом можно писать разные запросы. К тому же TdLib почему-то работает лучше чем сам телеграм, последний бывает недоступен, а TdLib постоянно получает сообщения.
          0
          TDLib это новый движок для всех будущих клиентов, они активней всего развивают именного его, а всё остальное на мой взгляд сейчас практически легаси.

          Telegram X это первый этап по переводу клиентов на TDLib. Именно она лежит в основе новых клиентов. К примеру возможность сборки в качестве WebAssembly уже предусмотрена, так что крутая Web-версия не заставит себя ждать долго, я думаю.
            0
            А на чём писали? Можете выложить? Я бы с удовольствием в MySQL импортировал.
              0
              Я писал на c#, там кода то совсем немного, для выкладывания код нужно оформить, а мне лень))
          +1
          Вот этот качает с медиафайлами и в SQLite.
            0
            Класс! Удивительно, что не нашёл поверхностным гуглингом. Эта штука умеет и документы сохранять, что приятно. Правда, без какого-либо GUI и с данными только в базе — думаю, она будет полезна только для разработчиков.
              0
              Не только в базе.
              -e, --export Export the database. Valid formats are:
              html - Creates HTML files.
            0

            telegram-cli в комбинации с telegram-history-dump постоянно падал при количестве сообщений >10000, даже если варьировать параметры "количество сообщений за раз" и "время между запросами".


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

              0
              У меня успешно выгрузилась история переписки с контактом в 60к сообщений. Судя по тому, что репозитории не обновлялись с ноября 2017, вряд ли это было поправлено — скорее у меня более удачные зависимости.
              0
              Какие такие годы переписки, что там есть полезного в смсках?
              • НЛО прилетело и опубликовало эту надпись здесь
                0
                Скажите пожалуйста, а можно ли так сохранять полностью чаты, а не просто переписку( если что больно не пинайте и не минусуйте. Не разбираюсь в этом)
                  0
                  А что вы имеете в виду под «полностью чаты»?
                    0
                    Ну, допустим, вы зарегистрированы в каком то чате. Или
                    это ваш чат. Можно сохранить там всю переписку?
                      0

                      Вы меня запутали. Сначала говорите


                      а можно ли так сохранять полностью чаты, а не просто переписку

                      А потом


                      Можно сохранить там всю переписку?

                      Что именно и в каком виде вы хотите сохранить?

                        0
                        Есть чат. Мне нужно его сохранить. Как, например, сохраняют сайты. Так можно сделать?
                          0
                          Собственно, при помощи тех действий, которые я описал в посте. На каждый чат у вас в результате будет по файлику — в формате JSON или в формате обычной человеко-читаемой веб страницы.
                    0
                    Можно конечно, если это супергруппа, то доступны все сообщения с момента создания.
                    Пишешь прогу и выкачиваешь все.
                    Тут только возникает вопрос: Зачем это вам?
                      0
                      Да. Это так. А что за прогу надо писать?
                      А насчет сохранения. Просто. На память
                        0
                        Не нужно ничего писать, всё уже есть. Упомянутый выше Telegram_Backup умеет:
                        --with-channels Backup channels as well.
                        --with-supergroups Backup supergroups as well.
                  0
                  Вот здесь не верно:
                  >«Переходим в его директорию
                  cd telegram-history-backup»

                  Правильно:
                  cd telegram-history-dump

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое