-
Notifications
You must be signed in to change notification settings - Fork 111
/
record.go
68 lines (59 loc) · 2.09 KB
/
record.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package robot
import (
"fmt"
"time"
"github.com/yqchilde/wxbot/engine/pkg/sqlite"
"github.com/yqchilde/wxbot/engine/pkg/utils"
)
// MessageRecord 消息记录表
type MessageRecord struct {
ID uint `gorm:"primarykey"` // 主键
Type string `gorm:"column:type"` // 消息类型
FromWxId string `gorm:"column:from_wxid"` // 消息来源wxid,群消息为群wxid,私聊消息为发送者wxid
FromNick string `gorm:"column:from_nick"` // 消息来源昵称,群消息为群昵称,私聊消息为发送者昵称
SenderWxId string `gorm:"column:sender_wxid"` // 消息具体发送者wxid
SenderNick string `gorm:"column:sender_nick"` // 消息具体发送者昵称
Content string `gorm:"column:content"` // 消息内容
CreatedAt time.Time `gorm:"column:created_at"` // 创建时间
}
var db sqlite.DB
func initMessageRecordDB() error {
if db.Orm != nil {
return nil
}
dbPath := "data/manager/manager.db"
if !utils.CheckPathExists(dbPath) {
return fmt.Errorf("db file not found: %s", dbPath)
}
if err := sqlite.Open(dbPath, &db); err != nil {
return err
}
return nil
}
// RecordConditions 历史记录搜索条件
type RecordConditions struct {
FromWxId string // 消息来源wxid,群消息为群wxid,私聊消息为对方wxid
SenderWxId string // 消息具体发送者wxid
CreatedAt string // 消息创建时间,格式为yyyy-mm-dd
}
// GetRecordHistory 获取消息记录
func (ctx *Ctx) GetRecordHistory(cond *RecordConditions) ([]MessageRecord, error) {
if err := initMessageRecordDB(); err != nil {
return nil, err
}
recordDB := db.Orm.Table("__message")
if cond != nil && cond.FromWxId != "" {
recordDB.Where("from_wxid = ?", cond.FromWxId)
}
if cond != nil && cond.SenderWxId != "" {
recordDB.Where("sender_wxid = ?", cond.SenderWxId)
}
if cond != nil && cond.CreatedAt != "" {
recordDB.Where("STRFTIME('%Y-%m-%d', created_at, 'localtime') = ?", cond.CreatedAt)
}
var msgRecord []MessageRecord
if err := recordDB.Find(&msgRecord).Error; err != nil {
return nil, err
}
return msgRecord, nil
}