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,29 +285,31 @@ 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: // 加群同步
groupJoinLock.Lock() func() {
group := c.FindGroupByUin(message.Head.GetFromUin()) groupJoinLock.Lock()
if message.Head.GetAuthUin() == c.Uin { defer groupJoinLock.Unlock()
if group == nil && c.ReloadGroupList() == nil { group := c.FindGroupByUin(message.Head.GetFromUin())
c.dispatchJoinGroupEvent(c.FindGroupByUin(message.Head.GetFromUin())) if message.Head.GetAuthUin() == c.Uin {
} if group == nil && c.ReloadGroupList() == nil {
} else { c.dispatchJoinGroupEvent(c.FindGroupByUin(message.Head.GetFromUin()))
if group != nil && group.FindMember(message.Head.GetAuthUin()) == nil { }
mem, err := c.getMemberInfo(group.Code, message.Head.GetAuthUin()) } else {
if err != nil { if group != nil && group.FindMember(message.Head.GetAuthUin()) == nil {
c.Debug("error to fetch new member info: %v", err) mem, err := c.getMemberInfo(group.Code, message.Head.GetAuthUin())
continue if err != nil {
c.Debug("error to fetch new member info: %v", err)
return
}
group.Update(func(info *GroupInfo) {
info.Members = append(info.Members, mem)
})
c.dispatchNewMemberEvent(&MemberJoinGroupEvent{
Group: group,
Member: mem,
})
} }
group.Update(func(info *GroupInfo) {
info.Members = append(info.Members, mem)
})
c.dispatchNewMemberEvent(&MemberJoinGroupEvent{
Group: group,
Member: mem,
})
} }
} }()
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.")