mirror of
https://github.com/Mrs4s/go-cqhttp.git
synced 2025-05-04 19:17:37 +08:00
feat: multi database support - multi db wrapper.
This commit is contained in:
parent
28078d9c8e
commit
a56e70d07c
12
coolq/bot.go
12
coolq/bot.go
@ -107,16 +107,14 @@ func NewQQBot(cli *client.QQClient, conf *config.Config) *CQBot {
|
|||||||
_ = node.Decode(lconf)
|
_ = node.Decode(lconf)
|
||||||
enableLevelDB = lconf.Enable
|
enableLevelDB = lconf.Enable
|
||||||
}
|
}
|
||||||
|
multiDB := db.NewMultiDatabase()
|
||||||
if enableLevelDB {
|
if enableLevelDB {
|
||||||
level := db.UseLevelDB()
|
multiDB.UseDB(db.UseLevelDB())
|
||||||
if err := level.Open(); err != nil {
|
}
|
||||||
|
if err := multiDB.Open(); err != nil {
|
||||||
log.Fatalf("打开数据库失败: %v", err)
|
log.Fatalf("打开数据库失败: %v", err)
|
||||||
}
|
}
|
||||||
bot.db = level
|
bot.db = multiDB
|
||||||
log.Info("信息数据库初始化完成.")
|
|
||||||
} else {
|
|
||||||
log.Warn("警告: 信息数据库已关闭,将无法使用 [回复/撤回] 等功能。")
|
|
||||||
}
|
|
||||||
bot.Client.OnPrivateMessage(bot.privateMessageEvent)
|
bot.Client.OnPrivateMessage(bot.privateMessageEvent)
|
||||||
bot.Client.OnGroupMessage(bot.groupMessageEvent)
|
bot.Client.OnGroupMessage(bot.groupMessageEvent)
|
||||||
if conf.Message.ReportSelfMessage {
|
if conf.Message.ReportSelfMessage {
|
||||||
|
@ -72,10 +72,6 @@ type (
|
|||||||
PrevGlobalID int32 `bson:"prevGlobalId"`
|
PrevGlobalID int32 `bson:"prevGlobalId"`
|
||||||
QuotedContent []global.MSG `bson:"quotedContent"`
|
QuotedContent []global.MSG `bson:"quotedContent"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// MultiDatabase todo
|
|
||||||
MultiDatabase struct {
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// ToGlobalID 构建`code`-`msgID`的字符串并返回其CRC32 Checksum的值
|
// ToGlobalID 构建`code`-`msgID`的字符串并返回其CRC32 Checksum的值
|
||||||
|
68
db/multidb.go
Normal file
68
db/multidb.go
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
package db
|
||||||
|
|
||||||
|
import "github.com/pkg/errors"
|
||||||
|
|
||||||
|
// MultiDatabase 多数据库支持
|
||||||
|
// 写入会对所有 Backend 进行写入
|
||||||
|
// 读取只会读取第一个库
|
||||||
|
type MultiDatabase struct {
|
||||||
|
backends []IDatabase
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewMultiDatabase(backends ...IDatabase) *MultiDatabase {
|
||||||
|
return &MultiDatabase{
|
||||||
|
backends: backends,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *MultiDatabase) UseDB(backend IDatabase) {
|
||||||
|
db.backends = append(db.backends, backend)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *MultiDatabase) Open() error {
|
||||||
|
for _, b := range db.backends {
|
||||||
|
if err := b.Open(); err != nil {
|
||||||
|
return errors.Wrap(err, "open backend error")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *MultiDatabase) GetMessageByGlobalID(id int32) (IStoredMessage, error) {
|
||||||
|
if len(db.backends) == 0 {
|
||||||
|
return nil, errors.New("database disabled")
|
||||||
|
}
|
||||||
|
return db.backends[0].GetMessageByGlobalID(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *MultiDatabase) GetGroupMessageByGlobalID(id int32) (*StoredGroupMessage, error) {
|
||||||
|
if len(db.backends) == 0 {
|
||||||
|
return nil, errors.New("database disabled")
|
||||||
|
}
|
||||||
|
return db.backends[0].GetGroupMessageByGlobalID(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *MultiDatabase) GetPrivateMessageByGlobalID(id int32) (*StoredPrivateMessage, error) {
|
||||||
|
if len(db.backends) == 0 {
|
||||||
|
return nil, errors.New("database disabled")
|
||||||
|
}
|
||||||
|
return db.backends[0].GetPrivateMessageByGlobalID(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *MultiDatabase) InsertGroupMessage(m *StoredGroupMessage) error {
|
||||||
|
for _, b := range db.backends {
|
||||||
|
if err := b.InsertGroupMessage(m); err != nil {
|
||||||
|
return errors.Wrap(err, "insert message to backend error")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *MultiDatabase) InsertPrivateMessage(m *StoredPrivateMessage) error {
|
||||||
|
for _, b := range db.backends {
|
||||||
|
if err := b.InsertPrivateMessage(m); err != nil {
|
||||||
|
return errors.Wrap(err, "insert message to backend error")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user