This repository has been archived by the owner on Jan 7, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 23
/
demo.cpp
61 lines (49 loc) · 2.76 KB
/
demo.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include "cqsdk/cqsdk.h"
// namespace cq::app 包含插件本身的生命周期事件和管理
// namespace cq::event 用于注册 QQ 相关的事件处理函数
// namespace cq::api 用于调用酷 Q 提供的接口
// namespace cq::logging 用于日志
// namespace cq::message 提供封装了的 Message 等类
// 插件入口,在静态成员初始化之后,app::on_initialize 事件发生之前被执行,用于配置 SDK 和注册事件回调
CQ_MAIN {
cq::app::on_enable = [] {
// cq::logging、cq::api、cq::dir 等命名空间下的函数只能在事件回调函数内部调用,而不能直接在 CQ_MAIN 中调用
cq::logging::debug(u8"启用", u8"插件已启动");
};
cq::event::on_private_msg = [](const cq::PrivateMessageEvent &e) {
cq::logging::debug(u8"消息", u8"收到私聊消息:" + e.message + u8",发送者:" + std::to_string(e.user_id));
if (e.user_id != 1002647525) return;
try {
cq::api::send_private_msg(e.user_id, e.message); // echo 回去
cq::api::send_msg(e.target, e.message); // 使用 e.target 指定发送目标
// MessageSegment 类提供一些静态成员函数以快速构造消息段
cq::Message msg = cq::MessageSegment::contact(cq::MessageSegment::ContactType::GROUP, 201865589);
msg.send(e.target); // 使用 Message 类的 send 成员函数
} catch (const cq::exception::ApiError &err) {
// API 调用失败
cq::logging::debug(u8"API", u8"调用失败,错误码:" + std::to_string(err.code));
}
e.block(); // 阻止事件继续传递给其它插件
};
cq::event::on_group_msg = [](const auto &e /* 使用 C++ 的 auto 关键字 */) {
const auto memlist = cq::api::get_group_member_list(e.group_id); // 获取数据接口
cq::Message msg = u8"本群一共有 "; // string 到 Message 自动转换
msg += std::to_string(memlist.size()) + u8" 个成员"; // Message 类可以进行加法运算
cq::message::send(e.target, msg); // 使用 message 命名空间的 send 函数
};
}
// 添加菜单项,需要同时在 <appid>.json 文件的 menu 字段添加相应的条目,function 字段为 menu_demo_1
CQ_MENU(menu_demo_1) {
cq::logging::info(u8"菜单", u8"点击了示例菜单1");
try {
cq::api::send_private_msg(10000, "hello");
} catch (const cq::exception::ApiError &) {
cq::logging::warning(u8"菜单", u8"发送失败");
}
}
#include <Windows.h>
// 不像 CQ_MAIN,CQ_MENU 可以多次调用来添加多个菜单
CQ_MENU(menu_demo_2) {
cq::logging::info(u8"菜单", u8"点击了示例菜单2");
MessageBoxW(nullptr, L"这是一个提示", L"提示", MB_OK | MB_SETFOREGROUND | MB_TASKMODAL | MB_TOPMOST);
}