From 249af274638d32cf01861e85e1f3fd6414827b0e Mon Sep 17 00:00:00 2001 From: Mrs4s <1844812067@qq.com> Date: Sat, 19 Sep 2020 23:33:52 +0800 Subject: [PATCH] support group member dynamic sync. --- client/builders.go | 15 ++ client/client.go | 64 +++-- client/decoders.go | 31 +++ client/entities.go | 3 +- client/global.go | 11 +- client/pb/data.pb.go | 624 ++++++++++++++++++++++++++++++++++++++++++- client/pb/data.proto | 505 +++++++++++++++++++--------------- 7 files changed, 992 insertions(+), 261 deletions(-) diff --git a/client/builders.go b/client/builders.go index 78dbf44d..2a864f51 100644 --- a/client/builders.go +++ b/client/builders.go @@ -347,6 +347,21 @@ func (c *QQClient) buildGroupMemberListRequestPacket(groupUin, groupCode, nextUi return seq, packet } +// group_member_card.get_group_member_card_info +func (c *QQClient) buildGroupMemberInfoRequestPacket(groupCode, uin int64) (uint16, []byte) { + seq := c.nextSeq() + req := &pb.GroupMemberReqBody{ + GroupCode: groupCode, + Uin: uin, + NewClient: true, + ClientType: 1, + RichCardNameVer: 1, + } + payload, _ := proto.Marshal(req) + packet := packets.BuildUniPacket(c.Uin, seq, "group_member_card.get_group_member_card_info", 1, c.OutGoingPacketSessionId, EmptyBytes, c.sigInfo.d2Key, payload) + return seq, packet +} + // MessageSvc.PbGetMsg func (c *QQClient) buildGetMessageRequestPacket(flag msg.SyncFlag, msgTime int64) (uint16, []byte) { seq := c.nextSeq() diff --git a/client/client.go b/client/client.go index b9908d52..2a280273 100644 --- a/client/client.go +++ b/client/client.go @@ -117,32 +117,33 @@ func NewClientMd5(uin int64, passwordMd5 [16]byte) *QQClient { RandomKey: make([]byte, 16), OutGoingPacketSessionId: []byte{0x02, 0xB0, 0x5B, 0x8B}, decoders: map[string]func(*QQClient, uint16, []byte) (interface{}, error){ - "wtlogin.login": decodeLoginResponse, - "StatSvc.register": decodeClientRegisterResponse, - "StatSvc.ReqMSFOffline": decodeMSFOfflinePacket, - "MessageSvc.PushNotify": decodeSvcNotify, - "OnlinePush.PbPushGroupMsg": decodeGroupMessagePacket, - "OnlinePush.ReqPush": decodeOnlinePushReqPacket, - "OnlinePush.PbPushTransMsg": decodeOnlinePushTransPacket, - "ConfigPushSvc.PushReq": decodePushReqPacket, - "MessageSvc.PbGetMsg": decodeMessageSvcPacket, - "MessageSvc.PbSendMsg": decodeMsgSendResponse, - "MessageSvc.PushForceOffline": decodeForceOfflinePacket, - "friendlist.getFriendGroupList": decodeFriendGroupListResponse, - "friendlist.GetTroopListReqV2": decodeGroupListResponse, - "friendlist.GetTroopMemberListReq": decodeGroupMemberListResponse, - "ImgStore.GroupPicUp": decodeGroupImageStoreResponse, - "PttStore.GroupPttUp": decodeGroupPttStoreResponse, - "LongConn.OffPicUp": decodeOffPicUpResponse, - "ProfileService.Pb.ReqSystemMsgNew.Group": decodeSystemMsgGroupPacket, - "ProfileService.Pb.ReqSystemMsgNew.Friend": decodeSystemMsgFriendPacket, - "MultiMsg.ApplyUp": decodeMultiApplyUpResponse, - "MultiMsg.ApplyDown": decodeMultiApplyDownResponse, - "OidbSvc.0x6d6_2": decodeOIDB6d6Response, - "OidbSvc.0x88d_0": decodeGroupInfoResponse, - "SummaryCard.ReqSummaryCard": decodeSummaryCardResponse, - "PttCenterSvr.ShortVideoDownReq": decodePttShortVideoDownResponse, - "LightAppSvc.mini_app_info.GetAppInfoById": decodeAppInfoResponse, + "wtlogin.login": decodeLoginResponse, // 登录操作包 + "StatSvc.register": decodeClientRegisterResponse, // 客户端注册包 + "StatSvc.ReqMSFOffline": decodeMSFOfflinePacket, // 强制离线 + "MessageSvc.PushNotify": decodeSvcNotify, // 好友消息通知包 + "OnlinePush.PbPushGroupMsg": decodeGroupMessagePacket, // 群消息通知包 + "OnlinePush.ReqPush": decodeOnlinePushReqPacket, // 群组相关事件包 + "OnlinePush.PbPushTransMsg": decodeOnlinePushTransPacket, // QQ相关事件包 + "ConfigPushSvc.PushReq": decodePushReqPacket, // 配置文件推送包 + "MessageSvc.PbGetMsg": decodeMessageSvcPacket, // 除群组以外消息拉取包 + "MessageSvc.PbSendMsg": decodeMsgSendResponse, // 消息发送包 + "MessageSvc.PushForceOffline": decodeForceOfflinePacket, // 强制离线 + "friendlist.getFriendGroupList": decodeFriendGroupListResponse, // 获取好友列表包 + "friendlist.GetTroopListReqV2": decodeGroupListResponse, // 获取群组列表包 + "friendlist.GetTroopMemberListReq": decodeGroupMemberListResponse, // 获取群成员列表包 + "group_member_card.get_group_member_card_info": decodeGroupMemberInfoResponse, // 获取群成员资料包 + "ImgStore.GroupPicUp": decodeGroupImageStoreResponse, // 请求群组图片上传包 + "PttStore.GroupPttUp": decodeGroupPttStoreResponse, // 请求群组语音上传包 + "LongConn.OffPicUp": decodeOffPicUpResponse, // 查询好友图片包 + "ProfileService.Pb.ReqSystemMsgNew.Group": decodeSystemMsgGroupPacket, // 获取群组成员变动事件包 + "ProfileService.Pb.ReqSystemMsgNew.Friend": decodeSystemMsgFriendPacket, // 获取好友变动事件包 + "MultiMsg.ApplyUp": decodeMultiApplyUpResponse, // 长消息/合并转发请求上传包 + "MultiMsg.ApplyDown": decodeMultiApplyDownResponse, // 长消息/合并转发请求下载包 + "OidbSvc.0x6d6_2": decodeOIDB6d6Response, // 群文件操作包 + "OidbSvc.0x88d_0": decodeGroupInfoResponse, // 获取群资料包 + "SummaryCard.ReqSummaryCard": decodeSummaryCardResponse, // 获取用户卡片资料包 + "PttCenterSvr.ShortVideoDownReq": decodePttShortVideoDownResponse, // 短视频下载请求包 + "LightAppSvc.mini_app_info.GetAppInfoById": decodeAppInfoResponse, // 获取小程序资料包 }, sigInfo: &loginSigInfo{}, requestPacketRequestId: 1921334513, @@ -841,6 +842,14 @@ func (c *QQClient) getCSRFToken() int { return 2147483647 & accu } +func (c *QQClient) getMemberInfo(groupCode, memberUin int64) (*GroupMemberInfo, error) { + info, err := c.sendAndWait(c.buildGroupMemberInfoRequestPacket(groupCode, memberUin)) + if err != nil { + return nil, err + } + return info.(*GroupMemberInfo), nil +} + func (c *QQClient) editMemberCard(groupCode, memberUin int64, card string) { _, _ = c.sendAndWait(c.buildEditGroupTagPacket(groupCode, memberUin, card)) } @@ -975,7 +984,6 @@ func (c *QQClient) sendAndWait(seq uint16, pkt []byte) (interface{}, error) { case <-time.After(time.Second * 30): retry++ if retry < 2 { - c.Error("packet %v timed out. retry.", seq) _ = c.send(pkt) continue } @@ -1043,7 +1051,7 @@ func (c *QQClient) netLoop() { } rsp, err := decoder(c, pkt.SequenceId, payload) if err != nil { - c.Error("decode pkt %v error: %v", pkt.CommandName, err) + //c.Error("decode pkt %v error: %v", pkt.CommandName, err) //log.Println("decode", pkt.CommandName, "error:", err) } if f, ok := c.handlers.Load(pkt.SequenceId); ok { diff --git a/client/decoders.go b/client/decoders.go index fe4f7020..1d5ac3c9 100644 --- a/client/decoders.go +++ b/client/decoders.go @@ -468,6 +468,37 @@ func decodeGroupMemberListResponse(_ *QQClient, _ uint16, payload []byte) (inter }, nil } +func decodeGroupMemberInfoResponse(c *QQClient, _ uint16, payload []byte) (interface{}, error) { + rsp := pb.GroupMemberRspBody{} + if err := proto.Unmarshal(payload, &rsp); err != nil { + return nil, err + } + if rsp.MemInfo.Nick == nil && rsp.MemInfo.Age == 0 { + return nil, ErrMemberNotFound + } + group := c.FindGroup(rsp.GroupCode) + return &GroupMemberInfo{ + Group: group, + Uin: rsp.MemInfo.Uin, + Nickname: string(rsp.MemInfo.Nick), + CardName: string(rsp.MemInfo.Card), + Level: uint16(rsp.MemInfo.Level), + JoinTime: rsp.MemInfo.Join, + LastSpeakTime: rsp.MemInfo.LastSpeak, + SpecialTitle: string(rsp.MemInfo.SpecialTitle), + SpecialTitleExpireTime: int64(rsp.MemInfo.SpecialTitleExpireTime), + Permission: func() MemberPermission { + if rsp.MemInfo.Uin == group.OwnerUin { + return Owner + } + if rsp.MemInfo.Role == 1 { + return Administrator + } + return Member + }(), + }, nil +} + func decodeGroupImageStoreResponse(_ *QQClient, _ uint16, payload []byte) (interface{}, error) { pkt := pb.D388RespBody{} err := proto.Unmarshal(payload, &pkt) diff --git a/client/entities.go b/client/entities.go index 0d4cf87f..e01ba3ba 100644 --- a/client/entities.go +++ b/client/entities.go @@ -8,7 +8,8 @@ import ( ) var ( - ErrAlreadyOnline = errors.New("already online") + ErrAlreadyOnline = errors.New("already online") + ErrMemberNotFound = errors.New("member not found") ) type ( diff --git a/client/global.go b/client/global.go index beef55d0..b5cf93a2 100644 --- a/client/global.go +++ b/client/global.go @@ -300,7 +300,16 @@ func (c *QQClient) parseGroupMessage(m *msg.Message) *message.GroupMessage { } else { mem := group.FindMember(m.Head.FromUin) if mem == nil { - return nil + info, _ := c.getMemberInfo(group.Code, m.Head.FromUin) + if info == nil { + return nil + } + group.Members = append(group.Members, mem) + mem = info + go c.dispatchNewMemberEvent(&MemberJoinGroupEvent{ + Group: group, + Member: info, + }) } sender = &message.Sender{ Uin: mem.Uin, diff --git a/client/pb/data.pb.go b/client/pb/data.pb.go index 1a70390c..ac95674b 100644 --- a/client/pb/data.pb.go +++ b/client/pb/data.pb.go @@ -2794,6 +2794,487 @@ func (x *Sub44GroupSyncMsg) GetProcessFlag() int32 { return 0 } +type GroupMemberReqBody struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GroupCode int64 `protobuf:"varint,1,opt,name=groupCode,proto3" json:"groupCode,omitempty"` + Uin int64 `protobuf:"varint,2,opt,name=uin,proto3" json:"uin,omitempty"` + NewClient bool `protobuf:"varint,3,opt,name=newClient,proto3" json:"newClient,omitempty"` + ClientType int32 `protobuf:"varint,4,opt,name=clientType,proto3" json:"clientType,omitempty"` + RichCardNameVer int32 `protobuf:"varint,5,opt,name=richCardNameVer,proto3" json:"richCardNameVer,omitempty"` +} + +func (x *GroupMemberReqBody) Reset() { + *x = GroupMemberReqBody{} + if protoimpl.UnsafeEnabled { + mi := &file_data_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GroupMemberReqBody) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GroupMemberReqBody) ProtoMessage() {} + +func (x *GroupMemberReqBody) ProtoReflect() protoreflect.Message { + mi := &file_data_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GroupMemberReqBody.ProtoReflect.Descriptor instead. +func (*GroupMemberReqBody) Descriptor() ([]byte, []int) { + return file_data_proto_rawDescGZIP(), []int{27} +} + +func (x *GroupMemberReqBody) GetGroupCode() int64 { + if x != nil { + return x.GroupCode + } + return 0 +} + +func (x *GroupMemberReqBody) GetUin() int64 { + if x != nil { + return x.Uin + } + return 0 +} + +func (x *GroupMemberReqBody) GetNewClient() bool { + if x != nil { + return x.NewClient + } + return false +} + +func (x *GroupMemberReqBody) GetClientType() int32 { + if x != nil { + return x.ClientType + } + return 0 +} + +func (x *GroupMemberReqBody) GetRichCardNameVer() int32 { + if x != nil { + return x.RichCardNameVer + } + return 0 +} + +type GroupMemberRspBody struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GroupCode int64 `protobuf:"varint,1,opt,name=groupCode,proto3" json:"groupCode,omitempty"` + SelfRole int32 `protobuf:"varint,2,opt,name=selfRole,proto3" json:"selfRole,omitempty"` + MemInfo *GroupMemberInfo `protobuf:"bytes,3,opt,name=memInfo,proto3" json:"memInfo,omitempty"` + BoolSelfLocationShared bool `protobuf:"varint,4,opt,name=boolSelfLocationShared,proto3" json:"boolSelfLocationShared,omitempty"` + GroupType int32 `protobuf:"varint,5,opt,name=groupType,proto3" json:"groupType,omitempty"` +} + +func (x *GroupMemberRspBody) Reset() { + *x = GroupMemberRspBody{} + if protoimpl.UnsafeEnabled { + mi := &file_data_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GroupMemberRspBody) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GroupMemberRspBody) ProtoMessage() {} + +func (x *GroupMemberRspBody) ProtoReflect() protoreflect.Message { + mi := &file_data_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GroupMemberRspBody.ProtoReflect.Descriptor instead. +func (*GroupMemberRspBody) Descriptor() ([]byte, []int) { + return file_data_proto_rawDescGZIP(), []int{28} +} + +func (x *GroupMemberRspBody) GetGroupCode() int64 { + if x != nil { + return x.GroupCode + } + return 0 +} + +func (x *GroupMemberRspBody) GetSelfRole() int32 { + if x != nil { + return x.SelfRole + } + return 0 +} + +func (x *GroupMemberRspBody) GetMemInfo() *GroupMemberInfo { + if x != nil { + return x.MemInfo + } + return nil +} + +func (x *GroupMemberRspBody) GetBoolSelfLocationShared() bool { + if x != nil { + return x.BoolSelfLocationShared + } + return false +} + +func (x *GroupMemberRspBody) GetGroupType() int32 { + if x != nil { + return x.GroupType + } + return 0 +} + +type GroupMemberInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Uin int64 `protobuf:"varint,1,opt,name=uin,proto3" json:"uin,omitempty"` + Result int32 `protobuf:"varint,2,opt,name=result,proto3" json:"result,omitempty"` + Errmsg []byte `protobuf:"bytes,3,opt,name=errmsg,proto3" json:"errmsg,omitempty"` + IsFriend bool `protobuf:"varint,4,opt,name=IsFriend,proto3" json:"IsFriend,omitempty"` + Remark []byte `protobuf:"bytes,5,opt,name=remark,proto3" json:"remark,omitempty"` + IsConcerned bool `protobuf:"varint,6,opt,name=IsConcerned,proto3" json:"IsConcerned,omitempty"` + Credit int32 `protobuf:"varint,7,opt,name=credit,proto3" json:"credit,omitempty"` + Card []byte `protobuf:"bytes,8,opt,name=card,proto3" json:"card,omitempty"` + Sex int32 `protobuf:"varint,9,opt,name=sex,proto3" json:"sex,omitempty"` + Location []byte `protobuf:"bytes,10,opt,name=location,proto3" json:"location,omitempty"` + Nick []byte `protobuf:"bytes,11,opt,name=nick,proto3" json:"nick,omitempty"` + Age int32 `protobuf:"varint,12,opt,name=age,proto3" json:"age,omitempty"` + Lev []byte `protobuf:"bytes,13,opt,name=lev,proto3" json:"lev,omitempty"` + Join int64 `protobuf:"varint,14,opt,name=join,proto3" json:"join,omitempty"` + LastSpeak int64 `protobuf:"varint,15,opt,name=lastSpeak,proto3" json:"lastSpeak,omitempty"` + //repeated CustomEntry customEnties = 16; + //repeated GBarInfo gbarConcerned = 17; + GbarTitle []byte `protobuf:"bytes,18,opt,name=gbarTitle,proto3" json:"gbarTitle,omitempty"` + GbarUrl []byte `protobuf:"bytes,19,opt,name=gbarUrl,proto3" json:"gbarUrl,omitempty"` + GbarCnt int32 `protobuf:"varint,20,opt,name=gbarCnt,proto3" json:"gbarCnt,omitempty"` + IsAllowModCard bool `protobuf:"varint,21,opt,name=isAllowModCard,proto3" json:"isAllowModCard,omitempty"` + IsVip bool `protobuf:"varint,22,opt,name=isVip,proto3" json:"isVip,omitempty"` + IsYearVip bool `protobuf:"varint,23,opt,name=isYearVip,proto3" json:"isYearVip,omitempty"` + IsSuperVip bool `protobuf:"varint,24,opt,name=isSuperVip,proto3" json:"isSuperVip,omitempty"` + IsSuperQq bool `protobuf:"varint,25,opt,name=isSuperQq,proto3" json:"isSuperQq,omitempty"` + VipLev int32 `protobuf:"varint,26,opt,name=vipLev,proto3" json:"vipLev,omitempty"` + Role int32 `protobuf:"varint,27,opt,name=role,proto3" json:"role,omitempty"` + LocationShared bool `protobuf:"varint,28,opt,name=locationShared,proto3" json:"locationShared,omitempty"` + Int64Distance int64 `protobuf:"varint,29,opt,name=int64Distance,proto3" json:"int64Distance,omitempty"` + ConcernType int32 `protobuf:"varint,30,opt,name=concernType,proto3" json:"concernType,omitempty"` + SpecialTitle []byte `protobuf:"bytes,31,opt,name=specialTitle,proto3" json:"specialTitle,omitempty"` + SpecialTitleExpireTime int32 `protobuf:"varint,32,opt,name=specialTitleExpireTime,proto3" json:"specialTitleExpireTime,omitempty"` + //FlowersEntry flowerEntry = 33; + //TeamEntry teamEntry = 34; + PhoneNum []byte `protobuf:"bytes,35,opt,name=phoneNum,proto3" json:"phoneNum,omitempty"` + Job []byte `protobuf:"bytes,36,opt,name=job,proto3" json:"job,omitempty"` + MedalId int32 `protobuf:"varint,37,opt,name=medalId,proto3" json:"medalId,omitempty"` + Level int32 `protobuf:"varint,39,opt,name=level,proto3" json:"level,omitempty"` + Honor string `protobuf:"bytes,41,opt,name=honor,proto3" json:"honor,omitempty"` +} + +func (x *GroupMemberInfo) Reset() { + *x = GroupMemberInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_data_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GroupMemberInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GroupMemberInfo) ProtoMessage() {} + +func (x *GroupMemberInfo) ProtoReflect() protoreflect.Message { + mi := &file_data_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GroupMemberInfo.ProtoReflect.Descriptor instead. +func (*GroupMemberInfo) Descriptor() ([]byte, []int) { + return file_data_proto_rawDescGZIP(), []int{29} +} + +func (x *GroupMemberInfo) GetUin() int64 { + if x != nil { + return x.Uin + } + return 0 +} + +func (x *GroupMemberInfo) GetResult() int32 { + if x != nil { + return x.Result + } + return 0 +} + +func (x *GroupMemberInfo) GetErrmsg() []byte { + if x != nil { + return x.Errmsg + } + return nil +} + +func (x *GroupMemberInfo) GetIsFriend() bool { + if x != nil { + return x.IsFriend + } + return false +} + +func (x *GroupMemberInfo) GetRemark() []byte { + if x != nil { + return x.Remark + } + return nil +} + +func (x *GroupMemberInfo) GetIsConcerned() bool { + if x != nil { + return x.IsConcerned + } + return false +} + +func (x *GroupMemberInfo) GetCredit() int32 { + if x != nil { + return x.Credit + } + return 0 +} + +func (x *GroupMemberInfo) GetCard() []byte { + if x != nil { + return x.Card + } + return nil +} + +func (x *GroupMemberInfo) GetSex() int32 { + if x != nil { + return x.Sex + } + return 0 +} + +func (x *GroupMemberInfo) GetLocation() []byte { + if x != nil { + return x.Location + } + return nil +} + +func (x *GroupMemberInfo) GetNick() []byte { + if x != nil { + return x.Nick + } + return nil +} + +func (x *GroupMemberInfo) GetAge() int32 { + if x != nil { + return x.Age + } + return 0 +} + +func (x *GroupMemberInfo) GetLev() []byte { + if x != nil { + return x.Lev + } + return nil +} + +func (x *GroupMemberInfo) GetJoin() int64 { + if x != nil { + return x.Join + } + return 0 +} + +func (x *GroupMemberInfo) GetLastSpeak() int64 { + if x != nil { + return x.LastSpeak + } + return 0 +} + +func (x *GroupMemberInfo) GetGbarTitle() []byte { + if x != nil { + return x.GbarTitle + } + return nil +} + +func (x *GroupMemberInfo) GetGbarUrl() []byte { + if x != nil { + return x.GbarUrl + } + return nil +} + +func (x *GroupMemberInfo) GetGbarCnt() int32 { + if x != nil { + return x.GbarCnt + } + return 0 +} + +func (x *GroupMemberInfo) GetIsAllowModCard() bool { + if x != nil { + return x.IsAllowModCard + } + return false +} + +func (x *GroupMemberInfo) GetIsVip() bool { + if x != nil { + return x.IsVip + } + return false +} + +func (x *GroupMemberInfo) GetIsYearVip() bool { + if x != nil { + return x.IsYearVip + } + return false +} + +func (x *GroupMemberInfo) GetIsSuperVip() bool { + if x != nil { + return x.IsSuperVip + } + return false +} + +func (x *GroupMemberInfo) GetIsSuperQq() bool { + if x != nil { + return x.IsSuperQq + } + return false +} + +func (x *GroupMemberInfo) GetVipLev() int32 { + if x != nil { + return x.VipLev + } + return 0 +} + +func (x *GroupMemberInfo) GetRole() int32 { + if x != nil { + return x.Role + } + return 0 +} + +func (x *GroupMemberInfo) GetLocationShared() bool { + if x != nil { + return x.LocationShared + } + return false +} + +func (x *GroupMemberInfo) GetInt64Distance() int64 { + if x != nil { + return x.Int64Distance + } + return 0 +} + +func (x *GroupMemberInfo) GetConcernType() int32 { + if x != nil { + return x.ConcernType + } + return 0 +} + +func (x *GroupMemberInfo) GetSpecialTitle() []byte { + if x != nil { + return x.SpecialTitle + } + return nil +} + +func (x *GroupMemberInfo) GetSpecialTitleExpireTime() int32 { + if x != nil { + return x.SpecialTitleExpireTime + } + return 0 +} + +func (x *GroupMemberInfo) GetPhoneNum() []byte { + if x != nil { + return x.PhoneNum + } + return nil +} + +func (x *GroupMemberInfo) GetJob() []byte { + if x != nil { + return x.Job + } + return nil +} + +func (x *GroupMemberInfo) GetMedalId() int32 { + if x != nil { + return x.MedalId + } + return 0 +} + +func (x *GroupMemberInfo) GetLevel() int32 { + if x != nil { + return x.Level + } + return 0 +} + +func (x *GroupMemberInfo) GetHonor() string { + if x != nil { + return x.Honor + } + return "" +} + var File_data_proto protoreflect.FileDescriptor var file_data_proto_rawDesc = []byte{ @@ -3231,8 +3712,93 @@ var file_data_proto_rawDesc = []byte{ 0x78, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x65, 0x78, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x13, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x42, - 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x28, 0x05, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x22, + 0xac, 0x01, 0x0a, 0x12, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, + 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x69, 0x63, 0x68, 0x43, 0x61, 0x72, 0x64, + 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x72, + 0x69, 0x63, 0x68, 0x43, 0x61, 0x72, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x65, 0x72, 0x22, 0xd0, + 0x01, 0x0a, 0x12, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x73, + 0x70, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, + 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x66, 0x52, 0x6f, 0x6c, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x66, 0x52, 0x6f, 0x6c, 0x65, 0x12, + 0x2a, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x36, 0x0a, 0x16, 0x62, + 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x62, 0x6f, 0x6f, + 0x6c, 0x53, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, + 0x65, 0x22, 0xc5, 0x07, 0x0a, 0x0f, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, + 0x16, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x06, 0x65, 0x72, 0x72, 0x6d, 0x73, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x46, 0x72, 0x69, + 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x46, 0x72, 0x69, + 0x65, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x49, + 0x73, 0x43, 0x6f, 0x6e, 0x63, 0x65, 0x72, 0x6e, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0b, 0x49, 0x73, 0x43, 0x6f, 0x6e, 0x63, 0x65, 0x72, 0x6e, 0x65, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x63, + 0x72, 0x65, 0x64, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x04, 0x63, 0x61, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x69, 0x63, 0x6b, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6e, 0x69, 0x63, 0x6b, 0x12, 0x10, 0x0a, 0x03, 0x61, + 0x67, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, + 0x03, 0x6c, 0x65, 0x76, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6c, 0x65, 0x76, 0x12, + 0x12, 0x0a, 0x04, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x6a, + 0x6f, 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x70, 0x65, 0x61, 0x6b, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x70, 0x65, 0x61, + 0x6b, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x62, 0x61, 0x72, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x12, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x67, 0x62, 0x61, 0x72, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x67, 0x62, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x07, 0x67, 0x62, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x62, 0x61, + 0x72, 0x43, 0x6e, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x67, 0x62, 0x61, 0x72, + 0x43, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x73, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x6f, + 0x64, 0x43, 0x61, 0x72, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x41, + 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x6f, 0x64, 0x43, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69, + 0x73, 0x56, 0x69, 0x70, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x56, 0x69, + 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73, 0x59, 0x65, 0x61, 0x72, 0x56, 0x69, 0x70, 0x18, 0x17, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x59, 0x65, 0x61, 0x72, 0x56, 0x69, 0x70, 0x12, + 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x53, 0x75, 0x70, 0x65, 0x72, 0x56, 0x69, 0x70, 0x18, 0x18, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x53, 0x75, 0x70, 0x65, 0x72, 0x56, 0x69, 0x70, 0x12, + 0x1c, 0x0a, 0x09, 0x69, 0x73, 0x53, 0x75, 0x70, 0x65, 0x72, 0x51, 0x71, 0x18, 0x19, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x53, 0x75, 0x70, 0x65, 0x72, 0x51, 0x71, 0x12, 0x16, 0x0a, + 0x06, 0x76, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x76, + 0x69, 0x70, 0x4c, 0x65, 0x76, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x1b, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x18, 0x1c, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x44, + 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x65, + 0x72, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f, + 0x6e, 0x63, 0x65, 0x72, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x70, 0x65, + 0x63, 0x69, 0x61, 0x6c, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0c, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x36, 0x0a, + 0x16, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x45, 0x78, 0x70, + 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x20, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x73, + 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x45, 0x78, 0x70, 0x69, 0x72, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, + 0x6d, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, + 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x6a, 0x6f, 0x62, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, + 0x6a, 0x6f, 0x62, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x64, 0x61, 0x6c, 0x49, 0x64, 0x18, 0x25, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x65, 0x64, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x14, 0x0a, + 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x27, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x65, + 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x68, 0x6f, 0x6e, 0x6f, 0x72, 0x18, 0x29, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x68, 0x6f, 0x6e, 0x6f, 0x72, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, + 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3247,7 +3813,7 @@ func file_data_proto_rawDescGZIP() []byte { return file_data_proto_rawDescData } -var file_data_proto_msgTypes = make([]protoimpl.MessageInfo, 27) +var file_data_proto_msgTypes = make([]protoimpl.MessageInfo, 30) var file_data_proto_goTypes = []interface{}{ (*DeviceInfo)(nil), // 0: DeviceInfo (*RequestBody)(nil), // 1: RequestBody @@ -3276,6 +3842,9 @@ var file_data_proto_goTypes = []interface{}{ (*Sub44)(nil), // 24: Sub44 (*Sub44FriendSyncMsg)(nil), // 25: Sub44FriendSyncMsg (*Sub44GroupSyncMsg)(nil), // 26: Sub44GroupSyncMsg + (*GroupMemberReqBody)(nil), // 27: GroupMemberReqBody + (*GroupMemberRspBody)(nil), // 28: GroupMemberRspBody + (*GroupMemberInfo)(nil), // 29: GroupMemberInfo } var file_data_proto_depIdxs = []int32{ 2, // 0: RequestBody.rpt_config_list:type_name -> ConfigSeq @@ -3295,11 +3864,12 @@ var file_data_proto_depIdxs = []int32{ 23, // 14: SubB3.msgAddFrdNotify:type_name -> SubB3AddFrdNotify 25, // 15: Sub44.friendSyncMsg:type_name -> Sub44FriendSyncMsg 26, // 16: Sub44.groupSyncMsg:type_name -> Sub44GroupSyncMsg - 17, // [17:17] is the sub-list for method output_type - 17, // [17:17] is the sub-list for method input_type - 17, // [17:17] is the sub-list for extension type_name - 17, // [17:17] is the sub-list for extension extendee - 0, // [0:17] is the sub-list for field type_name + 29, // 17: GroupMemberRspBody.memInfo:type_name -> GroupMemberInfo + 18, // [18:18] is the sub-list for method output_type + 18, // [18:18] is the sub-list for method input_type + 18, // [18:18] is the sub-list for extension type_name + 18, // [18:18] is the sub-list for extension extendee + 0, // [0:18] is the sub-list for field type_name } func init() { file_data_proto_init() } @@ -3632,6 +4202,42 @@ func file_data_proto_init() { return nil } } + file_data_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GroupMemberReqBody); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_data_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GroupMemberRspBody); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_data_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GroupMemberInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -3639,7 +4245,7 @@ func file_data_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_data_proto_rawDesc, NumEnums: 0, - NumMessages: 27, + NumMessages: 30, NumExtensions: 0, NumServices: 0, }, diff --git a/client/pb/data.proto b/client/pb/data.proto index ac62c085..ae2a9898 100644 --- a/client/pb/data.proto +++ b/client/pb/data.proto @@ -4,305 +4,366 @@ option go_package = ".;pb"; message DeviceInfo { - string bootloader = 1; - string procVersion = 2; - string codename = 3; - string incremental = 4; - string fingerprint = 5; - string bootId = 6; - string androidId = 7; - string baseBand = 8; - string innerVersion = 9; + string bootloader = 1; + string procVersion = 2; + string codename = 3; + string incremental = 4; + string fingerprint = 5; + string bootId = 6; + string androidId = 7; + string baseBand = 8; + string innerVersion = 9; } message RequestBody { - repeated ConfigSeq rpt_config_list = 1; + repeated ConfigSeq rpt_config_list = 1; } message ConfigSeq { - int32 type = 1; - int32 version = 2; + int32 type = 1; + int32 version = 2; } message D50ReqBody { - int64 appid = 1; - int32 maxPkgSize = 2; - int32 startTime = 3; - int32 startIndex = 4; - int32 reqNum = 5; - repeated int64 uinList = 6; - int32 reqMusicSwitch = 91001; - int32 reqMutualmarkAlienation = 101001; - int32 reqMutualmarkScore = 141001; - int32 reqKsingSwitch = 151001; - int32 reqMutualmarkLbsshare = 181001; + int64 appid = 1; + int32 maxPkgSize = 2; + int32 startTime = 3; + int32 startIndex = 4; + int32 reqNum = 5; + repeated int64 uinList = 6; + int32 reqMusicSwitch = 91001; + int32 reqMutualmarkAlienation = 101001; + int32 reqMutualmarkScore = 141001; + int32 reqKsingSwitch = 151001; + int32 reqMutualmarkLbsshare = 181001; } message D388ReqBody { - int32 netType = 1; - int32 subcmd = 2; - repeated TryUpImgReq msgTryUpImgReq = 3; - repeated TryUpPttReq msgTryUpPttReq = 5; - repeated GetPttUrlReq msgGetPttReq = 6; - int32 commandId = 7; - bytes extension = 1001; + int32 netType = 1; + int32 subcmd = 2; + repeated TryUpImgReq msgTryUpImgReq = 3; + repeated TryUpPttReq msgTryUpPttReq = 5; + repeated GetPttUrlReq msgGetPttReq = 6; + int32 commandId = 7; + bytes extension = 1001; } message D388RespBody { - int32 clientIp = 1; - int32 subCmd = 2; - repeated TryUpImgResp msgTryUpImgRsp = 3; - repeated TryUpPttResp msgTryUpPttRsp = 5; - repeated GetPttUrlRsp msgGetPttUrlRsp = 6; + int32 clientIp = 1; + int32 subCmd = 2; + repeated TryUpImgResp msgTryUpImgRsp = 3; + repeated TryUpPttResp msgTryUpPttRsp = 5; + repeated GetPttUrlRsp msgGetPttUrlRsp = 6; } message GetPttUrlReq { - int64 groupCode = 1; - int64 dstUin = 2; - int64 fileId = 3; - bytes fileMd5 = 4; - int32 reqTerm = 5; - int32 reqPlatformType = 6; - int32 innerIp = 7; - int32 buType = 8; - bytes buildVer = 9; - //int64 fileId = 10; - bytes fileKey = 11; - int32 codec = 12; - int32 buId = 13; - int32 reqTransferType = 14; - int32 isAuto = 15; + int64 groupCode = 1; + int64 dstUin = 2; + int64 fileId = 3; + bytes fileMd5 = 4; + int32 reqTerm = 5; + int32 reqPlatformType = 6; + int32 innerIp = 7; + int32 buType = 8; + bytes buildVer = 9; + //int64 fileId = 10; + bytes fileKey = 11; + int32 codec = 12; + int32 buId = 13; + int32 reqTransferType = 14; + int32 isAuto = 15; } message GetPttUrlRsp { - int64 fileId = 1; - bytes fileMd5 = 2; - int32 result = 3; - bytes failMsg = 4; - bytes bytesDownUrl = 5; - repeated int32 uint32DownIp = 6; - repeated int32 uint32DownPort = 7; - bytes downDomain = 8; - bytes downPara = 9; - //int64 fileId = 10; - int32 transferType = 11; - int32 allowRetry = 12; - //repeated IPv6Info msgDownIp6 = 26; - bytes clientIp6 = 27; - string strDomain = 28; + int64 fileId = 1; + bytes fileMd5 = 2; + int32 result = 3; + bytes failMsg = 4; + bytes bytesDownUrl = 5; + repeated int32 uint32DownIp = 6; + repeated int32 uint32DownPort = 7; + bytes downDomain = 8; + bytes downPara = 9; + //int64 fileId = 10; + int32 transferType = 11; + int32 allowRetry = 12; + //repeated IPv6Info msgDownIp6 = 26; + bytes clientIp6 = 27; + string strDomain = 28; } message ReqDataHighwayHead { - DataHighwayHead msgBasehead = 1; - SegHead msgSeghead = 2; - bytes reqExtendinfo = 3; - int64 timestamp = 4; - //LoginSigHead? msgLoginSigHead = 5; + DataHighwayHead msgBasehead = 1; + SegHead msgSeghead = 2; + bytes reqExtendinfo = 3; + int64 timestamp = 4; + //LoginSigHead? msgLoginSigHead = 5; } message RspDataHighwayHead { - DataHighwayHead msgBasehead = 1; - SegHead msgSeghead = 2; - int32 errorCode = 3; - int32 allowRetry = 4; - int32 cachecost = 5; - int32 htcost = 6; - bytes rspExtendinfo = 7; - int64 timestamp = 8; - int64 range = 9; - int32 isReset = 10; + DataHighwayHead msgBasehead = 1; + SegHead msgSeghead = 2; + int32 errorCode = 3; + int32 allowRetry = 4; + int32 cachecost = 5; + int32 htcost = 6; + bytes rspExtendinfo = 7; + int64 timestamp = 8; + int64 range = 9; + int32 isReset = 10; } message DataHighwayHead { - int32 version = 1; - string uin = 2; - string command = 3; - int32 seq = 4; - int32 retryTimes = 5; - int32 appid = 6; - int32 dataflag = 7; - int32 commandId = 8; - string buildVer = 9; - int32 localeId = 10; + int32 version = 1; + string uin = 2; + string command = 3; + int32 seq = 4; + int32 retryTimes = 5; + int32 appid = 6; + int32 dataflag = 7; + int32 commandId = 8; + string buildVer = 9; + int32 localeId = 10; } message SegHead { - int32 serviceid = 1; - int64 filesize = 2; - int64 dataoffset = 3; - int32 datalength = 4; - int32 rtcode = 5; - bytes serviceticket = 6; - int32 flag = 7; - bytes md5 = 8; - bytes fileMd5 = 9; - int32 cacheAddr = 10; - int32 queryTimes = 11; - int32 updateCacheip = 12; + int32 serviceid = 1; + int64 filesize = 2; + int64 dataoffset = 3; + int32 datalength = 4; + int32 rtcode = 5; + bytes serviceticket = 6; + int32 flag = 7; + bytes md5 = 8; + bytes fileMd5 = 9; + int32 cacheAddr = 10; + int32 queryTimes = 11; + int32 updateCacheip = 12; } message TryUpImgReq { - int64 groupCode = 1; - int64 srcUin = 2; - int64 fileId = 3; - bytes fileMd5 = 4; - int64 fileSize = 5; - string fileName = 6; - int32 srcTerm = 7; - int32 platformType = 8; - int32 buType = 9; - int32 picWidth = 10; - int32 picHeight = 11; - int32 picType = 12; - string buildVer = 13; - int32 innerIp = 14; - int32 appPicType = 15; - int32 originalPic = 16; - bytes fileIndex = 17; - int64 dstUin = 18; - int32 srvUpload = 19; - bytes transferUrl = 20; + int64 groupCode = 1; + int64 srcUin = 2; + int64 fileId = 3; + bytes fileMd5 = 4; + int64 fileSize = 5; + string fileName = 6; + int32 srcTerm = 7; + int32 platformType = 8; + int32 buType = 9; + int32 picWidth = 10; + int32 picHeight = 11; + int32 picType = 12; + string buildVer = 13; + int32 innerIp = 14; + int32 appPicType = 15; + int32 originalPic = 16; + bytes fileIndex = 17; + int64 dstUin = 18; + int32 srvUpload = 19; + bytes transferUrl = 20; } message TryUpImgResp { - int64 fileId = 1; - int32 result = 2; - string failMsg = 3; - bool boolFileExit = 4; - ImgInfo msgImgInfo = 5; - repeated int32 uint32UpIp = 6; - repeated int32 uint32UpPort = 7; - bytes upUkey = 8; - int64 fid = 9; + int64 fileId = 1; + int32 result = 2; + string failMsg = 3; + bool boolFileExit = 4; + ImgInfo msgImgInfo = 5; + repeated int32 uint32UpIp = 6; + repeated int32 uint32UpPort = 7; + bytes upUkey = 8; + int64 fid = 9; } message TryUpPttReq { - int64 groupCode = 1; - int64 srcUin = 2; - int64 fileId = 3; - bytes fileMd5 = 4; - int64 fileSize = 5; - bytes fileName = 6; - int32 srcTerm = 7; - int32 platformType = 8; - int32 buType = 9; - string buildVer = 10; - int32 innerIp = 11; - int32 voiceLength = 12; - bool boolNewUpChan = 13; - int32 codec = 14; - int32 voiceType = 15; - int32 buId = 16; + int64 groupCode = 1; + int64 srcUin = 2; + int64 fileId = 3; + bytes fileMd5 = 4; + int64 fileSize = 5; + bytes fileName = 6; + int32 srcTerm = 7; + int32 platformType = 8; + int32 buType = 9; + string buildVer = 10; + int32 innerIp = 11; + int32 voiceLength = 12; + bool boolNewUpChan = 13; + int32 codec = 14; + int32 voiceType = 15; + int32 buId = 16; } message TryUpPttResp { - int64 fileId = 1; - int32 result = 2; - string failMsg = 3; - bool boolFileExit = 4; - repeated int32 uint32UpIp = 5; - repeated int32 uint32UpPort = 6; - bytes upUkey = 7; - // int64 fileid = 8; // - int64 upOffset = 9; - int64 blockSize = 10; - bytes fileKey = 11; - int32 channelType = 12; - // List? msgUpIp6 = 26; - // bytes clientIp6 = 27; + int64 fileId = 1; + int32 result = 2; + string failMsg = 3; + bool boolFileExit = 4; + repeated int32 uint32UpIp = 5; + repeated int32 uint32UpPort = 6; + bytes upUkey = 7; + // int64 fileid = 8; // + int64 upOffset = 9; + int64 blockSize = 10; + bytes fileKey = 11; + int32 channelType = 12; + // List? msgUpIp6 = 26; + // bytes clientIp6 = 27; } message ImgInfo { - bytes fileMd5 = 1; - int32 fileType = 2; - int64 fileSize = 3; - int32 fileWidth = 4; - int32 fileHeight = 5; + bytes fileMd5 = 1; + int32 fileType = 2; + int64 fileSize = 3; + int32 fileWidth = 4; + int32 fileHeight = 5; } message DeleteMessageRequest { - repeated MessageItem items = 1; + repeated MessageItem items = 1; } message MessageItem { - int64 fromUin = 1; - int64 toUin = 2; - int32 msgType = 3; - int32 msgSeq = 4; - int64 msgUid = 5; - bytes sig = 7; + int64 fromUin = 1; + int64 toUin = 2; + int32 msgType = 3; + int32 msgSeq = 4; + int64 msgUid = 5; + bytes sig = 7; } message SubD4 { - int64 uin = 1; + int64 uin = 1; } message Sub8A { - repeated Sub8AMsgInfo msg_info = 1; - int32 appId = 2; - int32 instId = 3; - int32 longMessageFlag = 4; - bytes reserved = 5; + repeated Sub8AMsgInfo msg_info = 1; + int32 appId = 2; + int32 instId = 3; + int32 longMessageFlag = 4; + bytes reserved = 5; } message Sub8AMsgInfo { - int64 fromUin = 1; - int64 toUin = 2; - int32 msgSeq= 3; - int64 msgUid = 4; - int64 msgTime = 5; - int32 msgRandom = 6; - int32 pkgNum = 7; - int32 pkgIndex = 8; - int32 devSeq = 9; + int64 fromUin = 1; + int64 toUin = 2; + int32 msgSeq = 3; + int64 msgUid = 4; + int64 msgTime = 5; + int32 msgRandom = 6; + int32 pkgNum = 7; + int32 pkgIndex = 8; + int32 devSeq = 9; } message SubB3 { - int32 type = 1; - SubB3AddFrdNotify msgAddFrdNotify = 2; + int32 type = 1; + SubB3AddFrdNotify msgAddFrdNotify = 2; } message SubB3AddFrdNotify { - int64 uin = 1; - string nick = 5; + int64 uin = 1; + string nick = 5; } message Sub44 { - Sub44FriendSyncMsg friendSyncMsg = 1; - Sub44GroupSyncMsg groupSyncMsg = 2; + Sub44FriendSyncMsg friendSyncMsg = 1; + Sub44GroupSyncMsg groupSyncMsg = 2; } message Sub44FriendSyncMsg { - int64 uin = 1; - int64 fUin = 2; - int32 processType = 3; - int32 time = 4; - int32 processFlag = 5; - int32 sourceId = 6; - int32 sourceSubId = 7; - repeated string strWording = 8; + int64 uin = 1; + int64 fUin = 2; + int32 processType = 3; + int32 time = 4; + int32 processFlag = 5; + int32 sourceId = 6; + int32 sourceSubId = 7; + repeated string strWording = 8; } message Sub44GroupSyncMsg { - int32 msgType = 1; - int64 msgSeq = 2; - int64 grpCode = 3; - int64 gaCode = 4; - int64 optUin1 = 5; - int64 optUin2 = 6; - bytes msgBuf = 7; - bytes authKey = 8; - int32 msgStatus = 9; - int64 actionUin = 10; - int64 actionTime = 11; - int32 curMaxMemCount = 12; - int32 nextMaxMemCount = 13; - int32 curMemCount = 14; - int32 reqSrcId = 15; - int32 reqSrcSubId = 16; - int32 inviterRole = 17; - int32 extAdminNum = 18; - int32 processFlag = 19; -} \ No newline at end of file + int32 msgType = 1; + int64 msgSeq = 2; + int64 grpCode = 3; + int64 gaCode = 4; + int64 optUin1 = 5; + int64 optUin2 = 6; + bytes msgBuf = 7; + bytes authKey = 8; + int32 msgStatus = 9; + int64 actionUin = 10; + int64 actionTime = 11; + int32 curMaxMemCount = 12; + int32 nextMaxMemCount = 13; + int32 curMemCount = 14; + int32 reqSrcId = 15; + int32 reqSrcSubId = 16; + int32 inviterRole = 17; + int32 extAdminNum = 18; + int32 processFlag = 19; +} + +message GroupMemberReqBody { + int64 groupCode = 1; + int64 uin = 2; + bool newClient = 3; + int32 clientType = 4; + int32 richCardNameVer = 5; +} + +message GroupMemberRspBody { + int64 groupCode = 1; + int32 selfRole = 2; + GroupMemberInfo memInfo = 3; + bool boolSelfLocationShared = 4; + int32 groupType = 5; +} + +message GroupMemberInfo { + int64 uin = 1; + int32 result = 2; + bytes errmsg = 3; + bool IsFriend = 4; + bytes remark = 5; + bool IsConcerned = 6; + int32 credit = 7; + bytes card = 8; + int32 sex = 9; + bytes location = 10; + bytes nick = 11; + int32 age = 12; + bytes lev = 13; + int64 join = 14; + int64 lastSpeak = 15; + //repeated CustomEntry customEnties = 16; + //repeated GBarInfo gbarConcerned = 17; + bytes gbarTitle = 18; + bytes gbarUrl = 19; + int32 gbarCnt = 20; + bool isAllowModCard = 21; + bool isVip = 22; + bool isYearVip = 23; + bool isSuperVip = 24; + bool isSuperQq = 25; + int32 vipLev = 26; + int32 role = 27; + bool locationShared = 28; + int64 int64Distance = 29; + int32 concernType = 30; + bytes specialTitle = 31; + int32 specialTitleExpireTime = 32; + //FlowersEntry flowerEntry = 33; + //TeamEntry teamEntry = 34; + bytes phoneNum = 35; + bytes job = 36; + int32 medalId = 37; + + int32 level = 39; + + string honor = 41; +} +