如何通过QQ机器人技术实现禅道bug的自动提交功能

零、写在前头

最近部门老大提到可以使用qq机器人实现bug自动提交禅道,好奇心趋势于是自告奋勇进行了一系列探索。qq机器人当然有很多种,这里选择基于smartQQ协议的qqbot作为模拟客户端。qqbot是用python写的,目前社区比较活跃,如果想要实现一些简单的功能的话,推荐使用qqbot。不过最近由于支付宝扫码红包事件,腾讯封掉了一些smartQQ的关键字段,所以qqbot以及所有基于smartQQ的框架的能力变得更有限。

流程图

如何通过QQ机器人技术实现禅道bug的自动提交功能_第1张图片

一、qqbot 介绍

Github地址:https://github.com/pandolia/qqbot

qqbot特点

  • 基于smartQQ协议
  • 目前各种qq机器人库中最活跃的库之一
  • 丰富的可配置项
  • 可自定义插件进行消息的接收和处理
  • 功能丰富

安装和使用(具体可参考qqbot的github)

安装:pip install qqbot 
启动:qqbot
启动后自动弹出二维码,可以扫码登录

二、qqbot的插件机制

qqbot 支持自定义插件,它的插件机制是实现这个项目所依赖的基础。通过可以插件获取qq消息的内容,即可进行下一步操作。

具体可参考以下

实现你自己的-qq-机器人

三、禅道API简介

禅道也是一个开源的项目管理/bug管理工具,现在很火,具体就不多说了。禅道开放了一系列的接口支持通过http请求进行api的调用。这里是禅道API机制介绍的官网连接:http://devel.cnezsoft.com/book/extension/api-intro-43.html

如何实现bug的提交

禅道在每次请求的时候需要在cookie中设置一个zentaosid的参数,而这个参数是登录的时候获取到的,所以现在流程就很清清楚了

  1. 调用登录接口获取zentaosid
  2. 调用提交bug接口(将zentaosid设置到cookie中)

四、qqbot插件的实现

qqbot插件是用python写的,而我擅长的却是JavaScript,所以想了一个办法,把调用禅道API那块的程序写成命令行程序,然后用python直接执行命令行即可。甚至是,把qqbot的插件完全写成转发的功能,一旦有可用的消息就交给node命令行来处理,插件只负责消息的接收、转发和推送。

这里有几个细节需要注意

python执行完命令行如何获取返回值?

使用os.popen这个函数

t_f = os.popen(cmd)
print t_f.read()

如何实现node命令行程序

我是借助了commander.js,当然如果不复杂的话也可以自己写。

本地命令行程序如何全局安装

在package.json所在目录下使用npm install . -g可先在本地安装当前命令行程序,可用于发布前的本地测试。

代码

这块的代码已经提交到github上了,这是地址 https://github.com/brahmachen/zentao
如果能对你起到帮助的话顺便点个star也是极好的。
这块node命令行使用superagent发起http请求,使用Promise以及async/await进行异步的处理,使用commander.js实现命令的解析和处理。

五、成果

如何通过QQ机器人技术实现禅道bug的自动提交功能_第2张图片

如何通过QQ机器人技术实现禅道bug的自动提交功能_第3张图片

六、有什么收获?

  • 熟悉python基本语法
  • 了解node命令行程序制作方法
  • 了解了禅道的API机制
  • 了解了图灵机器人申请和调用流程
  • Commander.js
  • Superagent.js

七、使用qqbot的优缺点

优点

qqbot的一系列丰富的功能,包括自动重启、自动发送二维码到邮箱等,保证了程序的稳定性和可靠性

缺点

每隔1~2天cookie过期,需要QQ号扫码登录,需要专人维护。同样由于smartQQ协议的特点,提交bug时不支持图片的处理。如果对图片有需求的话,建议使用基于PCQQ/AndroidQQ/TimQQ等高级协议的框架,如myPCQQ、酷Q和Amanda等

你可能感兴趣的:(运维)