如何搭建一个聊天机器人?#6 铃心语法入门+签到示例

松本, Mitori 发布于 2025-10-08 345 次阅读


在上一章,我们成功安装了铃心自定义,并且设置了一些简单的自定义回复

这篇文章中我们将用铃心编写一些更复杂的自定义回复,达到更高级的功能——例如根据某些场景或者数据来让bot做出不一样的回复——比如签到功能

前置准备

由于铃心的回复编辑器使用起来体验感非常灾难......所以我们需要使用一个别的编辑器来方便我们后续编写自定义回复内容。

我们使用EPK编辑器,首先在教程交流群的群文件内下载EPK Editor压缩包,直接找一个方便的地方解压即可(建议是在自己使用的电脑上,因为编写的过程和服务器无关,我们把最后的结果放在服务器上即可)

压缩包内只有一个exe文件,打开即可

在EPK编辑器内编写铃心代码时,不同的板块会被染上不同的颜色,并且有很大的书写空间,会很大程度上方便我们的编写

由于历史遗留问题,我们现在暂时(?)无法直接用EPK编辑器调试我们写完的回复,所以我们可以在EPK编辑器内写一些可能引起混淆的长代码,然后将代码内容复制回铃心自定义中

了解语法

铃心自定义给我们提供了变量说明,里面对我们可以使用的一些变量及其使用方法做了详细的说明

点开页面我们会看到许多实心方头括号(【】)包裹的红色字,这些我们称其为变量(在铃心自定义内)

实际来说,他们更符合一般来说的函数的定义,鉴于官方文档将其称为变量,我们就姑且称为变量吧

而在某些变量中,我们会看到蓝色的“>=<”的符号,像一个颜文字,这个我们称其为分割符,在分割符的两边一般会有由中括号([])包裹的部分,这些我们称其为参数

参数与函数的概念和我们初中?高中数学中的参数与函数是类似的,函数(在这里是变量)执行一些功能,而参数会影响函数的执行结果

在铃心代码的写作中,我们要做的就是拼积木一样使用各种各样的变量,有时变量会要求我们填写一些参数,我们按照自己的需求和铃心提供的格式参考依葫芦画瓢就可以了!

尤其是在EPK编辑器中,我们可以在左侧找到自己需要的变量,双击即可插入右侧编辑框,我们只需要修改参数即可

来写一个签到程序吧

分析

在编写各种各样的回复之前,我们首先要大概打一个草稿,就像做题要先有思路、画画要先打草稿、写文要先有大纲一样:我们会分析一下一整个签到程序需要哪些功能、需要怎么样的回复

以常见的签到程序为例

  • 用户会发送“签到”(或者别的表示签到的关键词)来签到,然后bot会发送一些表示签到成功的语句、并在后台为用户的某项数值做一些增加——比如虚拟货币、好感度、积分等等
  • 如果用户在一天以内发送了第二次“签到”,那么bot应该会发送例如“你已经签到过了”之类的语句,并且后台不会发生任何数据变动
  • 用户可以发送“查询”,让bot发送现在积分/好感度的数值

大概会有以上这些功能,那么做完分析以后就来实际操作吧!

在以后独立完成一些功能的时候,也尝试写一下功能分析吧!

铃心为我们事先提供了一套可以做到上述第二条——也就是限制一天内回复的变量、以及相应的积分功能,不过这个功能与变量有一些限制,所以在接下来的教程里会提供两套方案,大家可以根据自己的需要选择使用哪套方案


方案一 使用铃心自带变量

实现签到

打开铃心的变量说明或是EPK编辑器的左边,我们在回复限制一栏中可以找到一个名为【一天上限】的变量,他的说明是这样的↓

也就是说,我们把这个变量放在回复中,就可以实现限制一天内只能签到一次的功能

而由于是一天内只能签到一次,所以应该把[次数]这一参数替换为1,比如我们可以这么写

【一天上限1】今天签到成功!

然而这么写我们会发现一个问题,我们只设定了签到成功的回复,没有设定签到失败的回复,怎么办呢?

这时我们打开铃心自定义的窗口,选择上方进阶设置,找到其他配置一栏

这里我们可以看到有一个单日上限回复,当用户触发了包含【一天上限】的回复并且超出设定的上限时,就会发送这里设置的回复,我们可以直接设置回复例如“今天你已经签到过了”之类,然后右下角保存即可

这个单日上限回复是通用的,也就是说,如果我们在一个非签到的部分中也使用了【一天上限】这个变量的话,bot就会很奇怪地回复一个“今天你已经签到过了”,所以在使用时必须考虑好这个上限回复是否可以满足所有的场景需求——这就是自带变量的限制

至此,一个非常简单的签到回复就做完了,完整的配置应该如下

给bot发送签到,可以看到

实现积分变化

在完成简单的签到后,我们现在开始完成签到增加积分这一功能

同样在铃心的变量说明中,在数据类一栏下,有一个叫做【积分】的变量,这一变量是铃心提供的积分功能,不用考虑数据具体会存放在哪里、怎么完成复杂的查询修改逻辑等等......铃心的积分会帮我们完成这些

积分的说明如下

铃心的积分是通用的,也就是说,如果我们在积分之外还想拥有一个好感度系统,就不可以再使用积分功能——这同样是自带变量的限制,如果你想要再增加好感度系统之类的,请参考方案二中的实现方法

在知道了有【积分】变量后,我们来修改签到的回复

根据我们提前做好的分析,我们需要在第一次签到后,为用户增加例如10点积分,那么我们可以这么写

【一天上限1】今天签到成功!积分增加【积分+10】

可以看到,我们并没有在回复中直接写明10这个数字,而是在变量的参数中写明了+10,这是由于积分的说明中写道,这个【积分+X】变量会返回对应的X——也就是说,在执行积分+10的操作后,这个变量在回复的显示上,会被替换为10这个数字

有些变量的说明中会提到,变量具有返回值,这个返回值即变量在完成执行某些操作后,最后会显示的结果。打个比方,我们在脑子里进行了一大堆的思考,最后会用嘴说出一个答案,思考的过程即变量的操作,而答案即返回值

有些人可能会担心——那签到失败的话,这个积分还会增加吗?答案是不会,因为铃心的代码是按顺序执行下去的,当执行到【一天上限】并发现已经达到上限时,就不会执行后面的部分,而是转向前面我们说的单日上限回复

现在我们的签到回复应该是这样的

在测试的时候用完了一天上限怎么办? 展开 / 收起

实现积分查询

了解了返回值的概念以后,我们就可以很轻松的实现查询的功能了

没有数值加减的单个【积分】变量的返回值就是当前用户的积分数值,所以我们可以直接把这个变量放在回复中,比如

你目前持有的积分为:【积分】

看看效果


方案二 自己实现积分模块

说是实现积分模块,其实这是一个普适的教程

我们会自己实现一个数据的加减、查询等等工作,这个数值可以是签到的积分,也可以是好感度等等,此处我们以积分为例,好感度编写同理,只需要修改数据名称为好感度、修改适当的回复即可

由于下面的教程难度会略微增加,最好对着变量说明看哦

二次分析

没有了【一天上限】这个变量,但我们仍然要实现这个功能——所以我们必须要更加细致地差分这个变量实际在做什么

实际上,【一天上限】这个变量完成了这样一套流程:

用户触发了包含【一天上限】的回复 → bot判断:今天触发过这个回复了吗?

→ 如果是,则回复一些文字,然后增加积分

→ 如果不是,则回复一些其他的文字,然后什么都不做

而怎么判断是否触发过这个回复呢?我们可以用一个文件来存储这个是否触发过这个回复,如果触发过就设定为1,如果没有触发过就设定为0

那怎么做到今天触发过这个回复,明天触发的次数就会清空呢?我们可以设置一个定时任务,每天清除所有用户的次数统计

有了上述的详细分析,我们就可以着手完成回复代码了!

实现签到

要实现“bot判断”这个动作,我们需要变量说明中比较判断一栏下的一些变量,它包含:

由于我们需要判断的东西是一个数值是否等于1,那么【判断】这个变量就刚好可以满足这一需求,我们来详细看一下【判断】需要哪些参数,以及我们都该如何填写这些参数

我们可以先不考虑实际是否可以使用、而是写一个参考,例如在签到这个功能中,它应该完成下面的工作

【判断[被比较文本:今天触发的次数]>=<[比较文本:1]>=<[不相同返回文本:一些文字+增加积分]>=<[相同返回文本:另一些文字]】【(让触发次数变为1)】

这时我们再来一个个看这些参数,首先是[被比较文本:今天触发的次数],在上文中我们说到,应该从文件里读取这个数值,而要实现文件读写,我们可以在变量说明中找到文件操作这一栏,它包含:

在此,我们使用【读配置】和【写配置】这两个变量,顾名思义,一个负责读一个负责写,在读取回复触发次数的时候,我们应该使用【读配置】,因为【读配置】的返回值正是我们需要的数值

——我们先插入一下对配置、配置项和配置节的讲解。如果把配置理解成一个图书馆的话,那么配置节就是配置图书馆中的一个某分类的柜子,配置项就是柜子中的一本书,书中对应一个信息

在签到功能中,我们可以创建一个后缀为.ini的配置文件,然后把一个配置节设定为“签到触发次数”,把配置项设为用户qq号,而对于每一个配置项,配置项的值就是次数

当然,积分也可以放在同一个配置文件下,然后设定一个配置节为“用户积分”,配置项同样为用户qq号,而配置项的值则是积分具体的数值——后面的教程中,我们将会用这种储存方式储存积分的数据

在了解了这些以后,我们便可以开始正式编写了!直接上代码

【判断【读配置G:Menthatutordatadata.ini>=<check>=<【发送者QQ】>=<0】>=<1>=<签到成功!积分增加10【写配置G:Menthatutordatadata.ini>=<point>=<【发送者QQ】>=<【计算【读配置G:Menthatutordatadata.ini>=<point>=<【发送者QQ】>=<0】+10】】>=<今天你已经签到过了】
【写配置G:Menthatutordatadata.ini>=<check>=<【发送者QQ】>=<1】

emm看起来似乎有点乱七八糟的,不过这就是我们EPK的魅力啊,我们来看EPK编辑器中染色过的版本,然后来一一讲解

最外层藏蓝色括号的部分是我们最开始讲解的【判断】的部分,我们已经把它做了拆解,来看里面的参数

作为[被比较文本:今天触发的次数]的替代,我们填写的是

【读配置G:Menthatutordatadata.ini>=<check>=<【发送者QQ】>=<0】

也就是图中第一个绿色括号的部分,其中——

  • 【读配置】的第一个参数是[文件路径],建议在bot目录下创建一个data文件夹来存放配置文件,配置文件叫什么都可以,这里叫做data.ini
  • 第二个参数是[配置节],也就是上面比喻中的书柜的部分,在此我们叫做check,也就是签到触发次数
  • 第三个参数是[配置项],我们将其设定为用户qq号,在此我们可以使用【发送者QQ】这个变量,它的返回值顾名思义是发送者的QQ号
  • 最后一个参数是[默认值],当用户已经有过签到的记录时,bot会自动在配置节下找到对应的qq号并读取签到次数;然而有可能这个用户一次都没有签到过,那么肯定默认是0次,所以此处我们填写0

由此我们便得到了[被比较数值:今天触发的次数]这个参数的值

对于[比较文本:1],我们直接填写了1,因为我们要和1这个数字作比较,直接填1即可(如果要把上限设成2,那么填写2,以此类推)

对于[不相同返回文本:一些文字+增加积分],我们要一边让bot发送信息,一边增加积分,我们填写的是

签到成功!积分增加10【写配置G:Menthatutordatadata.ini>=<point>=<【发送者QQ】>=<【计算【读配置G:Menthatutordatadata.ini>=<point>=<【发送者QQ】>=<0】+10】】

其中——

  • 前半段没有任何括号的部分,bot会原样发送出去,作为bot的回复。由于后面的【写配置】不像【积分】变量不具有返回值,所以这里我们必须自己写积分会增加10这个数字
  • 【写配置】的第一个参数是[文件路径],同【读配置】
  • 第二、第三个参数分别为[配置节]和[配置项],同【读配置】,不过由于这里我们控制的是积分的加减而非次数的加减,需要把配置节改为point(积分),配置项仍然是qq号
  • 第四个参数是[写入值],在这里我们又嵌套了一个很长的【计算】,在【计算】下又有【读配置】,原因是我们要做的是把现在的积分设定为原来的积分+10,所以要再读一次原来的积分,此处【读配置】的写法类似,可以自行阅读,最后不要忘记+10哦

对于[相同返回文本:另一些文字],我们不需要变量,直接写上自己想要的回复即可

最后,我们需要让签到触发次数设定为1,有了先前修改积分的经验,这次我们只需要【写配置】时直接将写入值设定为1即可

我们将代码放入铃心自定义,看看效果

实现每日清空签到次数

这次我们需要自己实现清空签到次数的功能,在上面的分析中我们想到,可以使用定时功能来实现每天清空次数,这里将介绍铃心的定时任务功能

打开铃心自定义,点击上方进阶设置,点击右侧定时任务

定时任务相当于一个虚拟的用户,会在某个指定的时间发送某个关键词,来触发bot的一些功能——也就是说,我们可以利用这个定时任务,写一些不会发送消息、只会执行任务的回复,这样就能定时实现一些功能了

我们来编写一个回复,用于完成每日清空签到次数,代码如下

【写配置G:Menthatutordatadata.ini>=<check】

看起来非常简单,并且似乎和上面的写配置的参数有所不同,我们去掉了[配置项]和[写入值]的部分,这样就可以直接清空check配置节下的所有内容,也就达到了清空所有人的当日签到次数的效果

接下来进入定时任务设置,我们将触发时间设置为0时1分,关键词就是“清空签到次数”,群号可以随便填写比如123456789之类的,不出意外的话到了第二天凌晨就会清空所有签到次数

如果觉得不放心的话,可以把触发时间设定为一个离现在较近的时间来测试,不要忘记保存哦

实现积分查询

同样,有了前面的铺垫,这次的查询也非常好写,直接读配置即可,不过不要忘记配置节是point而不是check哦

【读配置G:Menthatutordatadata.ini>=<point>=<【发送者QQ】>=<0】

这次,我们真正编写了一些比较复杂的功能,并且学习了两种编写同一套功能的方法,可以说比起一般的自定义回复更上了一层楼!

在编写bot回复中,分析功能是一个非常重要的环节,如果可以的话大家都一定要试着事先打好草稿,会减少非常多后续的工作量

这次的内容可能稍微有些难度,如果有问题同样欢迎在群内或者私聊提问~

此作者没有提供个人介绍。
最后更新于 2025-10-08