欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-14 22:12:42
...

零、写在前头

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

流程图

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

一、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的自动提交功能

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

六、有什么收获?

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

七、使用qqbot的优缺点

优点

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

缺点

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