酷Q开发实战 —— 用酷Q写一个复读机!
direwolf
2020-03-16 4

偶然间看到了酷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的成员targetmessage。为了防止网络问题导致抛出异常进而引起酷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里面请求相关权限


相关链接

评论 4

恐狼贴贴

April 8th, 2020 at 12:44 pm
回复

izh贴贴

August 21st, 2020 at 02:52 pm
回复

现在酷Q美丽,爷青结

August 31st, 2020 at 07:10 pm
回复
.direwolf #12

(悲)

August 31st, 2020 at 08:15 pm
回复
评论已关闭
发表评论
评论 取消回复
Copyright © 2024 .direwolf