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

fix group member sync.

This commit is contained in:
Mrs4s 2020-11-29 19:04:12 +08:00
parent 6d1228fce8
commit 76317b3853

View File

@ -285,7 +285,9 @@ func decodeMessageSvcPacket(c *QQClient, _ uint16, payload []byte) (interface{},
c.msgSvcCache.Add(strKey, "", time.Minute) c.msgSvcCache.Add(strKey, "", time.Minute)
switch message.Head.GetMsgType() { switch message.Head.GetMsgType() {
case 33: // 加群同步 case 33: // 加群同步
func() {
groupJoinLock.Lock() groupJoinLock.Lock()
defer groupJoinLock.Unlock()
group := c.FindGroupByUin(message.Head.GetFromUin()) group := c.FindGroupByUin(message.Head.GetFromUin())
if message.Head.GetAuthUin() == c.Uin { if message.Head.GetAuthUin() == c.Uin {
if group == nil && c.ReloadGroupList() == nil { if group == nil && c.ReloadGroupList() == nil {
@ -296,7 +298,7 @@ func decodeMessageSvcPacket(c *QQClient, _ uint16, payload []byte) (interface{},
mem, err := c.getMemberInfo(group.Code, message.Head.GetAuthUin()) mem, err := c.getMemberInfo(group.Code, message.Head.GetAuthUin())
if err != nil { if err != nil {
c.Debug("error to fetch new member info: %v", err) c.Debug("error to fetch new member info: %v", err)
continue return
} }
group.Update(func(info *GroupInfo) { group.Update(func(info *GroupInfo) {
info.Members = append(info.Members, mem) info.Members = append(info.Members, mem)
@ -307,7 +309,7 @@ func decodeMessageSvcPacket(c *QQClient, _ uint16, payload []byte) (interface{},
}) })
} }
} }
groupJoinLock.Unlock() }()
case 84, 87: case 84, 87:
c.exceptAndDispatchGroupSysMsg() c.exceptAndDispatchGroupSysMsg()
case 141: // 临时会话 case 141: // 临时会话
@ -794,6 +796,29 @@ func decodeOnlinePushReqPacket(c *QQClient, seq uint16, payload []byte) (interfa
} }
if s44.GroupSyncMsg != nil { if s44.GroupSyncMsg != nil {
func() { func() {
if s44.GroupSyncMsg.GetMsgType() == 3 && s44.GroupSyncMsg.GetGrpCode() != 0 { // member sync
c.Debug("syncing members.")
if group := c.FindGroup(s44.GroupSyncMsg.GetGrpCode()); group != nil {
var lastJoinTime int64 = 0
for _, m := range group.Members {
if lastJoinTime < m.JoinTime {
lastJoinTime = m.JoinTime
}
}
if newMem, err := c.GetGroupMembers(group); err == nil {
group.Members = newMem
for _, m := range newMem {
if lastJoinTime < m.JoinTime {
c.dispatchNewMemberEvent(&MemberJoinGroupEvent{
Group: group,
Member: m,
})
}
}
}
}
return
}
groupJoinLock.Lock() groupJoinLock.Lock()
defer groupJoinLock.Unlock() defer groupJoinLock.Unlock()
c.Debug("syncing groups.") c.Debug("syncing groups.")