[TOC]
# 脚本`Script`
`Script` 脚本并没有提供太多开箱即用的脚本,除了一个`help`脚本,其他的需要开发者根据自己的需求去开发。
**help脚本用法**:
`!help <script>`:查看脚本帮助信息,当命令不带脚本名称时会列出所有脚本帮助信息,带脚本名称只列出此脚本的帮助信息
## 编写脚本
> 在框架下的 `scripts` 文件夹下有复杂应用案例,以下为脚本的简答介绍
### hello world
```go
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`定义了一个完整的脚本结构,具体如下:
```go
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`附加到消息中。
`规则名称`和`正则匹配参数`的获取方法为:
```go
...
...
func setup(bot *rboot.Robot, in *rboot.Message) []*rboot.Message {
rule := in.Header.Get("rule") // 规则名称
args := in.Header["args"] // 正则匹配参数
...
...
}
```
**Usage**:脚本的使用说明
**Description**:脚本简介
## 发送消息
发送消息除了在脚本函数中返回消息,也可以使用 `SendText` 和 `Outgoing` 方法
使用方法:
```go
// SendText 为发送文本消息,需指定接收人
bot.SendText("Hello World!", "zhangsan")
// Outgoing 为发送消息结构体
msg := &rboot.Message{...}
bot.Outgoing(msg)
```