Proxy文档
# Proxy文档
提供:统一插件配置管理、关系型数据库、K-V数据库、定时任务、插件用户级锁、调用限制器。
位于manager/proxy.go文件,注释也比较详尽,尽量参阅注释吧。
# 统一插件配置管理
所有插件配置收归到config-plugin.yaml文件,通过proxy.AddConfig
函数,会自动添加一个配置项;通过proxy.GetConfig
系列函数,可以获取该插件的指定配置项值。
例子
在echo插件的init函数中调用proxy.AddConfig("times", 3)来新增一个配置项,会在config-plugin.yaml文件中自动添加一个echo.times
配置项,默认值为3。
在echo插件的EchoHandler中调用proxy.GetConfigString("times")来获取echo.times
配置项的值,并自动转为string类型。
# 关系型数据库
派蒙Bot已经初始化好了一个数据库连接,直接通过proxy.GetDB()
即可获取一个已建立连接的*gorm.DB
,直接CURD即可。
gorm文档:gorm (opens new window)
注意!若想在单独的model.go文件init函数中初始化即AutoMigrate
一个model,请不要使用proxy.GetDB()
,因为此时proxy可能还没有被初始化,可以这样进行代替:
import (
"github.com/RicheyJang/PaimengBot/manager"
log "github.com/sirupsen/logrus"
)
type SomeModel struct {
ID int `gorm:"column:id;primaryKey"`
Value string
}
func init() {
err := manager.GetDB().AutoMigrate(&SomeModel{}) // manager包全局提供了一个已初始化好的*gorm.DB,专门用于AutoMigrate
if err != nil {
log.Errorf("[SQL] SomeModel 初始化失败, err: %v", err)
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# K-V数据库
派蒙Bot使用goleveldb
作为K-V数据库,通过proxy.GetLevelDB()
即可获取一个已初始化好的*leveldb.DB
。
goleveldb仓库:Github (opens new window)
# 定时任务
想每天2点班执行某个任务?想每隔30秒执行某个任务?想在2分钟后执行一次某个任务?想在每个月1号的13点执行某个任务?
派蒙Bot的proxy提供了一系列定时任务相关函数,收归统一管理:例如可以通过PluginCondition的Disabled方法关闭该插件所有定时任务。
// AddScheduleFunc 添加定时任务,并自动启动: spec为一个标准cron表达式
func (p *PluginProxy) AddScheduleFunc(spec string, fn func()) (id cron.EntryID, err error)
// AddScheduleEveryFunc 便携添加定时任务,固定时间间隔执行,duration符合time.ParseDuration
func (p *PluginProxy) AddScheduleEveryFunc(duration string, fn func()) (id cron.EntryID, err error)
// AddScheduleDailyFunc 便携添加定时任务,每天hour:minute时执行
func (p *PluginProxy) AddScheduleDailyFunc(hour, minute int, fn func()) (id cron.EntryID, err error)
// AddScheduleOnceFunc 便携添加定时任务,在等待period(period<1年)时长后执行仅一次
func (p *PluginProxy) AddScheduleOnceFunc(period time.Duration, fn func()) (id cron.EntryID, err error)
// DeleteSchedule 删除指定id定时任务
func (p *PluginProxy) DeleteSchedule(id cron.EntryID)
2
3
4
5
6
7
8
9
10
# 其它
TODO