diff --git a/client/builders.go b/client/builders.go index 3a8f9f4a..2cc3700a 100644 --- a/client/builders.go +++ b/client/builders.go @@ -965,6 +965,7 @@ func (c *QQClient) buildGroupInfoRequestPacket(groupCode int64) (uint16, []byte) GroupCode: proto.Uint64(uint64(groupCode)), Stgroupinfo: &oidb.D88DGroupInfo{ GroupOwner: proto.Uint64(0), + GroupUin: proto.Uint64(0), GroupCreateTime: proto.Uint32(0), GroupFlag: proto.Uint32(0), GroupMemberMaxNum: proto.Uint32(0), diff --git a/client/decoders.go b/client/decoders.go index bb88c3fe..6d5d569a 100644 --- a/client/decoders.go +++ b/client/decoders.go @@ -291,7 +291,7 @@ func decodeGroupMessagePacket(c *QQClient, _ uint16, payload []byte) (interface{ return nil, nil } if pkt.Message.Content != nil && pkt.Message.Content.PkgNum > 1 { - var builder *groupMessageBuilder + var builder *groupMessageBuilder // TODO: 支持多SEQ i, ok := c.groupMsgBuilders.Load(pkt.Message.Content.DivSeq) if !ok { builder = &groupMessageBuilder{ @@ -403,7 +403,7 @@ func decodeGroupInfoResponse(c *QQClient, _ uint16, payload []byte) (interface{} } info := rsp.RspGroupInfo[0] return &GroupInfo{ - Uin: utils.ToGroupUin(int64(*info.GroupCode)), + Uin: int64(*info.GroupInfo.GroupUin), Code: int64(*info.GroupCode), Name: string(info.GroupInfo.GroupName), Memo: string(info.GroupInfo.GroupMemo), diff --git a/client/global.go b/client/global.go index 8d58060f..beef55d0 100644 --- a/client/global.go +++ b/client/global.go @@ -267,7 +267,22 @@ func (c *QQClient) parseTempMessage(msg *msg.Message) *message.TempMessage { func (c *QQClient) parseGroupMessage(m *msg.Message) *message.GroupMessage { group := c.FindGroup(m.Head.GroupInfo.GroupCode) if group == nil { - return nil + c.Debug("sync group %v.", m.Head.GroupInfo.GroupCode) + info, err := c.GetGroupInfo(m.Head.GroupInfo.GroupCode) + if err != nil { + c.Error("error to sync group %v : %v", m.Head.GroupInfo.GroupCode, err) + return nil + } + group = info + c.GroupList = append(c.GroupList, info) + } + if len(group.Members) == 0 { + mem, err := c.GetGroupMembers(group) + if err != nil { + c.Error("error to sync group %v member : %v", m.Head.GroupInfo.GroupCode, err) + return nil + } + group.Members = mem } var anonInfo *msg.AnonymousGroupMessage for _, e := range m.Body.RichText.Elems {