Бэкап телеграм диалогов, каналов

2017-11-21
manual

Это слишком долгий путь для бэкапа телеграма, надо запилить docker контейнер, а пока есть, что есть. Обобщенная информация для исключения багов при работе.

использовал образ Ubuntu 16.04.3 LTS

Используемые репозитории

https://github.com/vysheng/tg
https://github.com/tvdstaaij/telegram-history-dump
На этом всё, дальше для тех кто не знает английский или лень искать решение, возникающих ошибок

Устанавливаем git, если не установлен

sudo apt-get install git

Скачиваем консольный телеграм

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

Если скомпилировать на данном этапе, то будут ошибки.

В файле tgl/mtproto-utils.c, изменяем строки 101 и 115

assert (0); // As long as nobody ever uses this code, assume it is broken.

на

//assert (0); // As long as nobody ever uses this code, assume it is broken.

или удаляем.

В файле tgl/queries.c находим функцию static void _tgl_do_get_history и изменяем, как показано ниже

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
static void _tgl_do_get_history (struct tgl_state *TLS, struct get_history_extra *E, void (*callback)(struct tgl_state *TLS,void *callback_extra, int success, int size, struct tgl_message *list[]), void *callback_extra) {
clear_packet ();
//tgl_peer_t *C = tgl_peer_get (TLS, E->id);
//if (tgl_get_peer_type (E->id) != TGL_PEER_CHANNEL || (C && (C->flags & TGLCHF_MEGAGROUP))) {
out_int (CODE_messages_get_history);
out_peer_id (TLS, E->id);
//} else {
// out_int (CODE_channels_get_important_history);
// out_int (CODE_input_channel);
// out_int (tgl_get_peer_id (E->id));
// out_long (E->id.access_hash);
// }
out_int (E->max_id);
out_int (E->offset);
out_int (E->limit);
out_int (0);
out_int (0);
tglq_send_query (TLS, TLS->DC_working, packet_ptr - packet_buffer, packet_buffer, &get_history_methods, E, callback, callback_extra);
}

Компилируем

./configure make

Пробуем запустить телеграм

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

залогинились, если всё работает, то супер.

Проверяем версию Ruby

ruby --version

если не установлен, то устанавливаем

sudo apt-get install ruby-full

Скачиваем репозиторий

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

Настраиваем файл config.yaml

1
2
3
backup_channels: [
Название канала
]

для сохранения в html

1
2
3
4
5
6
7
8
9
10
11
12
13
formatters: {
plaintext: {
date_format: '%Y-%m-%d %H:%M:%S'
},
bare: {},
pisg: {},
html: {
paginate: 1500, # messages per page
use_utc_time: false,
timestamps_every: 50, # messages
loop_video: true, # loop and autoplay videos
},
}

выбираем что скачивать

1
2
3
4
5
6
download_media: {
photo: true,
document: true,
audio: false,
video: false,
}

чтобы файлы сохранялись в отдельную директорию

1
copy_media: true

Запускаем телеграм из соответствующей директории

bin/telegram-cli --json -P 9009

Открываем новое терминальное окно, запускаем из папки telegram-history-dump

ruby telegram-history-dump.rb

Результаты будут в директории telegram-history-dump/output