~danielside/xmpptelegrampy

Puente entre Telegram y Prosody XMPP
aplica controles cuando no hay user_id
para cuando no viene interaction info
por el momento, elimina interaction handler

refs

master
browse  log 

clone

read-only
https://git.sr.ht/~danielside/xmpptelegrampy
read/write
git@git.sr.ht:~danielside/xmpptelegrampy

You can also use your local clone with git send-email.

#Puente Python entre Telegram y XMPP

Este es un script Python que tiene dos misiones:

  • Hace de cliente Telegram (usando python-telegram y TDLib) y se mantiene a la escucha de mensajes entrantes para enviarlos con XMPP a un destinatario (para ello usa aioxmpp)
  • Levanta un servidor para recibir comandos en un puerto. Estos comandos son para que Prosody pueda enviar mensajes Telegram.

#Configuración

Se puede compilar TDLib siguiendo estas instrucciones (https://tdlib.github.io/td/build.html). Para el caso de Debian 10 64bit ya incluyo un binario compilado en el directorio lib.

Instalar Python-Telegram (pip3 install python-telegram).

https://github.com/alexander-akhmetov/python-telegram

Librerías necesarias:

  • Python 3 PIP
  • Paquetes pip: python-telegram, aioxmpp, tzdata, pytz

Copiar config.ini.dist a config.ini y rellenar valores.

#Arranque y creación de servicio

Se puede arrancar con python3 main.py pero cuando esté configurado y funcionando se puede configurar como servicio SystemD.

Completar el fichero pytelegram.service con el nombre de usuario y la contraseña y copiarlo a /etc/systemd/system. Ejecutar systemctl daemon reload. El servicio se arrancará con systemctl start pytelegram y se pueden ver las trazas con journalctl -u pytelegram -f.

Ejemplo de servicio OpenRC (Alpine):

#!/sbin/openrc-run

# documentación man 8 openrc-run

name=$RC_SVCNAME
command="/usr/bin/python3"
command_args="/var/local/codigo/xmpptelegrampy/main.py"
command_user="apps"
pidfile="/run/$RC_SVCNAME.pid"
command_background="yes"
output_log="/var/log/pytelegram.log"
error_log="/var/log/pytelegram.err"

depend() {
        need net
        after prosody
}

#Cosas de TDLib

Por defecto la librería en C compilada (TDLib) guarda todo lo necesario en en /tmp/.tdlib_files, incluidos todos los ficheros recibidos (fotos, gifs, audios, etc). Esa base de datos se puede borrar en cualquier momento y reiniciar este servicio para validarse de nuevo.

#Autenticación

Si es el primer uso o se ha borrado la base de datos habrá que comunicar el código de inicio de sesión y la contraseña (si tienes activado el doble factor). Se hace escribiéndolas en unos ficheros que luego el proceso se encargará de borrar.

systemctl start pytelegram

En un terminal con usuario no root:

echo "codigo" > /tmp/code

Esto permite al proceso continuar. Si no tienes 2FA ya está activo. Si lo tienes:

echo "password" > /tmp/password

#Arranque manual

En un contenedor:

sudo -u apps python3 main.py