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:
parent
6d1228fce8
commit
76317b3853
@ -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.")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user