Utilizando tg, podemos enviar y recibir mensajes de nuestros contactos en Telegram, incluyéndonos a nosotros mismos, desde el terminal.
Envíos programados
Combinándolo con expect
, conseguiremos una forma sencilla de programar
notificaciones.
He aquí un pequeño ejemplo:
#!/usr/bin/env bash
function tg {
# First argument, if any, must be the receiver
local to="$1"
local msg=""
local cmd=""
if [ $# -gt 1 ]; then
shift 1
msg="$@"
else
while read line; do
if [ -z "$msg" ]; then
msg=$line
else
msg="$msg\n$line"
fi
done
if [ -z "$to" ]; then
to=$(awk '{print $1}' <<< $msg)
msg=$(awk '{$1="";print $0}' <<< $msg)
fi
fi
if [[ $msg =~ "\n" ]]; then
file=$(mktemp)
echo -e "$msg" > $file
cmd="send_text $to $file"
else
cmd="msg $to $msg"
fi
#echo $cmd
expect -c "
log_user 0
match_max 100000
spawn /path/to/telegram -k /path/to/tg-server.pub
expect \"User \"
send -- \"$cmd\r\"
expect \"Sent\"
send \"quit\"
"
}
tg $@
Algunos ejemplos de uso:
# Pasando todos los argumentos directamente
$ tg.sh NombreContacto Lorem impsum dolor sit amet
# Pasando todos los argumentos desde una tubería
$ echo NombreContacto Lorem impsum dolor sit amet | tg.sh
# Pasando el contacto a la función y el mensaje desde una tubería
$ echo Lorem impsum dolor sit amet | tg.sh NombreContacto
# Pasando el resultado de un comando
$ ls | tg.sh NombreContacto
Un problema que nos encontraremos es que si enviamos los mensajes al mismo contacto con el que hemos registrado la aplación al instalarla, recibiremos el mensaje directamente como leído y no nos lo notificará.
En lugar de utilizar expect
, tenemos otras alternativas:
Utilizando el propio telegram
El propio cliente acepta el parámetro -W
que se puede utilizar para
enviar mensajes:
$ echo -e "msg NombreContacto Lorem impsum dolor sit amet\rquit" | telegram -W
Utilizando screen
Podemos dejar el cliente en ejecución en una sesión de screen
y
enviar comandos desde otra:
$ screen -dmS session_id telegram
$ screen -S session_id -X eval "stuff 'msg NombreContacto Lorem impsum dolor sit amet'\r"
Utilizando tuberías
Podemos crear una tubería que alimente el cliente y enviar comandos a través de ella:
$ mkfifo in
$ telegram /dev/null &
$ echo > in
$ echo "msg NombreContacto Lorem impsum dolor sit amet" > in
Notificación de mensajes nuevos
Este cliente permite utilizar scripts en LUA, de tal manera que
podemos llevar a cabo acciones para todo tipo de eventos. Por ejemplo,
podemos ejecutar el comando notify-send
cada vez que nos llega un
mensaje, para que nos aparezca una notificación en pantalla.
Su uso es sencillo. Nos bajamos el script, cortesía de AleixDev, y ejecutamos:
$ telegram -s /path/to/notify.lua