diff --git a/client/client.go b/client/client.go index 3a6dddf6..a6344371 100644 --- a/client/client.go +++ b/client/client.go @@ -63,6 +63,7 @@ type QQClient struct { lastMessageSeq int32 //lastMessageSeqTmp sync.Map + msgSvcCache *utils.Cache lastLostMsg string groupMsgBuilders sync.Map onlinePushCache []int16 // reset on reconnect @@ -142,7 +143,7 @@ func NewClientMd5(uin int64, passwordMd5 [16]byte) *QQClient { ksid: []byte("|454001228437590|A8.2.7.27f6ea96"), eventHandlers: &eventHandlers{}, groupListLock: new(sync.Mutex), - //msgSvcCache: utils.NewCache(time.Second * 5), + msgSvcCache: utils.NewCache(time.Second * 5), } rand.Read(cli.RandomKey) return cli diff --git a/client/decoders.go b/client/decoders.go index 0c4ce623..d7e93be6 100644 --- a/client/decoders.go +++ b/client/decoders.go @@ -6,6 +6,7 @@ import ( "fmt" "github.com/Mrs4s/MiraiGo/client/pb/pttcenter" "log" + "strconv" "sync" "sync/atomic" "time" @@ -167,6 +168,11 @@ func decodeMessageSvcPacket(c *QQClient, _ uint16, payload []byte) (interface{}, if (int64(pairMsg.LastReadTime) & 4294967295) > int64(message.Head.MsgTime) { continue } + strKey := strconv.FormatInt(message.Head.MsgUid, 10) + if _, ok := c.msgSvcCache.Get(strKey); ok { + continue + } + c.msgSvcCache.Add(strKey, "", time.Second*15) switch message.Head.MsgType { case 33: // 加群同步 groupJoinLock.Lock()