我们在的项目组呢,有一项工作是,收邮件(很大程度上使用邮件是为了存个底),然后从我们的系统里边查一下相关信息,然后回复个邮件的工作。虽然工作量并不大,但是会把时间切的稀碎。为了拯救我的时间,所以做了一个邮件的值班机器人。让他来顶替我自动回复邮件,考虑到这个东西应该也有不少人会用得到,所以就把这个东西分享出来。先把效果分享出来。

服务器上就很简单,dutyrobot就是Golang编译之后的框架。lua文件夹中就是使用lua编写的业务逻辑。Data.json就是保存了一些相关的数据,防止重启之后,数据丢掉,比如说Cookie信息。

用最基础的alpine进行启动一下,并且将相关的文件夹映射到容器里边,然后在容器里边启动软件。这么做主要是为了让镜像能够拥有自己的环境变量。

然后业务逻辑里边定期,收邮件,然后判定业务逻辑,执行对应的lua脚本,然后回复邮件。

在顺手往我们的内部事务群里边推一条相关结果。

其实我本职是C#程序员来着,做这个东西,最先也是使用C#来实现的,不过C#跟Lua相性不好,我没有找到比较优雅的类库。要上Linux系统,用.net core + C 调用lua的方式虽然也尝试过,但是我本身对这件事情还是非常虚的。Python的各种包安装都给我搞蒙蔽了。所以最后就选用了Golang来写底层函数公布给Lua,然后让lua来写各种业务逻辑的方式来实现整个项目。框架部分嘛,一旦写完,改动的几率还是比较低的,并且Window交叉编译Linux,直接就可以部署上线,连个环境都不用装,简直爽歪歪。lua解释性语言,出了啥都没有以外其他的都挺好的。

基础框架都是通用的,所以可以直接放出来,拿出来用。只需要关心自己的业务内容就可以了。

基础框架:https://gitee.com/anxin1225/DutyRobotGo

在这个框架里边,我给lua提供了不少功能,主要包括收发邮件,发起网络请求,发起网络监听(甚至可以拿这个做底层做一个小型的API站,信我,我这么做过了已经),临时存个数据,获取环境变量,获取文件内容,再启动一个Lua容器(没错,lua又再起一个lua容器的能力),获取当前系统信息,cron定时任务。当然如果你觉得不够的话,还可以进行二次扩展,其实非常容易,我已经写了好多了,比着抄一下,很容易的。不过一般情况下不用扩展了,我这边就不深入讲解框架部分了,毕竟,怎么做业务才是重点。

然后,讲一下Lua部分是怎么实现的。因为Golang里边的代码是直接找到了main.lua进行执行的,我们也就从这个文件开始讲起。

我将好多服务注册了进来,究竟有哪些服务呢,还是得去看看框架里边怎么写的。Cron就是我写的其中一个小功能。其实就是task任务,对应到框架部分呢可以查看tasks文件夹里去看具体的实现,可以看到俩边有两个文件,其中task.go是Golang的语言函数task_4lua.go就是把Golang的函数公开给lua来调用的接口注册的位置。

我们来看到task_4lua.go这个文件里边,一般会存在一个函数叫做RegisterFunc_4lua就是注册用的。

这就很眼熟了,Cron就是lua用的类的名字,下边这个map就是他们对应的需要调用的名字,后边会对照着golang这边的函数,一般函数里边我会写上lua那边应该怎么调用。如果找不到的话,可以来框架这边翻一翻,有惊喜也说不定。

我的业务里边。就是每分钟接收一下,每5分钟保存一下Cookie。真正的业务逻辑其实就写在各个lua文件里边。我们去看一下怎么接收消息和处理消息的。

这里边就是简单的lua的业务逻辑了,收一下邮件,然后调用对应的处理lua,处理完了就完事了。

使用Golang + lua实现一个值班机器人的更多相关文章

  1. 用 Lua 实现一个微型虚拟机-基本篇

    用 Lua 实现一个微型虚拟机-基本篇 目录 介绍 机器指令模拟 最终核心代码 虚拟机内部状态可视化 完整项目代码 后续计划 参考 介绍 在网上看到一篇文章 使用 C 语言实现一个虚拟机, 这里是他的 ...

  2. phantomjs + python 打造一个微信机器人

    phantomjs + python 打造一个微信机器人 1.前奏   媳妇公司不能上网,但经常需要在公众号上找一些文章做一些参考,需要的时候就把文章链接分享给我,然后我在浏览器打开网页,一点点复制过 ...

  3. 使用C# 开始第一个QQ机器人

    本示例将会使用”嘤鹉学舌”这个小插件的实现来演示如何使用Newbe.Mahua实现第一个机器人插件. 插件功能 自动将发送者的消息回发给发送人,嘤鹉(Parrot,其实是说嘤嘤嘤怪)学舌. 开发环境要 ...

  4. Lua 是一个小巧的脚本语言

    Redis进阶实践之七Redis和Lua初步整合使用 一.引言 Redis学了一段时间了,基本的东西都没问题了.从今天开始讲写一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运 ...

  5. tolua#是Unity静态绑定lua的一个解决方案

    tolua#代码简要分析 2017-04-16 23:02 by 风恋残雪, 98 阅读, 1 评论, 收藏, 编辑 简介 tolua#是Unity静态绑定lua的一个解决方案,它通过C#提供的反射信 ...

  6. 如何使用自对弈强化学习训练一个五子棋机器人Alpha Gobang Zero

    前言 2016年3月,Alpha Go 与围棋世界冠军.职业九段棋手李世石进行围棋人机大战,以4比1的总比分获胜,在当时引起了轩然大波.2017年10月,谷歌公布了新版五子棋程序 AlphaGo Ze ...

  7. [Golang] lua战斗验证服务器

    我的另外一个开源项目,任何建议.指正错误和优化我都非常欢迎 baibaibai_000@163.com 简介 本项目是用go语言编写,结合cgo功能,支持高并发执行lua脚本的程序. 扩展 可以扩展成 ...

  8. golang 裸写一个pool池控制协程的大小

    这几天深入的研究了一下golang 的协程,读了一个好文 http://mp.weixin.qq.com/s?__biz=MjM5OTcxMzE0MQ==&mid=2653369770& ...

  9. [lua大坑]一个莫名其妙的lua执行时崩溃引出的堆栈大小问题

    这是一个坑,天坑!如果不是我随手删除了一个本地变量,这个问题直到现在我应该也没有头绪. 首先,写了一个新的lua脚本,载入,执行.在执行的时候,出了这么一个莫名其妙的问题: EXC_BAD_ACCES ...

随机推荐

  1. 【python系统学习14】类的继承与创新

    目录: 目录: [toc] 类的继承 子类和父类 继承的写法 继承示例 父类可以被无限个子类所继承 子类实例可调用父类属性和方法 类的始祖(根类) 根类 - object 实例归属判断 - isins ...

  2. 【Java】从Null开始,在Windows上下载和安装JDK

    下载部分: 方式一: 从官方网站上下载:https://www.oracle.com/java/technologies/javase-downloads.html Oracle已经更新了软件政策,要 ...

  3. 负载均衡服务之HAProxy基础入门

    首先我们来了解下haproxy是干嘛的?haproxy是一个法国人名叫Willy Tarreau开发的一个开源软件:这款软件主要用于解决客户端10000以上的同时连接的高性能的TCP和HTTP负载均衡 ...

  4. srt字幕翻译

    需要把字幕名改成i.txt 有有道和谷歌 代码: #Author:Chenglong Qian #Copyright :Chenglong Qian import json import reques ...

  5. 掌握游戏开发中类Message、Handle

    1.   实验目的 1. 自主地设计图形界面 2. 掌握消息类Message的应用 3. 掌握消息处理类Handle的应用 4. 掌握子线程中中更新UI界面的方法 2.  实验内容 1. 在主界面设置 ...

  6. LeetCode466. Count The Repetitions

    题目链接 传送门 题意 定义一个特殊的串, 现在给出串S1和S2的参数, 问: S2最多可以多少个连接起来扔是S1的子序列, 求出这个最大值 解题思路 注意s1与S1的区别, 可以去看题目描述, 预处 ...

  7. 苹果登录服务端JWT算法验证-PHP

    验证参数 可用的验证参数有 userID.authorizationCode.identityToken,需要iOS客户端传过来 验证方式 苹果登录验证可以选择两种验证方式 具体可参考这篇文章 htt ...

  8. 一篇文章掌握网页解析神器——xpath

    学爬虫不会xpath解析数据? 今天老师带你一堂课带你从零开始精通xpath,从此轻松提取网页信息. 我们在爬虫的过程中,经常会遇到html字符串数据,很多我们需要的数据不是作为标签的文本就是作标签的 ...

  9. ambarella H2平台fpga捕捉卡驱动案例

    公司最近开发的一款产品用到了ambarella H2平台的一款Soc,众所周知ambarella的H2系列的Soc编码能力很强,最高可达4kp60,捕捉上没有用ambarella开发板推荐的几个捕捉卡 ...

  10. python之实现图像的手绘效果

    https://blog.csdn.net/riba2534/article/details/74152285 原图: b: c: d: 最终图: