你的第一个插件
注意
编写此文档时,GoneBot 版本为 v1.1.4
在这里,我们以 Echo 插件为例:
插件的主体是一个 plugin.GonePlugin 类型,你可以在全局使用 大驼峰命名法 定义它,并在 init() 方法中确定它字段的具体内容:
package echo
import (
"github.com/gonebot-dev/gonebot/plugin"
)
var Echo plugin.GonePlugin
func init() {
Echo.Name = "Echo"
Echo.Version = "v0.1.1"
Echo.Description = "计算机学说话"
}
接下来,需要定义插件的 Handlers 字段,它是一个 []plugin.GoneHandler 类型,包含一个或多个 plugin.GoneHandler 类型的元素:
Echo 插件只需要一个 plugin.GoneHandler,在 plugin.GoneHandler 中,我们需要定义该响应器的 Rule 和 Handler 字段,分别表示该响应器的消息筛选规则和响应函数:
package echo
import (
"github.com/gonebot-dev/gonebot/adapter"
"github.com/gonebot-dev/gonebot/message"
"github.com/gonebot-dev/gonebot/plugin"
"github.com/gonebot-dev/gonebot/plugin/rule"
)
var Echo plugin.GonePlugin
func init() {
Echo.Name = "Echo"
Echo.Version = "v0.1.1"
Echo.Description = "Reply the same message of what you have sent"
Echo.Handlers = append(Echo.Handlers, plugin.GoneHandler{
Rules: rule.NewRules(rule.ToMe()).And(rule.Command("echo")),
Handler: func(a *adapter.Adapter, msg message.Message) bool {
reply := message.NewReply(msg).Join(msg)
a.SendMessage(reply)
return true
},
})
}
我们先来看 Rules 字段:
Rules: rule.NewRules(rule.ToMe()).And(rule.Command("echo"))
Rules 字段可以由若干的规则构成,每个规则之间可以指定逻辑关系,收到的消息符合 Rules 中的规则,才会被传递给响应器。
Rules 字段的具体介绍由 响应器规则 给出。
接下来是 Handler 字段:
Handler: func(a *adapter.Adapter, msg message.Message) bool {
reply := message.NewReply(msg).Join(msg)
a.SendMessage(reply)
return true
}
Handler 字段是一个 func(a *adapter.Adapter, msg message.Message) bool,它接收的两个参数分别为 当前收到消息的适配器 和 当前收到的消息内容,它返回一个 bool 值,表示在该响应器处理完消息后,是否继续将消息传递给下一个响应器。
提示
响应器的响应顺序与插件的加载顺序以及插件中 plugin.GoneHandler 的编写顺序有关,排得越前,响应越早。
你可以使用 message.NewReply() 快速创建一个空响应,在 Echo 中,插件需要返回和原消息完全一样的内容,你可以使用 Join() 将消息的内容合并进响应中。
之后,你可以调用 a.SendMessage 将响应移交给适配器处理。
到这里,你应该已经完成了你的第一个插件的编写,恭喜你!接下来,你可以去详细了解 响应器规则,消息类型 和 适配器行为 的更多写法了!
