Sistema de notificação do console para o Telegram

Muitas vezes, havia situações no trabalho anterior, quando há uma tarefa exigente que leva muito tempo, mas é desejável responder rapidamente no final, o que devo fazer? Claro, escreva um programa ...


A primeira versão simplesmente usava o envio de notificação, mas o tempo mostrou alguns inconvenientes no processo. Como as operações eram muito exigentes na máquina, a máquina estava ficando instável naquele momento e eu queria me afastar e tomar café. Mas volte quando o processo estiver concluído. É por isso que surgiu a idéia de um programa, encadeado em um pipeline de console ou agrupado como um programa sudo e, no final, enviou uma notificação para o bate-papo. Assim, você verá uma notificação na área de trabalho e no telefone.


Para quem não quer ler, mas quer tentar. (Apenas Linux)


  1. Registramos com o bot e obtemos o token com o comando / config
  2. Faça o download do cliente
  3. Lançamento!
    wget https://ice2heart.com/snitch chmod +x snitch SNITCH_USER_ID=<here_is_your_uuid> ./snitch sleep 10 

Servidor


A ideia era simples, precisamos de um servidor simples que receba a mensagem e a encaminhe ao usuário.


E como eu não queria me preocupar em registrar, armazenar e gerenciar contas, decidi fazer com que parecesse simples (e agora parece, mas não tenho certeza se isso é bom).


Usando um bot, uma pessoa recebe um uuid v4 exclusivo, com o qual ele vai para o servidor. A autorização está no lado do bate-papo do cliente, mas eu armazeno apenas alguns IDs internos do uuid.


Portanto, tomando o node.js como servidor e adicionando um pouco de koa, nedb, node-telegram-bot-api, montei a parte do servidor, a arquitetura inicialmente implicava mais gateways nos chats, mas não havia casos e, portanto, havia apenas um telegrama.


Além disso, eu não queria colocar o aplicativo js diretamente na Internet; portanto, usando a magia do docker, adicionei um servidor proxy caddy. Por que ele está? Porque eu gosto do formato dos arquivos de configuração.


O servidor ficou simples, mas suficiente para operação.


Portanto, temos um arquivo simples de composição do docker, também precisamos de uma chave bot, que colocamos no arquivo .env para não salvar nossas chaves no github, o que não é bom.


Portanto, para o lançamento, precisamos do docker, docker-compondo e uma chave para os carrinhos de bots, para obter o seu, você precisa recorrer ao botfather .
Depois disso, o docker-componha e nosso servidor estará pronto para funcionar.


Cliente


Para o cliente, decidi ir pelo simples motivo de que ele está indo para 1 arquivo binário, que pode ser facilmente distribuído.


Havia duas idéias principais sobre o cliente.


  1. Integramos no pipeline, coletamos o log (não implementado), enviamos uma mensagem para fechar o pipeline.
  2. Envolvemos o aplicativo, por exemplo sudo, no final, enviamos um log e uma mensagem com um código de retorno.

Durante a implementação, não havia uma maneira fácil de descobrir o código de retorno do programa anterior no pipeline, infelizmente isso reduz a alegria de usar o programa no pipeline.
Para a configuração, escolhi as variáveis ​​de ambiente, porque facilitam a cópia das configurações de máquina para máquina, além de serem facilmente substituídas.


Como resultado, a instalação se torna o mais simples possível.


  1. Faça o download do binário
  2. Registramos no PATH
  3. Nós escrevemos a variável SNITCH_USER_ID na configuração do shell com seu uuid
  4. Feito, você é ótimo!

Agora você pode executar comandos longos na forma de snitch make e, após a conclusão, receberemos uma mensagem de que o aplicativo foi concluído e até saberemos se é bem-sucedido ou não.


Para construir, criei um pequeno script, chamado simplesmente r. Ele coletará o aplicativo go e passará pelo upx. E na saída temos um belo binário estaticamente vinculado.


Você pode encontrar o código fonte aqui.


E quando tudo estiver pronto, você pode recorrer ao bot com o comando / config
E ele criará um registro sobre o nosso usuário e retornará o uuid.
Você também pode sempre ser excluído do banco de dados, pois existe um comando / exclusão


Assim, obtivemos um aplicativo bastante simples, mas eficaz, que nos notificará da tarefa concluída, fácil e naturalmente, mesmo quando tomamos café.

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


All Articles