API
API模块
所有对 QQ 开放平台 API 的原始封装都在 API 模块 simbot-component-qq-guild-api 中。
这一层主要包含:
love.forte.simbot.qguild.api
各类
QQGuildApi<T>实现,以及 Java 侧ApiRequests辅助函数。love.forte.simbot.qguild.model
与开放平台响应结构对应的数据模型,例如
Message、Guild等。love.forte.simbot.qguild.event
网关事件体、
opcode、intent与分发结构。love.forte.simbot.qguild.message
消息模型、内嵌格式编码器与若干构建辅助类型。
API定义
可前往 API 类型总览 或 API 文档 查看所有 API 实现。
消息发送相关的几个常用 API 需要特别区分:
- MessageSendApi
频道子频道发消息。
- DmsSendApi
频道私聊
DMS发消息。- GroupMessageSendApi / UserMessageSendApi
QQ群与
C2C单聊发消息。
使用API
在 API 模块、stdlib 模块和核心组件模块中都可以使用 API。
所谓“使用 API”,就是提供所需参数,向 API 发起请求,并拿到预期的结果或错误。
API模块中使用
在 API 模块中直接使用 API,通常需要这些参数:
HttpClient: 用于发起请求的 KtorHttpClient对象。token: QQ频道API中用于鉴权的客户端access_token。 它通过API定期刷新,可在Bot中获取。 如果API还支持旧格式,那么可以在官方文档中找到,比如Bot 100000.aaaabbbbccccdddd。server: 可选 。QQ频道API有正式频道和沙箱频道之分,可通过此参数选择不同的服务器地址。在一些特殊需求下,也可以通过此方式自定义一个第三方服务器地址。appId: 可选 。如果提供,会将其添加到请求头X-Union-Appid中。这是新的access_token访问方式所要求的。
对 API 的请求在 Kotlin 中以挂起扩展函数提供; 在 Java 中可通过 ApiRequests 使用阻塞、异步与 SuspendReserve 三种桥接形式。
API 层常用入口有:
request: 直接返回原始的HttpResponse结果,几乎不做校验requestText: 返回请求到的原始JSON字符串,会校验HTTP响应状态是否为2xx。requestData: 会解析响应值为对应的实体对象后返回。会校验是否成功。
以 GetGuildApi (获取频道服务器详情)为例:
Stdlib模块中使用
在 simbot-component-qq-guild-stdlib 中,一个 love.forte.simbot.qguild.stdlib.Bot 已经包含了客户端、鉴权与服务器地址等信息, 因此你可以使用 Bot.requestXxx(api) 或 api.requestXxxBy(bot) 来简化你的请求 (Java中可以使用 BotRequests 提供的静态方法)。
核心模块中使用
核心模块中的 QGBot 提供了 source, 它对应 stdlib 层的 Bot。
如果你想继续走 stdlib 风格,使用
bot.source如果你正在发送消息,通常更推荐优先参考 消息元素 与各对象上的
send(...)
日志
开启名称前缀为 love.forte.simbot.qguild.api 的 DEBUG 级别日志, 可以看到 API 请求过程中的部分详细信息,例如出入参。
在 JVM 中,日志系统委托给 SLF4J2 API ;在 native 平台中,可通过 LoggerFactory.defaultLoggerLevel 修改全局默认日志级别。
JVM 中默认会为日志中的部分片段染色。 如果需要关闭,添加 JVM 参数: