From de8102235179106be17bacd38099bd3309b9d8a8 Mon Sep 17 00:00:00 2001 From: cyanray Date: Mon, 24 Aug 2020 16:27:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0:=20README=E5=92=8C=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E8=AF=B4=E6=98=8E;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +- ...77\347\224\250\350\257\264\346\230\216.md" | 91 ++++++++++++++----- 2 files changed, 71 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 47f062c..bfee846 100644 --- a/README.md +++ b/README.md @@ -18,10 +18,11 @@ 推荐阅读 examples 目录下的示例以了解使用方法。 -| 文件名 | 说明 | +| 文件名 | 说明 | |----------------------|------------------------------| | RepeatMessage.cpp | 简单的复读机器人 | | SendImageMessage.cpp | 发送图片示例 | +| VoiceMessage.cpp | 发送语音消息示例 | | BotEvents.cpp | 处理有关Bot相关的事件 | | GetFriendList.cpp | 打印Bot的好友列表 | | GetGroupList.cpp | 打印Bot的群组列表 | @@ -35,6 +36,7 @@ | RichMessage.cpp | 发送 JSON、闪照等类型的消息 | | FetchEventsViaHTTP.cpp| 设置通过 HTTP 短轮询获取事件和消息 | | GroupMemberInfo.cpp | 获取/设置群成员的群名片与群头衔 | +| Command.cpp | 指令系统相关的操作 | ## 如何使用 diff --git "a/doc/\344\275\277\347\224\250\350\257\264\346\230\216.md" "b/doc/\344\275\277\347\224\250\350\257\264\346\230\216.md" index 857064f..2730edb 100644 --- "a/doc/\344\275\277\347\224\250\350\257\264\346\230\216.md" +++ "b/doc/\344\275\277\347\224\250\350\257\264\346\230\216.md" @@ -179,6 +179,18 @@ bot.EventLoop() 方法会阻塞当前线程,内含死循环不断轮询新的 bot.EventLoop([](const char* errMsg){/*...*/ }); ``` +## 注意事项⚠⚠ + +mirai-cpp 监听到一个事件后,会将该事件加入到线程池中进行处理。因此你需要特别注意多线程环境下数据冲突的问题。(如访问全局变量) + +mirai-cpp 的线程池默认是 4 条线程,线程数量可以通过 MiraiBot 的第三个参数进行调整。 + +```c++ +// 16 条事件处理线程 +MiraiBot bot("127.0.0.1", 539, 16); +``` + + # 如何发送消息、引用回复、撤回消息 mirai 支持好友消息、群组消息和临时消息。在 mirai-cpp 中要发送这些消息统一使用 SendMessage 方法。 @@ -314,36 +326,42 @@ MessageId 方法可以获得这条消息的 MessageId。 Timestamp 方法可以获得这条消息的时间戳(类型为 int64_t )。 -# 更多内容 +# 指令系统 -建议参考 /examples 的源代码,其中的 examples 会随着 mirai-cpp 的更新而更新。 +mirai-api-http 提供了一个指令系统,mirai-cpp 对该系统进行了适配。 +关于该系统的介绍请查阅[mirai-api-http的文档](https://github.com/project-mirai/mirai-api-http#%E6%8F%92%E4%BB%B6%E7%9B%B8%E5%85%B3console%E7%9B%B8%E5%85%B3)。具体使用方法请参考`examples/Command.cpp`中的内容。 -(强烈建议将 examples 都阅读一遍,因为精力关系我没能把所有函数都写在文档上) +mirai-cpp 将指令抽象为一个事件,因此你可以像处理事件一样处理指令。 + +```C++ +// 使用 On 方法接收指令事件 +bot.On( + [&](Command e) + { + cout << "收到指令: " << e.CommandName << ", " + << "发送者: " << e.Sender.ToInt64() << ", " + << "发送群: " << e.GroupId.ToInt64() << endl; + cout << "参数:" << endl; + for (const auto& arg : e.Args) + cout << arg << " "; + cout << endl; + + // 检查指令的发送者是不是 Manager + if (e.SenderIsManager()) + { + bot.SendMessage(e.GroupId, MessageChain().Plain("执行指令: ").Plain(e.CommandName)); + } + + }); +``` -| 文件名 | 说明 | -|----------------------|------------------------------| -| RepeatMessage.cpp | 简单的复读机器人 | -| SendImageMessage.cpp | 发送图片示例 | -| BotEvents.cpp | 处理有关Bot相关的事件 | -| GetFriendList.cpp | 打印Bot的好友列表 | -| GetGroupList.cpp | 打印Bot的群组列表 | -| MemberJoinEvent.cpp | 处理新成员加入群的申请和事件 | -| MemberLeaveEvent.cpp | 处理成员退出群的事件 | -| MessageType.cpp | 获取/处理各种类型的消息示例 | -| NewFriendEvent.cpp | 处理好友申请 | -| Recall.cpp | 撤回消息示例 | -| RecallEvent.cpp | 处理其他人撤回消息的事件 | -| Mute.cpp | 和禁言有关的操作 | -| RichMessage.cpp | 发送 JSON、闪照等类型的消息 | -| FetchEventsViaHTTP.cpp| 设置通过 HTTP 短轮询获取事件和消息 | -| GroupMemberInfo.cpp | 获取/设置群成员的群名片与群头衔 | # 关于异常 -MiraiBot 中的方法几乎都会抛出异常,建议捕捉起来。 +MiraiBot 中的方法几乎都会抛出异常,建议捕捉起来。因为在事件处理函数中出现的异常不一定会导致程序崩溃,出现问题会难以调试。 -EventLoop 方法不会抛出异常,它会捕捉异常,并在 cerr 中输出。 +EventLoop 方法不会抛出异常,它会捕捉获取消息时的异常,并在 cerr 中输出。 如果希望自定义 EventLoop 处理错误信息的方式,可以尝试这样写: ```C++ @@ -363,4 +381,31 @@ bot.On( MiraiBot& bot = m.GetMiraiBot(); bot.SendMessage(/*...*/); }); -``` \ No newline at end of file +``` + + +# 更多内容 + +建议参考 /examples 的源代码,其中的 examples 会随着 mirai-cpp 的更新而更新。 + +(强烈建议将 examples 都阅读一遍,因为精力关系我没能把所有函数都写在文档上) + +| 文件名 | 说明 | +|----------------------|------------------------------| +| RepeatMessage.cpp | 简单的复读机器人 | +| SendImageMessage.cpp | 发送图片示例 | +| VoiceMessage.cpp | 发送语音消息示例 | +| BotEvents.cpp | 处理有关Bot相关的事件 | +| GetFriendList.cpp | 打印Bot的好友列表 | +| GetGroupList.cpp | 打印Bot的群组列表 | +| MemberJoinEvent.cpp | 处理新成员加入群的申请和事件 | +| MemberLeaveEvent.cpp | 处理成员退出群的事件 | +| MessageType.cpp | 获取/处理各种类型的消息 | +| NewFriendEvent.cpp | 处理好友申请 | +| Recall.cpp | 撤回消息 | +| RecallEvent.cpp | 处理其他人撤回消息的事件 | +| Mute.cpp | 和禁言有关的操作 | +| RichMessage.cpp | 发送 JSON、闪照等类型的消息 | +| FetchEventsViaHTTP.cpp| 设置通过 HTTP 短轮询获取事件和消息 | +| GroupMemberInfo.cpp | 获取/设置群成员的群名片与群头衔 | +| Command.cpp | 指令系统相关的操作 | \ No newline at end of file