From 0902e4701dbf1fcd7bb8730c393bdefa22fade83 Mon Sep 17 00:00:00 2001 From: dengbiao Date: Fri, 27 Dec 2024 14:38:31 +0800 Subject: [PATCH] 1 --- internal/logic/api/logic_ext.go | 15 + internal/logic/domain/group/model/group.go | 3 + pkg/pb/logic.ext.pb.go | 744 +++++++++++++-------- pkg/proto/business.ext.proto | 2 +- pkg/proto/logic.ext.proto | 9 + 5 files changed, 486 insertions(+), 287 deletions(-) diff --git a/internal/logic/api/logic_ext.go b/internal/logic/api/logic_ext.go index 8ae9743..f6c4603 100644 --- a/internal/logic/api/logic_ext.go +++ b/internal/logic/api/logic_ext.go @@ -280,6 +280,21 @@ func (s *LogicExtServer) AddGroupMembers(ctx context.Context, in *pb.AddGroupMem return &pb.AddGroupMembersResp{UserIds: userIds}, err } +func (s *LogicExtServer) ScanQrCodeAddGroup(ctx context.Context, in *pb.ScanQrCodeAddGroupReq) (*pb.ScanQrCodeAddGroupResp, error) { + userId, _, err := grpclib.GetCtxData(ctx) + if err != nil { + return nil, err + } + userIds, err := app.GroupApp.AddMembers(ctx, -2, in.GroupId, []int64{userId}) + var isAlready bool + for _, v := range userIds { + if v == userId { + isAlready = true + } + } + return &pb.ScanQrCodeAddGroupResp{IsAlready: isAlready}, err +} + // UpdateGroupMember 更新群组成员信息 func (*LogicExtServer) UpdateGroupMember(ctx context.Context, in *pb.UpdateGroupMemberReq) (*pb.Empty, error) { userId, _, err := grpclib.GetCtxData(ctx) diff --git a/internal/logic/domain/group/model/group.go b/internal/logic/domain/group/model/group.go index d9443a0..2e5d7ce 100644 --- a/internal/logic/domain/group/model/group.go +++ b/internal/logic/domain/group/model/group.go @@ -456,6 +456,9 @@ func (g *Group) PushAddMember(ctx context.Context, optUserId int64, addedIds []i if optUserId == -1 { optUser.Nickname = "后台操作" } + if optUserId == -2 { + optUser.Nickname = "扫码加入" + } err = g.PushMessage(ctx, pb.PushCode_PC_ADD_GROUP_MEMBERS, &pb.AddGroupMembersPush{ OptId: optUser.UserId, OptName: optUser.Nickname, diff --git a/pkg/pb/logic.ext.pb.go b/pkg/pb/logic.ext.pb.go index 86f4c8f..07a34ec 100644 --- a/pkg/pb/logic.ext.pb.go +++ b/pkg/pb/logic.ext.pb.go @@ -1981,6 +1981,100 @@ func (x *AddGroupMembersResp) GetUserIds() []int64 { return nil } +type ScanQrCodeAddGroupReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GroupId int64 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` // 群组id +} + +func (x *ScanQrCodeAddGroupReq) Reset() { + *x = ScanQrCodeAddGroupReq{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ScanQrCodeAddGroupReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ScanQrCodeAddGroupReq) ProtoMessage() {} + +func (x *ScanQrCodeAddGroupReq) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_proto_msgTypes[26] + 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 ScanQrCodeAddGroupReq.ProtoReflect.Descriptor instead. +func (*ScanQrCodeAddGroupReq) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{26} +} + +func (x *ScanQrCodeAddGroupReq) GetGroupId() int64 { + if x != nil { + return x.GroupId + } + return 0 +} + +type ScanQrCodeAddGroupResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + IsAlready bool `protobuf:"varint,1,opt,name=isAlready,proto3" json:"isAlready,omitempty"` // 是否已加入群 +} + +func (x *ScanQrCodeAddGroupResp) Reset() { + *x = ScanQrCodeAddGroupResp{} + if protoimpl.UnsafeEnabled { + mi := &file_logic_ext_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ScanQrCodeAddGroupResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ScanQrCodeAddGroupResp) ProtoMessage() {} + +func (x *ScanQrCodeAddGroupResp) ProtoReflect() protoreflect.Message { + mi := &file_logic_ext_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 ScanQrCodeAddGroupResp.ProtoReflect.Descriptor instead. +func (*ScanQrCodeAddGroupResp) Descriptor() ([]byte, []int) { + return file_logic_ext_proto_rawDescGZIP(), []int{27} +} + +func (x *ScanQrCodeAddGroupResp) GetIsAlready() bool { + if x != nil { + return x.IsAlready + } + return false +} + type UpdateGroupMemberReq struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1996,7 +2090,7 @@ type UpdateGroupMemberReq struct { func (x *UpdateGroupMemberReq) Reset() { *x = UpdateGroupMemberReq{} if protoimpl.UnsafeEnabled { - mi := &file_logic_ext_proto_msgTypes[26] + mi := &file_logic_ext_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2009,7 +2103,7 @@ func (x *UpdateGroupMemberReq) String() string { func (*UpdateGroupMemberReq) ProtoMessage() {} func (x *UpdateGroupMemberReq) ProtoReflect() protoreflect.Message { - mi := &file_logic_ext_proto_msgTypes[26] + mi := &file_logic_ext_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2022,7 +2116,7 @@ func (x *UpdateGroupMemberReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateGroupMemberReq.ProtoReflect.Descriptor instead. func (*UpdateGroupMemberReq) Descriptor() ([]byte, []int) { - return file_logic_ext_proto_rawDescGZIP(), []int{26} + return file_logic_ext_proto_rawDescGZIP(), []int{28} } func (x *UpdateGroupMemberReq) GetGroupId() int64 { @@ -2072,7 +2166,7 @@ type DeleteGroupMemberReq struct { func (x *DeleteGroupMemberReq) Reset() { *x = DeleteGroupMemberReq{} if protoimpl.UnsafeEnabled { - mi := &file_logic_ext_proto_msgTypes[27] + mi := &file_logic_ext_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2085,7 +2179,7 @@ func (x *DeleteGroupMemberReq) String() string { func (*DeleteGroupMemberReq) ProtoMessage() {} func (x *DeleteGroupMemberReq) ProtoReflect() protoreflect.Message { - mi := &file_logic_ext_proto_msgTypes[27] + mi := &file_logic_ext_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2098,7 +2192,7 @@ func (x *DeleteGroupMemberReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteGroupMemberReq.ProtoReflect.Descriptor instead. func (*DeleteGroupMemberReq) Descriptor() ([]byte, []int) { - return file_logic_ext_proto_rawDescGZIP(), []int{27} + return file_logic_ext_proto_rawDescGZIP(), []int{29} } func (x *DeleteGroupMemberReq) GetGroupId() int64 { @@ -2127,7 +2221,7 @@ type GetGroupMembersReq struct { func (x *GetGroupMembersReq) Reset() { *x = GetGroupMembersReq{} if protoimpl.UnsafeEnabled { - mi := &file_logic_ext_proto_msgTypes[28] + mi := &file_logic_ext_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2140,7 +2234,7 @@ func (x *GetGroupMembersReq) String() string { func (*GetGroupMembersReq) ProtoMessage() {} func (x *GetGroupMembersReq) ProtoReflect() protoreflect.Message { - mi := &file_logic_ext_proto_msgTypes[28] + mi := &file_logic_ext_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2153,7 +2247,7 @@ func (x *GetGroupMembersReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGroupMembersReq.ProtoReflect.Descriptor instead. func (*GetGroupMembersReq) Descriptor() ([]byte, []int) { - return file_logic_ext_proto_rawDescGZIP(), []int{28} + return file_logic_ext_proto_rawDescGZIP(), []int{30} } func (x *GetGroupMembersReq) GetGroupId() int64 { @@ -2181,7 +2275,7 @@ type GetGroupMembersResp struct { func (x *GetGroupMembersResp) Reset() { *x = GetGroupMembersResp{} if protoimpl.UnsafeEnabled { - mi := &file_logic_ext_proto_msgTypes[29] + mi := &file_logic_ext_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2194,7 +2288,7 @@ func (x *GetGroupMembersResp) String() string { func (*GetGroupMembersResp) ProtoMessage() {} func (x *GetGroupMembersResp) ProtoReflect() protoreflect.Message { - mi := &file_logic_ext_proto_msgTypes[29] + mi := &file_logic_ext_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2207,7 +2301,7 @@ func (x *GetGroupMembersResp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGroupMembersResp.ProtoReflect.Descriptor instead. func (*GetGroupMembersResp) Descriptor() ([]byte, []int) { - return file_logic_ext_proto_rawDescGZIP(), []int{29} + return file_logic_ext_proto_rawDescGZIP(), []int{31} } func (x *GetGroupMembersResp) GetMembers() []*GroupMember { @@ -2236,7 +2330,7 @@ type GroupMember struct { func (x *GroupMember) Reset() { *x = GroupMember{} if protoimpl.UnsafeEnabled { - mi := &file_logic_ext_proto_msgTypes[30] + mi := &file_logic_ext_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2249,7 +2343,7 @@ func (x *GroupMember) String() string { func (*GroupMember) ProtoMessage() {} func (x *GroupMember) ProtoReflect() protoreflect.Message { - mi := &file_logic_ext_proto_msgTypes[30] + mi := &file_logic_ext_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2262,7 +2356,7 @@ func (x *GroupMember) ProtoReflect() protoreflect.Message { // Deprecated: Use GroupMember.ProtoReflect.Descriptor instead. func (*GroupMember) Descriptor() ([]byte, []int) { - return file_logic_ext_proto_rawDescGZIP(), []int{30} + return file_logic_ext_proto_rawDescGZIP(), []int{32} } func (x *GroupMember) GetUserId() int64 { @@ -2341,7 +2435,7 @@ type SetGroupMemberBannedReq struct { func (x *SetGroupMemberBannedReq) Reset() { *x = SetGroupMemberBannedReq{} if protoimpl.UnsafeEnabled { - mi := &file_logic_ext_proto_msgTypes[31] + mi := &file_logic_ext_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2354,7 +2448,7 @@ func (x *SetGroupMemberBannedReq) String() string { func (*SetGroupMemberBannedReq) ProtoMessage() {} func (x *SetGroupMemberBannedReq) ProtoReflect() protoreflect.Message { - mi := &file_logic_ext_proto_msgTypes[31] + mi := &file_logic_ext_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2367,7 +2461,7 @@ func (x *SetGroupMemberBannedReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SetGroupMemberBannedReq.ProtoReflect.Descriptor instead. func (*SetGroupMemberBannedReq) Descriptor() ([]byte, []int) { - return file_logic_ext_proto_rawDescGZIP(), []int{31} + return file_logic_ext_proto_rawDescGZIP(), []int{33} } func (x *SetGroupMemberBannedReq) GetGroupId() int64 { @@ -2403,7 +2497,7 @@ type SetGroupMemberRemoveBannedReq struct { func (x *SetGroupMemberRemoveBannedReq) Reset() { *x = SetGroupMemberRemoveBannedReq{} if protoimpl.UnsafeEnabled { - mi := &file_logic_ext_proto_msgTypes[32] + mi := &file_logic_ext_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2416,7 +2510,7 @@ func (x *SetGroupMemberRemoveBannedReq) String() string { func (*SetGroupMemberRemoveBannedReq) ProtoMessage() {} func (x *SetGroupMemberRemoveBannedReq) ProtoReflect() protoreflect.Message { - mi := &file_logic_ext_proto_msgTypes[32] + mi := &file_logic_ext_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2429,7 +2523,7 @@ func (x *SetGroupMemberRemoveBannedReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SetGroupMemberRemoveBannedReq.ProtoReflect.Descriptor instead. func (*SetGroupMemberRemoveBannedReq) Descriptor() ([]byte, []int) { - return file_logic_ext_proto_rawDescGZIP(), []int{32} + return file_logic_ext_proto_rawDescGZIP(), []int{34} } func (x *SetGroupMemberRemoveBannedReq) GetGroupId() int64 { @@ -2458,7 +2552,7 @@ type SetGroupMemberBannedResp struct { func (x *SetGroupMemberBannedResp) Reset() { *x = SetGroupMemberBannedResp{} if protoimpl.UnsafeEnabled { - mi := &file_logic_ext_proto_msgTypes[33] + mi := &file_logic_ext_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2471,7 +2565,7 @@ func (x *SetGroupMemberBannedResp) String() string { func (*SetGroupMemberBannedResp) ProtoMessage() {} func (x *SetGroupMemberBannedResp) ProtoReflect() protoreflect.Message { - mi := &file_logic_ext_proto_msgTypes[33] + mi := &file_logic_ext_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2484,7 +2578,7 @@ func (x *SetGroupMemberBannedResp) ProtoReflect() protoreflect.Message { // Deprecated: Use SetGroupMemberBannedResp.ProtoReflect.Descriptor instead. func (*SetGroupMemberBannedResp) Descriptor() ([]byte, []int) { - return file_logic_ext_proto_rawDescGZIP(), []int{33} + return file_logic_ext_proto_rawDescGZIP(), []int{35} } func (x *SetGroupMemberBannedResp) GetIsAllMemberBanned() AllMemberBannedType { @@ -2512,7 +2606,7 @@ type GetGroupBannedMembersReq struct { func (x *GetGroupBannedMembersReq) Reset() { *x = GetGroupBannedMembersReq{} if protoimpl.UnsafeEnabled { - mi := &file_logic_ext_proto_msgTypes[34] + mi := &file_logic_ext_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2525,7 +2619,7 @@ func (x *GetGroupBannedMembersReq) String() string { func (*GetGroupBannedMembersReq) ProtoMessage() {} func (x *GetGroupBannedMembersReq) ProtoReflect() protoreflect.Message { - mi := &file_logic_ext_proto_msgTypes[34] + mi := &file_logic_ext_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2538,7 +2632,7 @@ func (x *GetGroupBannedMembersReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGroupBannedMembersReq.ProtoReflect.Descriptor instead. func (*GetGroupBannedMembersReq) Descriptor() ([]byte, []int) { - return file_logic_ext_proto_rawDescGZIP(), []int{34} + return file_logic_ext_proto_rawDescGZIP(), []int{36} } func (x *GetGroupBannedMembersReq) GetGroupId() int64 { @@ -2559,7 +2653,7 @@ type GetGroupBannedMembersResp struct { func (x *GetGroupBannedMembersResp) Reset() { *x = GetGroupBannedMembersResp{} if protoimpl.UnsafeEnabled { - mi := &file_logic_ext_proto_msgTypes[35] + mi := &file_logic_ext_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2572,7 +2666,7 @@ func (x *GetGroupBannedMembersResp) String() string { func (*GetGroupBannedMembersResp) ProtoMessage() {} func (x *GetGroupBannedMembersResp) ProtoReflect() protoreflect.Message { - mi := &file_logic_ext_proto_msgTypes[35] + mi := &file_logic_ext_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2585,7 +2679,7 @@ func (x *GetGroupBannedMembersResp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGroupBannedMembersResp.ProtoReflect.Descriptor instead. func (*GetGroupBannedMembersResp) Descriptor() ([]byte, []int) { - return file_logic_ext_proto_rawDescGZIP(), []int{35} + return file_logic_ext_proto_rawDescGZIP(), []int{37} } func (x *GetGroupBannedMembersResp) GetMembers() []*GroupMember { @@ -2607,7 +2701,7 @@ type SetGroupAddFriendReq struct { func (x *SetGroupAddFriendReq) Reset() { *x = SetGroupAddFriendReq{} if protoimpl.UnsafeEnabled { - mi := &file_logic_ext_proto_msgTypes[36] + mi := &file_logic_ext_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2620,7 +2714,7 @@ func (x *SetGroupAddFriendReq) String() string { func (*SetGroupAddFriendReq) ProtoMessage() {} func (x *SetGroupAddFriendReq) ProtoReflect() protoreflect.Message { - mi := &file_logic_ext_proto_msgTypes[36] + mi := &file_logic_ext_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2633,7 +2727,7 @@ func (x *SetGroupAddFriendReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SetGroupAddFriendReq.ProtoReflect.Descriptor instead. func (*SetGroupAddFriendReq) Descriptor() ([]byte, []int) { - return file_logic_ext_proto_rawDescGZIP(), []int{36} + return file_logic_ext_proto_rawDescGZIP(), []int{38} } func (x *SetGroupAddFriendReq) GetGroupId() int64 { @@ -2880,192 +2974,204 @@ var file_logic_ext_proto_rawDesc = []byte{ 0x72, 0x49, 0x64, 0x73, 0x22, 0x30, 0x0a, 0x13, 0x41, 0x64, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x75, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0xab, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, + 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x32, 0x0a, 0x15, 0x53, 0x63, 0x61, 0x6e, 0x51, 0x72, + 0x43, 0x6f, 0x64, 0x65, 0x41, 0x64, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x12, 0x14, - 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, - 0x78, 0x74, 0x72, 0x61, 0x22, 0x4c, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x73, 0x22, 0x45, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, + 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x36, 0x0a, 0x16, 0x53, 0x63, + 0x61, 0x6e, 0x51, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x41, 0x64, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73, 0x41, 0x6c, 0x72, 0x65, 0x61, 0x64, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x41, 0x6c, 0x72, 0x65, 0x61, + 0x64, 0x79, 0x22, 0xab, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x2f, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, + 0x74, 0x72, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, + 0x22, 0x4c, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x40, 0x0a, 0x13, 0x47, 0x65, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x29, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x8b, 0x02, 0x0a, 0x0b, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, - 0x65, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, - 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x45, 0x78, 0x74, 0x72, 0x61, - 0x12, 0x2f, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, - 0x78, 0x74, 0x72, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, - 0x61, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x17, 0x53, 0x65, - 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x61, 0x6e, 0x6e, - 0x65, 0x64, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x03, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x48, 0x0a, 0x14, 0x69, - 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x62, 0x61, 0x6e, - 0x6e, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x41, - 0x6c, 0x6c, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x11, 0x69, 0x73, 0x41, 0x6c, 0x6c, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, - 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x22, 0x62, 0x0a, 0x1d, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x61, 0x6e, - 0x6e, 0x65, 0x64, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, - 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0d, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x8f, 0x01, 0x0a, 0x18, 0x53, 0x65, - 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x61, 0x6e, 0x6e, - 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x48, 0x0a, 0x14, 0x69, 0x73, 0x5f, 0x61, 0x6c, 0x6c, - 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x6c, 0x6c, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x11, 0x69, - 0x73, 0x41, 0x6c, 0x6c, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, - 0x12, 0x29, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x35, 0x0a, 0x18, 0x47, - 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x49, 0x64, 0x22, 0x46, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x61, - 0x6e, 0x6e, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x29, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x72, 0x0a, 0x14, 0x53, 0x65, - 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, + 0x70, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x45, + 0x0a, 0x12, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, + 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x40, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x29, 0x0a, 0x07, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, + 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x8b, 0x02, 0x0a, 0x0b, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x73, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x1d, + 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x1d, 0x0a, + 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x45, 0x78, 0x74, 0x72, 0x61, 0x12, 0x2f, 0x0a, 0x0b, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x12, 0x16, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x17, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, + 0x71, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, + 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x48, 0x0a, 0x14, 0x69, 0x73, 0x5f, 0x61, 0x6c, + 0x6c, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x6c, 0x6c, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x11, + 0x69, 0x73, 0x41, 0x6c, 0x6c, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x61, 0x6e, 0x6e, 0x65, + 0x64, 0x22, 0x62, 0x0a, 0x1d, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x3f, 0x0a, - 0x11, 0x69, 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x66, 0x72, 0x69, 0x65, - 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x6c, - 0x6c, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0e, - 0x69, 0x73, 0x41, 0x6c, 0x6c, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x2a, 0x47, - 0x0a, 0x0d, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4b, 0x69, 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x12, 0x0a, 0x0e, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x4e, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x53, - 0x45, 0x52, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x53, - 0x59, 0x53, 0x54, 0x45, 0x4d, 0x10, 0x02, 0x2a, 0x4c, 0x0a, 0x0a, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x47, 0x4d, 0x54, 0x5f, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x47, 0x4d, 0x54, 0x5f, 0x41, 0x44, - 0x4d, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x47, 0x4d, 0x54, 0x5f, 0x4d, 0x45, 0x4d, - 0x42, 0x45, 0x52, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x47, 0x4d, 0x54, 0x5f, 0x4d, 0x41, 0x4e, - 0x41, 0x47, 0x45, 0x10, 0x03, 0x2a, 0x6a, 0x0a, 0x13, 0x41, 0x6c, 0x6c, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, - 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x41, 0x6c, 0x6c, 0x5f, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x5f, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x59, - 0x45, 0x53, 0x5f, 0x41, 0x6c, 0x6c, 0x5f, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x42, 0x61, - 0x6e, 0x6e, 0x65, 0x64, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x4e, 0x4f, 0x54, 0x5f, 0x41, 0x6c, - 0x6c, 0x5f, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x10, - 0x02, 0x2a, 0x5e, 0x0a, 0x10, 0x41, 0x6c, 0x6c, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, - 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, - 0x5f, 0x41, 0x6c, 0x6c, 0x5f, 0x41, 0x64, 0x64, 0x5f, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x10, - 0x00, 0x12, 0x16, 0x0a, 0x12, 0x59, 0x45, 0x53, 0x5f, 0x41, 0x6c, 0x6c, 0x5f, 0x41, 0x64, 0x64, - 0x5f, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4e, 0x4f, 0x54, - 0x5f, 0x41, 0x6c, 0x6c, 0x5f, 0x41, 0x64, 0x64, 0x5f, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x10, - 0x02, 0x32, 0x81, 0x0a, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x45, 0x78, 0x74, 0x12, 0x3f, - 0x0a, 0x0e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x36, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x26, 0x0a, + 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x55, 0x73, + 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x8f, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x48, 0x0a, 0x14, 0x69, 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x5f, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x6c, 0x6c, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, + 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x11, 0x69, 0x73, 0x41, 0x6c, 0x6c, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x07, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, + 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x35, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x46, + 0x0a, 0x19, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x29, 0x0a, 0x07, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, + 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x72, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x12, 0x19, + 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x11, 0x69, 0x73, 0x5f, + 0x61, 0x6c, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x6c, 0x6c, 0x41, 0x64, 0x64, + 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0e, 0x69, 0x73, 0x41, 0x6c, + 0x6c, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x2a, 0x47, 0x0a, 0x0d, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x4b, 0x69, 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x0e, 0x43, + 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, + 0x0f, 0x0a, 0x0b, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, 0x01, + 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x59, 0x53, 0x54, 0x45, + 0x4d, 0x10, 0x02, 0x2a, 0x4c, 0x0a, 0x0a, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x47, 0x4d, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, + 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x47, 0x4d, 0x54, 0x5f, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x10, + 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x47, 0x4d, 0x54, 0x5f, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x10, + 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x47, 0x4d, 0x54, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x10, + 0x03, 0x2a, 0x6a, 0x0a, 0x13, 0x41, 0x6c, 0x6c, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x61, + 0x6e, 0x6e, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x55, 0x4e, 0x4b, 0x4e, + 0x4f, 0x57, 0x4e, 0x5f, 0x41, 0x6c, 0x6c, 0x5f, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x42, + 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x59, 0x45, 0x53, 0x5f, 0x41, + 0x6c, 0x6c, 0x5f, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, + 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x4e, 0x4f, 0x54, 0x5f, 0x41, 0x6c, 0x6c, 0x5f, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x10, 0x02, 0x2a, 0x5e, 0x0a, + 0x10, 0x41, 0x6c, 0x6c, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x41, 0x6c, 0x6c, + 0x5f, 0x41, 0x64, 0x64, 0x5f, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x10, 0x00, 0x12, 0x16, 0x0a, + 0x12, 0x59, 0x45, 0x53, 0x5f, 0x41, 0x6c, 0x6c, 0x5f, 0x41, 0x64, 0x64, 0x5f, 0x46, 0x72, 0x69, + 0x65, 0x6e, 0x64, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4e, 0x4f, 0x54, 0x5f, 0x41, 0x6c, 0x6c, + 0x5f, 0x41, 0x64, 0x64, 0x5f, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x10, 0x02, 0x32, 0xce, 0x0a, + 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x45, 0x78, 0x74, 0x12, 0x3f, 0x0a, 0x0e, 0x52, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x15, 0x2e, 0x70, + 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, + 0x72, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x0b, 0x53, + 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x2e, + 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3c, 0x0a, 0x0d, 0x52, 0x65, 0x63, 0x61, 0x6c, - 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, - 0x63, 0x61, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x15, - 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x26, 0x0a, 0x08, 0x50, 0x75, 0x73, 0x68, 0x52, 0x6f, 0x6f, - 0x6d, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x52, 0x6f, 0x6f, 0x6d, 0x52, - 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3c, 0x0a, - 0x0d, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x14, - 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, - 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x28, 0x0a, 0x09, 0x41, - 0x64, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x64, + 0x65, 0x73, 0x70, 0x12, 0x3c, 0x0a, 0x0d, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x2e, + 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x26, 0x0a, 0x08, 0x50, 0x75, 0x73, 0x68, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x0f, 0x2e, + 0x70, 0x62, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x09, + 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3c, 0x0a, 0x0d, 0x53, 0x65, 0x6e, + 0x64, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x2e, + 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x28, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x46, 0x72, + 0x69, 0x65, 0x6e, 0x64, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, + 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x12, 0x32, 0x0a, 0x0e, 0x41, 0x67, 0x72, 0x65, 0x65, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, + 0x65, 0x6e, 0x64, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x67, 0x72, 0x65, 0x65, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x32, 0x0a, 0x0e, 0x41, 0x67, 0x72, 0x65, 0x65, 0x41, 0x64, - 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x67, 0x72, - 0x65, 0x65, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x09, - 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2e, 0x0a, 0x0c, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x09, - 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x30, 0x0a, 0x09, 0x53, 0x65, 0x74, - 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x46, - 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, - 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2b, 0x0a, 0x0a, 0x47, - 0x65, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x69, - 0x65, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x70, 0x62, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x2c, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, - 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2d, - 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x2e, - 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, - 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x29, 0x0a, - 0x09, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x09, 0x2e, 0x70, 0x62, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x42, 0x0a, 0x0f, 0x41, 0x64, 0x64, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x62, - 0x2e, 0x41, 0x64, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x38, 0x0a, 0x11, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2e, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, + 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x30, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x46, 0x72, 0x69, 0x65, + 0x6e, 0x64, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, + 0x64, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x46, 0x72, 0x69, + 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2b, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x46, 0x72, + 0x69, 0x65, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2c, 0x0a, 0x0b, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x2e, 0x70, 0x62, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, + 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2d, 0x0a, 0x08, 0x47, 0x65, + 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x29, 0x0a, 0x09, 0x47, 0x65, 0x74, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x42, 0x0a, 0x0f, 0x41, 0x64, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, + 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4b, 0x0a, 0x12, 0x53, 0x63, 0x61, 0x6e, + 0x51, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x41, 0x64, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x19, + 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x51, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x41, 0x64, + 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x53, + 0x63, 0x61, 0x6e, 0x51, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x41, 0x64, 0x64, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x38, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x38, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x18, 0x2e, 0x70, 0x62, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x12, 0x42, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, - 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x52, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x1b, 0x2e, - 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x2e, - 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x61, - 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4b, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x21, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x54, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x1c, - 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x61, 0x6e, 0x6e, - 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, - 0x62, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x38, 0x0a, 0x11, 0x53, + 0x72, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, + 0x38, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x09, + 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x0f, 0x47, 0x65, 0x74, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x70, + 0x62, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x52, 0x0a, + 0x15, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, + 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x4b, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x12, 0x21, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, + 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x54, + 0x0a, 0x15, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x38, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, - 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, - 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x10, 0x5a, 0x0e, 0x65, 0x67, 0x67, 0x2d, 0x69, 0x6d, 0x2f, - 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x62, 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x10, + 0x5a, 0x0e, 0x65, 0x67, 0x67, 0x2d, 0x69, 0x6d, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x62, 0x2f, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3081,7 +3187,7 @@ func file_logic_ext_proto_rawDescGZIP() []byte { } var file_logic_ext_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_logic_ext_proto_msgTypes = make([]protoimpl.MessageInfo, 37) +var file_logic_ext_proto_msgTypes = make([]protoimpl.MessageInfo, 39) var file_logic_ext_proto_goTypes = []interface{}{ (GroupKindType)(0), // 0: pb.GroupKindType (MemberType)(0), // 1: pb.MemberType @@ -3113,46 +3219,48 @@ var file_logic_ext_proto_goTypes = []interface{}{ (*GetGroupsResp)(nil), // 27: pb.GetGroupsResp (*AddGroupMembersReq)(nil), // 28: pb.AddGroupMembersReq (*AddGroupMembersResp)(nil), // 29: pb.AddGroupMembersResp - (*UpdateGroupMemberReq)(nil), // 30: pb.UpdateGroupMemberReq - (*DeleteGroupMemberReq)(nil), // 31: pb.DeleteGroupMemberReq - (*GetGroupMembersReq)(nil), // 32: pb.GetGroupMembersReq - (*GetGroupMembersResp)(nil), // 33: pb.GetGroupMembersResp - (*GroupMember)(nil), // 34: pb.GroupMember - (*SetGroupMemberBannedReq)(nil), // 35: pb.SetGroupMemberBannedReq - (*SetGroupMemberRemoveBannedReq)(nil), // 36: pb.SetGroupMemberRemoveBannedReq - (*SetGroupMemberBannedResp)(nil), // 37: pb.SetGroupMemberBannedResp - (*GetGroupBannedMembersReq)(nil), // 38: pb.GetGroupBannedMembersReq - (*GetGroupBannedMembersResp)(nil), // 39: pb.GetGroupBannedMembersResp - (*SetGroupAddFriendReq)(nil), // 40: pb.SetGroupAddFriendReq - (ReceiverType)(0), // 41: pb.ReceiverType - (MessageType)(0), // 42: pb.MessageType - (GroupUserStatusType)(0), // 43: pb.GroupUserStatusType - (GroupNoticePublishType)(0), // 44: pb.GroupNoticePublishType - (*Empty)(nil), // 45: pb.Empty + (*ScanQrCodeAddGroupReq)(nil), // 30: pb.ScanQrCodeAddGroupReq + (*ScanQrCodeAddGroupResp)(nil), // 31: pb.ScanQrCodeAddGroupResp + (*UpdateGroupMemberReq)(nil), // 32: pb.UpdateGroupMemberReq + (*DeleteGroupMemberReq)(nil), // 33: pb.DeleteGroupMemberReq + (*GetGroupMembersReq)(nil), // 34: pb.GetGroupMembersReq + (*GetGroupMembersResp)(nil), // 35: pb.GetGroupMembersResp + (*GroupMember)(nil), // 36: pb.GroupMember + (*SetGroupMemberBannedReq)(nil), // 37: pb.SetGroupMemberBannedReq + (*SetGroupMemberRemoveBannedReq)(nil), // 38: pb.SetGroupMemberRemoveBannedReq + (*SetGroupMemberBannedResp)(nil), // 39: pb.SetGroupMemberBannedResp + (*GetGroupBannedMembersReq)(nil), // 40: pb.GetGroupBannedMembersReq + (*GetGroupBannedMembersResp)(nil), // 41: pb.GetGroupBannedMembersResp + (*SetGroupAddFriendReq)(nil), // 42: pb.SetGroupAddFriendReq + (ReceiverType)(0), // 43: pb.ReceiverType + (MessageType)(0), // 44: pb.MessageType + (GroupUserStatusType)(0), // 45: pb.GroupUserStatusType + (GroupNoticePublishType)(0), // 46: pb.GroupNoticePublishType + (*Empty)(nil), // 47: pb.Empty } var file_logic_ext_proto_depIdxs = []int32{ - 41, // 0: pb.SendMessageReq.receiver_type:type_name -> pb.ReceiverType - 42, // 1: pb.SendMessageReq.message_type:type_name -> pb.MessageType - 41, // 2: pb.RecallMessageReq.receiver_type:type_name -> pb.ReceiverType - 42, // 3: pb.RecallMessageReq.message_type:type_name -> pb.MessageType - 41, // 4: pb.SendRedPacketReq.receiver_type:type_name -> pb.ReceiverType - 42, // 5: pb.SendRedPacketReq.message_type:type_name -> pb.MessageType - 42, // 6: pb.PushRoomReq.message_type:type_name -> pb.MessageType + 43, // 0: pb.SendMessageReq.receiver_type:type_name -> pb.ReceiverType + 44, // 1: pb.SendMessageReq.message_type:type_name -> pb.MessageType + 43, // 2: pb.RecallMessageReq.receiver_type:type_name -> pb.ReceiverType + 44, // 3: pb.RecallMessageReq.message_type:type_name -> pb.MessageType + 43, // 4: pb.SendRedPacketReq.receiver_type:type_name -> pb.ReceiverType + 44, // 5: pb.SendRedPacketReq.message_type:type_name -> pb.MessageType + 44, // 6: pb.PushRoomReq.message_type:type_name -> pb.MessageType 18, // 7: pb.GetFriendsResp.friends:type_name -> pb.Friend 26, // 8: pb.GetGroupResp.group:type_name -> pb.Group 1, // 9: pb.GetGroupResp.member_type:type_name -> pb.MemberType - 43, // 10: pb.GetGroupResp.group_user_status_type:type_name -> pb.GroupUserStatusType + 45, // 10: pb.GetGroupResp.group_user_status_type:type_name -> pb.GroupUserStatusType 25, // 11: pb.GetGroupResp.group_notice:type_name -> pb.GroupNotice - 44, // 12: pb.GroupNotice.publish_type:type_name -> pb.GroupNoticePublishType + 46, // 12: pb.GroupNotice.publish_type:type_name -> pb.GroupNoticePublishType 0, // 13: pb.Group.kind:type_name -> pb.GroupKindType 26, // 14: pb.GetGroupsResp.groups:type_name -> pb.Group 1, // 15: pb.UpdateGroupMemberReq.member_type:type_name -> pb.MemberType - 34, // 16: pb.GetGroupMembersResp.members:type_name -> pb.GroupMember + 36, // 16: pb.GetGroupMembersResp.members:type_name -> pb.GroupMember 1, // 17: pb.GroupMember.member_type:type_name -> pb.MemberType 2, // 18: pb.SetGroupMemberBannedReq.is_all_member_banned:type_name -> pb.AllMemberBannedType 2, // 19: pb.SetGroupMemberBannedResp.is_all_member_banned:type_name -> pb.AllMemberBannedType - 34, // 20: pb.SetGroupMemberBannedResp.members:type_name -> pb.GroupMember - 34, // 21: pb.GetGroupBannedMembersResp.members:type_name -> pb.GroupMember + 36, // 20: pb.SetGroupMemberBannedResp.members:type_name -> pb.GroupMember + 36, // 21: pb.GetGroupBannedMembersResp.members:type_name -> pb.GroupMember 3, // 22: pb.SetGroupAddFriendReq.is_all_add_friend:type_name -> pb.AllAddFriendType 4, // 23: pb.LogicExt.RegisterDevice:input_type -> pb.RegisterDeviceReq 6, // 24: pb.LogicExt.SendMessage:input_type -> pb.SendMessageReq @@ -3163,43 +3271,45 @@ var file_logic_ext_proto_depIdxs = []int32{ 15, // 29: pb.LogicExt.AgreeAddFriend:input_type -> pb.AgreeAddFriendReq 14, // 30: pb.LogicExt.DeleteFriend:input_type -> pb.DeleteFriendReq 16, // 31: pb.LogicExt.SetFriend:input_type -> pb.SetFriendReq - 45, // 32: pb.LogicExt.GetFriends:input_type -> pb.Empty + 47, // 32: pb.LogicExt.GetFriends:input_type -> pb.Empty 20, // 33: pb.LogicExt.CreateGroup:input_type -> pb.CreateGroupReq 22, // 34: pb.LogicExt.UpdateGroup:input_type -> pb.UpdateGroupReq 23, // 35: pb.LogicExt.GetGroup:input_type -> pb.GetGroupReq - 45, // 36: pb.LogicExt.GetGroups:input_type -> pb.Empty + 47, // 36: pb.LogicExt.GetGroups:input_type -> pb.Empty 28, // 37: pb.LogicExt.AddGroupMembers:input_type -> pb.AddGroupMembersReq - 30, // 38: pb.LogicExt.UpdateGroupMember:input_type -> pb.UpdateGroupMemberReq - 31, // 39: pb.LogicExt.DeleteGroupMember:input_type -> pb.DeleteGroupMemberReq - 32, // 40: pb.LogicExt.GetGroupMembers:input_type -> pb.GetGroupMembersReq - 35, // 41: pb.LogicExt.SetGroupBannedMembers:input_type -> pb.SetGroupMemberBannedReq - 36, // 42: pb.LogicExt.SetGroupRemoveBannedMembers:input_type -> pb.SetGroupMemberRemoveBannedReq - 38, // 43: pb.LogicExt.GetGroupBannedMembers:input_type -> pb.GetGroupBannedMembersReq - 40, // 44: pb.LogicExt.SetGroupAddFriend:input_type -> pb.SetGroupAddFriendReq - 5, // 45: pb.LogicExt.RegisterDevice:output_type -> pb.RegisterDeviceResp - 7, // 46: pb.LogicExt.SendMessage:output_type -> pb.SendMessageResp - 9, // 47: pb.LogicExt.RecallMessage:output_type -> pb.RecallMessageResp - 45, // 48: pb.LogicExt.PushRoom:output_type -> pb.Empty - 11, // 49: pb.LogicExt.SendRedPacket:output_type -> pb.SendRedPacketResp - 45, // 50: pb.LogicExt.AddFriend:output_type -> pb.Empty - 45, // 51: pb.LogicExt.AgreeAddFriend:output_type -> pb.Empty - 45, // 52: pb.LogicExt.DeleteFriend:output_type -> pb.Empty - 17, // 53: pb.LogicExt.SetFriend:output_type -> pb.SetFriendResp - 19, // 54: pb.LogicExt.GetFriends:output_type -> pb.GetFriendsResp - 21, // 55: pb.LogicExt.CreateGroup:output_type -> pb.CreateGroupResp - 45, // 56: pb.LogicExt.UpdateGroup:output_type -> pb.Empty - 24, // 57: pb.LogicExt.GetGroup:output_type -> pb.GetGroupResp - 27, // 58: pb.LogicExt.GetGroups:output_type -> pb.GetGroupsResp - 29, // 59: pb.LogicExt.AddGroupMembers:output_type -> pb.AddGroupMembersResp - 45, // 60: pb.LogicExt.UpdateGroupMember:output_type -> pb.Empty - 45, // 61: pb.LogicExt.DeleteGroupMember:output_type -> pb.Empty - 33, // 62: pb.LogicExt.GetGroupMembers:output_type -> pb.GetGroupMembersResp - 37, // 63: pb.LogicExt.SetGroupBannedMembers:output_type -> pb.SetGroupMemberBannedResp - 45, // 64: pb.LogicExt.SetGroupRemoveBannedMembers:output_type -> pb.Empty - 39, // 65: pb.LogicExt.GetGroupBannedMembers:output_type -> pb.GetGroupBannedMembersResp - 45, // 66: pb.LogicExt.SetGroupAddFriend:output_type -> pb.Empty - 45, // [45:67] is the sub-list for method output_type - 23, // [23:45] is the sub-list for method input_type + 30, // 38: pb.LogicExt.ScanQrCodeAddGroup:input_type -> pb.ScanQrCodeAddGroupReq + 32, // 39: pb.LogicExt.UpdateGroupMember:input_type -> pb.UpdateGroupMemberReq + 33, // 40: pb.LogicExt.DeleteGroupMember:input_type -> pb.DeleteGroupMemberReq + 34, // 41: pb.LogicExt.GetGroupMembers:input_type -> pb.GetGroupMembersReq + 37, // 42: pb.LogicExt.SetGroupBannedMembers:input_type -> pb.SetGroupMemberBannedReq + 38, // 43: pb.LogicExt.SetGroupRemoveBannedMembers:input_type -> pb.SetGroupMemberRemoveBannedReq + 40, // 44: pb.LogicExt.GetGroupBannedMembers:input_type -> pb.GetGroupBannedMembersReq + 42, // 45: pb.LogicExt.SetGroupAddFriend:input_type -> pb.SetGroupAddFriendReq + 5, // 46: pb.LogicExt.RegisterDevice:output_type -> pb.RegisterDeviceResp + 7, // 47: pb.LogicExt.SendMessage:output_type -> pb.SendMessageResp + 9, // 48: pb.LogicExt.RecallMessage:output_type -> pb.RecallMessageResp + 47, // 49: pb.LogicExt.PushRoom:output_type -> pb.Empty + 11, // 50: pb.LogicExt.SendRedPacket:output_type -> pb.SendRedPacketResp + 47, // 51: pb.LogicExt.AddFriend:output_type -> pb.Empty + 47, // 52: pb.LogicExt.AgreeAddFriend:output_type -> pb.Empty + 47, // 53: pb.LogicExt.DeleteFriend:output_type -> pb.Empty + 17, // 54: pb.LogicExt.SetFriend:output_type -> pb.SetFriendResp + 19, // 55: pb.LogicExt.GetFriends:output_type -> pb.GetFriendsResp + 21, // 56: pb.LogicExt.CreateGroup:output_type -> pb.CreateGroupResp + 47, // 57: pb.LogicExt.UpdateGroup:output_type -> pb.Empty + 24, // 58: pb.LogicExt.GetGroup:output_type -> pb.GetGroupResp + 27, // 59: pb.LogicExt.GetGroups:output_type -> pb.GetGroupsResp + 29, // 60: pb.LogicExt.AddGroupMembers:output_type -> pb.AddGroupMembersResp + 31, // 61: pb.LogicExt.ScanQrCodeAddGroup:output_type -> pb.ScanQrCodeAddGroupResp + 47, // 62: pb.LogicExt.UpdateGroupMember:output_type -> pb.Empty + 47, // 63: pb.LogicExt.DeleteGroupMember:output_type -> pb.Empty + 35, // 64: pb.LogicExt.GetGroupMembers:output_type -> pb.GetGroupMembersResp + 39, // 65: pb.LogicExt.SetGroupBannedMembers:output_type -> pb.SetGroupMemberBannedResp + 47, // 66: pb.LogicExt.SetGroupRemoveBannedMembers:output_type -> pb.Empty + 41, // 67: pb.LogicExt.GetGroupBannedMembers:output_type -> pb.GetGroupBannedMembersResp + 47, // 68: pb.LogicExt.SetGroupAddFriend:output_type -> pb.Empty + 46, // [46:69] is the sub-list for method output_type + 23, // [23:46] is the sub-list for method input_type 23, // [23:23] is the sub-list for extension type_name 23, // [23:23] is the sub-list for extension extendee 0, // [0:23] is the sub-list for field type_name @@ -3527,7 +3637,7 @@ func file_logic_ext_proto_init() { } } file_logic_ext_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateGroupMemberReq); i { + switch v := v.(*ScanQrCodeAddGroupReq); i { case 0: return &v.state case 1: @@ -3539,7 +3649,7 @@ func file_logic_ext_proto_init() { } } file_logic_ext_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteGroupMemberReq); i { + switch v := v.(*ScanQrCodeAddGroupResp); i { case 0: return &v.state case 1: @@ -3551,7 +3661,7 @@ func file_logic_ext_proto_init() { } } file_logic_ext_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetGroupMembersReq); i { + switch v := v.(*UpdateGroupMemberReq); i { case 0: return &v.state case 1: @@ -3563,7 +3673,7 @@ func file_logic_ext_proto_init() { } } file_logic_ext_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetGroupMembersResp); i { + switch v := v.(*DeleteGroupMemberReq); i { case 0: return &v.state case 1: @@ -3575,7 +3685,7 @@ func file_logic_ext_proto_init() { } } file_logic_ext_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GroupMember); i { + switch v := v.(*GetGroupMembersReq); i { case 0: return &v.state case 1: @@ -3587,7 +3697,7 @@ func file_logic_ext_proto_init() { } } file_logic_ext_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetGroupMemberBannedReq); i { + switch v := v.(*GetGroupMembersResp); i { case 0: return &v.state case 1: @@ -3599,7 +3709,7 @@ func file_logic_ext_proto_init() { } } file_logic_ext_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetGroupMemberRemoveBannedReq); i { + switch v := v.(*GroupMember); i { case 0: return &v.state case 1: @@ -3611,7 +3721,7 @@ func file_logic_ext_proto_init() { } } file_logic_ext_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetGroupMemberBannedResp); i { + switch v := v.(*SetGroupMemberBannedReq); i { case 0: return &v.state case 1: @@ -3623,7 +3733,7 @@ func file_logic_ext_proto_init() { } } file_logic_ext_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetGroupBannedMembersReq); i { + switch v := v.(*SetGroupMemberRemoveBannedReq); i { case 0: return &v.state case 1: @@ -3635,7 +3745,7 @@ func file_logic_ext_proto_init() { } } file_logic_ext_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetGroupBannedMembersResp); i { + switch v := v.(*SetGroupMemberBannedResp); i { case 0: return &v.state case 1: @@ -3647,6 +3757,30 @@ func file_logic_ext_proto_init() { } } file_logic_ext_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetGroupBannedMembersReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetGroupBannedMembersResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logic_ext_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SetGroupAddFriendReq); i { case 0: return &v.state @@ -3665,7 +3799,7 @@ func file_logic_ext_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_logic_ext_proto_rawDesc, NumEnums: 4, - NumMessages: 37, + NumMessages: 39, NumExtensions: 0, NumServices: 1, }, @@ -3680,7 +3814,6 @@ func file_logic_ext_proto_init() { file_logic_ext_proto_depIdxs = nil } - // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. // Requires gRPC-Go v1.32.0 or later. @@ -3720,6 +3853,8 @@ type LogicExtClient interface { GetGroups(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GetGroupsResp, error) // 添加群组成员 AddGroupMembers(ctx context.Context, in *AddGroupMembersReq, opts ...grpc.CallOption) (*AddGroupMembersResp, error) + // 扫码入群 + ScanQrCodeAddGroup(ctx context.Context, in *ScanQrCodeAddGroupReq, opts ...grpc.CallOption) (*ScanQrCodeAddGroupResp, error) // 更新群组成员信息 UpdateGroupMember(ctx context.Context, in *UpdateGroupMemberReq, opts ...grpc.CallOption) (*Empty, error) // 删除群组成员 @@ -3879,6 +4014,15 @@ func (c *logicExtClient) AddGroupMembers(ctx context.Context, in *AddGroupMember return out, nil } +func (c *logicExtClient) ScanQrCodeAddGroup(ctx context.Context, in *ScanQrCodeAddGroupReq, opts ...grpc.CallOption) (*ScanQrCodeAddGroupResp, error) { + out := new(ScanQrCodeAddGroupResp) + err := c.cc.Invoke(ctx, "/pb.LogicExt/ScanQrCodeAddGroup", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *logicExtClient) UpdateGroupMember(ctx context.Context, in *UpdateGroupMemberReq, opts ...grpc.CallOption) (*Empty, error) { out := new(Empty) err := c.cc.Invoke(ctx, "/pb.LogicExt/UpdateGroupMember", in, out, opts...) @@ -3976,6 +4120,8 @@ type LogicExtServer interface { GetGroups(context.Context, *Empty) (*GetGroupsResp, error) // 添加群组成员 AddGroupMembers(context.Context, *AddGroupMembersReq) (*AddGroupMembersResp, error) + // 扫码入群 + ScanQrCodeAddGroup(context.Context, *ScanQrCodeAddGroupReq) (*ScanQrCodeAddGroupResp, error) // 更新群组成员信息 UpdateGroupMember(context.Context, *UpdateGroupMemberReq) (*Empty, error) // 删除群组成员 @@ -4041,6 +4187,9 @@ func (UnimplementedLogicExtServer) GetGroups(context.Context, *Empty) (*GetGroup func (UnimplementedLogicExtServer) AddGroupMembers(context.Context, *AddGroupMembersReq) (*AddGroupMembersResp, error) { return nil, status.Errorf(codes.Unimplemented, "method AddGroupMembers not implemented") } +func (UnimplementedLogicExtServer) ScanQrCodeAddGroup(context.Context, *ScanQrCodeAddGroupReq) (*ScanQrCodeAddGroupResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method ScanQrCodeAddGroup not implemented") +} func (UnimplementedLogicExtServer) UpdateGroupMember(context.Context, *UpdateGroupMemberReq) (*Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateGroupMember not implemented") } @@ -4063,6 +4212,7 @@ func (UnimplementedLogicExtServer) SetGroupAddFriend(context.Context, *SetGroupA return nil, status.Errorf(codes.Unimplemented, "method SetGroupAddFriend not implemented") } + func RegisterLogicExtServer(s grpc.ServiceRegistrar, srv LogicExtServer) { s.RegisterService(&LogicExt_ServiceDesc, srv) } @@ -4337,6 +4487,24 @@ func _LogicExt_AddGroupMembers_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } +func _LogicExt_ScanQrCodeAddGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ScanQrCodeAddGroupReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogicExtServer).ScanQrCodeAddGroup(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.LogicExt/ScanQrCodeAddGroup", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogicExtServer).ScanQrCodeAddGroup(ctx, req.(*ScanQrCodeAddGroupReq)) + } + return interceptor(ctx, in, info, handler) +} + func _LogicExt_UpdateGroupMember_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(UpdateGroupMemberReq) if err := dec(in); err != nil { @@ -4530,6 +4698,10 @@ var LogicExt_ServiceDesc = grpc.ServiceDesc{ MethodName: "AddGroupMembers", Handler: _LogicExt_AddGroupMembers_Handler, }, + { + MethodName: "ScanQrCodeAddGroup", + Handler: _LogicExt_ScanQrCodeAddGroup_Handler, + }, { MethodName: "UpdateGroupMember", Handler: _LogicExt_UpdateGroupMember_Handler, diff --git a/pkg/proto/business.ext.proto b/pkg/proto/business.ext.proto index e384971..968a10f 100644 --- a/pkg/proto/business.ext.proto +++ b/pkg/proto/business.ext.proto @@ -85,7 +85,7 @@ enum GroupNoticePublishType { UNKNOWN_PUBLISH = 0; // 未知 ONLY_PUBLISH = 1; // 仅发布 PUBLISH_AND_NOTICE = 2; // 发布并通知 - NOTICE_AND_TOP_UP = 3; // 存在骗钱行为 + NOTICE_AND_TOP_UP = 3; // 通知并置顶 } diff --git a/pkg/proto/logic.ext.proto b/pkg/proto/logic.ext.proto index 4a6961a..e8fef6e 100644 --- a/pkg/proto/logic.ext.proto +++ b/pkg/proto/logic.ext.proto @@ -42,6 +42,8 @@ service LogicExt { // 添加群组成员 rpc AddGroupMembers (AddGroupMembersReq) returns (AddGroupMembersResp); + // 扫码入群 + rpc ScanQrCodeAddGroup (ScanQrCodeAddGroupReq) returns (ScanQrCodeAddGroupResp); // 更新群组成员信息 rpc UpdateGroupMember (UpdateGroupMemberReq) returns (Empty); // 删除群组成员 @@ -223,6 +225,13 @@ message AddGroupMembersResp { repeated int64 user_ids = 1; // 已经在群组的用户id列表 } +message ScanQrCodeAddGroupReq { + int64 group_id = 1; // 群组id +} +message ScanQrCodeAddGroupResp { + bool isAlready = 1; // 是否已加入群 +} + enum GroupKindType { CREATE_UNKNOWN = 0; // 未知 CREATE_USER = 1; // 用户创建