Proxy文档

RicheyJang ... 2022-1-29 大约 2 分钟

# 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)
	}
}
1
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)
1
2
3
4
5
6
7
8
9
10

# 其它

TODO

上次编辑于: 2022年3月4日 12:33
贡献者: RicheyJang