// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.31.0 // protoc v3.20.3 // source: chat_message.proto package protobuf import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) type AudioMessage_AudioType int32 const ( AudioMessage_UNKNOWN_AUDIO_TYPE AudioMessage_AudioType = 0 AudioMessage_AAC AudioMessage_AudioType = 1 AudioMessage_AMR AudioMessage_AudioType = 2 ) // Enum value maps for AudioMessage_AudioType. var ( AudioMessage_AudioType_name = map[int32]string{ 0: "UNKNOWN_AUDIO_TYPE", 1: "AAC", 2: "AMR", } AudioMessage_AudioType_value = map[string]int32{ "UNKNOWN_AUDIO_TYPE": 0, "AAC": 1, "AMR": 2, } ) func (x AudioMessage_AudioType) Enum() *AudioMessage_AudioType { p := new(AudioMessage_AudioType) *p = x return p } func (x AudioMessage_AudioType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (AudioMessage_AudioType) Descriptor() protoreflect.EnumDescriptor { return file_chat_message_proto_enumTypes[0].Descriptor() } func (AudioMessage_AudioType) Type() protoreflect.EnumType { return &file_chat_message_proto_enumTypes[0] } func (x AudioMessage_AudioType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use AudioMessage_AudioType.Descriptor instead. func (AudioMessage_AudioType) EnumDescriptor() ([]byte, []int) { return file_chat_message_proto_rawDescGZIP(), []int{2, 0} } type UnfurledLink_LinkType int32 const ( UnfurledLink_LINK UnfurledLink_LinkType = 0 UnfurledLink_IMAGE UnfurledLink_LinkType = 1 ) // Enum value maps for UnfurledLink_LinkType. var ( UnfurledLink_LinkType_name = map[int32]string{ 0: "LINK", 1: "IMAGE", } UnfurledLink_LinkType_value = map[string]int32{ "LINK": 0, "IMAGE": 1, } ) func (x UnfurledLink_LinkType) Enum() *UnfurledLink_LinkType { p := new(UnfurledLink_LinkType) *p = x return p } func (x UnfurledLink_LinkType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (UnfurledLink_LinkType) Descriptor() protoreflect.EnumDescriptor { return file_chat_message_proto_enumTypes[1].Descriptor() } func (UnfurledLink_LinkType) Type() protoreflect.EnumType { return &file_chat_message_proto_enumTypes[1] } func (x UnfurledLink_LinkType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use UnfurledLink_LinkType.Descriptor instead. func (UnfurledLink_LinkType) EnumDescriptor() ([]byte, []int) { return file_chat_message_proto_rawDescGZIP(), []int{12, 0} } type ChatMessage_ContentType int32 const ( ChatMessage_UNKNOWN_CONTENT_TYPE ChatMessage_ContentType = 0 ChatMessage_TEXT_PLAIN ChatMessage_ContentType = 1 ChatMessage_STICKER ChatMessage_ContentType = 2 ChatMessage_STATUS ChatMessage_ContentType = 3 ChatMessage_EMOJI ChatMessage_ContentType = 4 ChatMessage_TRANSACTION_COMMAND ChatMessage_ContentType = 5 // Only local ChatMessage_SYSTEM_MESSAGE_CONTENT_PRIVATE_GROUP ChatMessage_ContentType = 6 ChatMessage_IMAGE ChatMessage_ContentType = 7 ChatMessage_AUDIO ChatMessage_ContentType = 8 ChatMessage_COMMUNITY ChatMessage_ContentType = 9 // Only local ChatMessage_SYSTEM_MESSAGE_GAP ChatMessage_ContentType = 10 ChatMessage_CONTACT_REQUEST ChatMessage_ContentType = 11 ChatMessage_DISCORD_MESSAGE ChatMessage_ContentType = 12 ChatMessage_IDENTITY_VERIFICATION ChatMessage_ContentType = 13 // Only local ChatMessage_SYSTEM_MESSAGE_PINNED_MESSAGE ChatMessage_ContentType = 14 // Only local ChatMessage_SYSTEM_MESSAGE_MUTUAL_EVENT_SENT ChatMessage_ContentType = 15 // Only local ChatMessage_SYSTEM_MESSAGE_MUTUAL_EVENT_ACCEPTED ChatMessage_ContentType = 16 // Only local ChatMessage_SYSTEM_MESSAGE_MUTUAL_EVENT_REMOVED ChatMessage_ContentType = 17 ChatMessage_BRIDGE_MESSAGE ChatMessage_ContentType = 18 ) // Enum value maps for ChatMessage_ContentType. var ( ChatMessage_ContentType_name = map[int32]string{ 0: "UNKNOWN_CONTENT_TYPE", 1: "TEXT_PLAIN", 2: "STICKER", 3: "STATUS", 4: "EMOJI", 5: "TRANSACTION_COMMAND", 6: "SYSTEM_MESSAGE_CONTENT_PRIVATE_GROUP", 7: "IMAGE", 8: "AUDIO", 9: "COMMUNITY", 10: "SYSTEM_MESSAGE_GAP", 11: "CONTACT_REQUEST", 12: "DISCORD_MESSAGE", 13: "IDENTITY_VERIFICATION", 14: "SYSTEM_MESSAGE_PINNED_MESSAGE", 15: "SYSTEM_MESSAGE_MUTUAL_EVENT_SENT", 16: "SYSTEM_MESSAGE_MUTUAL_EVENT_ACCEPTED", 17: "SYSTEM_MESSAGE_MUTUAL_EVENT_REMOVED", 18: "BRIDGE_MESSAGE", } ChatMessage_ContentType_value = map[string]int32{ "UNKNOWN_CONTENT_TYPE": 0, "TEXT_PLAIN": 1, "STICKER": 2, "STATUS": 3, "EMOJI": 4, "TRANSACTION_COMMAND": 5, "SYSTEM_MESSAGE_CONTENT_PRIVATE_GROUP": 6, "IMAGE": 7, "AUDIO": 8, "COMMUNITY": 9, "SYSTEM_MESSAGE_GAP": 10, "CONTACT_REQUEST": 11, "DISCORD_MESSAGE": 12, "IDENTITY_VERIFICATION": 13, "SYSTEM_MESSAGE_PINNED_MESSAGE": 14, "SYSTEM_MESSAGE_MUTUAL_EVENT_SENT": 15, "SYSTEM_MESSAGE_MUTUAL_EVENT_ACCEPTED": 16, "SYSTEM_MESSAGE_MUTUAL_EVENT_REMOVED": 17, "BRIDGE_MESSAGE": 18, } ) func (x ChatMessage_ContentType) Enum() *ChatMessage_ContentType { p := new(ChatMessage_ContentType) *p = x return p } func (x ChatMessage_ContentType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (ChatMessage_ContentType) Descriptor() protoreflect.EnumDescriptor { return file_chat_message_proto_enumTypes[2].Descriptor() } func (ChatMessage_ContentType) Type() protoreflect.EnumType { return &file_chat_message_proto_enumTypes[2] } func (x ChatMessage_ContentType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use ChatMessage_ContentType.Descriptor instead. func (ChatMessage_ContentType) EnumDescriptor() ([]byte, []int) { return file_chat_message_proto_rawDescGZIP(), []int{18, 0} } type StickerMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Hash string `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` Pack int32 `protobuf:"varint,2,opt,name=pack,proto3" json:"pack,omitempty"` } func (x *StickerMessage) Reset() { *x = StickerMessage{} if protoimpl.UnsafeEnabled { mi := &file_chat_message_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *StickerMessage) String() string { return protoimpl.X.MessageStringOf(x) } func (*StickerMessage) ProtoMessage() {} func (x *StickerMessage) ProtoReflect() protoreflect.Message { mi := &file_chat_message_proto_msgTypes[0] 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 StickerMessage.ProtoReflect.Descriptor instead. func (*StickerMessage) Descriptor() ([]byte, []int) { return file_chat_message_proto_rawDescGZIP(), []int{0} } func (x *StickerMessage) GetHash() string { if x != nil { return x.Hash } return "" } func (x *StickerMessage) GetPack() int32 { if x != nil { return x.Pack } return 0 } type ImageMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Payload []byte `protobuf:"bytes,1,opt,name=payload,proto3" json:"payload,omitempty"` Format ImageFormat `protobuf:"varint,2,opt,name=format,proto3,enum=protobuf.ImageFormat" json:"format,omitempty"` AlbumId string `protobuf:"bytes,3,opt,name=album_id,json=albumId,proto3" json:"album_id,omitempty"` Width uint32 `protobuf:"varint,4,opt,name=width,proto3" json:"width,omitempty"` Height uint32 `protobuf:"varint,5,opt,name=height,proto3" json:"height,omitempty"` AlbumImagesCount uint32 `protobuf:"varint,6,opt,name=album_images_count,json=albumImagesCount,proto3" json:"album_images_count,omitempty"` } func (x *ImageMessage) Reset() { *x = ImageMessage{} if protoimpl.UnsafeEnabled { mi := &file_chat_message_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ImageMessage) String() string { return protoimpl.X.MessageStringOf(x) } func (*ImageMessage) ProtoMessage() {} func (x *ImageMessage) ProtoReflect() protoreflect.Message { mi := &file_chat_message_proto_msgTypes[1] 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 ImageMessage.ProtoReflect.Descriptor instead. func (*ImageMessage) Descriptor() ([]byte, []int) { return file_chat_message_proto_rawDescGZIP(), []int{1} } func (x *ImageMessage) GetPayload() []byte { if x != nil { return x.Payload } return nil } func (x *ImageMessage) GetFormat() ImageFormat { if x != nil { return x.Format } return ImageFormat_UNKNOWN_IMAGE_FORMAT } func (x *ImageMessage) GetAlbumId() string { if x != nil { return x.AlbumId } return "" } func (x *ImageMessage) GetWidth() uint32 { if x != nil { return x.Width } return 0 } func (x *ImageMessage) GetHeight() uint32 { if x != nil { return x.Height } return 0 } func (x *ImageMessage) GetAlbumImagesCount() uint32 { if x != nil { return x.AlbumImagesCount } return 0 } type AudioMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Payload []byte `protobuf:"bytes,1,opt,name=payload,proto3" json:"payload,omitempty"` Type AudioMessage_AudioType `protobuf:"varint,2,opt,name=type,proto3,enum=protobuf.AudioMessage_AudioType" json:"type,omitempty"` DurationMs uint64 `protobuf:"varint,3,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` } func (x *AudioMessage) Reset() { *x = AudioMessage{} if protoimpl.UnsafeEnabled { mi := &file_chat_message_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *AudioMessage) String() string { return protoimpl.X.MessageStringOf(x) } func (*AudioMessage) ProtoMessage() {} func (x *AudioMessage) ProtoReflect() protoreflect.Message { mi := &file_chat_message_proto_msgTypes[2] 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 AudioMessage.ProtoReflect.Descriptor instead. func (*AudioMessage) Descriptor() ([]byte, []int) { return file_chat_message_proto_rawDescGZIP(), []int{2} } func (x *AudioMessage) GetPayload() []byte { if x != nil { return x.Payload } return nil } func (x *AudioMessage) GetType() AudioMessage_AudioType { if x != nil { return x.Type } return AudioMessage_UNKNOWN_AUDIO_TYPE } func (x *AudioMessage) GetDurationMs() uint64 { if x != nil { return x.DurationMs } return 0 } type EditMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Clock uint64 `protobuf:"varint,1,opt,name=clock,proto3" json:"clock,omitempty"` // Text of the message Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` ChatId string `protobuf:"bytes,3,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` MessageId string `protobuf:"bytes,4,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` // Grant for community edit messages // // Deprecated: Marked as deprecated in chat_message.proto. Grant []byte `protobuf:"bytes,5,opt,name=grant,proto3" json:"grant,omitempty"` // The type of message (public/one-to-one/private-group-chat) MessageType MessageType `protobuf:"varint,6,opt,name=message_type,json=messageType,proto3,enum=protobuf.MessageType" json:"message_type,omitempty"` ContentType ChatMessage_ContentType `protobuf:"varint,7,opt,name=content_type,json=contentType,proto3,enum=protobuf.ChatMessage_ContentType" json:"content_type,omitempty"` UnfurledLinks []*UnfurledLink `protobuf:"bytes,8,rep,name=unfurled_links,json=unfurledLinks,proto3" json:"unfurled_links,omitempty"` UnfurledStatusLinks *UnfurledStatusLinks `protobuf:"bytes,9,opt,name=unfurled_status_links,json=unfurledStatusLinks,proto3" json:"unfurled_status_links,omitempty"` } func (x *EditMessage) Reset() { *x = EditMessage{} if protoimpl.UnsafeEnabled { mi := &file_chat_message_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *EditMessage) String() string { return protoimpl.X.MessageStringOf(x) } func (*EditMessage) ProtoMessage() {} func (x *EditMessage) ProtoReflect() protoreflect.Message { mi := &file_chat_message_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 EditMessage.ProtoReflect.Descriptor instead. func (*EditMessage) Descriptor() ([]byte, []int) { return file_chat_message_proto_rawDescGZIP(), []int{3} } func (x *EditMessage) GetClock() uint64 { if x != nil { return x.Clock } return 0 } func (x *EditMessage) GetText() string { if x != nil { return x.Text } return "" } func (x *EditMessage) GetChatId() string { if x != nil { return x.ChatId } return "" } func (x *EditMessage) GetMessageId() string { if x != nil { return x.MessageId } return "" } // Deprecated: Marked as deprecated in chat_message.proto. func (x *EditMessage) GetGrant() []byte { if x != nil { return x.Grant } return nil } func (x *EditMessage) GetMessageType() MessageType { if x != nil { return x.MessageType } return MessageType_UNKNOWN_MESSAGE_TYPE } func (x *EditMessage) GetContentType() ChatMessage_ContentType { if x != nil { return x.ContentType } return ChatMessage_UNKNOWN_CONTENT_TYPE } func (x *EditMessage) GetUnfurledLinks() []*UnfurledLink { if x != nil { return x.UnfurledLinks } return nil } func (x *EditMessage) GetUnfurledStatusLinks() *UnfurledStatusLinks { if x != nil { return x.UnfurledStatusLinks } return nil } type DeleteMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Clock uint64 `protobuf:"varint,1,opt,name=clock,proto3" json:"clock,omitempty"` ChatId string `protobuf:"bytes,2,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` MessageId string `protobuf:"bytes,3,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` // Grant for community delete messages // // Deprecated: Marked as deprecated in chat_message.proto. Grant []byte `protobuf:"bytes,4,opt,name=grant,proto3" json:"grant,omitempty"` // The type of message (public/one-to-one/private-group-chat) MessageType MessageType `protobuf:"varint,5,opt,name=message_type,json=messageType,proto3,enum=protobuf.MessageType" json:"message_type,omitempty"` DeletedBy string `protobuf:"bytes,6,opt,name=deleted_by,json=deletedBy,proto3" json:"deleted_by,omitempty"` } func (x *DeleteMessage) Reset() { *x = DeleteMessage{} if protoimpl.UnsafeEnabled { mi := &file_chat_message_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DeleteMessage) String() string { return protoimpl.X.MessageStringOf(x) } func (*DeleteMessage) ProtoMessage() {} func (x *DeleteMessage) ProtoReflect() protoreflect.Message { mi := &file_chat_message_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 DeleteMessage.ProtoReflect.Descriptor instead. func (*DeleteMessage) Descriptor() ([]byte, []int) { return file_chat_message_proto_rawDescGZIP(), []int{4} } func (x *DeleteMessage) GetClock() uint64 { if x != nil { return x.Clock } return 0 } func (x *DeleteMessage) GetChatId() string { if x != nil { return x.ChatId } return "" } func (x *DeleteMessage) GetMessageId() string { if x != nil { return x.MessageId } return "" } // Deprecated: Marked as deprecated in chat_message.proto. func (x *DeleteMessage) GetGrant() []byte { if x != nil { return x.Grant } return nil } func (x *DeleteMessage) GetMessageType() MessageType { if x != nil { return x.MessageType } return MessageType_UNKNOWN_MESSAGE_TYPE } func (x *DeleteMessage) GetDeletedBy() string { if x != nil { return x.DeletedBy } return "" } type SyncDeleteForMeMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Clock uint64 `protobuf:"varint,1,opt,name=clock,proto3" json:"clock,omitempty"` MessageId string `protobuf:"bytes,2,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` } func (x *SyncDeleteForMeMessage) Reset() { *x = SyncDeleteForMeMessage{} if protoimpl.UnsafeEnabled { mi := &file_chat_message_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SyncDeleteForMeMessage) String() string { return protoimpl.X.MessageStringOf(x) } func (*SyncDeleteForMeMessage) ProtoMessage() {} func (x *SyncDeleteForMeMessage) ProtoReflect() protoreflect.Message { mi := &file_chat_message_proto_msgTypes[5] 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 SyncDeleteForMeMessage.ProtoReflect.Descriptor instead. func (*SyncDeleteForMeMessage) Descriptor() ([]byte, []int) { return file_chat_message_proto_rawDescGZIP(), []int{5} } func (x *SyncDeleteForMeMessage) GetClock() uint64 { if x != nil { return x.Clock } return 0 } func (x *SyncDeleteForMeMessage) GetMessageId() string { if x != nil { return x.MessageId } return "" } type DiscordMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` Timestamp string `protobuf:"bytes,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"` TimestampEdited string `protobuf:"bytes,4,opt,name=timestampEdited,proto3" json:"timestampEdited,omitempty"` Content string `protobuf:"bytes,5,opt,name=content,proto3" json:"content,omitempty"` Author *DiscordMessageAuthor `protobuf:"bytes,6,opt,name=author,proto3" json:"author,omitempty"` Reference *DiscordMessageReference `protobuf:"bytes,7,opt,name=reference,proto3" json:"reference,omitempty"` Attachments []*DiscordMessageAttachment `protobuf:"bytes,8,rep,name=attachments,proto3" json:"attachments,omitempty"` } func (x *DiscordMessage) Reset() { *x = DiscordMessage{} if protoimpl.UnsafeEnabled { mi := &file_chat_message_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DiscordMessage) String() string { return protoimpl.X.MessageStringOf(x) } func (*DiscordMessage) ProtoMessage() {} func (x *DiscordMessage) ProtoReflect() protoreflect.Message { mi := &file_chat_message_proto_msgTypes[6] 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 DiscordMessage.ProtoReflect.Descriptor instead. func (*DiscordMessage) Descriptor() ([]byte, []int) { return file_chat_message_proto_rawDescGZIP(), []int{6} } func (x *DiscordMessage) GetId() string { if x != nil { return x.Id } return "" } func (x *DiscordMessage) GetType() string { if x != nil { return x.Type } return "" } func (x *DiscordMessage) GetTimestamp() string { if x != nil { return x.Timestamp } return "" } func (x *DiscordMessage) GetTimestampEdited() string { if x != nil { return x.TimestampEdited } return "" } func (x *DiscordMessage) GetContent() string { if x != nil { return x.Content } return "" } func (x *DiscordMessage) GetAuthor() *DiscordMessageAuthor { if x != nil { return x.Author } return nil } func (x *DiscordMessage) GetReference() *DiscordMessageReference { if x != nil { return x.Reference } return nil } func (x *DiscordMessage) GetAttachments() []*DiscordMessageAttachment { if x != nil { return x.Attachments } return nil } type DiscordMessageAuthor struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` Discriminator string `protobuf:"bytes,3,opt,name=discriminator,proto3" json:"discriminator,omitempty"` Nickname string `protobuf:"bytes,4,opt,name=nickname,proto3" json:"nickname,omitempty"` AvatarUrl string `protobuf:"bytes,5,opt,name=avatarUrl,proto3" json:"avatarUrl,omitempty"` AvatarImagePayload []byte `protobuf:"bytes,6,opt,name=avatarImagePayload,proto3" json:"avatarImagePayload,omitempty"` LocalUrl string `protobuf:"bytes,7,opt,name=localUrl,proto3" json:"localUrl,omitempty"` } func (x *DiscordMessageAuthor) Reset() { *x = DiscordMessageAuthor{} if protoimpl.UnsafeEnabled { mi := &file_chat_message_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DiscordMessageAuthor) String() string { return protoimpl.X.MessageStringOf(x) } func (*DiscordMessageAuthor) ProtoMessage() {} func (x *DiscordMessageAuthor) ProtoReflect() protoreflect.Message { mi := &file_chat_message_proto_msgTypes[7] 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 DiscordMessageAuthor.ProtoReflect.Descriptor instead. func (*DiscordMessageAuthor) Descriptor() ([]byte, []int) { return file_chat_message_proto_rawDescGZIP(), []int{7} } func (x *DiscordMessageAuthor) GetId() string { if x != nil { return x.Id } return "" } func (x *DiscordMessageAuthor) GetName() string { if x != nil { return x.Name } return "" } func (x *DiscordMessageAuthor) GetDiscriminator() string { if x != nil { return x.Discriminator } return "" } func (x *DiscordMessageAuthor) GetNickname() string { if x != nil { return x.Nickname } return "" } func (x *DiscordMessageAuthor) GetAvatarUrl() string { if x != nil { return x.AvatarUrl } return "" } func (x *DiscordMessageAuthor) GetAvatarImagePayload() []byte { if x != nil { return x.AvatarImagePayload } return nil } func (x *DiscordMessageAuthor) GetLocalUrl() string { if x != nil { return x.LocalUrl } return "" } type DiscordMessageReference struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields MessageId string `protobuf:"bytes,1,opt,name=messageId,proto3" json:"messageId,omitempty"` ChannelId string `protobuf:"bytes,2,opt,name=channelId,proto3" json:"channelId,omitempty"` GuildId string `protobuf:"bytes,3,opt,name=guildId,proto3" json:"guildId,omitempty"` } func (x *DiscordMessageReference) Reset() { *x = DiscordMessageReference{} if protoimpl.UnsafeEnabled { mi := &file_chat_message_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DiscordMessageReference) String() string { return protoimpl.X.MessageStringOf(x) } func (*DiscordMessageReference) ProtoMessage() {} func (x *DiscordMessageReference) ProtoReflect() protoreflect.Message { mi := &file_chat_message_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 DiscordMessageReference.ProtoReflect.Descriptor instead. func (*DiscordMessageReference) Descriptor() ([]byte, []int) { return file_chat_message_proto_rawDescGZIP(), []int{8} } func (x *DiscordMessageReference) GetMessageId() string { if x != nil { return x.MessageId } return "" } func (x *DiscordMessageReference) GetChannelId() string { if x != nil { return x.ChannelId } return "" } func (x *DiscordMessageReference) GetGuildId() string { if x != nil { return x.GuildId } return "" } type DiscordMessageAttachment struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` MessageId string `protobuf:"bytes,2,opt,name=messageId,proto3" json:"messageId,omitempty"` Url string `protobuf:"bytes,3,opt,name=url,proto3" json:"url,omitempty"` FileName string `protobuf:"bytes,4,opt,name=fileName,proto3" json:"fileName,omitempty"` FileSizeBytes uint64 `protobuf:"varint,5,opt,name=fileSizeBytes,proto3" json:"fileSizeBytes,omitempty"` ContentType string `protobuf:"bytes,6,opt,name=contentType,proto3" json:"contentType,omitempty"` Payload []byte `protobuf:"bytes,7,opt,name=payload,proto3" json:"payload,omitempty"` LocalUrl string `protobuf:"bytes,8,opt,name=localUrl,proto3" json:"localUrl,omitempty"` } func (x *DiscordMessageAttachment) Reset() { *x = DiscordMessageAttachment{} if protoimpl.UnsafeEnabled { mi := &file_chat_message_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DiscordMessageAttachment) String() string { return protoimpl.X.MessageStringOf(x) } func (*DiscordMessageAttachment) ProtoMessage() {} func (x *DiscordMessageAttachment) ProtoReflect() protoreflect.Message { mi := &file_chat_message_proto_msgTypes[9] 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 DiscordMessageAttachment.ProtoReflect.Descriptor instead. func (*DiscordMessageAttachment) Descriptor() ([]byte, []int) { return file_chat_message_proto_rawDescGZIP(), []int{9} } func (x *DiscordMessageAttachment) GetId() string { if x != nil { return x.Id } return "" } func (x *DiscordMessageAttachment) GetMessageId() string { if x != nil { return x.MessageId } return "" } func (x *DiscordMessageAttachment) GetUrl() string { if x != nil { return x.Url } return "" } func (x *DiscordMessageAttachment) GetFileName() string { if x != nil { return x.FileName } return "" } func (x *DiscordMessageAttachment) GetFileSizeBytes() uint64 { if x != nil { return x.FileSizeBytes } return 0 } func (x *DiscordMessageAttachment) GetContentType() string { if x != nil { return x.ContentType } return "" } func (x *DiscordMessageAttachment) GetPayload() []byte { if x != nil { return x.Payload } return nil } func (x *DiscordMessageAttachment) GetLocalUrl() string { if x != nil { return x.LocalUrl } return "" } type BridgeMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields BridgeName string `protobuf:"bytes,1,opt,name=bridgeName,proto3" json:"bridgeName,omitempty"` UserName string `protobuf:"bytes,2,opt,name=userName,proto3" json:"userName,omitempty"` UserAvatar string `protobuf:"bytes,3,opt,name=userAvatar,proto3" json:"userAvatar,omitempty"` UserID string `protobuf:"bytes,4,opt,name=userID,proto3" json:"userID,omitempty"` Content string `protobuf:"bytes,5,opt,name=content,proto3" json:"content,omitempty"` MessageID string `protobuf:"bytes,6,opt,name=messageID,proto3" json:"messageID,omitempty"` ParentMessageID string `protobuf:"bytes,7,opt,name=parentMessageID,proto3" json:"parentMessageID,omitempty"` } func (x *BridgeMessage) Reset() { *x = BridgeMessage{} if protoimpl.UnsafeEnabled { mi := &file_chat_message_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *BridgeMessage) String() string { return protoimpl.X.MessageStringOf(x) } func (*BridgeMessage) ProtoMessage() {} func (x *BridgeMessage) ProtoReflect() protoreflect.Message { mi := &file_chat_message_proto_msgTypes[10] 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 BridgeMessage.ProtoReflect.Descriptor instead. func (*BridgeMessage) Descriptor() ([]byte, []int) { return file_chat_message_proto_rawDescGZIP(), []int{10} } func (x *BridgeMessage) GetBridgeName() string { if x != nil { return x.BridgeName } return "" } func (x *BridgeMessage) GetUserName() string { if x != nil { return x.UserName } return "" } func (x *BridgeMessage) GetUserAvatar() string { if x != nil { return x.UserAvatar } return "" } func (x *BridgeMessage) GetUserID() string { if x != nil { return x.UserID } return "" } func (x *BridgeMessage) GetContent() string { if x != nil { return x.Content } return "" } func (x *BridgeMessage) GetMessageID() string { if x != nil { return x.MessageID } return "" } func (x *BridgeMessage) GetParentMessageID() string { if x != nil { return x.ParentMessageID } return "" } type UnfurledLinkThumbnail struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Payload []byte `protobuf:"bytes,1,opt,name=payload,proto3" json:"payload,omitempty"` Width uint32 `protobuf:"varint,2,opt,name=width,proto3" json:"width,omitempty"` Height uint32 `protobuf:"varint,3,opt,name=height,proto3" json:"height,omitempty"` } func (x *UnfurledLinkThumbnail) Reset() { *x = UnfurledLinkThumbnail{} if protoimpl.UnsafeEnabled { mi := &file_chat_message_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UnfurledLinkThumbnail) String() string { return protoimpl.X.MessageStringOf(x) } func (*UnfurledLinkThumbnail) ProtoMessage() {} func (x *UnfurledLinkThumbnail) ProtoReflect() protoreflect.Message { mi := &file_chat_message_proto_msgTypes[11] 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 UnfurledLinkThumbnail.ProtoReflect.Descriptor instead. func (*UnfurledLinkThumbnail) Descriptor() ([]byte, []int) { return file_chat_message_proto_rawDescGZIP(), []int{11} } func (x *UnfurledLinkThumbnail) GetPayload() []byte { if x != nil { return x.Payload } return nil } func (x *UnfurledLinkThumbnail) GetWidth() uint32 { if x != nil { return x.Width } return 0 } func (x *UnfurledLinkThumbnail) GetHeight() uint32 { if x != nil { return x.Height } return 0 } type UnfurledLink struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // A valid URL which uniquely identifies this link. Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` // Website's title. Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` // Description is sometimes available, but can be empty. Most mainstream // websites provide this information. Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` ThumbnailPayload []byte `protobuf:"bytes,4,opt,name=thumbnail_payload,json=thumbnailPayload,proto3" json:"thumbnail_payload,omitempty"` ThumbnailWidth uint32 `protobuf:"varint,5,opt,name=thumbnail_width,json=thumbnailWidth,proto3" json:"thumbnail_width,omitempty"` ThumbnailHeight uint32 `protobuf:"varint,6,opt,name=thumbnail_height,json=thumbnailHeight,proto3" json:"thumbnail_height,omitempty"` Type UnfurledLink_LinkType `protobuf:"varint,7,opt,name=type,proto3,enum=protobuf.UnfurledLink_LinkType" json:"type,omitempty"` FaviconPayload []byte `protobuf:"bytes,8,opt,name=favicon_payload,json=faviconPayload,proto3" json:"favicon_payload,omitempty"` } func (x *UnfurledLink) Reset() { *x = UnfurledLink{} if protoimpl.UnsafeEnabled { mi := &file_chat_message_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UnfurledLink) String() string { return protoimpl.X.MessageStringOf(x) } func (*UnfurledLink) ProtoMessage() {} func (x *UnfurledLink) ProtoReflect() protoreflect.Message { mi := &file_chat_message_proto_msgTypes[12] 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 UnfurledLink.ProtoReflect.Descriptor instead. func (*UnfurledLink) Descriptor() ([]byte, []int) { return file_chat_message_proto_rawDescGZIP(), []int{12} } func (x *UnfurledLink) GetUrl() string { if x != nil { return x.Url } return "" } func (x *UnfurledLink) GetTitle() string { if x != nil { return x.Title } return "" } func (x *UnfurledLink) GetDescription() string { if x != nil { return x.Description } return "" } func (x *UnfurledLink) GetThumbnailPayload() []byte { if x != nil { return x.ThumbnailPayload } return nil } func (x *UnfurledLink) GetThumbnailWidth() uint32 { if x != nil { return x.ThumbnailWidth } return 0 } func (x *UnfurledLink) GetThumbnailHeight() uint32 { if x != nil { return x.ThumbnailHeight } return 0 } func (x *UnfurledLink) GetType() UnfurledLink_LinkType { if x != nil { return x.Type } return UnfurledLink_LINK } func (x *UnfurledLink) GetFaviconPayload() []byte { if x != nil { return x.FaviconPayload } return nil } type UnfurledStatusContactLink struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields PublicKey []byte `protobuf:"bytes,1,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` Icon *UnfurledLinkThumbnail `protobuf:"bytes,4,opt,name=icon,proto3" json:"icon,omitempty"` } func (x *UnfurledStatusContactLink) Reset() { *x = UnfurledStatusContactLink{} if protoimpl.UnsafeEnabled { mi := &file_chat_message_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UnfurledStatusContactLink) String() string { return protoimpl.X.MessageStringOf(x) } func (*UnfurledStatusContactLink) ProtoMessage() {} func (x *UnfurledStatusContactLink) ProtoReflect() protoreflect.Message { mi := &file_chat_message_proto_msgTypes[13] 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 UnfurledStatusContactLink.ProtoReflect.Descriptor instead. func (*UnfurledStatusContactLink) Descriptor() ([]byte, []int) { return file_chat_message_proto_rawDescGZIP(), []int{13} } func (x *UnfurledStatusContactLink) GetPublicKey() []byte { if x != nil { return x.PublicKey } return nil } func (x *UnfurledStatusContactLink) GetDisplayName() string { if x != nil { return x.DisplayName } return "" } func (x *UnfurledStatusContactLink) GetDescription() string { if x != nil { return x.Description } return "" } func (x *UnfurledStatusContactLink) GetIcon() *UnfurledLinkThumbnail { if x != nil { return x.Icon } return nil } type UnfurledStatusCommunityLink struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields CommunityId []byte `protobuf:"bytes,1,opt,name=community_id,json=communityId,proto3" json:"community_id,omitempty"` DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` MembersCount uint32 `protobuf:"varint,4,opt,name=members_count,json=membersCount,proto3" json:"members_count,omitempty"` Color string `protobuf:"bytes,5,opt,name=color,proto3" json:"color,omitempty"` Icon *UnfurledLinkThumbnail `protobuf:"bytes,7,opt,name=icon,proto3" json:"icon,omitempty"` Banner *UnfurledLinkThumbnail `protobuf:"bytes,8,opt,name=banner,proto3" json:"banner,omitempty"` } func (x *UnfurledStatusCommunityLink) Reset() { *x = UnfurledStatusCommunityLink{} if protoimpl.UnsafeEnabled { mi := &file_chat_message_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UnfurledStatusCommunityLink) String() string { return protoimpl.X.MessageStringOf(x) } func (*UnfurledStatusCommunityLink) ProtoMessage() {} func (x *UnfurledStatusCommunityLink) ProtoReflect() protoreflect.Message { mi := &file_chat_message_proto_msgTypes[14] 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 UnfurledStatusCommunityLink.ProtoReflect.Descriptor instead. func (*UnfurledStatusCommunityLink) Descriptor() ([]byte, []int) { return file_chat_message_proto_rawDescGZIP(), []int{14} } func (x *UnfurledStatusCommunityLink) GetCommunityId() []byte { if x != nil { return x.CommunityId } return nil } func (x *UnfurledStatusCommunityLink) GetDisplayName() string { if x != nil { return x.DisplayName } return "" } func (x *UnfurledStatusCommunityLink) GetDescription() string { if x != nil { return x.Description } return "" } func (x *UnfurledStatusCommunityLink) GetMembersCount() uint32 { if x != nil { return x.MembersCount } return 0 } func (x *UnfurledStatusCommunityLink) GetColor() string { if x != nil { return x.Color } return "" } func (x *UnfurledStatusCommunityLink) GetIcon() *UnfurledLinkThumbnail { if x != nil { return x.Icon } return nil } func (x *UnfurledStatusCommunityLink) GetBanner() *UnfurledLinkThumbnail { if x != nil { return x.Banner } return nil } type UnfurledStatusChannelLink struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields ChannelUuid string `protobuf:"bytes,1,opt,name=channel_uuid,json=channelUuid,proto3" json:"channel_uuid,omitempty"` Emoji string `protobuf:"bytes,2,opt,name=emoji,proto3" json:"emoji,omitempty"` DisplayName string `protobuf:"bytes,3,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` Color string `protobuf:"bytes,5,opt,name=color,proto3" json:"color,omitempty"` Community *UnfurledStatusCommunityLink `protobuf:"bytes,6,opt,name=community,proto3" json:"community,omitempty"` } func (x *UnfurledStatusChannelLink) Reset() { *x = UnfurledStatusChannelLink{} if protoimpl.UnsafeEnabled { mi := &file_chat_message_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UnfurledStatusChannelLink) String() string { return protoimpl.X.MessageStringOf(x) } func (*UnfurledStatusChannelLink) ProtoMessage() {} func (x *UnfurledStatusChannelLink) ProtoReflect() protoreflect.Message { mi := &file_chat_message_proto_msgTypes[15] 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 UnfurledStatusChannelLink.ProtoReflect.Descriptor instead. func (*UnfurledStatusChannelLink) Descriptor() ([]byte, []int) { return file_chat_message_proto_rawDescGZIP(), []int{15} } func (x *UnfurledStatusChannelLink) GetChannelUuid() string { if x != nil { return x.ChannelUuid } return "" } func (x *UnfurledStatusChannelLink) GetEmoji() string { if x != nil { return x.Emoji } return "" } func (x *UnfurledStatusChannelLink) GetDisplayName() string { if x != nil { return x.DisplayName } return "" } func (x *UnfurledStatusChannelLink) GetDescription() string { if x != nil { return x.Description } return "" } func (x *UnfurledStatusChannelLink) GetColor() string { if x != nil { return x.Color } return "" } func (x *UnfurledStatusChannelLink) GetCommunity() *UnfurledStatusCommunityLink { if x != nil { return x.Community } return nil } type UnfurledStatusLink struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` // Types that are assignable to Payload: // // *UnfurledStatusLink_Contact // *UnfurledStatusLink_Community // *UnfurledStatusLink_Channel Payload isUnfurledStatusLink_Payload `protobuf_oneof:"payload"` } func (x *UnfurledStatusLink) Reset() { *x = UnfurledStatusLink{} if protoimpl.UnsafeEnabled { mi := &file_chat_message_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UnfurledStatusLink) String() string { return protoimpl.X.MessageStringOf(x) } func (*UnfurledStatusLink) ProtoMessage() {} func (x *UnfurledStatusLink) ProtoReflect() protoreflect.Message { mi := &file_chat_message_proto_msgTypes[16] 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 UnfurledStatusLink.ProtoReflect.Descriptor instead. func (*UnfurledStatusLink) Descriptor() ([]byte, []int) { return file_chat_message_proto_rawDescGZIP(), []int{16} } func (x *UnfurledStatusLink) GetUrl() string { if x != nil { return x.Url } return "" } func (m *UnfurledStatusLink) GetPayload() isUnfurledStatusLink_Payload { if m != nil { return m.Payload } return nil } func (x *UnfurledStatusLink) GetContact() *UnfurledStatusContactLink { if x, ok := x.GetPayload().(*UnfurledStatusLink_Contact); ok { return x.Contact } return nil } func (x *UnfurledStatusLink) GetCommunity() *UnfurledStatusCommunityLink { if x, ok := x.GetPayload().(*UnfurledStatusLink_Community); ok { return x.Community } return nil } func (x *UnfurledStatusLink) GetChannel() *UnfurledStatusChannelLink { if x, ok := x.GetPayload().(*UnfurledStatusLink_Channel); ok { return x.Channel } return nil } type isUnfurledStatusLink_Payload interface { isUnfurledStatusLink_Payload() } type UnfurledStatusLink_Contact struct { Contact *UnfurledStatusContactLink `protobuf:"bytes,2,opt,name=contact,proto3,oneof"` } type UnfurledStatusLink_Community struct { Community *UnfurledStatusCommunityLink `protobuf:"bytes,3,opt,name=community,proto3,oneof"` } type UnfurledStatusLink_Channel struct { Channel *UnfurledStatusChannelLink `protobuf:"bytes,4,opt,name=channel,proto3,oneof"` } func (*UnfurledStatusLink_Contact) isUnfurledStatusLink_Payload() {} func (*UnfurledStatusLink_Community) isUnfurledStatusLink_Payload() {} func (*UnfurledStatusLink_Channel) isUnfurledStatusLink_Payload() {} // Create a wrapper around repeated property for proper unmarshalling type UnfurledStatusLinks struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields UnfurledStatusLinks []*UnfurledStatusLink `protobuf:"bytes,1,rep,name=unfurled_status_links,json=unfurledStatusLinks,proto3" json:"unfurled_status_links,omitempty"` } func (x *UnfurledStatusLinks) Reset() { *x = UnfurledStatusLinks{} if protoimpl.UnsafeEnabled { mi := &file_chat_message_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UnfurledStatusLinks) String() string { return protoimpl.X.MessageStringOf(x) } func (*UnfurledStatusLinks) ProtoMessage() {} func (x *UnfurledStatusLinks) ProtoReflect() protoreflect.Message { mi := &file_chat_message_proto_msgTypes[17] 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 UnfurledStatusLinks.ProtoReflect.Descriptor instead. func (*UnfurledStatusLinks) Descriptor() ([]byte, []int) { return file_chat_message_proto_rawDescGZIP(), []int{17} } func (x *UnfurledStatusLinks) GetUnfurledStatusLinks() []*UnfurledStatusLink { if x != nil { return x.UnfurledStatusLinks } return nil } type ChatMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Lamport timestamp of the chat message Clock uint64 `protobuf:"varint,1,opt,name=clock,proto3" json:"clock,omitempty"` // Unix timestamps in milliseconds, currently not used as we use whisper as // more reliable, but here so that we don't rely on it Timestamp uint64 `protobuf:"varint,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Text of the message Text string `protobuf:"bytes,3,opt,name=text,proto3" json:"text,omitempty"` // Id of the message that we are replying to ResponseTo string `protobuf:"bytes,4,opt,name=response_to,json=responseTo,proto3" json:"response_to,omitempty"` // Ens name of the sender EnsName string `protobuf:"bytes,5,opt,name=ens_name,json=ensName,proto3" json:"ens_name,omitempty"` // Chat id, this field is symmetric for public-chats and private group chats, // but asymmetric in case of one-to-ones, as the sender will use the chat-id // of the received, while the receiver will use the chat-id of the sender. // Probably should be the concatenation of sender-pk & receiver-pk in // alphabetical order ChatId string `protobuf:"bytes,6,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` // The type of message (public/one-to-one/private-group-chat) MessageType MessageType `protobuf:"varint,7,opt,name=message_type,json=messageType,proto3,enum=protobuf.MessageType" json:"message_type,omitempty"` // The type of the content of the message ContentType ChatMessage_ContentType `protobuf:"varint,8,opt,name=content_type,json=contentType,proto3,enum=protobuf.ChatMessage_ContentType" json:"content_type,omitempty"` // Types that are assignable to Payload: // // *ChatMessage_Sticker // *ChatMessage_Image // *ChatMessage_Audio // *ChatMessage_Community // *ChatMessage_DiscordMessage // *ChatMessage_BridgeMessage Payload isChatMessage_Payload `protobuf_oneof:"payload"` // Grant for community chat messages // // Deprecated: Marked as deprecated in chat_message.proto. Grant []byte `protobuf:"bytes,13,opt,name=grant,proto3" json:"grant,omitempty"` // Message author's display name, introduced in version 1 DisplayName string `protobuf:"bytes,14,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` ContactRequestPropagatedState *ContactRequestPropagatedState `protobuf:"bytes,15,opt,name=contact_request_propagated_state,json=contactRequestPropagatedState,proto3" json:"contact_request_propagated_state,omitempty"` UnfurledLinks []*UnfurledLink `protobuf:"bytes,16,rep,name=unfurled_links,json=unfurledLinks,proto3" json:"unfurled_links,omitempty"` Shard *Shard `protobuf:"bytes,17,opt,name=shard,proto3" json:"shard,omitempty"` UnfurledStatusLinks *UnfurledStatusLinks `protobuf:"bytes,18,opt,name=unfurled_status_links,json=unfurledStatusLinks,proto3" json:"unfurled_status_links,omitempty"` CustomizationColor uint32 `protobuf:"varint,19,opt,name=customization_color,json=customizationColor,proto3" json:"customization_color,omitempty"` } func (x *ChatMessage) Reset() { *x = ChatMessage{} if protoimpl.UnsafeEnabled { mi := &file_chat_message_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ChatMessage) String() string { return protoimpl.X.MessageStringOf(x) } func (*ChatMessage) ProtoMessage() {} func (x *ChatMessage) ProtoReflect() protoreflect.Message { mi := &file_chat_message_proto_msgTypes[18] 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 ChatMessage.ProtoReflect.Descriptor instead. func (*ChatMessage) Descriptor() ([]byte, []int) { return file_chat_message_proto_rawDescGZIP(), []int{18} } func (x *ChatMessage) GetClock() uint64 { if x != nil { return x.Clock } return 0 } func (x *ChatMessage) GetTimestamp() uint64 { if x != nil { return x.Timestamp } return 0 } func (x *ChatMessage) GetText() string { if x != nil { return x.Text } return "" } func (x *ChatMessage) GetResponseTo() string { if x != nil { return x.ResponseTo } return "" } func (x *ChatMessage) GetEnsName() string { if x != nil { return x.EnsName } return "" } func (x *ChatMessage) GetChatId() string { if x != nil { return x.ChatId } return "" } func (x *ChatMessage) GetMessageType() MessageType { if x != nil { return x.MessageType } return MessageType_UNKNOWN_MESSAGE_TYPE } func (x *ChatMessage) GetContentType() ChatMessage_ContentType { if x != nil { return x.ContentType } return ChatMessage_UNKNOWN_CONTENT_TYPE } func (m *ChatMessage) GetPayload() isChatMessage_Payload { if m != nil { return m.Payload } return nil } func (x *ChatMessage) GetSticker() *StickerMessage { if x, ok := x.GetPayload().(*ChatMessage_Sticker); ok { return x.Sticker } return nil } func (x *ChatMessage) GetImage() *ImageMessage { if x, ok := x.GetPayload().(*ChatMessage_Image); ok { return x.Image } return nil } func (x *ChatMessage) GetAudio() *AudioMessage { if x, ok := x.GetPayload().(*ChatMessage_Audio); ok { return x.Audio } return nil } func (x *ChatMessage) GetCommunity() []byte { if x, ok := x.GetPayload().(*ChatMessage_Community); ok { return x.Community } return nil } func (x *ChatMessage) GetDiscordMessage() *DiscordMessage { if x, ok := x.GetPayload().(*ChatMessage_DiscordMessage); ok { return x.DiscordMessage } return nil } func (x *ChatMessage) GetBridgeMessage() *BridgeMessage { if x, ok := x.GetPayload().(*ChatMessage_BridgeMessage); ok { return x.BridgeMessage } return nil } // Deprecated: Marked as deprecated in chat_message.proto. func (x *ChatMessage) GetGrant() []byte { if x != nil { return x.Grant } return nil } func (x *ChatMessage) GetDisplayName() string { if x != nil { return x.DisplayName } return "" } func (x *ChatMessage) GetContactRequestPropagatedState() *ContactRequestPropagatedState { if x != nil { return x.ContactRequestPropagatedState } return nil } func (x *ChatMessage) GetUnfurledLinks() []*UnfurledLink { if x != nil { return x.UnfurledLinks } return nil } func (x *ChatMessage) GetShard() *Shard { if x != nil { return x.Shard } return nil } func (x *ChatMessage) GetUnfurledStatusLinks() *UnfurledStatusLinks { if x != nil { return x.UnfurledStatusLinks } return nil } func (x *ChatMessage) GetCustomizationColor() uint32 { if x != nil { return x.CustomizationColor } return 0 } type isChatMessage_Payload interface { isChatMessage_Payload() } type ChatMessage_Sticker struct { Sticker *StickerMessage `protobuf:"bytes,9,opt,name=sticker,proto3,oneof"` } type ChatMessage_Image struct { Image *ImageMessage `protobuf:"bytes,10,opt,name=image,proto3,oneof"` } type ChatMessage_Audio struct { Audio *AudioMessage `protobuf:"bytes,11,opt,name=audio,proto3,oneof"` } type ChatMessage_Community struct { Community []byte `protobuf:"bytes,12,opt,name=community,proto3,oneof"` } type ChatMessage_DiscordMessage struct { DiscordMessage *DiscordMessage `protobuf:"bytes,99,opt,name=discord_message,json=discordMessage,proto3,oneof"` } type ChatMessage_BridgeMessage struct { BridgeMessage *BridgeMessage `protobuf:"bytes,100,opt,name=bridge_message,json=bridgeMessage,proto3,oneof"` } func (*ChatMessage_Sticker) isChatMessage_Payload() {} func (*ChatMessage_Image) isChatMessage_Payload() {} func (*ChatMessage_Audio) isChatMessage_Payload() {} func (*ChatMessage_Community) isChatMessage_Payload() {} func (*ChatMessage_DiscordMessage) isChatMessage_Payload() {} func (*ChatMessage_BridgeMessage) isChatMessage_Payload() {} var File_chat_message_proto protoreflect.FileDescriptor var file_chat_message_proto_rawDesc = []byte{ 0x0a, 0x12, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x1a, 0x0b, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0b, 0x73, 0x68, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x38, 0x0a, 0x0e, 0x53, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x63, 0x6b, 0x22, 0xce, 0x01, 0x0a, 0x0c, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x2d, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x6c, 0x62, 0x75, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x6c, 0x62, 0x75, 0x6d, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x6c, 0x62, 0x75, 0x6d, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x61, 0x6c, 0x62, 0x75, 0x6d, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xb6, 0x01, 0x0a, 0x0c, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x34, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x73, 0x22, 0x35, 0x0a, 0x09, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x4f, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x41, 0x43, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4d, 0x52, 0x10, 0x02, 0x22, 0x9b, 0x03, 0x0a, 0x0b, 0x45, 0x64, 0x69, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x44, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x0e, 0x75, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x0d, 0x75, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x51, 0x0a, 0x15, 0x75, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x13, 0x75, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x22, 0xd0, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x42, 0x79, 0x22, 0x4d, 0x0a, 0x16, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x4d, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x22, 0xd5, 0x02, 0x0a, 0x0e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x28, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x64, 0x69, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x64, 0x69, 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x52, 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x12, 0x3f, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x44, 0x0a, 0x0b, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xe6, 0x01, 0x0a, 0x14, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x72, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x72, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 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, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x2e, 0x0a, 0x12, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x55, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x55, 0x72, 0x6c, 0x22, 0x6f, 0x0a, 0x17, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0xf4, 0x01, 0x0a, 0x18, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x55, 0x72, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x55, 0x72, 0x6c, 0x22, 0xe5, 0x01, 0x0a, 0x0d, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x12, 0x28, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x22, 0x5f, 0x0a, 0x15, 0x55, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x68, 0x75, 0x6d, 0x62, 0x6e, 0x61, 0x69, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xd8, 0x02, 0x0a, 0x0c, 0x55, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x6e, 0x61, 0x69, 0x6c, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x10, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x6e, 0x61, 0x69, 0x6c, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x6e, 0x61, 0x69, 0x6c, 0x5f, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x6e, 0x61, 0x69, 0x6c, 0x57, 0x69, 0x64, 0x74, 0x68, 0x12, 0x29, 0x0a, 0x10, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x6e, 0x61, 0x69, 0x6c, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x6e, 0x61, 0x69, 0x6c, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x33, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x1f, 0x0a, 0x08, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x4e, 0x4b, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x10, 0x01, 0x22, 0xb4, 0x01, 0x0a, 0x19, 0x55, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x68, 0x75, 0x6d, 0x62, 0x6e, 0x61, 0x69, 0x6c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0xae, 0x02, 0x0a, 0x1b, 0x55, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x33, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x68, 0x75, 0x6d, 0x62, 0x6e, 0x61, 0x69, 0x6c, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x06, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x68, 0x75, 0x6d, 0x62, 0x6e, 0x61, 0x69, 0x6c, 0x52, 0x06, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0xf4, 0x01, 0x0a, 0x19, 0x55, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x55, 0x75, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x6f, 0x6a, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x6f, 0x6a, 0x69, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x22, 0xfa, 0x01, 0x0a, 0x12, 0x55, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x45, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x4c, 0x69, 0x6e, 0x6b, 0x48, 0x00, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4c, 0x69, 0x6e, 0x6b, 0x48, 0x00, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x67, 0x0a, 0x13, 0x55, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x50, 0x0a, 0x15, 0x75, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x13, 0x75, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x22, 0xde, 0x0b, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x74, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x6f, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x44, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x73, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x73, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x05, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x12, 0x1e, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x12, 0x43, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x40, 0x0a, 0x0e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x70, 0x0a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x1d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3d, 0x0a, 0x0e, 0x75, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x0d, 0x75, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x25, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x64, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x64, 0x12, 0x51, 0x0a, 0x15, 0x75, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x13, 0x75, 0x6e, 0x66, 0x75, 0x72, 0x6c, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0xd0, 0x03, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x49, 0x43, 0x4b, 0x45, 0x52, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x4d, 0x4f, 0x4a, 0x49, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x10, 0x05, 0x12, 0x28, 0x0a, 0x24, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x10, 0x07, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x55, 0x44, 0x49, 0x4f, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4d, 0x4d, 0x55, 0x4e, 0x49, 0x54, 0x59, 0x10, 0x09, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x47, 0x41, 0x50, 0x10, 0x0a, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x43, 0x54, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x52, 0x44, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x0c, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x0d, 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x50, 0x49, 0x4e, 0x4e, 0x45, 0x44, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x0e, 0x12, 0x24, 0x0a, 0x20, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4d, 0x55, 0x54, 0x55, 0x41, 0x4c, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x0f, 0x12, 0x28, 0x0a, 0x24, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4d, 0x55, 0x54, 0x55, 0x41, 0x4c, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x50, 0x54, 0x45, 0x44, 0x10, 0x10, 0x12, 0x27, 0x0a, 0x23, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4d, 0x55, 0x54, 0x55, 0x41, 0x4c, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x11, 0x12, 0x12, 0x0a, 0x0e, 0x42, 0x52, 0x49, 0x44, 0x47, 0x45, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x12, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x0d, 0x5a, 0x0b, 0x2e, 0x2f, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_chat_message_proto_rawDescOnce sync.Once file_chat_message_proto_rawDescData = file_chat_message_proto_rawDesc ) func file_chat_message_proto_rawDescGZIP() []byte { file_chat_message_proto_rawDescOnce.Do(func() { file_chat_message_proto_rawDescData = protoimpl.X.CompressGZIP(file_chat_message_proto_rawDescData) }) return file_chat_message_proto_rawDescData } var file_chat_message_proto_enumTypes = make([]protoimpl.EnumInfo, 3) var file_chat_message_proto_msgTypes = make([]protoimpl.MessageInfo, 19) var file_chat_message_proto_goTypes = []interface{}{ (AudioMessage_AudioType)(0), // 0: protobuf.AudioMessage.AudioType (UnfurledLink_LinkType)(0), // 1: protobuf.UnfurledLink.LinkType (ChatMessage_ContentType)(0), // 2: protobuf.ChatMessage.ContentType (*StickerMessage)(nil), // 3: protobuf.StickerMessage (*ImageMessage)(nil), // 4: protobuf.ImageMessage (*AudioMessage)(nil), // 5: protobuf.AudioMessage (*EditMessage)(nil), // 6: protobuf.EditMessage (*DeleteMessage)(nil), // 7: protobuf.DeleteMessage (*SyncDeleteForMeMessage)(nil), // 8: protobuf.SyncDeleteForMeMessage (*DiscordMessage)(nil), // 9: protobuf.DiscordMessage (*DiscordMessageAuthor)(nil), // 10: protobuf.DiscordMessageAuthor (*DiscordMessageReference)(nil), // 11: protobuf.DiscordMessageReference (*DiscordMessageAttachment)(nil), // 12: protobuf.DiscordMessageAttachment (*BridgeMessage)(nil), // 13: protobuf.BridgeMessage (*UnfurledLinkThumbnail)(nil), // 14: protobuf.UnfurledLinkThumbnail (*UnfurledLink)(nil), // 15: protobuf.UnfurledLink (*UnfurledStatusContactLink)(nil), // 16: protobuf.UnfurledStatusContactLink (*UnfurledStatusCommunityLink)(nil), // 17: protobuf.UnfurledStatusCommunityLink (*UnfurledStatusChannelLink)(nil), // 18: protobuf.UnfurledStatusChannelLink (*UnfurledStatusLink)(nil), // 19: protobuf.UnfurledStatusLink (*UnfurledStatusLinks)(nil), // 20: protobuf.UnfurledStatusLinks (*ChatMessage)(nil), // 21: protobuf.ChatMessage (ImageFormat)(0), // 22: protobuf.ImageFormat (MessageType)(0), // 23: protobuf.MessageType (*ContactRequestPropagatedState)(nil), // 24: protobuf.ContactRequestPropagatedState (*Shard)(nil), // 25: protobuf.Shard } var file_chat_message_proto_depIdxs = []int32{ 22, // 0: protobuf.ImageMessage.format:type_name -> protobuf.ImageFormat 0, // 1: protobuf.AudioMessage.type:type_name -> protobuf.AudioMessage.AudioType 23, // 2: protobuf.EditMessage.message_type:type_name -> protobuf.MessageType 2, // 3: protobuf.EditMessage.content_type:type_name -> protobuf.ChatMessage.ContentType 15, // 4: protobuf.EditMessage.unfurled_links:type_name -> protobuf.UnfurledLink 20, // 5: protobuf.EditMessage.unfurled_status_links:type_name -> protobuf.UnfurledStatusLinks 23, // 6: protobuf.DeleteMessage.message_type:type_name -> protobuf.MessageType 10, // 7: protobuf.DiscordMessage.author:type_name -> protobuf.DiscordMessageAuthor 11, // 8: protobuf.DiscordMessage.reference:type_name -> protobuf.DiscordMessageReference 12, // 9: protobuf.DiscordMessage.attachments:type_name -> protobuf.DiscordMessageAttachment 1, // 10: protobuf.UnfurledLink.type:type_name -> protobuf.UnfurledLink.LinkType 14, // 11: protobuf.UnfurledStatusContactLink.icon:type_name -> protobuf.UnfurledLinkThumbnail 14, // 12: protobuf.UnfurledStatusCommunityLink.icon:type_name -> protobuf.UnfurledLinkThumbnail 14, // 13: protobuf.UnfurledStatusCommunityLink.banner:type_name -> protobuf.UnfurledLinkThumbnail 17, // 14: protobuf.UnfurledStatusChannelLink.community:type_name -> protobuf.UnfurledStatusCommunityLink 16, // 15: protobuf.UnfurledStatusLink.contact:type_name -> protobuf.UnfurledStatusContactLink 17, // 16: protobuf.UnfurledStatusLink.community:type_name -> protobuf.UnfurledStatusCommunityLink 18, // 17: protobuf.UnfurledStatusLink.channel:type_name -> protobuf.UnfurledStatusChannelLink 19, // 18: protobuf.UnfurledStatusLinks.unfurled_status_links:type_name -> protobuf.UnfurledStatusLink 23, // 19: protobuf.ChatMessage.message_type:type_name -> protobuf.MessageType 2, // 20: protobuf.ChatMessage.content_type:type_name -> protobuf.ChatMessage.ContentType 3, // 21: protobuf.ChatMessage.sticker:type_name -> protobuf.StickerMessage 4, // 22: protobuf.ChatMessage.image:type_name -> protobuf.ImageMessage 5, // 23: protobuf.ChatMessage.audio:type_name -> protobuf.AudioMessage 9, // 24: protobuf.ChatMessage.discord_message:type_name -> protobuf.DiscordMessage 13, // 25: protobuf.ChatMessage.bridge_message:type_name -> protobuf.BridgeMessage 24, // 26: protobuf.ChatMessage.contact_request_propagated_state:type_name -> protobuf.ContactRequestPropagatedState 15, // 27: protobuf.ChatMessage.unfurled_links:type_name -> protobuf.UnfurledLink 25, // 28: protobuf.ChatMessage.shard:type_name -> protobuf.Shard 20, // 29: protobuf.ChatMessage.unfurled_status_links:type_name -> protobuf.UnfurledStatusLinks 30, // [30:30] is the sub-list for method output_type 30, // [30:30] is the sub-list for method input_type 30, // [30:30] is the sub-list for extension type_name 30, // [30:30] is the sub-list for extension extendee 0, // [0:30] is the sub-list for field type_name } func init() { file_chat_message_proto_init() } func file_chat_message_proto_init() { if File_chat_message_proto != nil { return } file_enums_proto_init() file_contact_proto_init() file_shard_proto_init() if !protoimpl.UnsafeEnabled { file_chat_message_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StickerMessage); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_chat_message_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ImageMessage); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_chat_message_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AudioMessage); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_chat_message_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EditMessage); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_chat_message_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteMessage); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_chat_message_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SyncDeleteForMeMessage); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_chat_message_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DiscordMessage); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_chat_message_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DiscordMessageAuthor); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_chat_message_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DiscordMessageReference); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_chat_message_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DiscordMessageAttachment); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_chat_message_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BridgeMessage); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_chat_message_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UnfurledLinkThumbnail); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_chat_message_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UnfurledLink); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_chat_message_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UnfurledStatusContactLink); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_chat_message_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UnfurledStatusCommunityLink); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_chat_message_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UnfurledStatusChannelLink); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_chat_message_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UnfurledStatusLink); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_chat_message_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UnfurledStatusLinks); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_chat_message_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ChatMessage); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } } file_chat_message_proto_msgTypes[16].OneofWrappers = []interface{}{ (*UnfurledStatusLink_Contact)(nil), (*UnfurledStatusLink_Community)(nil), (*UnfurledStatusLink_Channel)(nil), } file_chat_message_proto_msgTypes[18].OneofWrappers = []interface{}{ (*ChatMessage_Sticker)(nil), (*ChatMessage_Image)(nil), (*ChatMessage_Audio)(nil), (*ChatMessage_Community)(nil), (*ChatMessage_DiscordMessage)(nil), (*ChatMessage_BridgeMessage)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_chat_message_proto_rawDesc, NumEnums: 3, NumMessages: 19, NumExtensions: 0, NumServices: 0, }, GoTypes: file_chat_message_proto_goTypes, DependencyIndexes: file_chat_message_proto_depIdxs, EnumInfos: file_chat_message_proto_enumTypes, MessageInfos: file_chat_message_proto_msgTypes, }.Build() File_chat_message_proto = out.File file_chat_message_proto_rawDesc = nil file_chat_message_proto_goTypes = nil file_chat_message_proto_depIdxs = nil }