【QScript】应用详情和更名通知

摘要:

  1. 『QPlus』更名为『QScript』
  2. 『QScript』主打脚本功能,提供部分非脚本功能

正文

如摘要所言,本次将 “QPlus” 更名为 ”QScript“,额外提供脚本功能,提供部分非脚本功能。本模块主要使用 Kotlin 开发,下载链接:Github。最新版本为:V1.3.0

Q & A


QScript 是什么?

一个 Xposed 模块,用于执行自动化脚本

如何启用?

Xposed 管理器中勾选本模块并重启手机。

如何编辑脚本? / 有脚本 API 文档吗?

预定义变量

1
2
3
4
Context ctx; // QQ 的 Application
long mQNum; // 您的 QQ 号码
QScript thisScript; // 该脚本,如:thisScript.getName(),但我觉得您应该不会使用这个变量
ScriptApi api; // 能够调用 API 的对象,详见后文API

监听接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
* 脚本加载时调用
*/
public void onLoad()

/**
* 收到消息时调用
*/
public void onMsg(Object param) {
param.senderUin; // String 发送人QQ号码
param.nickname; // String 发送人昵称
param.content; // String 消息内容
param.time; // long 发送时间
param.isGroupMsg(); // boolean 是否在群聊中发送
param.friendUin; // String 如果是群聊消息,这个就是群号码;如果是私聊,我也不知道有什么用
param.atMe; // boolean 是否艾特自己(TODO,尚未实现)
}

/**
* 新成员加入时调用
*
* @since 1.2
*/
public void onJoin(Object data) {
data.uin; // String 加入者的QQ号码
data.groupUin; // String 群聊号码
}

API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// 调用 API 的方法:api.函数名(参数);

/**
* 发送日志
*
* @param msg 日志内容
* @since 1.0
*/
public void log(String msg)

/**
* 把 String 转为 Long,如<code>api.str2long("1234567894")</code>
*
* @since 1.1
*/
public void str2long(String str)

/**
* 给某人发送纯文本消息(如果没有添加好友,请 createTempConversation(TODO) 后再发送消息)
*
* @param msg 消息内容
* @param qNum 接受者的 QQ 号
* @since 1.1
*/
public void sendTextMsg(String msg, long qNum)

/**
* 发送群聊文本消息
*
* @param msg 消息内容
* @param qNum 接受者的 QQ 号
* @param at 被艾特的列表,即使不艾特人,也必须要 new long[]{} ,否则将会被判定为私聊消息
* @since 1.1
*/
public void sendTextMsg(String msg, long qNum, long ... at)

/**
* 发送卡片(XML/JSON)
*
* 警告:使用这个方法需要高级验证(@since 1.1.1)
* @param msg 卡片的代码
* @param qNum 接受者
* @param isGroup 接受者是不是群聊
* @since 1.1
*/
public void sendCardMsg(String msg, long qNum, boolean isGroup)

/**
* 禁言某人
*
* @param group 群号
* @param qNum QQ号
* @param time 时间,0=解除禁言
* @since 1.2
*/
public void shutUp(long group, long qNum, long time)

/**
* 全体禁言
*
* @param group 群号
* @param time 状态,false=解除禁言,true反之
* @since 1.2
*/
public void shutAllUp(long group, boolean time)

示例脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// QScript.MetaData.Start
// QScript.MetaData.Name = QScript脚本示例
// QScript.MetaData.Desc = QScript官方给出的脚本示例
// QScript.MetaData.Version = 1.0.0
// QScript.MetaData.Author = Tsihen-Ho
// QScript.MetaData.Label = qscript-demo
// QScript.MetaData.End
// 注:上面的 Label 标签是分辨脚本的唯一属性,如果两个脚本 Label 相同,就会被判别为同一个脚本
// 每个脚本必须以 QScript.MetaData.Start 开头

// 这仅仅是一个演示脚本,我们不建议您启用这个脚本

/*
* 所有的方法都在脚本里面,自己看
* 预定义变量:
* Conntext ctx : QQ 的 Application
* long mQNum : 您的 QQ 号码
* QScript thisScript : 该脚本,如:thisScript.getName()
* ScriptApi api : 能够调用 API 的对象,如:api.sendTextMsg("something", 334092396l)
*/

/**
* 在脚本加载的时候调用
*/
public void onLoad(){
api.log("onLoad() : User's QNum is "+mQNum.toString());
// 发消息的时候,QQ号末尾必须加 L 表示长整形
// 第一个 String 代表文本内容
api.sendTextMsg("QScript 脚本发消息测试:表情:/xyx [斜眼笑] [奸笑]",3340792396L);
// 发表情使用 反斜杠uxxxx

// api.sendCardMsg(String 卡片代码, long 消息接受者, boolean 是否群聊)
// 发送卡片需要完成高级验证,否则报错
api.sendCardMsg("<?xml version='1.0' encoding='UTF-8' " +
"standalone='yes' ?><msg serviceID=\"33\" templateID=\"123\" " +
"action=\"web\" brief=\"【链接】Golink加速器-国内首款免费游戏加速器【官方\" " +
"sourceMsgId=\"0\" url=\"https://www.golink.com/?code=JYPYKZWN\"" +
" flag=\"8\" adverSign=\"0\" multiMsgFlag=\"0\"><item layout=\"2\"" +
" advertiser_id=\"0\" aid=\"0\"><picture cover=\"https://qq.ugcimg.cn/v1/o3upv4dbs" +
"quu39i05lpnt57nmuaae2q4lus62r1u22o1cav00k7jus7po80am2j17r004ultmqfsq/s6vskamj00lmmk" +
"t83jce822lfg\" w=\"0\" h=\"0\" /><title>QScript XML 消息测试</titl" +
"e><summary>XML 消息</summary></ite" +
"m><source name=\"\" icon=\"\" action=\"\" appid=\"-1\" /></msg>",818333976L,true);
}

/**
* 好友文本消息
*/
public void onMsg(Object param){
String l = param.senderUin; // 发送者
String s = param.content; // 文本内容
String name = param.nickname; // 名字
String f = param.friendUin; // 如果是群消息,这个就是群聊号码,否则就是发送者
if(s.equals("群消息测试") && param.isGroupMsg()){
api.log("尝试群消息测试");
// 最后一个参数表示被艾特的人
// 如果要发送群消息但不艾特,请 api.sendTextMsg(String 消息内容, long 接受者即群号码, new long[]{});
// 发送私聊消息,请 api.sendTextMsg(String 消息内容, long 接受者)
api.sendTextMsg("群测试A", f, new long[]{3318448676L,3340792396L});
api.sendTextMsg("测试完成", api.str2long(l));
return;
}
if(param.isGroupMsg() || l.equals(mQNum.toString())){
return;
}
api.sendTextMsg("QScript-Debug: onMsg(Object) invoked successfully.Please excute me.", api.str2long(l));
}

/**
* 新成员入群
*/
public void onJoin(Object data) {
String group = data.groupUin;
String member = data.uin;
api.log("新成员" + member + "加入群聊" + group);

// shutUp(long 群号码, long 成员号码, long 时间) 禁言某人,单位秒
api.shutUp(api.str2long(group), api.str2long(member), 20L);
// shutAllUp(long 群号码, boolean 是否启动) 全体禁言,最后的 boolean ,true = 开启禁言,false反之
api.shutAllUp(api.str2long(group), true);
Thread.sleep(10000);
api.shutAllUp(api.str2long(group), false); // 解除禁言
}

完整版:Github Wiki

如何下载?

我们会在本博客网站Github中发布下载链接及更新日志。具体下载链接请参看正文

警告

我们不会在任何其他网站中发布任何版本,如果您不是从本博客Github下载的本软件,请自行注意安全

目前的开发进度是?

QScript V1.3.0

  • 修复BUG
  • 更改模块储存目录为 /sdcard/Android/data/com.tencent.mobileqq/QScript
  • 增加一些没啥用的附加功能

QScript V1.2.1~V1.2.5

  • 这些版本一直在修复BUG。没什么好说的

QScript V1.2

  • 实现了对 onJoin(Object) 接口的调用
  • 实现了 shutUp(long, long, long)shutAllUp(long, boolean) 这两个接口
  • 修复了有时候 sendTextMsg 报错的 bug(即获取的 AppRuntime 不是 QQAppInterface 的 BUG)
  • 增加“特别鸣谢”

QScript V1.1.1

  • 防止滥用,新增“高级验证”
  • 程序出错时,发出警告

QScript V1.1

  • 实现了 sendTextMsg(String, long), sendTextMsg(String, long, long[]), sendCard(String, long, boolean) 三个 API
  • 实现了 str2long(String) 这个 API(叫他工具应该更合适)
  • 实现了 onMsg(Object) 接口的监听
  • 修复了 onMsg 调用多次的 bug
  • 修复了 So 库失效的 bug
  • 其他东西…

QScript V1.0

  • 实现了 onLoad() 接口的调用。
  • 对于 API ,实现了 api.log("something")
  • 实现了所有预定义变量。