希望我的笔记可以帮助到你!
前言...
酷Q的原理是根据QQ通信协议来登陆(login),进而实现接收(recv)和回复(send)。
他是一个可扩展的QQ客户端框架,可以被理解为自制的QQ客户端。
注意:可扩展性是软件设计的一个较高境界了,如果你也能写出类似酷Q具备扩展功能的程序,那你一定非常厉害了。
下载,编译,运行官方dome
首先你的电脑里需要安装Visual Studio,官方dome是vs2013版,我使用vs2017,可以正常编译,但如果你的版本低于2013就不一定能行,建议升级版本。
官方dome下载:https://github.com/CoolQ/cqsdk-vc 如果你不会下载的话,看下图
之后得到一个压缩包,解压他,打开CQPdemo.sln
打开后提示升级工具集,因为他使用的是vs2010(v100)的生成工具。我们vs里并没没有,点击确定升级一下即可。
之后注意一下项目目录,似乎很多,我们只需要关注“appmain.cpp”,“cqp.h”,“com.example.democ.json”三个即可,其他无需理会,我们根本不用改他们。
我们首先来关注一下appmain.cpp,代码很多,找到第81行的代码
/*
* Type=21 私聊消息
* subType 子类型,11/来自好友 1/来自在线状态 2/来自群 3/来自讨论组
*/
CQEVENT(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;
}
这是个特殊的c++写法,他实现原理在这里不做探究,我们只需知道,只要有人发给机器人私聊,他就会调用这个函数。
同理,根据代码注释,我们也知道其他函数的作用了,比如:
/*
* Type=2 群消息
*/
CQEVENT(int32_t, __eventGroupMsg, 36)(int32_t subType, int32_t msgId, int64_t fromGroup, int64_t fromQQ, const char *fromAnonymous, const char *msg, int32_t font) {
return EVENT_IGNORE; //关于返回值说明, 见“_eventPrivateMsg”函数
}
这个注释已经很明白了,只要有群消息,这个函数就会运行,至于其他函数,看注释即可。
考虑做一个程序:只要机器人收到私聊消息,他就会回复一条“HI”
我们现在已经知道,有私聊消息该怎么接收,那么怎么回复呢?
打开"cqp.h",里面有Q酷提供的所有功能。
注意39行
/*
* 发送私聊消息, 成功返回消息ID
* QQID 目标QQ号
* msg 消息内容
*/
CQAPI(int32_t) CQ_sendPrivateMsg(int32_t AuthCode, int64_t QQID, const char *msg);
注释告诉我们,QQID的值QQ号,msg是消息内容。那么AuthCode填什么呢?
注意"appmian.cpp" ,14行
int ac = -1; //AuthCode 调用酷Q的方法时需要用到
填写ac即可,至于为什么需要,我也没办法了解。
所以,在“appmain.cpp“私聊消息中,填写
CQEVENT(int32_t, __eventPrivateMsg, 24)(int32_t subType, int32_t msgId, int64_t fromQQ, const char *msg, int32_t font) {
CQ_sendPrivateMsg(ac, fromQQ, "HI"); //这是我们加入的代码,只加入这一行,其他都不要改动
//如果要回复消息,请调用酷Q方法发送,并且这里 return EVENT_BLOCK - 截断本条消息,不再继续处理 注意:应用优先级设置为"最高"(10000)时,不得使用本返回值
//如果不回复消息,交由之后的应用/过滤器处理,这里 return EVENT_IGNORE - 忽略本条消息
return EVENT_IGNORE;
}
即可,其中fromQQ是给机器人发消息的QQ。
这样就可以做到,只要机器人收到私聊消息,他就会回复一条“HI”
好了,这样我们的代码就完成了,在编译之前还要最后的改动
右击箭头,然后点击属性
代码生成->运行库->改成多线程调试。这么做的原因我在之前的博客有写,你可以不关注他的原理,这无关紧要。
预编译头->预编译头->改成不适用预编译头。
之后选择生成,生成->重新生成解决方案。
在项目目录找到两个文件 ”com.example.democ.dll“和”“
把他们放到酷Q的目录,app下。
然后重启酷Q,单击五下版本号,开启开发者模式。
点击重启酷Q即可开启,然后启动酷Q样例应用(VC),因为我们没有修改包名,这是默认的。
确定即可,然后测试我们的应用效果。