@@ -115,7 +115,13 @@ bot.On<NewFriendRequestEvent>([&](NewFriendRequestEvent e)
115115bot.EventLoop();
116116```
117117
118- bot.EventLoop() 方法会阻塞当前线程,内含死循环不断轮询新的事件。该方法不会抛出异常。(因为抛出异常会打断死循环,所以在循环里面会捕捉异常并在 cerr 输出,不知道有没有更优雅的解决方法)
118+ bot.EventLoop() 方法会阻塞当前线程,内含死循环不断轮询新的事件。该方法不会抛出异常,如果有错误默认会在 cerr 输出。
119+
120+ 如果希望自定义 EventLoop 处理错误信息的方式,可以尝试这样写:
121+
122+ ``` C++
123+ bot.EventLoop([](const char * errMsg){/* ...* / });
124+ ```
119125
120126# 如何发送消息、引用回复、撤回消息
121127
@@ -159,6 +165,9 @@ void GroupMsgProcessor(GroupMessage m)
159165 // 直接撤回
160166 m.Recall();
161167 // bot.Recall(m.GetMessageId());
168+
169+ // 判断有没有 At 我 (仅限 GroupMessage)
170+ m.AtMe()
162171}
163172
164173// 定义好消息处理函数后,不要忘了将它与事件绑定起来
@@ -185,9 +194,11 @@ MessageChain msg = MessageChain()
185194 .AtAll();
186195```
187196
188- ## 获得 ImageId
197+ ## 获得 ImageId 以发送图片
198+
199+ 使用 UploadFriendImage 、UploadGroupImage 、 UploadTempImage 方法上传图片,其返回值分别为 FriendImage 、 GroupImage 、TempImage 类型的图片。(FriendImage 、 GroupImage 、TempImage 都是 MiraiImage 的别称)
189200
190- 使用 UploadFriendImage 、UploadGroupImage 、 UploadTempImage 方法上传图片,其返回值分别为 FriendImage 、 GroupImage 、TempImage 类型的图片。(之所以分成三个类型是因为它们的 ID 格式不一样)
201+ > 注意: 三种图片的 ID 的格式互不相同,所有不要将各类型的图片混用,比如将 FriendImage 发送给某个群组。虽然 mirai-cpp 没有限制你这样做,但是这一定达不到预期的结果,并且很可能会引发异常。
191202
192203``` C++
193204GroupImage img = UploadGroupImage(" D:\\ test.png" );
@@ -216,7 +227,14 @@ string msg_str = msg.GetPlainText();
216227
217228## 获取其他消息类型的内容
218229
219- 还没写相关的 API...
230+ MessageChain 提供了 GetXXX 的方法,其中 XXX 为消息类型,作用是获得所有该类型的消息,储存在 vector 中。
231+
232+ | 方法签名 | 说明 |
233+ | -------------------------------------| -------------------------------------------------|
234+ | vector<string > GetPlain() const | 获取所有 Plain 类型消息 |
235+ | vector<MiraiImage > GetImage() const | 获取所有 Image、FlashImage 类型消息(图片和闪照) |
236+ | vector<QQ_t> GetAt() const | 获取所有 At 类型消息 |
237+ | vector<int > GetFace() const | 获取所有 Face 类型消息 |
220238
221239## 其他函数
222240
@@ -228,8 +246,32 @@ GetTimestamp 方法可以获得这条消息的时间戳(类型为 int64_t )。
228246
229247建议参考 /examples 的源代码,其中的 examples 会随着 mirai-cpp 的更新而更新。
230248
249+ (强烈建议将 examples 都阅读一遍,因为精力关系我没能把所有函数都写在文档上)
250+
251+ | 文件名 | 说明 |
252+ | ----------------------| ------------------------------|
253+ | RepeatMessage.cpp | 简单的复读机器人 |
254+ | SendImageMessage.cpp | 发送图片示例 |
255+ | BotEvents.cpp | 处理有关Bot相关的事件 |
256+ | GetFriendList.cpp | 打印Bot的好友列表 |
257+ | GetGroupList.cpp | 打印Bot的群组列表 |
258+ | MemberJoinEvent.cpp | 处理新成员加入群的申请和事件 |
259+ | MemberLeaveEvent.cpp | 处理成员退出群的事件 |
260+ | MessageType.cpp | 获取/处理各种类型的消息示例 |
261+ | NewFriendEvent.cpp | 处理好友申请 |
262+ | Recall.cpp | 撤回消息示例 |
263+ | RecallEvent.cpp | 处理其他人撤回消息的事件 |
264+ | Mute.cpp | 和禁言有关的操作 |
265+ | RichMessage.cpp | 发送 JSON、闪照等类型的消息 |
266+
267+
231268# 关于异常
232269
233270MiraiBot 中的方法几乎都会抛出异常,建议捕捉起来。
234271
235- EventLoop 方法不会抛出异常,因为一些原因,它会捕捉异常,并在 cerr 中输出。(这是因为我不知道如何优雅地处理这里抛出的异常。如果你不希望输出,除了直接修改源码外暂时没有其他办法,如果有好的处理方法可以提交 issues 让我修改)
272+ EventLoop 方法不会抛出异常,它会捕捉异常,并在 cerr 中输出。
273+ 如果希望自定义 EventLoop 处理错误信息的方式,可以尝试这样写:
274+
275+ ``` C++
276+ bot.EventLoop([](const char * errMsg){/* ...* / });
277+ ```
0 commit comments