酷Q机器人是一个免费的QQ机器人框架,开发者提供了很多种SDK,让其他人能快速上手并开发出各种有意思功能的插件
本篇笔记以我个人角度,用我编写的第一个“井字棋”插件作为例子,从零开始解析酷Q机器人插件 C++ 开发流程。当然,本文并不会涉及井字棋的功能实现,有好奇的同志请直接下载源码进行研究酷Q井字棋
SDK构成
下载完C++版的SDK,打开项目文件,我们会在解决方案管理器里看到以上几个文件。当然,我将项目名称和.json文件的重命名过,所以会有所不同。其中会在我们的开发中经常用到的,有以下几个:
Header Filseappmain.h
cqp.h
Source Filesappmain.cpp
com.example.democ.json
分别介绍一下:
appmain.h
这个头文件的内容是这样的:
主要用于酷Q加载插件时对插件的识别,开发者在第一次用的时候需要把CQAPPID之后的内容改为自己的内容,作为此插件的唯一ID
cqp.h
这个头文件很重要,具体的内容是这样的:
文件中列出了酷Q目前能提供的所有功能函数,以及使用方法,例如:1CQAPI(int32_t) CQ_sendPrivateMsg(int32_t AuthCode, int64_t QQID, const char *msg);
指的是发送私聊消息功能的函数,可以这样调用CQ_sendGroupMsg(ac, fromGroup, GameTitle);“ac”为固定语法,没有理由;“fromGroup”为int64格式的数字,储存着发送目标的QQ号,“GameTitle”为char *格式的字符或字符数组,如果你用char[]或string格式储存字符,需要在调用此函数前转换成char *格式
函数的返回值可以在酷Q的Debug窗口里看到
appmain.cpp
这个文件相当重要,也是开发者主要修改的文件,具体的内容是这样的:
文件中列出了酷Q目前能提供的全部事件监视函数,也就是酷Q机器人的实现原理:利用事件监视回调函数在获知相应事件发生后,调用其中的方法,实现各种自定义功能
例如下面这个函数:1
2
3
4
5
6CQEVENT(int32_t, __eventPrivateMsg, 24)(int32_t subType, int32_t msgId, int64_t fromQQ, const char *msg, int32_t font) {
//如果要回复消息,请调用酷Q方法发送,并且这里 return EVENT_BLOCK - 截断本条消息,不再继续处理 注意:应用优先级设置为"最高"(10000)时,不得使用本返回值
//如果不回复消息,交由之后的应用/过滤器处理,这里 return EVENT_IGNORE - 忽略本条消息
return EVENT_IGNORE;
}
当酷Q获知“有人发送私聊消息”这个事件时,执行此函数,调用其中的各种开发者编写的内容,例如发送回发私聊消息之类。每个函数接受的形参均有不同,基本足够开发者使用,例如“fromQQ”,储存着对方的QQ号,如果想要回发消息,直接将此形参传入CQ_sendPrivateMsg(ac, fromQQ, msg);即可
com.example.democ.json
这个文件的内容是这样的:
开发者需要将自己插件的信息写进去,并且删除一些没有用到的权限
酷Q原理
略
插件生成
插件开发完成后,编译,自动生成dll文件,将dll和json放入酷Q根目录app文件夹内,即可进行插件测试。功能正常后即可打包上线发布