偶然间看到了酷Q有C++的SDK,正好在学习C++,决定开发一个小项目。
那开发什么呢?先从复读机器人开始吧!毕竟人类的本质是复读机
环境搭建
在环境搭建上参照酷QC++SDK的开发文档。
我个人使用参照教程使用cmake,Visual Studio 2019 Community和Visual Studio Code。
复读开始!
群聊复读
cqcppsdk自带的 src/demo.c
里提供了很多的示例,其中就有一个复读消息的。虽然说是说一句复读一句,但只要加上判断语句就行了!
群聊消息触发的是on_group_message()
事件。它的用法是:
on_group_message([](const GroupMessageEvent &event)
{
//Code Block
}
要复读一条信息,使用的是send_message()
方法,给的参数是复读对象和复读内容。由此可知,我们需要知道这条消息来自哪个群,以及这条消息包含了什么。要获取这段信息相关的信息,我们只要调用类型GroupMessageEvent
的成员target
和message
。为了防止网络问题导致抛出异常进而引起酷Q崩溃,需要把方法套在try...catch
结构里面。代码如下:
try
{
send_message(event.target, event.message);
} catch(ApiError &){} //忽略网络异常
但是现在这样,讲一句复读一句太吵了迟早被踢,还需要加上判断逻辑。我的想法是群友讲两句,复读一句,而且不会二次复读送完助攻就跑。那么只要判断当前消息和前一条相同,且和前第二条不同。判断代码有点长而且写的太屑了还和本文主题不符就不在这贴了)
最后调用event.block()
方法表示这个事件已经处理完毕。
私聊复读
私聊复读和群聊复读类似,事件是on_private_message()
,用法为
on_private_message([](const PrivateMessageEvent &event)
{
//Code Block
}
其它部分相同。这样机器人接到私聊消息时就会进行复读了。但我只希望只有机器人好友的消息会被复读,所以还要加上判断。要判断消息来源,需要使用sub_type
这个成员。查文档知sub_type
是枚举类型,在/src/core/event.hpp
中给出定义如下:
enum class SubType {
FRIEND = 11, // 好友消息
GROUP = 2, // 群临时会话
DISCUSS = 3, // 讨论组临时会话
OTHER = 1, // 陌生人消息
};
这时判断代码的写法也很显然了:
if(event.sub_type == PrivateMessageEvent::SubType::FRIEND)
{
//Code Block
}
完工!
最后
我还尝试使用on_friend_add()
事件来实现机器人加好友时自动发消息,结果并不理想。显然,酷Q只监听机器人被加好友,似乎没有考虑机器人主动加好友的情况毕竟谁会用一个号一边挂酷Q一边用TIM操作
相关代码在这就不放了。
用事件的时候别忘了在app.json里面请求相关权限
恐狼贴贴
izh贴贴
现在酷Q美丽,爷青结
(悲)