cpp-mirai-client  v2.6.1
cpp client for mirai-api-http
进阶教程

异常处理

cpp-mirai-client 中的大部分函数均有可能会抛出异常。其种类可分为以下几个方面:

  • MAH错误 Mirai::MiraiApiHttpException

    在向mirai发送请求时,由于参数错误、bot权限不足或其它原因导致mirai-api-http返回报错信息将会抛出此类异常。通常发生于各种请求类API处。

‍在 Mirai::MiraiApiHttpException 下还存在有更加细化的异常分类,如 Mirai::IllegalSession, Mirai::PermissionDenied 等,可以根据需求捕获。

  • 网络错误 Mirai::NetworkException

    由于网络原因无法与mirai通信产生的异常。

  • 消息解析错误 Mirai::ParseError

    在解析mirai传来的消息时产生错误导致的异常,可能原因包括mirai-api-http插件更新导致的不兼容变更。

  • 类型匹配错误 Mirai::TypeDismatchError

    预期类型与实际类型不一致导致的异常,通常发生于获取消息链 Mirai::MessageChain 中的某一特定元素时。

  • 未实现方法错误 Mirai::NotImplementedError

    目前未使用。在调用某些预留但未实现的接口时抛出的异常,例如在Websocket模式下mirai-api-http无法上传文件。

特殊事件

为了处理连接mirai时可能发生的状况,cpp-mirai-client 定义了四种特殊的事件类型,位于 MiraiClientEvents.hpp 中。它们可以像普通事件一样注册回调函数

‍即使没有调用Disconnect(),由网络等原因产生的掉线仍然会触发 ClientConnectionClosedEvent。如果开启了自动重连功能,则连接恢复时会再次触发 ClientConnectionEstablishedEvent

> 不要在回调函数中直接调用 Connect()Disconnect(),这会导致死锁。考虑使用额外的线程来完成这一功能。

多线程相关

由于cpp-mirai-client在处理消息循环时使用了多线程,因此为保证线程安全,Mirai::MiraiClient 的调用者应满足以下约定: