脚本Script
Script
脚本并没有提供太多开箱即用的脚本,除了一个help
脚本,其他的需要开发者根据自己的需求去开发。
help脚本用法:
help
脚本提供了两挑命令:
-
!help <script>
:查看脚本帮助信息,当命令不带脚本名称时会列出所有脚本帮助信息,带脚本名称只列出此脚本的帮助信息 -
!ruleset <script>
:查看已经注册的脚本规则集,使用方法同上一个方法
编写脚本
在框架下的
scripts
文件夹下有复杂应用案例,以下为脚本的简答介绍
hello world
package main
import "github.com/ghaoo/rboot"
func init() {
// 注册脚本
rboot.RegisterScripts(`hello`, rboot.Script{
// 脚本处理函数
Action: func(bot *rboot.Robot, incoming *rboot.Message) []*rboot.Message {
return rboot.NewMessages("Hello World!")
},
Ruleset: map[string]string{`hello`: `^hello`}, // 脚本规则集
Usage: "hello`: say hello world",
Description: `example 'Hello World' script for rboot`,
})
}
这就是一个简单的 hello world
脚本,在我们安装中创建的项目下创建一个 hello.go
文件,并将上面的代码复制进去,重新编译运行,输入 hello
试试看。
脚本剖析
rboot.RegisterScripts
RegisterScripts
方法是用来注册脚本的,它需要两个参数,脚本名称和一个包含脚本信息的rboot.Script
rboot.Script
Script
定义了一个完整的脚本结构,具体如下:
type Script struct {
Action SetupFunc // 脚本解析函数
Ruleset map[string]string // 脚本规则集合
Usage string // 脚本帮助信息
Description string // 脚本简介
}
Ruleset
脚本规则集合,规则匹配器支持脚本包含多条匹配规则,一个脚本可以定义一系列规则,我们可以把一个脚本扩展成一类功能的脚本集。
SetupFunc
SetupFunc
是脚本的解析函数,它有两个参数,Robot实体*Robot
和 传入消息(incoming)*Message
,输出为 []*Message
,在此方法里,我们可以利用Robot实体和传入消息实现我们想要的功能。
输出消息为 []*Message
,方便一次发送多条消息。
在消息转接器将消息(Incoming Message)发送给机器人,并经过规则匹配器找到匹配的脚本后,机器人会把消息发送给脚本处理函数,并将脚本的规则名称
和正则匹配参数
一并通过Header
附加到消息中。
规则名称
和正则匹配参数
的获取方法为:
...
...
func setup(bot *rboot.Robot, in *rboot.Message) []*rboot.Message {
rule := in.Header.Get("rule") // 规则名称
args := in.Header["args"] // 正则匹配参数
...
...
}
Usage:脚本的使用说明
Description:脚本简介
发送消息
发送消息除了在脚本函数中返回消息,也可以使用 SendText
和 Outgoing
方法
使用方法:
// SendText 为发送文本消息,需指定接收人
bot.SendText("Hello World!", "zhangsan")
// Outgoing 为发送消息结构体
msg := &rboot.Message{...}
bot.Outgoing(msg)