Sistema de notificaciones desde la consola a Telegram

A menudo hubo situaciones en el trabajo pasado cuando hay una tarea exigente que lleva mucho tiempo, pero es deseable responder rápidamente al final, ¿qué debo hacer? Por supuesto, escribe un programa ...


La primera versión simplemente usa notificar-enviar, pero el tiempo mostró algunos inconvenientes para el proceso. Como las operaciones eran muy exigentes con la máquina, la máquina se estaba volviendo inestable en ese momento y quería alejarme y tomar café. Pero regrese cuando el proceso esté completo. Es por eso que surgió la idea de un programa, que se encadenó en una tubería de consola o se envolvió como un programa sudo y al final le envió una notificación al chat. Por lo tanto, verá una notificación tanto en el escritorio como en el teléfono.


Para aquellos que no quieren leer, pero quieren probar. (Solo Linux)


  1. Nos registramos con el bot y obtenemos el token con el comando / config
  2. Descargar el cliente
  3. Lanzamiento
    wget https://ice2heart.com/snitch chmod +x snitch SNITCH_USER_ID=<here_is_your_uuid> ./snitch sleep 10 

Servidor


La idea era simple, necesitamos un servidor simple que reciba el mensaje y lo reenvíe al usuario.


Y como no quería molestarme en registrar, almacenar y administrar cuentas, decidí hacerlo parecer simple (y ahora parece, pero no estoy seguro de que esto sea bueno).


Usando un bot, una persona recibe un uuid v4 único, con el que luego va al servidor. La autorización está en el lado del chat del cliente, pero solo almaceno un par de identificaciones internas de usuario.


Por lo tanto, al tomar node.js como servidor y agregar un poco de koa, nedb, node-telegram-bot-api, armé la parte del servidor, la arquitectura inicialmente implicaba más puertas de enlace en los chats, pero no hubo casos y, por lo tanto, solo hubo un telegrama.


Además, no quería poner la aplicación js en Internet directamente, así que, utilizando la magia de Docker, agregué un servidor proxy caddy. ¿Por qué es él? Porque me gusta el formato de los archivos de configuración.


El servidor resultó simple, pero suficiente para la operación.


Por lo tanto, obtuvimos un archivo docker-compose tan simple, también necesitamos una clave bot, que colocamos en el archivo .env para no guardar nuestras claves en github, lo que no es bueno.


Entonces, para el lanzamiento necesitamos docker, docker-compose y una clave para los bots de bots, para obtener el suyo, debe recurrir al botfather .
Después de eso, docker-componer y nuestro servidor está listo para trabajar.


Cliente


Para el cliente, decidí ir por la simple razón de que va a 1 archivo binario, que luego se puede distribuir fácilmente.


Había dos ideas principales sobre el cliente.


  1. Nos integramos en la tubería, recopilamos el registro (no implementado), enviamos un mensaje para cerrar la tubería.
  2. Envolvemos la aplicación, por ejemplo sudo, al final enviamos un registro y un mensaje con un código de retorno.

Durante la implementación, no hubo una manera fácil de encontrar el código de retorno del programa anterior en la tubería, esto desafortunadamente reduce la alegría de usar el programa en la tubería.
Para la configuración, elegí las variables de entorno, ya que facilitan la copia de la configuración de una máquina a otra, además de que se pueden reemplazar fácilmente.


Como resultado, la instalación se vuelve lo más simple posible.


  1. Descargar el binario
  2. Nos registramos en RUTA
  3. Escribimos la variable SNITCH_USER_ID en la configuración de shell con su uuid
  4. Listo, eres genial!

Ahora puede ejecutar comandos largos en forma de snitch make y al finalizar recibiremos un mensaje de que la aplicación se ha completado e incluso sabremos si tiene éxito o no.


Para construir, hice un pequeño script, que simplemente se llamaba r. Recopilará la aplicación go y la pasará a través de upx. Y en la salida obtenemos un hermoso binario enlazado estáticamente.


Puedes encontrar el código fuente aquí.


Y cuando todo esté listo, puede recurrir al bot con el comando / config
Y creará un registro sobre nuestro usuario y lo devolverá.
También siempre se puede eliminar de la base de datos, para esto hay un comando / eliminar


Por lo tanto, obtuvimos una aplicación bastante simple pero efectiva que nos notificará de una tarea completada, fácil y naturalmente, incluso cuando bebemos café.

Source: https://habr.com/ru/post/es425707/


All Articles