jcq-coolq
                                
                                
                                
                                    jcq-coolq copied to clipboard
                            
                            
                            
                        Java CoolQ SDK Library
JavaCQ SDK Tool
前言
本插件将酷Q扩展可以间接使用Java进行开发
本文档适用于有一定Java基础的开发者阅读
以下提供详细步骤,推荐使用maven进行开发
文档不够详细的部分可以源码,源码的注释也是非常全的
视频教学:待续~ 酷Q帖子:https://cqp.cc/t/37318
开发环境
- 电脑上已安装32位 JDK(JRE) 1.6以上版本
注:酷Q未提供64位版本,所以JRE必须为32位,否则JRE无法正常加载 - 下载 酷Q 和 JavaCQ SDK Tool 插件 ,安装并启用工具插件
注:启用时发生依赖DLL链接错误,多半因为JVM相关 VC库 未安装 - Java开发工具:MyEclipse、Eclipse、Intelij IDEA等 主流开发工具均可开发
 
JCQ Tool 目录结构
根目录 (例:酷Q/data/app/com.sobte.cqp.jcq/)
| 目录 | 描述 | 
|---|---|
| bin/ | 存放重要的JCQ插件管理工具和酷QAPI工具 | 
| app/ | 插件放置处,即放置您所编写并打包好的jar | 
| conf/ | 核心配置目录 | 
| lib/ | 全局lib目录,需手动创建 | 
小提示
jar插件同名文件夹下创建lib,可以使用独立lib(可在json中修改此位置)
优先级:独立lib > 全局lib > JCQ自带lib
每个插件都是独立的,互不影响,各插件加载类时优先级越高的最先加载
全局lib 和 独立lib 根据需求使用 注意类加载优先级
配置文件
| 文件 | 描述 | 
|---|---|
| setting.ini | JCQ配置文件 | 
| JCQ.cfg | JCQ应用配置文件,此文件较为重要,不做解释 | 
JCQ Tool 配置文件
JavaVM 相关
| key | value | 
|---|---|
| JrePath | 自定义JRE路径配置 (默认从注册表读JRE目录) | 
| ClassPath | 设置JVM启动加载类路径 | 
| MinSize | JVM堆内存最小设置 | 
| MaxSize | JVM堆内存最大设置 | 
| MinPermSize | JVM非堆内存最小设置 | 
| MaxPermSize | JVM非堆内存最大设置 | 
JVM内存限制
32位虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB 一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G,而64bit以上的处理器就不会有限制了
JavaCQ 相关
| key | value | 
|---|---|
| Version | JCQ Tool版本(清空此值,则重新生成核心文件) | 
JSON 文件介绍
正常插件是由以下两部分组成的
- json:此文件用于描述插件信息
 - jar :此文件是插件所有class打包而成
 
JSON文件是用于存储插件信息的文本文件 下面介绍下Json基本信息,详情查看Demo中json注释
整体部分
{  
    "ret"        : 1,   // 返回码,固定为1
    "apiver"     : 9,   // Api版本,本SDK为9
    "name"       : "name",  // 应用的名称
    "version"    : "1.0.0",    // 应用文本版本号 例:1.0.0
    "version_id" : 1,        // 应用顺序版本(每次发布时至少+1)
    "author"     : "author",    // 应用作者
    //"path"       : "lib",    // 应用lib加载处,默认插件同名文件夹目录下lib文件夹,此目录可以填相对路径和绝对路径,相对:应用同名文件夹
    //"class"      : "com.example.Demo", // 应用加载主类,注意必须填写全类名,默认使用appid加载,如需使用则删除前面注释
    "description": "", // 应用描述
    "event"      : [],  //  事件列表,同一事件类型可重复定义(发布前请删除无用事件)
    "menu"       : [],  // 设置菜单
    "status"     : [],  // 悬浮窗状态 (暂无实际功能,后期加入)
    "auth"       : []   // 应用权限
}  
事件部分
{
	// 这是事件部分json,其他部分与上面一致
	"event":
	[  
		// 这里列举私聊事件为例,其他参考Demo中的json
		{  
			"id"      : 1,                      // 事件ID,保持唯一即可
			"type"    : 21,                     // 事件类型,事件类型,用于区分各函数的功能  
			"name"    : "私聊消息处理",          // 事件名称
			"function": "privateMsg",           // 事件对应主类中的函数  
			"priority": 30000                   // 事件优先级 (参见 cqp.im/deveventpriority)  
		}  
	]  
}
菜单部分
{
	// 这是事件部分json,其他部分与上面一致
	"event":
	[  
	    // 菜单会在管理器中被调用
		{
            "name": "设置A", //菜单名称
            "function": "menuA" //菜单对应主类中的函数
        }
	]  
}
最后必须将文件名改为 [appid].json 并和你的jar插件放置到app目录下
使用Demo开发
如果有一定Java基础,则可以转到下文的快速开发
- 下载 Demo ,导入到开发工具中
 - 参考上方json介绍,根据自己需求修改json文件,文件名需和 appid 相同
 - 查看项目中
lib目录,导入其中所需jar文件 - 打开包中的应用主类,这里建议包到主类的全类名尽量和 appid 保持一致
注:酷Q是事件驱动的模式,json中定义的事件,在主类中实现事件 - 根据自己的需求 编写,修改 所需代码,相关CQ类说明在文档下方
 
    // 群消息事件,详情参考Demo中的主类
    public int groupMsg(int subType, int msgId, long fromGroup, long fromQQ, String fromAnonymous, String msg, int font) {
        // 以下是群消息要执行的代码
        CQ.sendGroupMsg(fromGroup, msg + "Java插件");
        return 0;
    }
- 在json中,指定主类
注:如不设置则利用appid加载,最后一个单词自动大写查找 例:appid(com.example.demo) 则加载类 com.example.Demo - 然后使用开发工具进行编译打包成jar
 - 将jar依赖lib导入放置到,全局lib或单独lib中,jcq-coolq和commons-codec,工具自带了,可以不用导入
注:导入的依赖jar,尽量保证版本一致,避免不必要的错误 - 将打包好的jar和json,一起复制到 
app目录下 - 启动或重启酷Q即可运行插件
注:因为JRE不能重新加载,重新加载插件需重启酷Q,重启插件无效 - 触发事件开始体验自己的插件吧,喵呜~
 
快速开发
此步骤面向一定Java基础的开发者
- 待续,暂未完成....
 
Maven 导入
    <groupId>org.meowy.cqp</groupId>
    <artifactId>jcq-coolq</artifactId>
    <version>1.3.0</version>
JCQ-CoolQ 常用类说明
JCQ JavaDoc http://sobte.gitee.io/jcq-wiki/
其中包括JCQ所有类的注释
CoolQ 类
酷Q操作的核心类
| 方法 | 说明 | 
|---|---|
| deleteMsg | 撤回消息,需Pro版 | 
| getAppDirectory | 获取应用目录,如果目录不存在则自动创建,目录末尾带 "" | 
| getCookies | 获取Cookie,慎用,此接口需要严格授权 | 
| getCsrfToken | 获取CsrfToken,即QQ网页用到的bkn/g_tk等 慎用,此接口需要严格授权 | 
| getGroupList | 获取群列表 | 
| getGroupMemberInfo | 获取群成员信息 | 
| getGroupMemberInfoV2 | 获取群成员信息 | 
| getGroupMemberList | 获取群成员列表 | 
| getLoginNick | 获取登录昵称 | 
| getLoginQQ | 获取登录QQ | 
| getRecord | 接收消息中的语音(record) | 
| getFont | 转换数据到字体信息 | 
| getGroupFile | 获取群文件信息 | 
| getAnonymous | 获取匿名信息 | 
| getStrangerInfo | 获取陌生人信息 | 
| addLog | 不推荐使用本方法,请使用log开头的方法 | 
| logDebug | 添加日志,级别:调试,颜色:灰色 | 
| logError | 添加日志,级别:错误,颜色:红色 | 
| logFatal | 添加日志,级别:致命错误,颜色:深红 | 
| logInfo | 添加日志,级别:信息,颜色:黑色 | 
| logInfoRecv | 添加日志,级别:信息(接收),颜色:蓝色 | 
| logInfoSend | 添加日志,级别:信息(发送),颜色:绿色 | 
| logInfoSuccess | 添加日志,级别:信息(成功),颜色:紫色 | 
| logWarning | 添加日志,级别:警告,颜色:橙色 | 
| sendDiscussMsg | 发送讨论组消息 | 
| sendGroupMsg | 发送群消息 | 
| sendLike | 发送手机赞 | 
| sendLikeV2 | 发送手机赞 | 
| sendPrivateMsg | 发送私聊消息 | 
| setDiscussLeave | 退出讨论组 | 
| setFatal | 置错误提示 | 
| setFriendAddRequest | 处理好友添加请求 | 
| setGroupAddRequest | 处理群添加请求 | 
| setGroupAddRequestV2 | 处理群添加请求 | 
| setGroupAdmin | 设置群管理员 | 
| setGroupAnonymous | 群匿名设置 | 
| setGroupAnonymousBan | 禁言匿名群员 | 
| setGroupBan | 禁言群员 | 
| setGroupCard | 设置群成员名片 | 
| setGroupKick | 移除群员 | 
| setGroupLeave | 退出QQ群,慎用,此接口需要严格授权 | 
| setGroupSpecialTitle | 设置群成员专属头衔,需群主权限 | 
| setGroupWholeBan | 全群禁言 | 
| getLastStatus | 获取最后状态 | 
CQCode 类
CQ码 ,用于辅助开发加快开发效率,以下方法均返回 CQ码 文本
| 方法 | 说明 | 
|---|---|
| decode | 特殊字符,反转义 | 
| encode | 特殊字符,转义,避免冲突 | 
| anonymous | 匿名发消息(anonymous) - 仅支持群 | 
| analysis | 解析CQ码 | 
| getFaceId | 从CQ码中获取QQ表情ID,错误返回 -1 | 
| getFaceIds | 从CQ码中获取所有QQ表情ID | 
| at | 提醒某人,@某人(at) | 
| getAt | 从CQ码中获取at的QQ号,-1 为全体,错误为 -1000 | 
| getAts | 从CQ码中获取所有at的QQ号 | 
| contact | 发送名片分享(contact) | 
| emoji | emoji表情(emoji) | 
| getEmoji | 从CQ码中获取emoji表情ID,错误返回 -1 | 
| getEmojis | 从CQ码中获取所有emoji表情ID | 
| face | 表情QQ表情(face) | 
| image | 发送图片(image),需Pro版 | 
| imageUseGet | 使用Get方式获取图片并发送图片(image),需Pro版 | 
| imageUsePost | 使用Post方式获取图片并发送图片(image),需Pro版 | 
| getImage | 从CQ码中获取图片的路径,如 [CQ:image,file=1.jpg] 则返回 1.jpg | 
| getCQImage | 从CQ码中获取图片的 CQImage 对象 | 
| getCQImages | 从CQ码中获取所有 CQImage 对象 | 
| location | 发送位置分享(location) | 
| music | 发送音乐(music) | 
| record | 发送语音(record) | 
| getRecord | 从CQ码中获取语音的路径,如 [CQ:record,file=1.amr] 则返回 1.amr | 
| getRecordFile | 从CQ码中获取语音的文件对象 | 
| shake | 窗口抖动(shake) - 仅支持好友 | 
| isShake | 判断CQ码中是否包含 窗口抖动(shake) | 
| share | 发送链接分享(share) | 
支持赞助作者
可以加入交流群赞助:427984429