CooLib-Native - 快速入门

写在最前

这个插件仍然在更新中,breakchange 估计会有很多,文章也会不断更新,遇到不能用的情况看看最新的文档吧。

主版本号为零(0.y.z)的软件处于开发初始阶段,一切都可能随时被改变。这样的公共 API 不应该被视为稳定版。

- semver

文档较长,建议直接Ctrl + F。

文档适配版本:0.0.1-alpha+5

简介

CooLib 是为解决酷Q插件间依赖问题而开发的插件,使用 require 依赖其它插件并使用 using 转义接口,使得依赖其它插件变得像依赖一个库一样简单。

CooLib 的工作原理使得它不会干扰其它正常插件的运作,所以可以放心的使用它。

安装

帖子里下载对应的 cpk ,丢到 app 目录启用即可,或者在 github 自行构建。

使用

在你的插件中声明以下几个导出函数:(C++)

const char* __stdcall LibInfo();
int32_t __stdcall LibCallback(bool success, const char* callbackJson);
int32_t __stdcall AppCallback();
int32_t __stdcall DisableCallback();
int32_t __stdcall ExitCallback(const char* callbackJson);

(这贴 Code 的体验,这辈子都不想用了)

解释下每个函数都是干什么用的

LibInfo

返回 Lib 的配置信息、依赖项等等。返回值即为配置 json。(示例 json&参数说明

LibCallback

所有插件排序后依次调用的函数,可当做 _eventStartup 使用。

success:Lib是否全部载入成功,若 require 表中的 Lib 都必须,可以直接判断(保存)此结果而无需先处理 json。

callbackJson:返回的全部信息(示例 json&参数说明

AppCallback

所有插件调用完 LibCallback 后调用的函数,可当作 _eventEnable 使用。

请将应用相关处理置于此处而不是放在 LibCallback,后续可能更新的 仅当作Lib载入 会需要应用与 Lib 分离。

DisableCallback

插件停用函数,可当作 _eventDisable 使用。

同样推荐将应用相关处理置于此处而不是放在 ExitCallback。

ExitCallback

所有插件调用完 DisableCallback 后调用的函数,可当作 _eventExit 使用。

callbackJson:返回的全部信息(目前仅有一个 loadLib (Json Array) 用于遍历已经载入的插件,若 LibCallback 中的 success 为 true 则此处不应出现丢失的 Lib)

API

Command

注册一个command

给 CooLib 传一个类似于这样的初始化参数:

"cn.coorg.coolib": { // 给 CooLib 的传参
    "commands": {
        "add": "CMD_add" // 注册一个指令
    }
}

command 的 key 填写命令名称,value 填写对应的的 CallbackFunc。

CallbackFunc 的参数格式:int32_t __stdcall CallbackFunc(const char* callbackJson)

此处的 callbackJson 为 json array,包含以空格分隔的参数表,类似于一般程序的传参。

示例

消息:!add 1 2

callbackJson:["1","2"]

ForceReply

有的时候需要用户通过后续消息回复内容但发现酷Q没有相应方法?我们包装好了。

通过 CooLib 的 ForceReply 函数注册一个ForceReply,此函数将在用户(相同QQ号)发送下一条消息后直接拦截消息并返回消息内容。

(在群内需要AT/回复机器人才会触发ForceReply,其他消息将正常进入酷Q消息循环)

毋庸置疑,函数参数是这样的:const char* ForceReply(const char* msg, bool hold)

其中 msg 为发送的消息内容, hold 指是否拦截对应消息,禁止其它插件处理。由于优先级原因有可能此方法不起效,可以考虑拦截请求。

高级操作

cpkx

cpkx 是 CooLib 制定的一套开源酷Q应用标准,采用标准 zip 压缩一个应用包的形式。

cpkx 文件将由 CooLib 载入而非酷Q,所以 CooLib 将对应用拥有完整的控制权。

未调整的 cpkx 应用和 cpk 应用将遵循正常的酷Q消息循环。

调整 cpkx

在 CooLib 的 config 窗口找到 cpkx 设置(或在 WebConsole 中 CooLib 的 cpkx 分区)。

在这里你就可以调整 cpkx 载入和调用的相关设置了。

条件触发

有的时候需要依据条件触发对应的应用,或者干脆抛弃应用的某些功能,但是无奈并没有提供相应设置或者设置并不完全。这个功能可以帮到你。

你可以输入一个正则表达式来匹配消息内容,并可以重定义消息参数。只有当正则表达式 match 时才会调用应用的消息事件。

参数重定义

可以建立替换规则来更改传到插件消息事件的参数内容,支持正则表达式。

自动补全

估计会有很多人想要这个功能,因为谁也不想一个一个去找依赖的应用。

在开启自动补全后,CooLib 将会自动下载满足下列要求的依赖应用:

  • 在 cpkx.coorg.cn 上传的或设置了对应解析的(包括对应版本)
  • 应用为强制依赖项而非选择性依赖(选择性依赖仍有下载按钮)

解析示例:com.example.demo -> <版本号>.demo.example.com TXT <下载链接>

自动更新

只要是在配置 json 中填写了自动更新相应参数或应用自带自动更新功能的应用都会正常自动更新。

其他模块

CooLib-Native

你正在看的项目,由 C++ 编写,库在这里:https://github.com/LibCQ/CooLib-Native

CooLib-HTTP

这是一个与 CQHTTP(https://cqhttp.cc/)兼容的模块,这方面的内容请查看 CooLib-HTTP 的文档。

值得一提的是 CooLib-HTTP 会在 CQHTTP 安装后自动安装为 CQHTTP 的插件,但仍需手动启用。

CooLib-HP

一个用 MASM 写的 CooLib,还没有 Release,库在这里:https://github.com/QiroNT/CooLib

方法原理等与 CooLib-Native 相同,不过可能会稍微快一点点,稳定性不会那么高,大概像是 overclock 的感觉。

官方依赖库

在这里罗列官方的一些依赖库地址和文档,这些库并不会跟随 CooLib 安装而安装,需要用户手动下载(或自动补全)。

CooLib-WebConsole:酷Q的网页控制台

CooLib-Database:更适合酷Q的中心化数据库

CooLib-Lua:Lua 解释应用,轻量的插件体验

 

点赞

发表评论