Telegram desde la línea de comandos: utilidades, demonio y copia de seguridad

Explota Telegram con tg y telegram-history-dump

Créditos Five Telegrams #flickr https://flic.kr/p/L2ruyH

Cuando empezamos a utilizar Telegram como alternativa amigable a Whatsapp sabíamos que no era la mejor opción aunque fuera mejor que Whatsapp. En el lado de las aplicaciones libres y abiertas, o más bien de los protocolos, estaba jabber, por ejemplo, que fue utilizado por Google en Ytalk y probablemente lo siga usando, pero que integró con Hangout y pasa desapercibido, como desapercibido pasa Linux en Android.

Tiempo después ha aparecido Matrix que vuelve a dar esperanza a los sistemas de mensajería libres (como Riot) sobre redes libres y/o federadas.

Intuyo que no será ni rápido ni extenso el uso de estas redes, ojalá me equivoque. Mientras tanto y dado que Telegram sí que ha logrado penetrar como aplicación de uso masivo alternativa a Whatsapp veamos si podemos tener cierto control de los datos que ahí volcamos.

En resumen, me gustaría conseguir los datos de Telegram y para ello descubro que existe telegram-history-dump:

Características de telegram-history-dump

El autor dice que comparado con el anterior:

  • Soporta mejor la descarga de archivos multimedia
  • Soporta otros formatos de salida distintos de JSON y es extensible con los formatos determinados.
  • Soporta copias incrementales, por lo que solo se descargan los mensajes nuevos.
  • No depende de la inestabilidad de Python/Lua dentro de telegram-cli
  • Tiene un archivo de configuración separado formateado en YAML

Instalación de telegram-cli

Primer intento

Primero hay que clonar el repositorio:

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

No olvides instalar dependencias:

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

Finalmente:

1
2
./configure
make

Lastimosamente, daba un error de openssl:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
tgl/crypto/rsa_pem_openssl.c: In function ‘TGLC_rsa_new’:
tgl/crypto/rsa_pem_openssl.c:41:6: error: dereferencing pointer to incomplete type ‘RSA {aka struct rsa_st}   ret->e = unwrap_bn (TGLC_bn_new ());
      ^~
tgl/crypto/rsa_pem_openssl.c: At top level:
tgl/crypto/rsa_pem_openssl.c:51:1: error: data definition has no type or storage class [-Werror]
 RSA_GETTER(n);
 ^
tgl/crypto/rsa_pem_openssl.c:52:1: note: in expansion of macro ‘RSA_GETTER’
 RSA_GETTER(e);
 ^~~~~~~~~~
tgl/crypto/rsa_pem_openssl.c:51:1: error: type defaults to ‘int’ in declaration of ‘RSA_GETTER’ [-Werror=implicit-int]
 RSA_GETTER(n);
 ^
tgl/crypto/rsa_pem_openssl.c:52:1: note: in expansion of macro ‘RSA_GETTER’
 RSA_GETTER(e);
 ^~~~~~~~~~
tgl/crypto/rsa_pem_openssl.c:52:1: error: parameter names (without types) in function declaration [-Werror]
tgl/crypto/rsa_pem_openssl.c: In function ‘TGLC_rsa_e’:
tgl/crypto/rsa_pem_openssl.c:52:1: error: control reaches end of non-void function [-Werror=return-type]
 RSA_GETTER(e);
 ^~~~~~~~~~
cc1: all warnings being treated as errors
Makefile.tgl:20: fallo en las instrucciones para el objetivo 'objs/crypto/rsa_pem_openssl.o'
make: *** [objs/crypto/rsa_pem_openssl.o] Error 1

Buscando, encuentro una issue, así que habrá que esperar un poco a ver si lo resolvemos entre todxs.

Pero la respuesta correcta vino de la mano de NeoRider quien decía:

Debian provides the libssl1.0-dev package for this purpose.

Y entonces pareció funcionar.

No ocurrió así a la siguiente vez que lo intenté

Segundo intento

Hacía ./configure bien pero no make, me daba error de compilación. Buscando el error llegué a este issue que daba la clave:

1
2
./configure --disable-openssl --prefix=/usr CFLAGS="$CFLAGS -w"
make

Conexión con el teléfono

Para arrancarlo, en el directorio de la instalación, escribimos:

1
bin/telegram-cli -k <public-server-key>

La clave pública tg-server.pub se almacena por defecto en el mismo directorio o en /etc/telegram-cli/server.pub. Si no, se pone la ruta.

Al lanzarlo nos pide nuestro número de teléfono, que ponemos con el código del país:

+NN1234567

Entonces nos enviarán un código de cinco cifras que introduciremos en la consola y listo.

Uso

La consola autocompleta sobre el listado de comandos posibles. Veamos algunos:

Lista de contactos

1
contact_list

Imprime la lista de contactos.

Mensaje a un contacto

1
msg <peer> <text>

Salir

1
quit

Mensaje a varios contactos

broadcast <user> + <text>

Telegram-cli como demonio

Una opción es tener tg-cli como demonio.

Volviendo a la copia de seguridad

Una vez que está configurado tg-cli, volvemos a telegram-history-dump.

Instalación

Nos hacemos una copia del repo, por ejemplo, con git:

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

Puesta en marcha

Antes de arrancar, asegúrate de tener al menos la versión 2+ de Ruby:

1
ruby --version

Y echa un vistazo a config.yaml por si quieres modificar algo. En mi caso, por ejemplo, ha aumentado el número de mensajes de 1000 a 10000.

Una vez hecho esto, arranca telegram-cli con estas opciones:

1
telegram-cli --json -P 9009

Donde le decimos que queremos los mensajes en formato json y que está corriendo en el puerto 9009.

Copia

Entonces, arrancamos telegram-history-dump, que es un script en ruby:

1
ruby telegram-history-dump.rb

Enlaces

Adolfo Antón Bravo
Adolfo Antón Bravo
Coordinador del Máster de Periodismo y Visualización de Datos de la Universidad de Alcalá

Periodismo y visualización de datos, web semántica, bash, emacs, orgmode

Relacionado