• 进群密钥:www.lolichan.vip

QRSpeed-第3课时-第三节-判断语句

xiwangly

活捉一只老RBQ
管理成员
2020/02/27
95
72
18
(本条目需要您帮助我们完善内容)
其实还有一些变量没讲完,由于判断语句的重要性不得不先讲这个,更多变量你可以尝试看那个附件上的变量大全。
如果你想要了解
众所周知判断语句是出错率相当高的(我就曾经犯过很多),所以这一点我会着重来讲。
首先引用一个最基础的判断语句例子:(这里的if作为关键词,并不是固定要这样使用)
if
如果:%QQ%==1001
true
返回
如果尾
false
这个的意思是什么呢?如果QQ号为1001的用户发送"if",则机器人会回复"true",如果不是QQ号为1001的用户发送if,则机器人会回复"false",如图:(显然我们的QQ号不是1001,所以会得到false结果)
1585361976562.png
注意表达等量关系须使用全等号"=="而不是"=",全等号顾名思义就是全匹配,后面接的值不需要百分号"%",除非右边的也是一个参数
"如果:"后面转行的接的就是匹配成功返回的内容,"如果尾"转行后面接的就是匹配失败返回的内容。
使用正则表达式的判断:
正则:%参数1%==http://.* --------验证地址前缀(http),支持正则表达式,例如[0-9]+ [a-z]+ 等等
[0-9]+ ----------- 匹配数字

[a-z]+ ----------- 匹配字母

[\s\S]*(.*)[\s\S]* ----------- 匹配所有字符,任何命令的执行

嵌套(多层)判断的例子:
需要注意的是,判断范围更窄的需要优先放在前面,否则可能会导致本应该匹配到范围更窄的判断却匹配到了范围更广的。
代码:
if
如果:%QQ%==1001
true
返回
如果尾
如果:%QQ%==1000
true
返回
如果尾
false
我们再来看一个例子:
代码:
开机|/set f T
权:$读 lydata/dic/希望LY/希望的词库/%群号%/user.ini u1 fe1$
一:$读 lydata/dic/希望LY/希望的词库/%群号%/user.ini u2 fe2$
二:$读 lydata/dic/希望LY/希望的词库/%群号%/user.ini u3 fe3$
如果:%QQ%==%权%|%QQ%==%一%|%QQ%==%二%
$写 lydata/dic/希望LY/希望的词库/%群号%/总开关.ini i1 T$
开机&切换娱乐环境成功!
返回
如果尾
权限不足!
//$调用 0 help$

使用说明|说明|说明书|帮助|help|/help
要授权请先在主程序中写入主人QQ号,然后再回复 载入授权 ,这样机器人就听命与你了,然后再请主人回复 开机 ,即可开始使用!(简化步骤:设置主人-回复 载入授权-回复 开机)本机器人词库获得者可使用全部功能!\r符号"|"表示或者,例如 菜单"|"功能 ,即回复菜单或者功能都可以触发等效的命令。
\r目前机器人有两种运行模式,娱乐模式和工作模式。(简化步骤:设置主人-回复 载入授权-回复 工作模式)
这个是我自己开发的中的词库截取出来的内容,不要看着一大串的就怕了,可以尝试一对一的解读,我干脆直接省掉调用(仅仅展示调用),所以在这删除线标出(好像本论坛的删除线功能有问题),如果你不想把你想要调用的东西被人单独触发,你可以在这个调用的关键词最前面加上[内部]关于读和写的使用后面的帖子会讲到

逻辑关系(运算符):(PHP的部分比较方法也适用于此,有别于C/C++)
"&"为与
如:(即两个条件都满足时输出true,否则输出false,本例要满足QQ号为1001的用户发送if且时间为2020(年),才能回复true)
if
如果:%QQ%==1001&%时间yyyy%==2020
true
返回
如果尾
false
"|"为或
如:(即两个条件只需满足其中任意一个条件时输出true,否则输出false,本例要满足QQ号为1001的用户发送if或满足时间为2020(年),才能回复true)
if
如果:%QQ%==1001|%时间yyyy%==2020
true
返回
如果尾
false
"!"为非
如:(即不满足这个条件时输出true,否则输出false,也就是结果刚好反向了,本例要QQ号不为1001的用户发送if,才能回复true)注意例子中感叹号"!"的位置"!=",如果符号反过来使用,则是另一种罕见的用法,这里暂且不提。
if
如果:%QQ%!=1001
true
返回
如果尾
false
"^"为异或

"&&"为双与

"||"为双或

使用"判断:"还是"正则:",取决于你想要的作用域。区别是正则表达式是否直接参与判断
更多见QRSpeed-第9课时-第九节-正则表达式

如:
代码:
输入 .*
正则:%参数1%==[0-9]+
true
返回
如果尾
false(你输入的不是一段数字)

其他例子:
代码:
正则 (.*) (.*)
正则:%括号1%==%括号2%
OK
返回
如果尾
NO

测试
正则:ll==.*
OK
返回
如果尾
NO
这是一个我原创的艾特的例子,判断还可以加上远程词库等等:
代码:
[\s\S]*(.*)[\s\S]*
正则:%AT0%==1334850101
@%昵称% 你在艾特本群最帅的人知道吗?
返回
如果尾

补充:(感谢评论区,部分用法待补充,划掉的即错误的或不可用的用法,可能有部分机型不支持显示中划线)
"="等于
"=="全等于,即判断两个字符串是否相等
"==="绝对等于
"!="不等于
"<>"不等于
"!=="绝对不等于
"=!"

"<"小于(值∈Z)|(值属于整数)
">"大于(值∈Z)|(值属于整数)
"<="小于等于(值∈Z)|(值属于整数)
">="大于等于(值∈Z)|(值属于整数)
"=<"小于等于(值∈Z)|(值属于整数)
"=>"大于等于(值∈Z)|(值属于整数)
"<<"远大于
">>"远小于


参考:
正则表达式-菜鸟教程
正则表达式-百度百科
运算符-百度百科(仅部分有用)
整数-百度百科

翻页:
上一节
下一节

知识共享许可协议 (CC BY-NC-ND 4.0)
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。
 
最后编辑:
2020/04/23
4
0
1
为什么我用的&是逻辑或,丨就没效果
就像这样

如果:%群号%==123&%群号%==456
成功
返回
如果尾
失败

这样就在两个群都生效,类似分隔符的效果
 

xiwangly

活捉一只老RBQ
管理成员
2020/02/27
95
72
18
为什么我用的&是逻辑或,丨就没效果
就像这样

如果:%群号%==123&%群号%==456
成功
返回
如果尾
失败

这样就在两个群都生效,类似分隔符的效果
另外,目前qr仅支持整数和字符串判断,不支持浮点数的大小判断等等,这在两个群都生效的话,那可能是群号这个变量的问题了