基于酷Q的工作秘书机器人
环境准备
| 名称 | 版本 |
|---|---|
| Jdk | 8 |
| groovy | 2.4.12 |
| gradle | 4.6 |
| 酷Q | 5.12.3A |
| 酷Q Http Api插件 | 4.6.2 |
环境安装
- jdk安装
- groovy安装
- gradle安装
- 酷Q下载后直接解压
- 酷Q Http插件安装
将io.github.richardchien.coolqhttpapi.cpk文件复制到酷Q根目录下的app目录下,注意插件的json配置,通过CQA.exe启动输入你的机器人QQ号
本例配置,酷Q home/app/io.github.richardchien.coolqhttpapi.cpk/config.json,使用的时候把json注释去掉,这里只是用于属性说明
{
"general": {
"host": "0.0.0.0",
// 机器人接收消息接口
"post_url": "http://127.0.0.1:6666/coolQ"
},
// key为机器人qq号
"2743046799": {
// 酷Q消息接收token
"access_token": "Mgep4rV49rM8Jf",
// 酷Q接收消息端口
"port": 5700
}
}
项目结构
该项目使用groovy开发,基于spring-boot,使用grandle构建,开发ide为IntelliJ IDEA
代码结构

配置说明
i. 配置文件
server:
# web端口
port: 6666
logging:
level:
org.springframework.*: info
org.apache.http.*: error
org.hibernate.*: error
com.github.*: debug
spring:
gson:
field-naming-policy: lower_case_with_underscores
secretary:
# 酷Q配置
cool:
# 消息发送地址 酷Q运行主机及json配置的端口
url: http://192.168.2.86:5700
# 消息token
token: Mgep4rV49rM8Jf
# 用于jira&gitlab webhooks消息发送
# 工作群/讨论组id 1575716762
groupId: 1575716762
# 群类型 discuss/group
groupType: discuss
# 茉莉机器人配置
itpk:
url: http://i.itpk.cn
apiKey: f5c89b45e875434b4be5d1bd54266db6
apiSecret: 3xj9lxqied51
# jira用户名和qq关系
# 通过经办人jira帐号绑定对应人工作QQ号
# 没用到jira的webhooks可以忽略
jira:
Admin: 412810549
lisi: 410571470
wangwu: 1579231853
zhaoliu: 1786370596
ii. retrofit配置
@Configuration
class RetrofitConfig {
@Value("\${secretary.cool.url}")
String coolQUrl
@Value("\${secretary.itpk.url}")
String itpkUrl
@Autowired
Gson gson
@Bean
Retrofit cool() {
new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create(this.gson))
.baseUrl(this.coolQUrl)
.build()
}
@Bean
Retrofit itpk() {
new Retrofit.Builder().baseUrl(this.itpkUrl).build()
}
@Bean
CoolQApi coolQApi() {
this.cool().create(CoolQApi.class)
}
@Bean
ItpkApi itpkApi() {
this.itpk().create(ItpkApi.class)
}
}
- 代码说明
- 酷Q上报接口CoolQController
@PostMapping
def receive(HttpServletRequest request) {
String json = request.getReader().lines().collect(Collectors.joining("\n"))
log.debug(json)
def type = this.gson.fromJson(json, TypeReq.class)
switch (type.getPostType()) {
case POST_TYPE_MESSAGE:
// 只处理私聊/群消息/讨论组消息
switch (type.getMessageType()) {
case MESSAGE_TYPE_PRIVATE:
def req = this.gson.fromJson(json, PrivateMessageReq.class)
return new MessageResp(this.itpkComponent.message(req.getLegalMessage()))
case MESSAGE_TYPE_GROUP:
def req = this.gson.fromJson(json, GroupMessageReq.class)
if (req.needReply()) {
return new MessageResp(this.itpkComponent.message(req.getLegalMessage()))
}
break
case MESSAGE_TYPE_DISCUSS:
def req = this.gson.fromJson(json, DiscussMessageReq.class)
if (req.needReply()) {
return new MessageResp(this.itpkComponent.message(req.getLegalMessage()))
}
break
default:
log.warn("暂时不支持的消息类型{}", type.getMessageType())
break
}
break
default:
log.warn("暂时不支持的推送消息类型{}", type.getPostType())
break
}
}
目前上报消息只处理了消息类型,可以对私聊、群消息、讨论组消息进行处理,本例直接对接了茉莉机器人,当私聊时或者在群、讨论组@机器人时,会调用茉莉机器人的回答回复并@该用户
- jira webhooks接口JiraController
@PostMapping
void jira(HttpServletRequest request) {
String json = request.getReader().lines().collect(Collectors.joining("\n"))
log.debug(json)
def jiraVo = this.gson.fromJson(json, JiraVo.class)
this.sendMessageComponent.sendJiraMsg(jiraVo.user(), jiraVo.message())
}
收到jira触发的动作,调用酷Q的http接口发送消息通知对应的经办人
3. gitlab webhooks接口GitlabController
通知开发人员及时合并代码尽量避免冲突
4. 酷Q消息发送组件SendMessageComponent
消息发送api
/**
* 发送jira消息
* @param key jira帐号
* @param message 消息内容
*/
void sendJiraMsg(String key, String message) {
SendAllMessageReq req = new SendAllMessageReq()
req.setId(this.groupType, this.groupId)
req.setMessage(Optional.ofNullable(this.atUserPrefix(key)).orElse("") + message)
req.setAutoEscape(false)
this.sendMsg(req)
}
/**
* 发送gitlab消息通知
* @param message 消息内容
*/
void sendGitlabMsg(String message) {
SendAllMessageReq req = new SendAllMessageReq()
req.setId(this.groupType, this.groupId)
req.setMessage(message)
req.setAutoEscape(true)
this.sendMsg(req)
}
private void sendMsg(SendAllMessageReq req) {
try {
def execute = this.coolQApi.sendMsg(this.header(), req).execute()
log.debug(this.gson.toJson(execute.body()))
} catch (Exception e) {
log.debug(e.getMessage(), e)
}
}
/**
* qq @指定用户
* @param key jira帐号
* @return CQ码
*/
private String atUserPrefix(String key) {
return String.format("[CQ:at,qq=%s] ", this.group.get(key))
}
/**
* 酷Q消息发送token
* @return token
*/
private String header() {
return String.format("Token %s", this.token)
}
- 消息发送http客户端 使用的retrofit
interface CoolQApi {
/**
* 群消息发送
* @param header token
* @param req 消息内容
* @return 应答
*/
@POST("/send_group_msg")
@Headers("Content-Type:application/json")
Call<CoolResp> sendGroupMsg(@Header("Authorization") String header, @Body SendGroupMessageReq req)
/**
* 讨论组消息发送
* @param header token
* @param req 消息内容
* @return 应答
*/
@POST("/send_discuss_msg")
@Headers("Content-Type:application/json")
Call<CoolResp> sendDiscussMsg(@Header("Authorization") String header, @Body SendDiscussMessageReq req)
/**
* 私人消息发送
* @param header token
* @param req 消息内容
* @return 应答
*/
@POST("/send_private_msg")
@Headers("Content-Type:application/json")
Call<CoolResp> sendPrivateMsg(@Header("Authorization") String header, @Body SendPrivateMessageReq req)
/**
* 发送消息
* @param header token
* @param req 消息内容
* @return 应答
*/
@POST("/send_msg")
@Headers("Content-Type:application/json")
Call<CoolResp> sendMsg(@Header("Authorization") String header, @Body SendAllMessageReq req)
}
运行及打包
- 直接运行Application
- 使用gradle的bootJar task打包,然后java -jar 直接运行
运行效果
私聊

群聊

工作讨论组

结束基于酷Q的工作秘书机器人
注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权
基于酷Q的工作秘书机器人的更多相关文章
- NoneBot+酷Q,打造QQ机器人
NoneBot 是一个基于 酷Q 的 Python 异步 QQ 机器人框架,它会对 QQ 机器人收到的消息进行解析和处理,并以插件化的形式,分发给消息所对应的命令处理器和自然语言处理器,来完成具体的功 ...
- 使用酷Q SDK开发QQ机器人
酷Q SDK下载地址:https://github.com/CoolQ/cqsdk-vc 打开工程,编辑appmain.cpp 将“私聊消息”处的代码 更改为 CQEVENT(int32_t, __e ...
- 【酷Q插件制作】教大家做一个简单的签到插件
酷Q插件已经有很多了,社区分享一大堆,不过还是自己写才有乐趣,哈哈.不得不吐槽一下,酷Q竟然不更新了,出了个酷Q pro,还收费!!诶.不过这也影响不了咱写插件的心情,今天教大家写一个酷Q签到插件,虽 ...
- 酷Q机器人,QQ机器人使用教程
软件介绍: 酷Q,软件酷Q机器人是一款基于webqq开发的一款自动接收.处理qq消息的软件. 改程序使用易语言编写,精简大量不必要代码,减小了软件体积,优化程序速度,使得酷Q更加轻巧好用. 在消息处理 ...
- 【酷Q&C++】如何利用酷Q制作一个机器人?
——酷Q Air教程 要想阅读本篇教程,读者需要基本的C++知识以及Visual Studio 2010/2015/2017 首先,需要从官方网站下载软件 https://cqp.cc/t/23253 ...
- 计算机网络课设之基于UDP协议的简易聊天机器人
前言:2017年6月份计算机网络的课设任务,在同学的帮助和自学下基本搞懂了,基于UDP协议的基本聊天的实现方法.实现起来很简单,原理也很简单,主要是由于老师必须要求使用C语言来写,所以特别麻烦,而且C ...
- ChatGirl 一个基于 TensorFlow Seq2Seq 模型的聊天机器人[中文文档]
ChatGirl 一个基于 TensorFlow Seq2Seq 模型的聊天机器人[中文文档] 简介 简单地说就是该有的都有了,但是总体跑起来效果还不好. 还在开发中,它工作的效果还不好.但是你可以直 ...
- 酷Q插件_SDK———入门与使用
1.这里使用的是易语言的SDK,所以请看不惯的人自行离开.{wymbf.} 1.2 这里不会直接给你工程,请用动手打代码,动脑思考. 1.3 不知道.不了解酷Q是干嘛的,请访问:https://cqp ...
- 2.转发。基于itchat的微信消息同步机器人
原文:https://www.jianshu.com/p/7aeadca0c9bd# 看到了该网址有基于itchat的微信消息同步机器人,转过来继续研究.以下是转过来的: 最近 全栈数据工程师养成攻略 ...
随机推荐
- 分析器错误消息: 未能找到 CodeDom 提供程序类型
ylbtech-Error-WebForm:分析器错误消息: 未能找到 CodeDom 提供程序类型“Microsoft.CodeDom.Providers.DotNetCompilerPlatfor ...
- C#如何通过反射调用带有ref或者out的参数的方法
写这篇博客,原起今天CyljXu问我一个问题:如何通过反射调用带有ref或者out的参数的方法?想着可能其他人也会遇到这个问题,权且记录下来,以备后行者搜索到. 这个在MSDN上有解释,参考 Meth ...
- Unhandled Exception: System.BadImageFormatException: Could not load file or assembly (2008R2配置x64website)
.NET Error Message: Unhandled Exception: System.BadImageFormatException: Could not load file or asse ...
- windows取证
工具网站 : http://www.ntsecurity.nu/toolbox/ 命令行历史 :命令行模式 CMD 中使 doskey /history 命令可以显示前面输入的命令情况(例如使用 cl ...
- 用Python开始机器学习(2:决策树分类算法)
http://blog.csdn.net/lsldd/article/details/41223147 从这一章开始进入正式的算法学习. 首先我们学习经典而有效的分类算法:决策树分类算法. 1.决策树 ...
- R读 txt 文件
house<-read.table("house_data.txt", header = TRUE, sep='|',fileEncoding ='UTF-8') id|ho ...
- Java-JUC(九):使用Lock替换synchronized,使用Condition的await,singal,singalall替换object的wait,notify,notifyall实现线程间的通信
Condition: condition接口描述了可能会与锁有关的条件变量.这些用法上与使用object.wait访问隐式监视器类似,但提供了更强大的功能.需要特别指出的是,单个lock可能与多个Co ...
- LDR 和MOV 指令区别
ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令.比如想把数据从内存中某处读取到寄存器中,只能使用ldr比如:ldr r0, 0x12345678就 ...
- 向windows添加环境变量
以NASM为例,软件安装完毕后,启动Windows操作系统的命令窗口,在安装目录(比如C:\Program Files\NASM)下运行nasm是ok的,但是在其他任意目录下运行nasm就会报错. 这 ...
- mac sierra 10.12部分注册机Special-K+CORE Keygen不能运行的问题
自从mac升级到了sierra之后,很多注册机都打不开了,于是,我想尽了很多办法之后,终于搞定. 1.国外的大神,开发了一个软件,可以修复你的破解补丁,操作方法如下: 下载软件 http://bbs. ...