1
0
mirror of https://github.com/Mrs4s/go-cqhttp.git synced 2025-05-04 19:17:37 +08:00

feat: 将 uin, tiny 分表以节省空间

This commit is contained in:
源文雨 2022-11-10 11:51:01 +08:00
parent 2d42a968c9
commit f1957e3814
2 changed files with 94 additions and 41 deletions

View File

@ -10,6 +10,8 @@ const (
Sqlite3QuotedInfoTableName = "quoinf"
Sqlite3PrivateMessageTableName = "privmsg"
Sqlite3GuildChannelMessageTableName = "guildmsg"
Sqlite3UinInfoTableName = "uininf"
Sqlite3TinyInfoTableName = "tinyinf"
)
// StoredMessageAttribute 持久化消息属性
@ -18,7 +20,6 @@ type StoredMessageAttribute struct {
MessageSeq int32
InternalID int32
SenderUin int64
SenderName string
Timestamp int64
}
@ -28,7 +29,6 @@ type StoredGuildMessageAttribute struct {
MessageSeq int64
InternalID int64
SenderTinyID int64
SenderName string
Timestamp int64
}
@ -40,6 +40,18 @@ type QuotedInfo struct {
QuotedContent string // QuotedContent is json of original content
}
// UinInfo QQ 与 昵称
type UinInfo struct {
Uin int64
Name string
}
// TinyInfo Tiny 与 昵称
type TinyInfo struct {
ID int64
Name string
}
// StoredGroupMessage 持久化群消息
type StoredGroupMessage struct {
GlobalID int32

View File

@ -77,6 +77,14 @@ func (s *database) Open() error {
if err != nil {
return errors.Wrap(err, "create sqlite3 table error")
}
err = s.db.Create(Sqlite3UinInfoTableName, &UinInfo{})
if err != nil {
return errors.Wrap(err, "create sqlite3 table error")
}
err = s.db.Create(Sqlite3TinyInfoTableName, &TinyInfo{})
if err != nil {
return errors.Wrap(err, "create sqlite3 table error")
}
return nil
}
@ -107,16 +115,22 @@ func (s *database) GetGroupMessageByGlobalID(id int32) (*db.StoredGroupMessage,
s.RLock()
err = s.db.Find(Sqlite3MessageAttributeTableName, &attr, "WHERE ID="+strconv.FormatInt(grpmsg.AttributeID, 10))
s.RUnlock()
if err == nil {
var uin UinInfo
s.RLock()
err = s.db.Find(Sqlite3UinInfoTableName, &attr, "WHERE Uin="+strconv.FormatInt(attr.SenderUin, 10))
s.RUnlock()
if err == nil {
ret.Attribute = &db.StoredMessageAttribute{
MessageSeq: attr.MessageSeq,
InternalID: attr.InternalID,
SenderUin: attr.SenderUin,
SenderName: attr.SenderName,
SenderName: uin.Name,
Timestamp: attr.Timestamp,
}
}
}
}
if grpmsg.QuotedInfoID != 0 {
var quoinf QuotedInfo
s.RLock()
@ -153,16 +167,22 @@ func (s *database) GetPrivateMessageByGlobalID(id int32) (*db.StoredPrivateMessa
s.RLock()
err = s.db.Find(Sqlite3MessageAttributeTableName, &attr, "WHERE ID="+strconv.FormatInt(privmsg.AttributeID, 10))
s.RUnlock()
if err == nil {
var uin UinInfo
s.RLock()
err = s.db.Find(Sqlite3UinInfoTableName, &attr, "WHERE Uin="+strconv.FormatInt(attr.SenderUin, 10))
s.RUnlock()
if err == nil {
ret.Attribute = &db.StoredMessageAttribute{
MessageSeq: attr.MessageSeq,
InternalID: attr.InternalID,
SenderUin: attr.SenderUin,
SenderName: attr.SenderName,
SenderName: uin.Name,
Timestamp: attr.Timestamp,
}
}
}
}
if privmsg.QuotedInfoID != 0 {
var quoinf QuotedInfo
s.RLock()
@ -204,16 +224,22 @@ func (s *database) GetGuildChannelMessageByID(id string) (*db.StoredGuildChannel
s.RLock()
err = s.db.Find(Sqlite3GuildMessageAttributeTableName, &attr, "WHERE ID="+strconv.FormatInt(guildmsg.AttributeID, 10))
s.RUnlock()
if err == nil {
var tiny TinyInfo
s.RLock()
err = s.db.Find(Sqlite3TinyInfoTableName, &attr, "WHERE ID="+strconv.FormatInt(attr.SenderTinyID, 10))
s.RUnlock()
if err == nil {
ret.Attribute = &db.StoredGuildMessageAttribute{
MessageSeq: uint64(attr.MessageSeq),
InternalID: uint64(attr.InternalID),
SenderTinyID: uint64(attr.SenderTinyID),
SenderName: attr.SenderName,
SenderName: tiny.Name,
Timestamp: attr.Timestamp,
}
}
}
}
if guildmsg.QuotedInfoID != 0 {
var quoinf QuotedInfo
s.RLock()
@ -252,14 +278,19 @@ func (s *database) InsertGroupMessage(msg *db.StoredGroupMessage) error {
id++
}
s.Lock()
err := s.db.Insert(Sqlite3MessageAttributeTableName, &StoredMessageAttribute{
err := s.db.Insert(Sqlite3UinInfoTableName, &UinInfo{
Uin: msg.Attribute.SenderUin,
Name: msg.Attribute.SenderName,
})
if err == nil {
err = s.db.Insert(Sqlite3MessageAttributeTableName, &StoredMessageAttribute{
ID: id,
MessageSeq: msg.Attribute.MessageSeq,
InternalID: msg.Attribute.InternalID,
SenderUin: msg.Attribute.SenderUin,
SenderName: msg.Attribute.SenderName,
Timestamp: msg.Attribute.Timestamp,
})
}
s.Unlock()
if err == nil {
grpmsg.AttributeID = id
@ -328,14 +359,19 @@ func (s *database) InsertPrivateMessage(msg *db.StoredPrivateMessage) error {
id++
}
s.Lock()
err := s.db.Insert(Sqlite3MessageAttributeTableName, &StoredMessageAttribute{
err := s.db.Insert(Sqlite3UinInfoTableName, &UinInfo{
Uin: msg.Attribute.SenderUin,
Name: msg.Attribute.SenderName,
})
if err == nil {
err = s.db.Insert(Sqlite3MessageAttributeTableName, &StoredMessageAttribute{
ID: id,
MessageSeq: msg.Attribute.MessageSeq,
InternalID: msg.Attribute.InternalID,
SenderUin: msg.Attribute.SenderUin,
SenderName: msg.Attribute.SenderName,
Timestamp: msg.Attribute.Timestamp,
})
}
s.Unlock()
if err == nil {
privmsg.AttributeID = id
@ -402,14 +438,19 @@ func (s *database) InsertGuildChannelMessage(msg *db.StoredGuildChannelMessage)
id++
}
s.Lock()
err := s.db.Insert(Sqlite3MessageAttributeTableName, &StoredGuildMessageAttribute{
err := s.db.Insert(Sqlite3TinyInfoTableName, &TinyInfo{
ID: int64(msg.Attribute.SenderTinyID),
Name: msg.Attribute.SenderName,
})
if err == nil {
err = s.db.Insert(Sqlite3MessageAttributeTableName, &StoredGuildMessageAttribute{
ID: id,
MessageSeq: int64(msg.Attribute.MessageSeq),
InternalID: int64(msg.Attribute.InternalID),
SenderTinyID: int64(msg.Attribute.SenderTinyID),
SenderName: msg.Attribute.SenderName,
Timestamp: msg.Attribute.Timestamp,
})
}
s.Unlock()
if err == nil {
guildmsg.AttributeID = id