Download as pdf or txt
Download as pdf or txt
You are on page 1of 11

SQvz零编程基础小白入门教程——凌天2698595115

SQvz零编程基础入门教程
一.解释说明
1.软件与词库的关系
机器人软件可以把你的小号变成机器人 ,导入的词库则决定了机器人的具体内容。

2. 是否免费
软件授权:SQvz的授权不是必须买!不买也能用!买了软件授权只是可以在写词库的时
候使用更多高级函数,事实上,只用免费函数就可以写出各种各样有趣的机器人。很多小白
以为买了软件授权就是买了机器人,结果进了群发现还要辛苦找词库,有的词库还要买授权,
就认为自己被骗了,这种想法是错误的。

词库授权:有的词库作者会加上授权锁,意思是你需要付费购买授权才能使用他的词库,
所以软件授权和词库授权是分开的。但是没必要,自己写一个不更香吗?就算你懒得写,我
群里有许多免费词库,虽然有很多bug,但是筛选借鉴一些,也能缝合出一个像样的词库。

3. 如何导入词库到软件
首先在软件登录小号,在群列表打开需要机器人的群,在插件列表打开高级词库,在高
级词库页面点击下面的“+”号,选择“编辑词库”就可以开始编写你的机器人了。
但是在软件里编辑并不方便,强烈建议使用“mt管理器”,在
/storage/emulated/0/
路径下找到”dic.txt”文件,这就是词库所在,在里面编写即可,比较方
便。同理,你如果要导入现成的词库,就把名字改成”dic.txt”替换原来的就
ok了。

因SQvz并无官方教程(或者说不适合小白) ,所以我来编写此教程以供初学者参考 ,其中


有不少按我个人理解自创的术语(为了说人话,我几乎不用官方术语) ,所以不严谨的地方请
多多包涵。
——教程作者凌天,QQ2698595115 ,交流群号786954715(内含相关软件和资源)

———————————————————————————————————————
词库编写教程开始!
二、 一个语句块的结构

//这是第一个语句块 , 除了第一行是触发词(指令) ,剩下的则是运行的部分 ,包括选择语句


和操作。

你好 //这第一行是触发词,也就是你在群里发送这个词,会触发下面的代码,使其运行。
如果:xxxxx //条件语句,判断是不是满足冒号后的条件
你好啊
$xxxxxxxx$
返回
如果尾
xxxxx
$xxxxxxxx$
SQvz零编程基础小白入门教程——凌天2698595115

//直接发送文本的低级操作
//一些高级操作(函数)
//只要隔开就算重新开始下个语句块

国庆快乐 //这是第二个语句块的触发词
同乐 //这是第二个语句块的运行内容

注意:触发词如果相同,多个语句块同时被触发,只会执行排在最前面的语句块。

看完一个语句块的大致结构 ,我们来学习到底怎么写它,首先我们先了解一些
常用代码。(可以先跳到四,然后看不懂在回来看)

三 、 常用代码
1.参数,用来作触发词,匹配群友发言的
.* 通配符 代表任何消息(除了 QQ 系统消息)
@.* 代表艾特一个人(通配符的利用)
[0-9]+ 代表任意数字组合
[a-z]+ 代表任意小写字母组合
[A-Z]+ 代表任意大写字母组合
————————————————————————————————————————
#内部# 加在一个触发词前面 ,那么这个语句块就只能被机器人自己调用触发 ,群里无法触发
(调用我们后面讲,不急)
2.条件符号(与条件语句搭配)
== 两个等于号代表相等 ,用于条件语句
!= 表示不等于 , 同上
& 英文的 and,表示 并且 的意思,同上
| 表示 或 的意思(这个特别,也可以用作触发词,xx或xx都可以触发)

3.其他符号(懒得编名字了QAQ)
\r 让机器人在这里换行,不加这个符号可不会换行的~,换行符
\n 让机器人在这里换行,不加这个符号可不会换行的~,换行符
±at%QQ%@%昵称%± 艾特一个人(用作机器人的回复)
reply:%参数-1%±回复的内容± 机器人回复时用,%参数-1%获取回复人的所有内容
±img:图片直链± 发出图片链接里的图片 ,image 的缩写
[] 运算符,会计算出中括号里的算式结果,不能出现$
SQvz零编程基础小白入门教程——凌天2698595115

: 赋值符,一个英文冒号,可以将冒号右边的值赋予给冒号左边,使冒号左边的字符成
为一个变量 ,并存储这个值。

4.变量
你问我变量是什么?变量好比一个空盒子,里面装的东西可变,需要的时候
方便我们拿来用。
变量的形式为两个半角百分号,中间夹着变量的名字,
如 %a% %B% %你% %昵称% %QQ%
变量分为人造变量和系统内置变量,
人造变量是人们自定义(自定义变量的名字只能是一个字符)拿来使用的变量,
系统内置变量则是系统自带的有特殊含义的变量,可以直接拿来用不能再命名。

比如我们定义一个叫包(因为只能一个字)的变量,可以用来装钱。
包:521
那么现在%包%如果被机器人发出来的话,就是521,它属于人造变量。

好,暂且了解到这里,
我们先讲些能做出立
竿见影成品的东西,以
免劝退小白。
SQvz零编程基础小白入门教程——凌天2698595115

四. 基础操作
1.直接发送消息
你好 //触发词
你好呀 //发送“你好呀”这三个字

看懂了吗?第一行会触发下面的内容,机器人会发出下面的内容,这个用起来很方便简易,
可以做一些问答聊天。
若想发多行应如何写?直接往下换行写,机器人发出的结果会堆在一起,十分不美观。机器
人不认识你的换行,它只认识换行符号\r 或者\n,我们改良一下。

你好 你好
你好呀\r 或者 你好呀\r好久不见了
好久不见了 ,效果是一样的,都换行了。

若想发送的文本在变化怎么办?比如你想发送触发指令人的昵称,可它不是固定
不变的。这时需要引入我们刚才学到的变量。%昵称%是系统内置变量,存放触
发人的昵称。

你好
%昵称%,你好呀 如果是我发“你好”,那机器人就会发“凌天,你好呀”

道理我们懂了 ,那么我们就可以试着用更多系统内置变量和参数 ,如下:

%AT0% , 指触发词里被艾特人的QQ号,%AT0%是第一个被艾特人的QQ号,%AT1%
是第二个,以此类推,举例如下

@.* 用作触发词,来匹配带艾特的发言,见常用代码那节,也就是说 ,
以@开头的发言就会触发它。那么这条语句块下,%AT0%这个变量会存
放被艾特人的QQ号,举例如下。

@.* 你的QQ号是什么
让机器人告诉你吧,他的QQ号是%AT0% !

如果有人发送: “@凌天 你的QQ号是什么”,


那么机器人就会回复 “让机器人告诉你吧,他的QQ号是2698595115 !”

———————————————————————————————————————
%括号1% 以括号为间隔区分消息并匹配

你好(啊)(666) //你好啊 666 是触发词,括号机器人会略掉


%括号1%\r //这个变量会变成什么? 没错,是 “啊”
%括号2% //这个是“666”
———————————————————————————————————————
%参数1% 以空格为间隔区分消息并匹配

你好 啊 666 //你好 啊 666 是触发词


%参数0%\r //这个会指代“你好”
%参数1%\r //这个变量会变成什么? 没错,是“啊”
%参数2% //这个是“666”
SQvz零编程基础小白入门教程——凌天2698595115

———————————————————————————————————————

%robot% , robot大小写随意,获取机器人QQ号
%群号% , 得到群号
%QQ% , 得到触发人的QQ号
%昵称% , 得到触发人对应的昵称
%Title% , 得到发送消息者的群头衔
%Time%,类时间戳,指从1970年1月1日到现在所经历的总毫秒数,可以精准定位每一毫秒
%Code% , code变量,私发时用到,不用理解含义
%GroupName%, 存放群名
%主人% , 得到 SQvz 软件里设置的主人 QQ 号
%随机数x-X% 获取 x-X 范围的随机一个数字
%随机数a-z% 获取字母 a 到 z 内的随机一个字母
%时间 YYYYMMddHHmmssaaEE%,
获取规定格式时间YYYY 表示年 ,MM 表示月,dd 表示 日,HH 表示二十四小时计时法
的时,hh 表示十二小时计时法的时,mm 表示分,ss 表示秒, aa 表示上下午 , EE 表
示周几 , EEE 表示星期几 , %时间xx%需要哪些 , 里面的 xx 就放哪些。
%IMG0% , 获取图片 MD5,配合配套链接(加群获得)里可存取图, %IMG0%,%IMG1%
%运行时间% , 运行时间
%电池电量% , 电池电量
%可用内存% , 可用内存
%总共内存% , 总共内存
%Cpu利用% , CPU 利用
%网络类型% , 网络类型
%JSON% 、 %XML% , 获取 json 、 xml 卡片代码

以上比较常用 ,不作过多说明的一般你也用不到它。
2. 定义变量

赋值我们变量那节已经讲过,不再赘述。

3. 数组
排版比较乱哈,想到啥就写啥了。
[成员0,成员1,成员2,成员3] 形如这样的就是SQvz里的数组,中括号和逗号是它的标志。

@[成员0,成员1,成员2,成员3][成员序号] 这个就相当于从数组里取出指定位置的成员,
直接代表成员,跟变量类似。
比如我们可以整个抽卡功能

抽卡
@[xx卡,xx卡,xx卡,xx卡,xx卡,xx卡][%随机数0-5%]

其实就是在这个数组里随机指定一个序号,把这个序号对应的成员取出来发送。
SQvz零编程基础小白入门教程——凌天2698595115

五. 高级操作

//大部分高级操作都在两个$(dollar)符号的包围下运行,现例举出常用高级操作。
———————————————————————————————————————

1.$读 数据存储路径 键 默认值$ 从文件里读出数据,这一串就代表这个数据


2.$写 数据存储路径 键 写入值$ 向文件里写入数据

这里单独介绍下读和写,很重要。
机器人的文件数据都存放在手机的路径
/storage/emulated/0/Android/data/com.string.sqvz/files/DictionaryV8/data/里面,
打开一些被写入数据的文件我们发现数据以 xx=xx 的形式存在,类似Python里的字典,这
样方便我们取出数据,
等号左边我们称作键(key),右边称作值(value),读数据时只需要告诉机器人从哪个路径哪
个键读就可以了,键和值的配对便于我们管理玩家数据。

当我们向一个文件写入数据时,若没有此文件则会自动创建一个文件。
读就是拿,写就是放。
现在我们利用前面的知识举个例子方便理解。

给我钱 //这是触发词
钱:$读 金币 %QQ% 0$ //从金币文件里读出现在有多少金币,然后赋值给叫做钱的变量
好的,给你 100 金币。 //这里是基础操作,直接发送消息,告诉玩家给了金币。
$写 金币 %QQ% [%钱%+100]$ //将读出来的原先的金币数量加上100再重新放入金币
文件里。

//看不懂的话翻前面赋值符,赋值操作是不可见的,属于内部操作,机器人不会发出什么东西
的。
———————————————————————————————————————

3.$访问 API网址$ 附API大全索引网站 nanx.ltd


4.$替换 自定义符号例如a 原文本a要替换的文本a替换成的文本$
5.$取中间 自定义符号例如a 原文本a开始部分a结束部分$
6.$发送 群 msg/ptt/img 群号 内容$ 向一个群里发送内容
$发送 临时 msg/ptt/img %Code% QQ号 内容$
msg 是文本,ptt是语音(付费功能), img是图片
7.$禁 群号 QQ号 禁言时间$ 禁言时间按秒,无需写单位,时间少于60按60计算,0为解禁
8.$全禁 群号$ 全员禁言
9.$全解 群号$ 全员解禁
10.$踢 群号 QQ号$ 踢人
11.$改 群号 QQ号 新名字$ 改群名片
12.$调用 延迟毫秒 指令$ 延迟触发别的语句块的指令(也可以是自己所在语句块,自己
调用自己形成循环)
13.$随机数 最小值 最大值$ 这个和%随机数x-X%的区别在于,它的最大值或最小值也可
以是变量。
14.付费操作,需要购买程序授权。
$撤回 群号 消息ID$ 撤回消息
ptt:音频连接 可以让机器人发语音
还有群收款,加群验证,红包之类的,详情请看变量大全,本人没钱就不介绍了,嘿嘿。
SQvz零编程基础小白入门教程——凌天2698595115

六. 双路选择语句
控制语句可以控制代码运行的走向,一般是顺序结构,SQvz里没有循环语句,只
有双路选择语句,结构如下:

如果:条件 //满足条件,则执行一堆操作1,否则跳到一堆操作2进行执行。
一堆操作1
返回
如果尾 //意思是如果语句的结尾,比如易语言里有计次循环首和尾
一堆操作2

这种结构可以多层,形成多层判断,形成很多分岔口,我想你应该明
白了。
条件只会是两种值,0或非0
条件若成立则为真,则非0;
条件不成立则为假,则为0.

举个例子,1==2 这个条件语句的值是多少?因为1不等于2,所以是假
那么值就是0
&符号连接两个语句,表示并且,只有这两个语句都为真时才是真,否
则为假。
|符号表示或,两个语句中有一个为真则为真。

举个例子,
条件 5>7&5>4 的值是0,虽然5大于4是真但是5大于7是假,有一假则
整体为假。
5==5|6==7 的值是 1,有一个是真则整体为真。
知道了条件,那么我们看一下怎么配合如果语句使用,还举这个例子。
给我钱
如果:%QQ%==2698595115
钱:$读 金币 %QQ% 0$
好的,给你 100 金币
$写 金币 %QQ% [%钱%+100]$
返回
如果尾
你不是凌天,不给金币

如果这个条件语句为真, 说明 QQ 号等于我的QQ,那么执行下面加金币的操作
运算符没忘吧?
SQvz零编程基础小白入门教程——凌天2698595115

如果上面的条件语句值为0 ,也就是假,那么执行如果尾后面的操作

抛砖引玉,这个条件你可以设置的花里胡哨,比如利用随机数使它成为一个概率事件,就比
如这个
%随机数1-10%<5 这个条件为真的可能性是40%(尽管系统给的随机变量永远不是真正的
随机)

菜单
如果:$读 授权 a 未授权$==未授权 //a是我常用的键名
你的机器人还未授权
返回
如果尾
如果:$读 开关机 a 关机$==开机
我是菜单内容
返回
如果尾
机器人还未开机

七. 常用功能写法举例
都是我个人比较喜欢的写法,有更好的思路可以向我投稿。

1. 设置机器人的管理员
添加管理员@.*|加管理员@.*
表:$读 管理员表 a 管理员表\r$
如果:%QQ%==%主人%
祝贺机器人的新管理%AT0%上任!
$写 管理员 %AT0% 1$
$写 管理员表 a %表%%AT0%\r$
返回
如果尾
你无权操作
SQvz零编程基础小白入门教程——凌天2698595115

删除管理员@.*|删管理员@.*
表:$读 管理员表 a 管理员表\r$
如果:%QQ%==%主人%|%QQ%==2698595115
管理员%AT0%被炒了~
$写 管理员 %AT0% 0$
改:$替换 @ %表%@%AT0%@$
$写 管理员表 a %改%$
返回
如果尾
你无权操作

不知各位看懂我的思路没,在管理员文件里以每个人的QQ号作为键,
读取对应的值,1就是管理员,0就不是,当然你也可以写中文。
管理员表我利用了替换和补写,把之前的表读出来,往后添加新管理
员然后把新的管理员表写进去。

2. 开关机
开机
如果:$读 管理员 %QQ% 0$==1|%QQ%==%主人%
开机成功!
$写 %群号%/开关 a 1$
返回
如果尾
你不是我的主人,无权操作

关机
如果:$读 管理员 %QQ% 0$==1|%QQ%==%主人%
关机成功!
$写 %群号%/开关 a 0$
返回
如果尾
你不是我的主人,无权操作

不知各位看懂我的思路没,因为想要每个群一个开关,所以我按群号
为路径分开了开关文件,然后在开关文件写入1或0代表开机或者关机,
你也可以用汉字,个人习惯而已。为什么用”a”作键呢?因为就这个
功能而言,不需要在细分了,懒得想名字所以就用“a”了,哈哈哈
另外要判断发送人是不是管理员,这里的判断与上面我写的设置管理
员相对应,读出管理员文件的值看看这人有没有资格开关机。

3.涉及数据运算的功能(以充值功能为例)
SQvz零编程基础小白入门教程——凌天2698595115

充值 [0-9]+ [0-9]+ //格式为:充值 QQ 金额


如果:%QQ%==%主人%|$读 管理员 %QQ% 0$==1
金:$读 金币 %参数1% 0$
@%昵称% 已为用户%参数1%充值%参数2%金币!
$写 金币 %参数1% [%金%+%参数2%]$
返回
如果尾
想得美

不知各位看懂我的思路没,因为我想金币在各群流通,所以并没有加
群号路径细分,[0-9]+匹配所有数字,不是数字不触发,防止有人用汉
字充值,导致运算错误,卡bug无限充值(我群黑历史)
先读出原先的金币数量,然后赋给一个叫”金“的变量,再把参加过
加法的新结果写进金币文件。为什么要搞个新变量呢?为什么不这样
呢?
[$读 金币 %参数1% 0$+%参数2%]

因为运算符里不能用$啊

4.通配符的应用
.*
如果:$读 %群号%/生命 %QQ% 2500$<0
%昵称% 已死亡,请尽快凑钱复活
$禁 %群号% %QQ% 60$
返回
如果尾
如果:$读 %群号%/问答内容 %参数0% 0$==0
返回
如果尾
$读 %群号%/问答内容 %参数0% 0$

这里你可能看不懂,涉及我群的修仙游戏,默认生命是2500,小于0再
发言的话就要被禁言。触发词是通配符,也就是说无论你说什么都会
匹配上并触发它,这里要注意,因为都能触发它,所以这个语句块要
放在词库最后,不然会覆盖后面的指令。
问答功能是我用来教机器人说话的,便于在QQ里添加问答,这里先读
取了一下被回复的内容有没有在我的问答里,如果有的话就发出来预
先设定好的回答,如果没有就什么都不做。

就这些吧,更多写法自己慢慢研究吧,借鉴别人词库可以打开眼界。
SQvz零编程基础小白入门教程——凌天2698595115

希望这个教程可以激发你对编程的兴趣,进而去学习更高级更正规的语言,编程
思想大同小异,只要学会一门就可以很快入手别的编程语言。

——第一次修订于2022.1.23 夜

——第二次修订于2022.1.30 午

You might also like