Skip to content
This repository has been archived by the owner on Nov 26, 2024. It is now read-only.

Latest commit

 

History

History
89 lines (60 loc) · 2.59 KB

FRAMEWORK.md

File metadata and controls

89 lines (60 loc) · 2.59 KB

为DDBOT编写插件

阅读这个内容需要一定的开发能力。

文档地址: GoDoc

为DDBOT编写插件的基本步骤为:

  • 通过concern.StateManager,实现concern.Concern接口
  • init()函数中进行注册
  • main中引入刚刚编写的包

DDBOT提供了一个插件脚手架,可以快速创建一个插件模版:DDBOT-template

在编写插件前,请先阅读一个示例插件:DDBOT-example

示例插件展示了为DDBOT编写插件的方法。

// 引入刚刚编写的插件
import (
    _ "github.com/Sora233/DDBOT-example/concern"
)

这个例子为网站example新增了一个类型example,可以使用对应的watch命令进行订阅:

/watch -s example -t example ID

使用unwatch进行取消订阅:

/unwatch -s example -t example ID

使用list进行查看订阅:

/list

一些开箱即用的组件

示例代码为了简洁,均忽略错误处理,在实际编写代码的过程中,请注意错误处理。

在编写插件的过程中,第一步通常是创建新的StateManager,下面的示例均基于这个结构:

type StateManager struct {
    *concern.StateManager
}
var s *StateManager = ... // 初始化

持久化

在编写插件的过程中,总会遇到想要存储一些数据的需求,DDBOT默认提供了一个key-value数据库可以使用,支持串行事务,key ttl,并且已经包含在StateManager中:

s.SetInt64("myInt64", 123456) // 即可往数据库中设置kv对 "myInt64" - 123456 
v, _ := s.GetInt64("myInt64") // 获取刚刚写入的值
// v == 123456

// 还有 s.SetJson() s.Set() 等更多方法

还有更多方法请参考buntdb/shortcut.go

轮询器

当订阅网站暂时没有发现比较高效的爬虫方式时,我们只能选择不断地依次访问每一个订阅目标的特定页面来获取目标是否有新信息,这种方式叫做轮询。

DDBOT内置了一个轮询器来满足这种方式:

// 首先需要启动 EmitQueue 轮询器
s.UseEmitQueue()
// 然后可以使用轮询器提供的helper创建一个 FreshFunc
s.UseFreshFunc(s.EmitQueueFresher(func(p concern_type.Type, id interface{}) ([]concern.Event, error) { 
    // id 是此时轮到的目标信息,此时可以刷新这个目标
    // p是id所有订阅过的Type的集合
}))

更多文档正在施工中。