From 991f69f1415967f7a33d0528aa907bbe75788f04 Mon Sep 17 00:00:00 2001 From: Mrs4s Date: Sat, 6 Nov 2021 23:37:33 +0800 Subject: [PATCH] feat: ChannelService.FetchGuestGuild --- binary/protobuf.go | 5 + client/guild.go | 86 +++++++ client/pb/channel/unknown.pb.go | 420 +++++++++++++++++++++++++++----- client/pb/channel/unknown.proto | 26 +- 4 files changed, 481 insertions(+), 56 deletions(-) diff --git a/binary/protobuf.go b/binary/protobuf.go index 0b70a796..ba520612 100644 --- a/binary/protobuf.go +++ b/binary/protobuf.go @@ -50,6 +50,11 @@ func (msg DynamicProtoMessage) Encode() []byte { b := []byte(v) en.uvarint(uint64(len(b))) _, _ = en.Write(b) + case []uint64: + for i := 0; i < len(v); i++ { + en.uvarint(key | 0) + en.uvarint(v[i]) + } case DynamicProtoMessage: en.uvarint(key | 2) b := v.Encode() diff --git a/client/guild.go b/client/guild.go index a99de7e6..f77b1ac1 100644 --- a/client/guild.go +++ b/client/guild.go @@ -1,6 +1,7 @@ package client import ( + "fmt" "github.com/Mrs4s/MiraiGo/binary" "github.com/Mrs4s/MiraiGo/client/pb/channel" "github.com/Mrs4s/MiraiGo/client/pb/oidb" @@ -28,12 +29,27 @@ type ( GuildId uint64 GuildCode uint64 GuildName string + CoverUrl string + AvatarUrl string Channels []*ChannelInfo Bots []*GuildMemberInfo Members []*GuildMemberInfo Admins []*GuildMemberInfo } + // GuildMeta 频道数据 + GuildMeta struct { + GuildId uint64 + GuildName string + GuildProfile string + MaxMemberCount int64 + MemberCount int64 + CreateTime int64 + MaxRobotCount int32 + MaxAdminCount int32 + OwnerId uint64 + } + GuildMemberInfo struct { TinyId uint64 Title string @@ -205,6 +221,73 @@ func (s *GuildService) GetGuildMemberProfileInfo(guildId, tinyId uint64) (*Guild }, nil } +func (s *GuildService) FetchGuestGuild(guildId uint64) (*GuildMeta, error) { + seq := s.c.nextSeq() + u1 := uint32(1) + payload := s.c.packOIDBPackageDynamically(3927, 9, binary.DynamicProtoMessage{ // todo: 可能还需要处理翻页的情况? + 1: binary.DynamicProtoMessage{ + 1: binary.DynamicProtoMessage{ + 2: u1, 4: u1, 5: u1, 6: u1, 7: u1, 8: u1, 11: u1, 12: u1, 13: u1, 14: u1, 45: u1, + 18: u1, 19: u1, 20: u1, 22: u1, 23: u1, 5002: u1, 5003: u1, 5004: u1, 5005: u1, 10007: u1, + }, + 2: binary.DynamicProtoMessage{ + 3: u1, 4: u1, 6: u1, 11: u1, 14: u1, 15: u1, 16: u1, 17: u1, + }, + }, + 2: binary.DynamicProtoMessage{ + 1: guildId, + }, + }) + packet := packets.BuildUniPacket(s.c.Uin, seq, "OidbSvcTrpcTcp.0xf57_9", 1, s.c.OutGoingPacketSessionId, []byte{}, s.c.sigInfo.d2Key, payload) + rsp, err := s.c.sendAndWaitDynamic(seq, packet) + if err != nil { + return nil, errors.Wrap(err, "send packet error") + } + pkg := new(oidb.OIDBSSOPkg) + oidbRsp := new(channel.ChannelOidb0Xf57Rsp) + if err = proto.Unmarshal(rsp, pkg); err != nil { + return nil, errors.Wrap(err, "failed to unmarshal protobuf message") + } + if err = proto.Unmarshal(pkg.Bodybuffer, oidbRsp); err != nil { + return nil, errors.Wrap(err, "failed to unmarshal protobuf message") + } + return &GuildMeta{ + GuildName: oidbRsp.Rsp.Meta.GetName(), + GuildProfile: oidbRsp.Rsp.Meta.GetProfile(), + MaxMemberCount: oidbRsp.Rsp.Meta.GetMaxMemberCount(), + MemberCount: oidbRsp.Rsp.Meta.GetMemberCount(), + CreateTime: oidbRsp.Rsp.Meta.GetCreateTime(), + MaxRobotCount: oidbRsp.Rsp.Meta.GetRobotMaxNum(), + MaxAdminCount: oidbRsp.Rsp.Meta.GetAdminMaxNum(), + OwnerId: oidbRsp.Rsp.Meta.GetOwnerId(), + }, nil +} + +/* need analysis +func (s *GuildService) fetchChannelListState(guildId uint64, channels []*ChannelInfo) { + seq := s.c.nextSeq() + var ids []uint64 + for _, info := range channels { + ids = append(ids, info.ChannelId) + } + payload := s.c.packOIDBPackageDynamically(4104, 1, binary.DynamicProtoMessage{ + 1: binary.DynamicProtoMessage{ + 1: guildId, + 2: ids, + }, + }) + packet := packets.BuildUniPacket(s.c.Uin, seq, "OidbSvcTrpcTcp.0x1008_1", 1, s.c.OutGoingPacketSessionId, []byte{}, s.c.sigInfo.d2Key, payload) + rsp, err := s.c.sendAndWaitDynamic(seq, packet) + if err != nil { + return + } + pkg := new(oidb.OIDBSSOPkg) + if err = proto.Unmarshal(rsp, pkg); err != nil { + return //nil, errors.Wrap(err, "failed to unmarshal protobuf message") + } +} +*/ + func (c *QQClient) buildSyncChannelFirstViewPacket() (uint16, []byte) { seq := c.nextSeq() req := &channel.FirstViewReq{ @@ -233,6 +316,8 @@ func decodeChannelPushFirstView(c *QQClient, _ *incomingPacketInfo, payload []by GuildId: guild.GetGuildId(), GuildCode: guild.GetGuildCode(), GuildName: utils.B2S(guild.GuildName), + CoverUrl: fmt.Sprintf("https://groupprocover-76483.picgzc.qpic.cn/%v", guild.GetGuildId()), + AvatarUrl: fmt.Sprintf("https://groupprohead-76292.picgzc.qpic.cn/%v", guild.GetGuildId()), } for _, node := range guild.ChannelNodes { meta := new(channel.ChannelMsgMeta) @@ -249,6 +334,7 @@ func decodeChannelPushFirstView(c *QQClient, _ *incomingPacketInfo, payload []by } info.Bots, info.Members, info.Admins, _ = c.GuildService.GetGuildMembers(info.GuildId) c.GuildService.Guilds = append(c.GuildService.Guilds, info) + c.GuildService.FetchGuestGuild(info.GuildId) } } if len(firstViewMsg.ChannelMsgs) > 0 { // sync msg diff --git a/client/pb/channel/unknown.pb.go b/client/pb/channel/unknown.pb.go index 0f43dc7e..47b9c9b0 100644 --- a/client/pb/channel/unknown.pb.go +++ b/client/pb/channel/unknown.pb.go @@ -1,4 +1,4 @@ -// 存放所有未知的结构体 +// 存放所有未知的结构体, 均为手动分析复原 // Code generated by protoc-gen-go. DO NOT EDIT. // versions: @@ -9,11 +9,10 @@ package channel import ( - reflect "reflect" - sync "sync" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) const ( @@ -188,6 +187,108 @@ func (x *ChannelOidb0Xfc9Rsp) GetProfile() *GuildUserProfile { return nil } +type ChannelOidb0Xf57Rsp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Rsp *GuildMetaRsp `protobuf:"bytes,1,opt,name=rsp" json:"rsp,omitempty"` +} + +func (x *ChannelOidb0Xf57Rsp) Reset() { + *x = ChannelOidb0Xf57Rsp{} + if protoimpl.UnsafeEnabled { + mi := &file_unknown_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChannelOidb0Xf57Rsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChannelOidb0Xf57Rsp) ProtoMessage() {} + +func (x *ChannelOidb0Xf57Rsp) ProtoReflect() protoreflect.Message { + mi := &file_unknown_proto_msgTypes[3] + 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 ChannelOidb0Xf57Rsp.ProtoReflect.Descriptor instead. +func (*ChannelOidb0Xf57Rsp) Descriptor() ([]byte, []int) { + return file_unknown_proto_rawDescGZIP(), []int{3} +} + +func (x *ChannelOidb0Xf57Rsp) GetRsp() *GuildMetaRsp { + if x != nil { + return x.Rsp + } + return nil +} + +type GuildMetaRsp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GuildId *uint64 `protobuf:"varint,3,opt,name=guildId" json:"guildId,omitempty"` + Meta *GuildMeta `protobuf:"bytes,4,opt,name=meta" json:"meta,omitempty"` +} + +func (x *GuildMetaRsp) Reset() { + *x = GuildMetaRsp{} + if protoimpl.UnsafeEnabled { + mi := &file_unknown_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GuildMetaRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GuildMetaRsp) ProtoMessage() {} + +func (x *GuildMetaRsp) ProtoReflect() protoreflect.Message { + mi := &file_unknown_proto_msgTypes[4] + 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 GuildMetaRsp.ProtoReflect.Descriptor instead. +func (*GuildMetaRsp) Descriptor() ([]byte, []int) { + return file_unknown_proto_rawDescGZIP(), []int{4} +} + +func (x *GuildMetaRsp) GetGuildId() uint64 { + if x != nil && x.GuildId != nil { + return *x.GuildId + } + return 0 +} + +func (x *GuildMetaRsp) GetMeta() *GuildMeta { + if x != nil { + return x.Meta + } + return nil +} + type GuildAdminInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -199,7 +300,7 @@ type GuildAdminInfo struct { func (x *GuildAdminInfo) Reset() { *x = GuildAdminInfo{} if protoimpl.UnsafeEnabled { - mi := &file_unknown_proto_msgTypes[3] + mi := &file_unknown_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -212,7 +313,7 @@ func (x *GuildAdminInfo) String() string { func (*GuildAdminInfo) ProtoMessage() {} func (x *GuildAdminInfo) ProtoReflect() protoreflect.Message { - mi := &file_unknown_proto_msgTypes[3] + mi := &file_unknown_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -225,7 +326,7 @@ func (x *GuildAdminInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use GuildAdminInfo.ProtoReflect.Descriptor instead. func (*GuildAdminInfo) Descriptor() ([]byte, []int) { - return file_unknown_proto_rawDescGZIP(), []int{3} + return file_unknown_proto_rawDescGZIP(), []int{5} } func (x *GuildAdminInfo) GetAdmins() []*GuildMemberInfo { @@ -250,7 +351,7 @@ type GuildMemberInfo struct { func (x *GuildMemberInfo) Reset() { *x = GuildMemberInfo{} if protoimpl.UnsafeEnabled { - mi := &file_unknown_proto_msgTypes[4] + mi := &file_unknown_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -263,7 +364,7 @@ func (x *GuildMemberInfo) String() string { func (*GuildMemberInfo) ProtoMessage() {} func (x *GuildMemberInfo) ProtoReflect() protoreflect.Message { - mi := &file_unknown_proto_msgTypes[4] + mi := &file_unknown_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -276,7 +377,7 @@ func (x *GuildMemberInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use GuildMemberInfo.ProtoReflect.Descriptor instead. func (*GuildMemberInfo) Descriptor() ([]byte, []int) { - return file_unknown_proto_rawDescGZIP(), []int{4} + return file_unknown_proto_rawDescGZIP(), []int{6} } func (x *GuildMemberInfo) GetTitle() string { @@ -330,7 +431,7 @@ type GuildUserProfile struct { func (x *GuildUserProfile) Reset() { *x = GuildUserProfile{} if protoimpl.UnsafeEnabled { - mi := &file_unknown_proto_msgTypes[5] + mi := &file_unknown_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -343,7 +444,7 @@ func (x *GuildUserProfile) String() string { func (*GuildUserProfile) ProtoMessage() {} func (x *GuildUserProfile) ProtoReflect() protoreflect.Message { - mi := &file_unknown_proto_msgTypes[5] + mi := &file_unknown_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -356,7 +457,7 @@ func (x *GuildUserProfile) ProtoReflect() protoreflect.Message { // Deprecated: Use GuildUserProfile.ProtoReflect.Descriptor instead. func (*GuildUserProfile) Descriptor() ([]byte, []int) { - return file_unknown_proto_rawDescGZIP(), []int{5} + return file_unknown_proto_rawDescGZIP(), []int{7} } func (x *GuildUserProfile) GetTinyId() uint64 { @@ -387,6 +488,141 @@ func (x *GuildUserProfile) GetJoinTime() int64 { return 0 } +type GuildMeta struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GuildCode *uint64 `protobuf:"varint,2,opt,name=guildCode" json:"guildCode,omitempty"` + CreateTime *int64 `protobuf:"varint,4,opt,name=createTime" json:"createTime,omitempty"` + MaxMemberCount *int64 `protobuf:"varint,5,opt,name=maxMemberCount" json:"maxMemberCount,omitempty"` + MemberCount *int64 `protobuf:"varint,6,opt,name=memberCount" json:"memberCount,omitempty"` + Name *string `protobuf:"bytes,8,opt,name=name" json:"name,omitempty"` + RobotMaxNum *int32 `protobuf:"varint,11,opt,name=robotMaxNum" json:"robotMaxNum,omitempty"` + AdminMaxNum *int32 `protobuf:"varint,12,opt,name=adminMaxNum" json:"adminMaxNum,omitempty"` + Profile *string `protobuf:"bytes,13,opt,name=profile" json:"profile,omitempty"` + AvatarSeq *int64 `protobuf:"varint,14,opt,name=avatarSeq" json:"avatarSeq,omitempty"` + OwnerId *uint64 `protobuf:"varint,18,opt,name=ownerId" json:"ownerId,omitempty"` + CoverSeq *int64 `protobuf:"varint,19,opt,name=coverSeq" json:"coverSeq,omitempty"` + ClientId *int32 `protobuf:"varint,20,opt,name=clientId" json:"clientId,omitempty"` +} + +func (x *GuildMeta) Reset() { + *x = GuildMeta{} + if protoimpl.UnsafeEnabled { + mi := &file_unknown_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GuildMeta) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GuildMeta) ProtoMessage() {} + +func (x *GuildMeta) ProtoReflect() protoreflect.Message { + mi := &file_unknown_proto_msgTypes[8] + 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 GuildMeta.ProtoReflect.Descriptor instead. +func (*GuildMeta) Descriptor() ([]byte, []int) { + return file_unknown_proto_rawDescGZIP(), []int{8} +} + +func (x *GuildMeta) GetGuildCode() uint64 { + if x != nil && x.GuildCode != nil { + return *x.GuildCode + } + return 0 +} + +func (x *GuildMeta) GetCreateTime() int64 { + if x != nil && x.CreateTime != nil { + return *x.CreateTime + } + return 0 +} + +func (x *GuildMeta) GetMaxMemberCount() int64 { + if x != nil && x.MaxMemberCount != nil { + return *x.MaxMemberCount + } + return 0 +} + +func (x *GuildMeta) GetMemberCount() int64 { + if x != nil && x.MemberCount != nil { + return *x.MemberCount + } + return 0 +} + +func (x *GuildMeta) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *GuildMeta) GetRobotMaxNum() int32 { + if x != nil && x.RobotMaxNum != nil { + return *x.RobotMaxNum + } + return 0 +} + +func (x *GuildMeta) GetAdminMaxNum() int32 { + if x != nil && x.AdminMaxNum != nil { + return *x.AdminMaxNum + } + return 0 +} + +func (x *GuildMeta) GetProfile() string { + if x != nil && x.Profile != nil { + return *x.Profile + } + return "" +} + +func (x *GuildMeta) GetAvatarSeq() int64 { + if x != nil && x.AvatarSeq != nil { + return *x.AvatarSeq + } + return 0 +} + +func (x *GuildMeta) GetOwnerId() uint64 { + if x != nil && x.OwnerId != nil { + return *x.OwnerId + } + return 0 +} + +func (x *GuildMeta) GetCoverSeq() int64 { + if x != nil && x.CoverSeq != nil { + return *x.CoverSeq + } + return 0 +} + +func (x *GuildMeta) GetClientId() int32 { + if x != nil && x.ClientId != nil { + return *x.ClientId + } + return 0 +} + var File_unknown_proto protoreflect.FileDescriptor var file_unknown_proto_rawDesc = []byte{ @@ -413,30 +649,63 @@ var file_unknown_proto_rawDesc = []byte{ 0x66, 0x63, 0x39, 0x52, 0x73, 0x70, 0x12, 0x33, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x42, 0x0a, 0x0e, 0x47, - 0x75, 0x69, 0x6c, 0x64, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x30, 0x0a, - 0x06, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x22, - 0x95, 0x01, 0x0a, 0x0f, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, - 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, - 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x70, 0x65, - 0x61, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6c, 0x61, - 0x73, 0x74, 0x53, 0x70, 0x65, 0x61, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, - 0x6f, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x74, 0x69, 0x6e, 0x79, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x06, 0x74, 0x69, 0x6e, 0x79, 0x49, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x10, 0x47, 0x75, 0x69, 0x6c, - 0x64, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x74, 0x69, 0x6e, 0x79, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x74, 0x69, - 0x6e, 0x79, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x1a, - 0x0a, 0x08, 0x6a, 0x6f, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x08, 0x6a, 0x6f, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x0c, 0x5a, 0x0a, 0x2e, 0x2f, - 0x3b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x6c, 0x65, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x3e, 0x0a, 0x13, 0x43, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4f, 0x69, 0x64, 0x62, 0x30, 0x78, 0x66, 0x35, 0x37, 0x52, + 0x73, 0x70, 0x12, 0x27, 0x0a, 0x03, 0x72, 0x73, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x4d, + 0x65, 0x74, 0x61, 0x52, 0x73, 0x70, 0x52, 0x03, 0x72, 0x73, 0x70, 0x22, 0x50, 0x0a, 0x0c, 0x47, + 0x75, 0x69, 0x6c, 0x64, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x73, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x67, + 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, + 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x47, 0x75, + 0x69, 0x6c, 0x64, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0x42, 0x0a, + 0x0e, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x30, 0x0a, 0x06, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x73, 0x22, 0x95, 0x01, 0x0a, 0x0f, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6e, + 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, + 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x53, + 0x70, 0x65, 0x61, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, + 0x6c, 0x61, 0x73, 0x74, 0x53, 0x70, 0x65, 0x61, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x72, 0x6f, 0x6c, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x69, 0x6e, 0x79, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x06, 0x74, 0x69, 0x6e, 0x79, 0x49, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x10, 0x47, 0x75, + 0x69, 0x6c, 0x64, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x74, 0x69, 0x6e, 0x79, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, + 0x74, 0x69, 0x6e, 0x79, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, + 0x12, 0x1a, 0x0a, 0x08, 0x6a, 0x6f, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x08, 0x6a, 0x6f, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xf5, 0x02, 0x0a, + 0x09, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x75, + 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x67, + 0x75, 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x4d, + 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x72, 0x6f, 0x62, + 0x6f, 0x74, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x64, 0x6d, 0x69, + 0x6e, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x61, + 0x64, 0x6d, 0x69, 0x6e, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x53, 0x65, + 0x71, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x53, + 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x18, 0x12, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x07, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x65, 0x71, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0c, 0x5a, 0x0a, 0x2e, 0x2f, 0x3b, 0x63, 0x68, 0x61, 0x6e, 0x6e, + 0x65, 0x6c, } var ( @@ -451,27 +720,32 @@ func file_unknown_proto_rawDescGZIP() []byte { return file_unknown_proto_rawDescData } -var file_unknown_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_unknown_proto_msgTypes = make([]protoimpl.MessageInfo, 9) var file_unknown_proto_goTypes = []interface{}{ (*ChannelOidb0Xf5BRsp)(nil), // 0: channel.ChannelOidb0xf5bRsp (*ChannelOidb0Xf88Rsp)(nil), // 1: channel.ChannelOidb0xf88Rsp (*ChannelOidb0Xfc9Rsp)(nil), // 2: channel.ChannelOidb0xfc9Rsp - (*GuildAdminInfo)(nil), // 3: channel.GuildAdminInfo - (*GuildMemberInfo)(nil), // 4: channel.GuildMemberInfo - (*GuildUserProfile)(nil), // 5: channel.GuildUserProfile + (*ChannelOidb0Xf57Rsp)(nil), // 3: channel.ChannelOidb0xf57Rsp + (*GuildMetaRsp)(nil), // 4: channel.GuildMetaRsp + (*GuildAdminInfo)(nil), // 5: channel.GuildAdminInfo + (*GuildMemberInfo)(nil), // 6: channel.GuildMemberInfo + (*GuildUserProfile)(nil), // 7: channel.GuildUserProfile + (*GuildMeta)(nil), // 8: channel.GuildMeta } var file_unknown_proto_depIdxs = []int32{ - 4, // 0: channel.ChannelOidb0xf5bRsp.bots:type_name -> channel.GuildMemberInfo - 4, // 1: channel.ChannelOidb0xf5bRsp.members:type_name -> channel.GuildMemberInfo - 3, // 2: channel.ChannelOidb0xf5bRsp.adminInfo:type_name -> channel.GuildAdminInfo - 5, // 3: channel.ChannelOidb0xf88Rsp.profile:type_name -> channel.GuildUserProfile - 5, // 4: channel.ChannelOidb0xfc9Rsp.profile:type_name -> channel.GuildUserProfile - 4, // 5: channel.GuildAdminInfo.admins:type_name -> channel.GuildMemberInfo - 6, // [6:6] is the sub-list for method output_type - 6, // [6:6] is the sub-list for method input_type - 6, // [6:6] is the sub-list for extension type_name - 6, // [6:6] is the sub-list for extension extendee - 0, // [0:6] is the sub-list for field type_name + 6, // 0: channel.ChannelOidb0xf5bRsp.bots:type_name -> channel.GuildMemberInfo + 6, // 1: channel.ChannelOidb0xf5bRsp.members:type_name -> channel.GuildMemberInfo + 5, // 2: channel.ChannelOidb0xf5bRsp.adminInfo:type_name -> channel.GuildAdminInfo + 7, // 3: channel.ChannelOidb0xf88Rsp.profile:type_name -> channel.GuildUserProfile + 7, // 4: channel.ChannelOidb0xfc9Rsp.profile:type_name -> channel.GuildUserProfile + 4, // 5: channel.ChannelOidb0xf57Rsp.rsp:type_name -> channel.GuildMetaRsp + 8, // 6: channel.GuildMetaRsp.meta:type_name -> channel.GuildMeta + 6, // 7: channel.GuildAdminInfo.admins:type_name -> channel.GuildMemberInfo + 8, // [8:8] is the sub-list for method output_type + 8, // [8:8] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name } func init() { file_unknown_proto_init() } @@ -517,7 +791,7 @@ func file_unknown_proto_init() { } } file_unknown_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GuildAdminInfo); i { + switch v := v.(*ChannelOidb0Xf57Rsp); i { case 0: return &v.state case 1: @@ -529,7 +803,7 @@ func file_unknown_proto_init() { } } file_unknown_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GuildMemberInfo); i { + switch v := v.(*GuildMetaRsp); i { case 0: return &v.state case 1: @@ -541,6 +815,30 @@ func file_unknown_proto_init() { } } file_unknown_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GuildAdminInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_unknown_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GuildMemberInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_unknown_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GuildUserProfile); i { case 0: return &v.state @@ -552,6 +850,18 @@ func file_unknown_proto_init() { return nil } } + file_unknown_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GuildMeta); 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{ @@ -559,7 +869,7 @@ func file_unknown_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_unknown_proto_rawDesc, NumEnums: 0, - NumMessages: 6, + NumMessages: 9, NumExtensions: 0, NumServices: 0, }, diff --git a/client/pb/channel/unknown.proto b/client/pb/channel/unknown.proto index 60a330ac..28eaeaf2 100644 --- a/client/pb/channel/unknown.proto +++ b/client/pb/channel/unknown.proto @@ -1,4 +1,4 @@ -// 存放所有未知的结构体 +// 存放所有未知的结构体, 均为手动分析复原 syntax = "proto2"; package channel; @@ -20,6 +20,15 @@ message ChannelOidb0xfc9Rsp { optional GuildUserProfile profile = 1; } +message ChannelOidb0xf57Rsp { + optional GuildMetaRsp rsp = 1; +} + +message GuildMetaRsp { + optional uint64 guildId = 3; + optional GuildMeta meta = 4; +} + message GuildAdminInfo { repeated GuildMemberInfo admins = 2; } @@ -44,6 +53,21 @@ message GuildUserProfile { // 25 current cards *uncertainty } +message GuildMeta { + optional uint64 guildCode = 2; + optional int64 createTime = 4; + optional int64 maxMemberCount = 5; + optional int64 memberCount = 6; + optional string name = 8; + optional int32 robotMaxNum = 11; + optional int32 adminMaxNum = 12; + optional string profile = 13; + optional int64 avatarSeq = 14; + optional uint64 ownerId = 18; + optional int64 coverSeq = 19; + optional int32 clientId = 20; +} + /* // 个性档案卡片 message GuildMemberProfileCard {