从控制台到电报的通知系统

在过去的工作中,经常会有一些艰巨的任务需要很长时间才能完成的情况,但是最好在最后迅速做出反应,我该怎么办? 当然,写一个程序...


第一个版本只使用了通知发送,但是时间显示给该过程带来一些不便。 由于对机器的操作要求很高,因此机器当时变得不稳定,我想搬走喝咖啡。 但请在过程完成后再回来。 因此,出现了程序的想法,该想法被链接到控制台管道或包装为sudo程序,最后它向您发送了聊天通知。 因此,您将在台式机和电话上看到一条通知。


对于那些不想阅读但想尝试的人。 (仅Linux)


  1. 我们在机器人上注册并通过命令/ config获取令牌
  2. 下载客户端
  3. 发射!
    wget https://ice2heart.com/snitch chmod +x snitch SNITCH_USER_ID=<here_is_your_uuid> ./snitch sleep 10 

伺服器


这个想法很简单,我们需要一个简单的服务器来接收消息并将其转发给用户。


而且由于我不想麻烦注册,存储和管理帐户,因此我决定使它对我来说看起来很简单(现在看来,但是我不确定这是否很好)。


使用机器人,一个人会收到一个唯一的uuid v4,然后他会使用该v4进入服务器。 授权是在客户的聊天端,但我只存储了几个uuid内部ID。


因此,以node.js作为服务器并添加一些koa,nedb,node-telegram-bot-api,我将服务器部分放在一起,该架构最初在聊天中隐含了更多的网关,但是没有案例,因此只有一个电报。


另外,我不想将js应用程序直接放在Internet上,因此使用docker的魔力,我添加了一个caddy代理服务器。 为什么呢 因为我喜欢配置文件的格式。


服务器看上去很简单,但是足以进行操作。


因此,我们得到了一个如此简单的docker-compose文件,我们还需要一个bot密钥,将其放入.env文件中,以免将密钥保存在github中,这不好。


因此,要启动我们需要docker,docker-compose和bot cart的密钥,要获取您的密钥,您必须转向botfather
之后,docker-compose up,我们的服务器就可以工作了。


顾客


对于客户端,我决定采用go的原因很简单,因为它将转到1个二进制文件,然后可以轻松分发该文件。


关于客户有两个主要想法。


  1. 我们集成到管道中,收集日志(未实现),发送消息以关闭管道。
  2. 我们包装应用程序,例如sudo,最后我们发送日志和带有返回码的消息。

在实现过程中,没有简单的方法来查找管道中先前程序的返回代码,不幸的是,这降低了在管道中使用该程序的乐趣。
对于配置,我选择了环境变量,因为它们可以轻松地在机器之间复制设置,并且可以轻松替换它们。


结果,安装变得尽可能简单。


  1. 下载二进制文件
  2. 我们在PATH中注册
  3. 我们使用您的uuid在外壳配置中写入SNITCH_USER_ID变量
  4. 做完了,你太棒了!

现在,您可以以snitch make的形式运行长命令,并且在完成后,我们将收到一条消息,指示应用程序已完成,甚至可以知道该应用程序是否成功。


为了构建,我编写了一个小脚本,简称为r。 它将收集go应用程序并将其通过upx。 在输出处,我们得到一个漂亮的静态链接二进制文件。


您可以在此处找到源代码。


当一切准备就绪后,您可以使用命令/ config转到机器人
他将创建一个有关我们用户的记录并返回uuid。
您也可以始终从数据库中删除,为此有一个命令/删除


因此,我们得到了一个相当简单但有效的应用程序,即使我们喝咖啡,它也可以轻松自然地通知我们已完成的任务。

Source: https://habr.com/ru/post/zh-CN425707/


All Articles