QRSpeed-第3课时-第二节-变量-6

xiwangly

活捉一只老RBQ
管理成员
2020-02-27
95
72
18
争取在这一个帖子完结剩余的所有变量(所以这可能会导致本帖子篇幅较长),本帖接着"QRSpeed-第2课时-第二节-变量-5"来讲
函数(变量):
(关于"$.*$"类型的属于变量还是函数还有争议,目前更多得地认为它是函数)
注意有"
$"的开头的函数(变量)声明必须要有关闭符"$",即“有头有尾”。
函数默认是没有返回值的,你可以通过自定义变量实现有返回值,如"d:$访问 localhost/test.txt$",此时的变量"%d%"就是返回的值,详见QRSpeed-第1课时-第二节-变量-1
回调与调用:(注意调用的内容中变量不会被关联,即作用域只能在同一个词条函数中,你可以尝试读写操作来记录这个变量值(见下文))
$调用 1000 内容$-----------【调用一个文字(2条信息)】1000是延迟,单位毫秒,1秒=1000毫秒。后面的内容是调用的指令,格式如下
例如:$调用 1000 复$


第2条回复的内容

如:
代码:
call
call-first
$调用 1000 c$

[内部]c
call-second
正确的输出结果如图所示:1585213873836.png
$回调 内容$-----------【回调一个文字(1条信息)】没有延迟,也就是2段文字合在一起执行。被回调的文字前面还要加[内部]。
例如:$回调 回$

如:
代码:
call
call-first\r
$回调 c$

[内部]c
call-second
正确的输出结果如图所示:1585214112821.png
[内部]回
回调的内容
带有[内部]的不会被聊天直接触发,只能固定被调用或回调触发。
-----------回调和调用虽然差不多,但是不一样。调用也可以使用内部代码,但回调必须使用内部代码(原来这里的教程txt文档是有错误的,所以这里改为了正确的)

系统变量:
使用系统变量可以监测新人进群或者退群提醒等等,如
代码:
[系统]
如果:%Status%==33
欢迎大佬进群
返回
如果尾
代码:
[系统]
如果:%Status%==33
$回调 有人进群$
返回
如果尾
如果:%Status%==84
$回调 有人申请进群$
返回
如果尾
如果:%Status%==87
$回调 有人申请进群$
返回
如果尾

[内部]有人进群
如果:%QQ%!=%Code%
欢迎 %Inviteename%(%Code%) 邀请 %UinName%(%QQ%) 加入本群
返回
如果尾
欢迎%UinName%(%QQ%)加入本群
返回
如果尾

[内部]有人申请进群
%UinName%(%QQ%)申请加入本群
##
##2001同意 31拒绝
A:2001
##
##11同意 12拒绝
B:11
##
##拒绝理由 可以留空
C:空
$进群审核 %群号% %QQ% %A% %B% %C%$
"$进群审核"需要授权,并且需要管理员或群主,让机器人自己退群需要授权(感谢评论区的补充),更多系统变量待补充。

$退群 群号$
退群也要授权

%Status%等变量的补充:(本人亲自组织测试,测试开始时间2020/4/8 17:00(确实刚好是整点开始测试),分为多段测试,感谢艾伦(3300827628)试试逝世(1311826090)参与测试)
%Status%的值为82时,普通群内聊天消息⑥(有人申请进群也会为这个值)
%Status%的值为33时,.*加入了本群⑦|.*邀请.*加入了本群⑦
%Status%的值为34时,.*删除了你的好友(待验证)⑧
%Status%的值为84时,.*已退出.*|.*申请加入.*
%Status%的值为87时,.*申请加入.*(与上行加群方式不一样(待验证))
%Status%的值为0时,.*被踢出群聊⑤|(机器人获得管理员权限①)|(机器人失去管理员权限②)|部分仅自己可见的系统消息
%Status%的值为166时,普通好友状态私聊机器人消息③
%Status%的值为141时,普通非好友状态私聊机器人消息④

特别地,%Code%或%Uin%的值为"80000000"时或%UinName%的值为"匿名消息"时 ,为匿名聊天消息(与上文同时参与测试)
特别地,%Code%或%Uin%的值为"50000000"时或%UinName%的值为"坦白说"时 ,为(群内)坦白说消息
特别地,%Code%与%Uin%的值不同时,%Status%的值不为82,同时这个测试结果很奇怪,......还有一种情况是出现在已过滤的通知(群通知)那里的情况;还有一种情况是%Uin%与%Code%的值不同时(%Uin%先行,即主动为%Uin%,被动为%Code%),%Status%值为0。(为了测试这个我付出了巨大的代价啊!)
①此时的%Type%的值为27,且%Value%的值为1
②此时的%Type%的值为27,且%Value%的值为0
③此时的%Type%的值为1,如果是从非好友状态过渡到好友状态,则需要等待一小段时间刷新为这个值(%Type%原值为4)
④非好友状态不能发送xml和json卡片消息(后面会详细讲到),且%Type%的值为4
⑤此时的%Type%的值为26
⑥此时的%Type%的值为0
⑦此时的%Type%的值为3
⑧此时的%Type%的值为3

%Msgbar%为所有人在本群中的发言总数,也会累积机器人不在线的时候的,即使清空消息记录。

%Strmsg%为回调函数(失败时)后面紧跟着的内容(待验证)

%Pid%为词库词条清单值,一个词条(未被修改)对应一个ID。

%Skey%要开启授权skey才能获取到值,开启方法:打开QRSpeed-点击插件列表-长按你要允许授权的插件,然后把勾打上即可。请勿泄露skey或用于非法用途!
2020/4/19最近更新:
2020/4/19更新p_skey,(待补充)
2020/4/19 21:--更新%Json%变量,需要更新QRSpeed词库版本
2020/4/19 +?更新%FIMG0%变量

2020/4/22更新后,现在获取skey和pskey需要授权

%XML0%和%JSON0%变量
用于获取xml代码或json代码

%IMG0%和%FIMG0%变量
用于获取普通图片或闪照
常常配合±img=link±或±fimg=link±使用,如"±img=%IMG0%±"或"±img=%FIMG0%±"。

%撤回%输出撤回的消息(要授权)

由于更新的内容具有时效性等等,在此暂时不做详细说明,请下载豆子官方群的变量大全查看或在帖子底部的附件下载。

%Json%变量:(本小节涉及到后面的内容)
以JSON的形式返回pskey数组,同样的,这个变量也需要在插件中长按插件打上钩才可以获取到值。注意skey和pskey千万不可泄露!如图:
[\s\S]*(.*)[\s\S]*
Json:%Json%
主要用于提交数据对接腾讯相关功能,如QQ群,QQ空间,QQ游戏等等。

现在直接以文本形式返回pskey。(所以以上部分内容已经失效)

测试时使用的词库内容(部分):
代码:
[\s\S]*(.*)[\s\S]*
参数-1:%参数-1%\r
主人:%主人%\r
管理员:%管理员%\r
Robot:%Robot%\r
Type:%Type%\r
Status:%Status%\r
Value:%Value%\r
Number:%Number%\r
Groupid:%Groupid%\r
Code:%Code%\r
Uin:%Uin%\r
Adminuin:%Adminuin%\r
AT0:%AT0%\r
Time:%Time%\r
Msgbar:%Msgbar%\r
Pid:%Pid%\r
Reqid:%Reqid%\r
Skey:%Skey%\r
GroupName:%GroupName%\r
UinName:%UinName%\r
Adminame:%Adminame%\r
Inviteename:%Inviteename%\r
Title:%Title%\r
Strmsg:%Strmsg%\r
RobotAuth:%RobotAuth%
%BUB0%
用于获取气泡代码(2020/4/23更新),需要更新QRSpeed和QRSpeed词库,需要授权。

$管理员 %QQ%$
如果%QQ%匹配到了QRSpeed词库中的%管理员%变量,输出"%QQ%",否则输出"0"。

$撤回 %群号% %Msgbar%$
撤回上一条消息,要授权

加退群变量:(要授权)
$申请群 %括号1% %括号2%$(%括号1%为群号,%括号2%为理由)

退出群变量:(要授权)
$退出群 %括号1%$(%括号1%为退出的群号)

关键词前缀:(可能有误)
[内部]
作用:只能通过调用或回调触发。
[系统]
作用:监听群内系统消息。
[高级]
作用:部分需要授权,具体功能和包含的变量未知(待补充)
[退群]
作用:监测退群
[上下管理]
作用:监测%Value%的变化
[撤回]
作用:监测撤回

群管相关:
$禁 %群号% %QQ% 时间$-----------【机器人禁言】时间单位秒
如果时间为0则等价于解禁
$改 %群号% %QQ% 名片$-----------【机器人改名片】
"名片"换成要改的内容
$踢 %群号% %QQ%$-----------【机器人踢人】

全体禁言和全体解禁的例子:(判断条件可以改成其他的,需要授权(待验证))
代码:
全体禁言
如果:%QQ%==1334850101
$全体禁言 开 %群号%$
true
返回
如果尾
false

全体解禁
如果:%QQ%==1334850101
$全体禁言 关 %群号%$
true
返回
如果尾
false
转码相关:
$URLEncoder %括号1%$-----------【URL转码】用于接口提交符号
$URLDecoder %括号1%$-----------【URL解码】
有些时候带有中文的链接无法直接访问,所以需要转码
$HexEncoder %括号1%$-----------【Hex转码】
$HexDecoder %括号1%$-----------【Hex解码】
$MD5 %括号1%$----------【MD5加密】只有加密没有解密,貌似是大写的
MD5通常用于校验等等
URL编码-百度百科
十六进制-百度百科
MD5-百度百科

$执行 %括号1%$-----------【执行一段文字内的变量】通常用于接口带有变量的词库,配合访问使用。
A:$访问 http://xx.xx/1.php$
$执行 %A%$

执行语句常用在网络词库,使用执行语句参数不会以原文本形式输出,而是会读取并应用这些参数的内容。
如:(如果回复"执行 %QQ%"或"执行%QQ%",则机器人会回复发言者的QQ号)
代码:
执行 ?(.*)
a:$执行 %括号1%$
%a%
如果不使用执行语句,那么机器人会返回"%QQ%"。

$发送 群 ptt %群号% -1 音频地址$-----------【发送语音】支持音频格式mp3,acc,amr等,语音会格式自动识别,不过最多只能发1MB以内的音频。
"-1"代表?(待补充)
用于发送语音或私聊消息,如:(部分有授权限制:语音消息不可超过120s?(待验证),私聊消息不能发送图片)
语音
$发送 群 ptt %群号% -1 http://ml.lllix.com/Voice/music.amr$

私聊我
$发送 临时 msg %群号% %QQ% 内容$
发送函数更多参数说明:(待补充)
左数第一个参数:

临时
左数第二个参数:
ptt 发送语音消息
msg 发送私聊消息
xml 发送xml消息
json 发送json消息
true ?
false ?

$替换 € 原内容€内容1€内容2$-----------【替换文本,从原内容替换内容1成内容2】

$取中间 Э 原内容Э开头Э结尾$-----------【取中间,从原内容截取开头到结尾内容】

注意中间的分隔符都可以自定义,"€"和"Э"都可以改成其他的单个字符,且必须三个字符保持一致,不可为部分特殊字符;除非必要,否则这两个函数(变量)不能多出或者少掉任何空格。
在较旧的版本中,我们常使用这两个函数用于解析接口的json返回数据。

在后面更新的版本中,我们使用另一种方法解析接口的json返回数据:(了解json见JSON-百度百科
(假设这个接口"http://api.lllri.cn/storage.php?qq=1334850101&n=0&type="的输出是这样的:)
{"wallet":"4848","bank":"-4823.391"}
我们如果使用以下词条,
代码:
j
h:$访问 http://api.lllri.cn/storage.php?qq=1334850101&n=0&type=$
a:@h[wallet]
b:@h[bank]
%a%\r%b%
则会得到这样的回复:
1588479059628.png
基本格式:先使用访问函数并带上自定义变量,然后创建新的自定义变量并"@要提取json数据的自定义变量[对象的属性]",然后这个新的自定义变量会返回对象的值。如果要解析数组则嵌套下面的方案。(多维数组同理)

这是一个例子(旧的):(是我原创的)
代码:
(?i)pfile:// ?(.*)
a:$取中间 Э %参数-1%Эpfile://Э$
±img=%a%±
这个可以用于访问本地(挂机器人的设备)的图片,没钱买后台或者对接的话,那就可以使用本地的图床(后面的章节会详细讲到),这也是不错的选择,只不过是占空间而已。前面的"p"是为了区别图片和文件打上去的。
ping的例子(旧的):(接口来自第三方,接口返回为json的形式,需要截取内容处理,后面会讲到)
代码:
ping .*|Ping .*
f:$访问 https://xiaojieapi.cn/API/ping.php?url=%参数1%$
a:$取中间 Э %f%Эip": "Э"$
b:$取中间 Э %f%Эaddress": "Э"$
c:$取中间 Э %f%Эmsg": "Э"$
d:$取中间 Э %f%Эdelay": "Э"$
e:$取中间 Э %f%Эcode": "Э"$
目标:%参数1%\rCODE:%e%\rMSG:%c%\rIP:%a%\r地址:%b%\r时间:%d%\r
读写操作:(易错点
$写 教程/%群号%/测试 m 0$-----------【写入文本到/教程/%群号%/测试里】
本地记入数据必备
$读 教程/%群号%/测试 m 0$-----------【取文本:从/教程/%群号%/测试里取】
这里的最后一个0是数据的默认值,也就是说这个数据为空时会自动读/写这个值
注意:不要多出额外的空格及少掉任何一个参数,建议严格按照例子中的格式填写。
举个例子:
代码:
write (.*)
$写 text/text.txt %QQ% %括号1%$
%括号1%
如果我们在聊天框发送这个内容:
1585363089227.png
那么机器人会回复%括号1%的内容,同时把文件写入到text/text.txt,注意这里必须是一个相对目录(可以不用分级文件夹),即前面省略的是/storage/emulated/0/QR/QRDic/data/,此时写入的这个文件内部是这样的:
1585363303071.png1585363363852.png
最上面一行声明的是当前最新记录的日期和时间,它用"#"声明了这是一个注释,我们不需要管它。第二行就是我们记录的有效的内容,其中等号"="左边的是变量,右边的是
"$写 text/text.txt %QQ% %括号1%$"第一个空格后面填写保存路径(重复:保存路径必须是相对路径,文件可以没有格式,一般地,我们常规使用没有扩展名的文件或者.txt,.ini存储变量文件),第二个空格后面填写变量,第三个空格后面填写

同样地,我们也可以得出"读"的用法:
代码:
read
T:$读 text/text.txt %QQ% null$
%T%
一般地,要在$读前面定义自定义变量,以确保它可以正常读出,我在聊天中输入"read"这个内容,会得出以下结果:
1585364197105.png,此时机器人会回复自定义变量%T%,读取的变量是1334850101%QQ%,值是This is a text.,如果它读取失败,就会回复"T:$读 text/text.txt %QQ% null$"中第三个空格后面的值"null"。
更多关于读和写的详细内容请看各帖中的附件。

$删除 /QR/QRDic/data/……$-----------【删除文件,不能删除文件夹】

运算:(关于乘、除、取余等运算还有待补充)
对于运算需要先写入一个为"0"的值,这样在计算数值的时候才不会出错。
金:$读 教程/%群号%/金币 %QQ% 0$
$写 教程/%群号%/金币 %QQ% [%金%+1]$

-----------【这是加金币】读全部金币+1

金:$读 教程/%群号%/金币 %QQ% 0$
$写 教程/%群号%/金币 %QQ% [%金%-1]$

-----------【这是减金币】读全部金币-1

-----------读写目录在:根目录/Android/datacom.QR.QRDic/cache/QRDic/data/

关于签到等相关的实例(含词库)包含在机器人词库基础编写教程(QRSpeed、SQ通用).zip

词序:(本小节涉及到后面的内容)
很多人可能会问我的词库变得很长了以后,就总有一些没响应,这个很多都是词序问题。
优先级大概这样排:(dic.txt文本顺序)
这是一种方式:
1.不联网词库(就是完全不涉及到访问之类的函数)
2.弱联网词库(访问函数输出字符串较短的,以及网络小图片)
3.联网词库(访问函数输出字符串较中等的,以及一些网络图片或一般网络图片(评估标准?))
4.强联网词库(访问函数输出大量字符串与/或输出大网络图片,多网络图片(未授权最多3个图片))
这是第二种方式可以结合前面的:
匹配关键词的范围,由小到大排序
如:
代码:
say
Hello World

w|say_
Hello World

s
Hello World

.*
Hello World
"w|say_"即回复“”w"或"say_"都会触发关键词,类似这样的表达还有,"(菜单|功能|帮助)"或"菜单|功能|帮助",判断不同与此,有关判断的正则表达式请见上一节。

如果词库实在太长的话(>1MB),有时候总给排序也是没用的,这样的话目前也没有什么办法,只能等官方修复,尽可能的不要写那么长。

附件:
QR词库变量大全2.1(浮生).txt

翻页:
上一节
下一节

知识共享许可协议(CC BY-NC-ND 4.0)
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。
 

附件

最后编辑:

御坂10031号的灵魂

刚入坑的萌新
2020-03-19
65
28
18
好东西,得认真看?
补充几点
在QR中,全体禁言好像需要授权
QR中,可以发送长达2分钟的语音(至少吧,再长的我没试过)
进群审核未知,让机器人自己退群反正是要授权的
 
  • 支持
反馈: xiwangly

xiwangly

活捉一只老RBQ
管理成员
2020-02-27
95
72
18
好东西,得认真看?
补充几点
在QR中,全体禁言好像需要授权
QR中,可以发送长达2分钟的语音(至少吧,再长的我没试过)
进群审核未知,让机器人自己退群反正是要授权的
对,得认真看,尤其是有很多细节的东西。
 
  • 支持
反馈: 萌新_冷天

懒孩纸(*^ω^*)

刚入坑的萌新
2020-05-29
38
14
8
请问大佬,发送语音有没有方法调用本地音频啊?
自己试试呗。
绝对路径,
QR/QRDic/.* //相对路径
data/.* //不包括data,相对路径
就这三种可能的路径。
用函数
$发送 群 ptt %群号% -1 路径$
(我没用过)
 

懒孩纸(*^ω^*)

刚入坑的萌新
2020-05-29
38
14
8
自己试试呗。
绝对路径,
QR/QRDic/.* //相对路径
data/.* //不包括data,相对路径
就这三种可能的路径。
用函数
$发送 群 ptt %群号% -1 路径$
(我没用过)
太久没注意更新了(/捂脸)
±ptt 语音链接或者路径±
 

江竹在努力

活捉一只小RBQ
2021-08-12
1
0
1
我想问问大佬关于查金币改怎么写,我写的
查余额
c:$读 测试/金币系统/摩拉 %QQ% 0$
你现在有%c%的摩拉\n
但输出结果就是[0+a+b+...]的形式