惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
J
Java Code Geeks
H
Help Net Security
Google DeepMind News
Google DeepMind News
博客园 - 司徒正美
Microsoft Security Blog
Microsoft Security Blog
宝玉的分享
宝玉的分享
Stack Overflow Blog
Stack Overflow Blog
D
DataBreaches.Net
The GitHub Blog
The GitHub Blog
S
SegmentFault 最新的问题
U
Unit 42
博客园 - 三生石上(FineUI控件)
Last Week in AI
Last Week in AI
M
MIT News - Artificial intelligence
WordPress大学
WordPress大学
小众软件
小众软件
博客园 - 叶小钗
D
Docker
量子位
P
Proofpoint News Feed
博客园_首页
T
Tailwind CSS Blog
F
Fortinet All Blogs

愆伏

vue feedback 指令开发 通过webpack对css压缩后所引起的重名问题 NPM 撤回已发布的版本 昆虫有趋光性吗 数组转成字符串(css 属性) 关于grid布局的一些思考 阿里云和腾讯云网站字体族对比 Vue组件抛事件和Function prop的差别 Vue 事件参数传递 Vue Data里面下划线命名无效并报错 使用sublime中的正则处理数据格式 通过nodejs创建目录与文件 macOS 下npm run dev 无法局域网访问 mac 下使用ssh访问非22端口的gitlab 世界是平的,在科学上网之后 使用sublime text3和Markdown来写博客 如果非要给一个标题,那就是2014年非工作总结 不专业呢,就别捣乱 对知乎大号怒撤事件的一点看法 拒绝SB思维 嘀嘀与快的的商业博弈 关于收藏夹功能的思考 你居然都不用微信 一个英语培训机构的外呼电话 智商是硬伤就无解了 扁鹊三兄弟 竖子不足与谋 美丽说、蘑菇街今天一定开了好几个小时的会 个人独立博客会死掉吗? iPad作画
Github Issue Robot 思路
tortorse · 2018-06-14 · via 愆伏

需求

在项目开源(公开)后,使用者会对项目提供意见、反馈、建议等。这些issue当中会存在「不合要求」的issue,并对项目开发产生干扰。

在这种情况下,假设出现了「不合格」的issue,如果要进行人工处理,将是比较庞大的工作,而我们并不期望这些琐事占用我们太多的时间。

目标

使用🤖来判断issue是否「合格」。如果「不合格」,则直接关闭issue。

实现

基于以上,我们要构建这样的🤖,需要具备:

  1. 项目本身要有Webhook可被调用
  2. 机器人要有对项目的权限

Github配置

  1. 开通项目的Webhook,并设置screctpayload地址(回调)
  2. 为机器人开通帐号,并获取身份标识token

基本时序

程序由webhook触发,因此本程序是一个服务端运行的程序。具体时序图:

sequenceDiagram
Github->>Robot: Here is a new event
Note right of Robot: Robot think How to deal with the event?
Robot->>Github: Deal it follow my opinion

流程

当接受到一次调用,程序处理逻辑:

graph TB
recieve[recieve event]-->type{type?}
type--> |created| judge{is valid?}
type--> |other| nothing[nothing to do]
judge--> |invalid| nothing
judge--> |valid| order[invoke github hook]
order--> addComment[add comment]
order--> addLabel[add label]
addComment-->close
addLabel-->close

实现

搭建框架

由于是纯接口操作,我们只需要构建一个服务端。本质上用任何一个可实现服务端的语言/框架都可以,选择我们较为熟悉的js语法,并通过node来构建web服务。为了减少底层工作,比如「文件操作」、「HTTP协议」处理,我们选择让koa框架来处理这些事,我们专注于自身业务逻辑。

模块划分

  1. 主模块 用来整合其他模块并处理网络请求
  2. github模块 处理向github发送的各种命令
  3. 日志模块 调试用,并记录请求
  4. 业务逻辑模块 对接受到的消息进行判断和处理

参考

  1. https://github.com/ant-design/ant-bot
  2. https://github.com/iview/iview-bot