diff --git a/_schema/tdesktop.tl b/_schema/tdesktop.tl index c33f34b887..6a2ac17b8d 100644 --- a/_schema/tdesktop.tl +++ b/_schema/tdesktop.tl @@ -1,8 +1,8 @@ // Code generated by ./cmd/dltl, DO NOT EDIT. // // Source: https://raw.githubusercontent.com/telegramdesktop/tdesktop/dev/Telegram/Resources/tl/api.tl -// Layer: 145 -// SHA256: 17d2ed0473e0ed2bfc22018d387654b8474b7412b3ba66cfa5a3cb377b4ccaaf +// Layer: 146 +// SHA256: ba16bf92d16a2cdcb07672ac0b463e9fea6bc3d9b5641adced6f9cd9f006ebdc boolFalse#bc799737 = Bool; @@ -64,7 +64,7 @@ inputMediaDocumentExternal#fb52dc99 flags:# url:string ttl_seconds:flags.0?int = inputMediaGame#d33f43f3 id:InputGame = InputMedia; -inputMediaInvoice#d9799874 flags:# title:string description:string photo:flags.0?InputWebDocument invoice:Invoice payload:bytes provider:string provider_data:DataJSON start_param:flags.1?string = InputMedia; +inputMediaInvoice#8eb5a6d5 flags:# title:string description:string photo:flags.0?InputWebDocument invoice:Invoice payload:bytes provider:string provider_data:DataJSON start_param:flags.1?string extended_media:flags.2?InputMedia = InputMedia; inputMediaGeoLive#971fa843 flags:# stopped:flags.0?true geo_point:InputGeoPoint heading:flags.2?int period:flags.1?int proximity_notification_radius:flags.3?int = InputMedia; @@ -204,7 +204,7 @@ messageMediaVenue#2ec0533f geo:GeoPoint title:string address:string provider:str messageMediaGame#fdb19008 game:Game = MessageMedia; -messageMediaInvoice#84551347 flags:# shipping_address_requested:flags.1?true test:flags.3?true title:string description:string photo:flags.0?WebDocument receipt_msg_id:flags.2?int currency:string total_amount:long start_param:string = MessageMedia; +messageMediaInvoice#f6a548d3 flags:# shipping_address_requested:flags.1?true test:flags.3?true title:string description:string photo:flags.0?WebDocument receipt_msg_id:flags.2?int currency:string total_amount:long start_param:string extended_media:flags.4?MessageExtendedMedia = MessageMedia; messageMediaGeoLive#b940c666 flags:# geo:GeoPoint heading:flags.0?int period:int proximity_notification_radius:flags.1?int = MessageMedia; @@ -634,6 +634,8 @@ updateRecentReactions#6f7863f4 = Update; updateMoveStickerSetToTop#86fccf85 flags:# masks:flags.0?true emojis:flags.1?true stickerset:long = Update; +updateMessageExtendedMedia#5a73a98c peer:Peer msg_id:int extended_media:MessageExtendedMedia = Update; + updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State; updates.differenceEmpty#5d75a138 date:int seq:int = updates.Difference; @@ -2090,6 +2092,10 @@ premiumSubscriptionOption#b6f11ebe flags:# current:flags.1?true can_purchase_upg sendAsPeer#b81c7034 flags:# premium_required:flags.0?true peer:Peer = SendAsPeer; +messageExtendedMediaPreview#ad628cc8 flags:# w:flags.0?int h:flags.0?int thumb:flags.1?PhotoSize video_duration:flags.2?int = MessageExtendedMedia; + +messageExtendedMedia#ee479c64 media:MessageMedia = MessageExtendedMedia; + ---functions--- @@ -2705,6 +2711,8 @@ messages.getRecentReactions#39461db2 limit:int hash:long = messages.Reactions; messages.clearRecentReactions#9dfeefb4 = Bool; +messages.getExtendedMedia#84f80814 peer:InputPeer id:Vector = Updates; + updates.getState#edd4882a = updates.State; updates.getDifference#25939651 flags:# pts:int pts_total_limit:flags.0?int date:int qts:int = updates.Difference; @@ -3003,4 +3011,4 @@ stats.getMessagePublicForwards#5630281b channel:InputChannel msg_id:int offset_r stats.getMessageStats#b6e0a3f5 flags:# dark:flags.0?true channel:InputChannel msg_id:int = stats.MessageStats; -// LAYER 145 +// LAYER 146 diff --git a/_schema/telegram.tl b/_schema/telegram.tl index d8612c6e5d..373aa85103 100644 --- a/_schema/telegram.tl +++ b/_schema/telegram.tl @@ -2,8 +2,8 @@ // // Source: https://raw.githubusercontent.com/telegramdesktop/tdesktop/dev/Telegram/Resources/tl/api.tl // Merge: _schema/legacy.tl -// Layer: 145 -// SHA256: 17d2ed0473e0ed2bfc22018d387654b8474b7412b3ba66cfa5a3cb377b4ccaaf +// Layer: 146 +// SHA256: ba16bf92d16a2cdcb07672ac0b463e9fea6bc3d9b5641adced6f9cd9f006ebdc boolFalse#bc799737 = Bool; @@ -65,7 +65,7 @@ inputMediaDocumentExternal#fb52dc99 flags:# url:string ttl_seconds:flags.0?int = inputMediaGame#d33f43f3 id:InputGame = InputMedia; -inputMediaInvoice#d9799874 flags:# title:string description:string photo:flags.0?InputWebDocument invoice:Invoice payload:bytes provider:string provider_data:DataJSON start_param:flags.1?string = InputMedia; +inputMediaInvoice#8eb5a6d5 flags:# title:string description:string photo:flags.0?InputWebDocument invoice:Invoice payload:bytes provider:string provider_data:DataJSON start_param:flags.1?string extended_media:flags.2?InputMedia = InputMedia; inputMediaGeoLive#971fa843 flags:# stopped:flags.0?true geo_point:InputGeoPoint heading:flags.2?int period:flags.1?int proximity_notification_radius:flags.3?int = InputMedia; @@ -205,7 +205,7 @@ messageMediaVenue#2ec0533f geo:GeoPoint title:string address:string provider:str messageMediaGame#fdb19008 game:Game = MessageMedia; -messageMediaInvoice#84551347 flags:# shipping_address_requested:flags.1?true test:flags.3?true title:string description:string photo:flags.0?WebDocument receipt_msg_id:flags.2?int currency:string total_amount:long start_param:string = MessageMedia; +messageMediaInvoice#f6a548d3 flags:# shipping_address_requested:flags.1?true test:flags.3?true title:string description:string photo:flags.0?WebDocument receipt_msg_id:flags.2?int currency:string total_amount:long start_param:string extended_media:flags.4?MessageExtendedMedia = MessageMedia; messageMediaGeoLive#b940c666 flags:# geo:GeoPoint heading:flags.0?int period:int proximity_notification_radius:flags.1?int = MessageMedia; @@ -635,6 +635,8 @@ updateRecentReactions#6f7863f4 = Update; updateMoveStickerSetToTop#86fccf85 flags:# masks:flags.0?true emojis:flags.1?true stickerset:long = Update; +updateMessageExtendedMedia#5a73a98c peer:Peer msg_id:int extended_media:MessageExtendedMedia = Update; + updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State; updates.differenceEmpty#5d75a138 date:int seq:int = updates.Difference; @@ -2091,6 +2093,10 @@ premiumSubscriptionOption#b6f11ebe flags:# current:flags.1?true can_purchase_upg sendAsPeer#b81c7034 flags:# premium_required:flags.0?true peer:Peer = SendAsPeer; +messageExtendedMediaPreview#ad628cc8 flags:# w:flags.0?int h:flags.0?int thumb:flags.1?PhotoSize video_duration:flags.2?int = MessageExtendedMedia; + +messageExtendedMedia#ee479c64 media:MessageMedia = MessageExtendedMedia; + ---functions--- @@ -2706,6 +2712,8 @@ messages.getRecentReactions#39461db2 limit:int hash:long = messages.Reactions; messages.clearRecentReactions#9dfeefb4 = Bool; +messages.getExtendedMedia#84f80814 peer:InputPeer id:Vector = Updates; + updates.getState#edd4882a = updates.State; updates.getDifference#25939651 flags:# pts:int pts_total_limit:flags.0?int date:int qts:int = updates.Difference; @@ -3036,4 +3044,4 @@ test.useError#ee75af01 = Error; test.useConfigSimple#f9b7b23d = help.ConfigSimple; -// LAYER 145 +// LAYER 146 diff --git a/tg/tl_handlers_gen.go b/tg/tl_handlers_gen.go index fb80cd781d..1ef57e0e5c 100644 --- a/tg/tl_handlers_gen.go +++ b/tg/tl_handlers_gen.go @@ -1165,3 +1165,13 @@ func (u UpdateDispatcher) OnMoveStickerSetToTop(handler MoveStickerSetToTopHandl return handler(ctx, e, update.(*UpdateMoveStickerSetToTop)) } } + +// MessageExtendedMediaHandler is a MessageExtendedMedia event handler. +type MessageExtendedMediaHandler func(ctx context.Context, e Entities, update *UpdateMessageExtendedMedia) error + +// OnMessageExtendedMedia sets MessageExtendedMedia handler. +func (u UpdateDispatcher) OnMessageExtendedMedia(handler MessageExtendedMediaHandler) { + u.handlers[UpdateMessageExtendedMediaTypeID] = func(ctx context.Context, e Entities, update UpdateClass) error { + return handler(ctx, e, update.(*UpdateMessageExtendedMedia)) + } +} diff --git a/tg/tl_input_media_gen.go b/tg/tl_input_media_gen.go index 7623f8cf3f..332a01a2ab 100644 --- a/tg/tl_input_media_gen.go +++ b/tg/tl_input_media_gen.go @@ -2552,7 +2552,7 @@ func (i *InputMediaGame) GetID() (value InputGameClass) { return i.ID } -// InputMediaInvoice represents TL type `inputMediaInvoice#d9799874`. +// InputMediaInvoice represents TL type `inputMediaInvoice#8eb5a6d5`. // Generated invoice of a bot payment¹ // // Links: @@ -2599,10 +2599,14 @@ type InputMediaInvoice struct { // // Use SetStartParam and GetStartParam helpers. StartParam string + // ExtendedMedia field of InputMediaInvoice. + // + // Use SetExtendedMedia and GetExtendedMedia helpers. + ExtendedMedia InputMediaClass } // InputMediaInvoiceTypeID is TL type id of InputMediaInvoice. -const InputMediaInvoiceTypeID = 0xd9799874 +const InputMediaInvoiceTypeID = 0x8eb5a6d5 // construct implements constructor of InputMediaClass. func (i InputMediaInvoice) construct() InputMediaClass { return &i } @@ -2648,6 +2652,9 @@ func (i *InputMediaInvoice) Zero() bool { if !(i.StartParam == "") { return false } + if !(i.ExtendedMedia == nil) { + return false + } return true } @@ -2671,6 +2678,7 @@ func (i *InputMediaInvoice) FillFrom(from interface { GetProvider() (value string) GetProviderData() (value DataJSON) GetStartParam() (value string, ok bool) + GetExtendedMedia() (value InputMediaClass, ok bool) }) { i.Title = from.GetTitle() i.Description = from.GetDescription() @@ -2686,6 +2694,10 @@ func (i *InputMediaInvoice) FillFrom(from interface { i.StartParam = val } + if val, ok := from.GetExtendedMedia(); ok { + i.ExtendedMedia = val + } + } // TypeID returns type id in TL schema. @@ -2745,6 +2757,11 @@ func (i *InputMediaInvoice) TypeInfo() tdp.Type { SchemaName: "start_param", Null: !i.Flags.Has(1), }, + { + Name: "ExtendedMedia", + SchemaName: "extended_media", + Null: !i.Flags.Has(2), + }, } return typ } @@ -2757,12 +2774,15 @@ func (i *InputMediaInvoice) SetFlags() { if !(i.StartParam == "") { i.Flags.Set(1) } + if !(i.ExtendedMedia == nil) { + i.Flags.Set(2) + } } // Encode implements bin.Encoder. func (i *InputMediaInvoice) Encode(b *bin.Buffer) error { if i == nil { - return fmt.Errorf("can't encode inputMediaInvoice#d9799874 as nil") + return fmt.Errorf("can't encode inputMediaInvoice#8eb5a6d5 as nil") } b.PutID(InputMediaInvoiceTypeID) return i.EncodeBare(b) @@ -2771,40 +2791,48 @@ func (i *InputMediaInvoice) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (i *InputMediaInvoice) EncodeBare(b *bin.Buffer) error { if i == nil { - return fmt.Errorf("can't encode inputMediaInvoice#d9799874 as nil") + return fmt.Errorf("can't encode inputMediaInvoice#8eb5a6d5 as nil") } i.SetFlags() if err := i.Flags.Encode(b); err != nil { - return fmt.Errorf("unable to encode inputMediaInvoice#d9799874: field flags: %w", err) + return fmt.Errorf("unable to encode inputMediaInvoice#8eb5a6d5: field flags: %w", err) } b.PutString(i.Title) b.PutString(i.Description) if i.Flags.Has(0) { if err := i.Photo.Encode(b); err != nil { - return fmt.Errorf("unable to encode inputMediaInvoice#d9799874: field photo: %w", err) + return fmt.Errorf("unable to encode inputMediaInvoice#8eb5a6d5: field photo: %w", err) } } if err := i.Invoice.Encode(b); err != nil { - return fmt.Errorf("unable to encode inputMediaInvoice#d9799874: field invoice: %w", err) + return fmt.Errorf("unable to encode inputMediaInvoice#8eb5a6d5: field invoice: %w", err) } b.PutBytes(i.Payload) b.PutString(i.Provider) if err := i.ProviderData.Encode(b); err != nil { - return fmt.Errorf("unable to encode inputMediaInvoice#d9799874: field provider_data: %w", err) + return fmt.Errorf("unable to encode inputMediaInvoice#8eb5a6d5: field provider_data: %w", err) } if i.Flags.Has(1) { b.PutString(i.StartParam) } + if i.Flags.Has(2) { + if i.ExtendedMedia == nil { + return fmt.Errorf("unable to encode inputMediaInvoice#8eb5a6d5: field extended_media is nil") + } + if err := i.ExtendedMedia.Encode(b); err != nil { + return fmt.Errorf("unable to encode inputMediaInvoice#8eb5a6d5: field extended_media: %w", err) + } + } return nil } // Decode implements bin.Decoder. func (i *InputMediaInvoice) Decode(b *bin.Buffer) error { if i == nil { - return fmt.Errorf("can't decode inputMediaInvoice#d9799874 to nil") + return fmt.Errorf("can't decode inputMediaInvoice#8eb5a6d5 to nil") } if err := b.ConsumeID(InputMediaInvoiceTypeID); err != nil { - return fmt.Errorf("unable to decode inputMediaInvoice#d9799874: %w", err) + return fmt.Errorf("unable to decode inputMediaInvoice#8eb5a6d5: %w", err) } return i.DecodeBare(b) } @@ -2812,63 +2840,70 @@ func (i *InputMediaInvoice) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (i *InputMediaInvoice) DecodeBare(b *bin.Buffer) error { if i == nil { - return fmt.Errorf("can't decode inputMediaInvoice#d9799874 to nil") + return fmt.Errorf("can't decode inputMediaInvoice#8eb5a6d5 to nil") } { if err := i.Flags.Decode(b); err != nil { - return fmt.Errorf("unable to decode inputMediaInvoice#d9799874: field flags: %w", err) + return fmt.Errorf("unable to decode inputMediaInvoice#8eb5a6d5: field flags: %w", err) } } { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode inputMediaInvoice#d9799874: field title: %w", err) + return fmt.Errorf("unable to decode inputMediaInvoice#8eb5a6d5: field title: %w", err) } i.Title = value } { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode inputMediaInvoice#d9799874: field description: %w", err) + return fmt.Errorf("unable to decode inputMediaInvoice#8eb5a6d5: field description: %w", err) } i.Description = value } if i.Flags.Has(0) { if err := i.Photo.Decode(b); err != nil { - return fmt.Errorf("unable to decode inputMediaInvoice#d9799874: field photo: %w", err) + return fmt.Errorf("unable to decode inputMediaInvoice#8eb5a6d5: field photo: %w", err) } } { if err := i.Invoice.Decode(b); err != nil { - return fmt.Errorf("unable to decode inputMediaInvoice#d9799874: field invoice: %w", err) + return fmt.Errorf("unable to decode inputMediaInvoice#8eb5a6d5: field invoice: %w", err) } } { value, err := b.Bytes() if err != nil { - return fmt.Errorf("unable to decode inputMediaInvoice#d9799874: field payload: %w", err) + return fmt.Errorf("unable to decode inputMediaInvoice#8eb5a6d5: field payload: %w", err) } i.Payload = value } { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode inputMediaInvoice#d9799874: field provider: %w", err) + return fmt.Errorf("unable to decode inputMediaInvoice#8eb5a6d5: field provider: %w", err) } i.Provider = value } { if err := i.ProviderData.Decode(b); err != nil { - return fmt.Errorf("unable to decode inputMediaInvoice#d9799874: field provider_data: %w", err) + return fmt.Errorf("unable to decode inputMediaInvoice#8eb5a6d5: field provider_data: %w", err) } } if i.Flags.Has(1) { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode inputMediaInvoice#d9799874: field start_param: %w", err) + return fmt.Errorf("unable to decode inputMediaInvoice#8eb5a6d5: field start_param: %w", err) } i.StartParam = value } + if i.Flags.Has(2) { + value, err := DecodeInputMedia(b) + if err != nil { + return fmt.Errorf("unable to decode inputMediaInvoice#8eb5a6d5: field extended_media: %w", err) + } + i.ExtendedMedia = value + } return nil } @@ -2956,6 +2991,24 @@ func (i *InputMediaInvoice) GetStartParam() (value string, ok bool) { return i.StartParam, true } +// SetExtendedMedia sets value of ExtendedMedia conditional field. +func (i *InputMediaInvoice) SetExtendedMedia(value InputMediaClass) { + i.Flags.Set(2) + i.ExtendedMedia = value +} + +// GetExtendedMedia returns value of ExtendedMedia conditional field and +// boolean which is true if field was set. +func (i *InputMediaInvoice) GetExtendedMedia() (value InputMediaClass, ok bool) { + if i == nil { + return + } + if !i.Flags.Has(2) { + return value, false + } + return i.ExtendedMedia, true +} + // InputMediaGeoLive represents TL type `inputMediaGeoLive#971fa843`. // Live geolocation¹ // @@ -3811,7 +3864,7 @@ const InputMediaClassName = "InputMedia" // case *tg.InputMediaPhotoExternal: // inputMediaPhotoExternal#e5bbfe1a // case *tg.InputMediaDocumentExternal: // inputMediaDocumentExternal#fb52dc99 // case *tg.InputMediaGame: // inputMediaGame#d33f43f3 -// case *tg.InputMediaInvoice: // inputMediaInvoice#d9799874 +// case *tg.InputMediaInvoice: // inputMediaInvoice#8eb5a6d5 // case *tg.InputMediaGeoLive: // inputMediaGeoLive#971fa843 // case *tg.InputMediaPoll: // inputMediaPoll#f94e5f1 // case *tg.InputMediaDice: // inputMediaDice#e66fbf7b @@ -3921,7 +3974,7 @@ func DecodeInputMedia(buf *bin.Buffer) (InputMediaClass, error) { } return &v, nil case InputMediaInvoiceTypeID: - // Decoding inputMediaInvoice#d9799874. + // Decoding inputMediaInvoice#8eb5a6d5. v := InputMediaInvoice{} if err := v.Decode(buf); err != nil { return nil, fmt.Errorf("unable to decode InputMediaClass: %w", err) diff --git a/tg/tl_message_extended_media_gen.go b/tg/tl_message_extended_media_gen.go new file mode 100644 index 0000000000..cd76156e74 --- /dev/null +++ b/tg/tl_message_extended_media_gen.go @@ -0,0 +1,582 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "github.com/gotd/td/bin" + "github.com/gotd/td/tdjson" + "github.com/gotd/td/tdp" + "github.com/gotd/td/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) + +// MessageExtendedMediaPreview represents TL type `messageExtendedMediaPreview#ad628cc8`. +// +// See https://core.telegram.org/constructor/messageExtendedMediaPreview for reference. +type MessageExtendedMediaPreview struct { + // Flags field of MessageExtendedMediaPreview. + Flags bin.Fields + // W field of MessageExtendedMediaPreview. + // + // Use SetW and GetW helpers. + W int + // H field of MessageExtendedMediaPreview. + // + // Use SetH and GetH helpers. + H int + // Thumb field of MessageExtendedMediaPreview. + // + // Use SetThumb and GetThumb helpers. + Thumb PhotoSizeClass + // VideoDuration field of MessageExtendedMediaPreview. + // + // Use SetVideoDuration and GetVideoDuration helpers. + VideoDuration int +} + +// MessageExtendedMediaPreviewTypeID is TL type id of MessageExtendedMediaPreview. +const MessageExtendedMediaPreviewTypeID = 0xad628cc8 + +// construct implements constructor of MessageExtendedMediaClass. +func (m MessageExtendedMediaPreview) construct() MessageExtendedMediaClass { return &m } + +// Ensuring interfaces in compile-time for MessageExtendedMediaPreview. +var ( + _ bin.Encoder = &MessageExtendedMediaPreview{} + _ bin.Decoder = &MessageExtendedMediaPreview{} + _ bin.BareEncoder = &MessageExtendedMediaPreview{} + _ bin.BareDecoder = &MessageExtendedMediaPreview{} + + _ MessageExtendedMediaClass = &MessageExtendedMediaPreview{} +) + +func (m *MessageExtendedMediaPreview) Zero() bool { + if m == nil { + return true + } + if !(m.Flags.Zero()) { + return false + } + if !(m.W == 0) { + return false + } + if !(m.H == 0) { + return false + } + if !(m.Thumb == nil) { + return false + } + if !(m.VideoDuration == 0) { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (m *MessageExtendedMediaPreview) String() string { + if m == nil { + return "MessageExtendedMediaPreview(nil)" + } + type Alias MessageExtendedMediaPreview + return fmt.Sprintf("MessageExtendedMediaPreview%+v", Alias(*m)) +} + +// FillFrom fills MessageExtendedMediaPreview from given interface. +func (m *MessageExtendedMediaPreview) FillFrom(from interface { + GetW() (value int, ok bool) + GetH() (value int, ok bool) + GetThumb() (value PhotoSizeClass, ok bool) + GetVideoDuration() (value int, ok bool) +}) { + if val, ok := from.GetW(); ok { + m.W = val + } + + if val, ok := from.GetH(); ok { + m.H = val + } + + if val, ok := from.GetThumb(); ok { + m.Thumb = val + } + + if val, ok := from.GetVideoDuration(); ok { + m.VideoDuration = val + } + +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*MessageExtendedMediaPreview) TypeID() uint32 { + return MessageExtendedMediaPreviewTypeID +} + +// TypeName returns name of type in TL schema. +func (*MessageExtendedMediaPreview) TypeName() string { + return "messageExtendedMediaPreview" +} + +// TypeInfo returns info about TL type. +func (m *MessageExtendedMediaPreview) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "messageExtendedMediaPreview", + ID: MessageExtendedMediaPreviewTypeID, + } + if m == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "W", + SchemaName: "w", + Null: !m.Flags.Has(0), + }, + { + Name: "H", + SchemaName: "h", + Null: !m.Flags.Has(0), + }, + { + Name: "Thumb", + SchemaName: "thumb", + Null: !m.Flags.Has(1), + }, + { + Name: "VideoDuration", + SchemaName: "video_duration", + Null: !m.Flags.Has(2), + }, + } + return typ +} + +// SetFlags sets flags for non-zero fields. +func (m *MessageExtendedMediaPreview) SetFlags() { + if !(m.W == 0) { + m.Flags.Set(0) + } + if !(m.H == 0) { + m.Flags.Set(0) + } + if !(m.Thumb == nil) { + m.Flags.Set(1) + } + if !(m.VideoDuration == 0) { + m.Flags.Set(2) + } +} + +// Encode implements bin.Encoder. +func (m *MessageExtendedMediaPreview) Encode(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't encode messageExtendedMediaPreview#ad628cc8 as nil") + } + b.PutID(MessageExtendedMediaPreviewTypeID) + return m.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (m *MessageExtendedMediaPreview) EncodeBare(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't encode messageExtendedMediaPreview#ad628cc8 as nil") + } + m.SetFlags() + if err := m.Flags.Encode(b); err != nil { + return fmt.Errorf("unable to encode messageExtendedMediaPreview#ad628cc8: field flags: %w", err) + } + if m.Flags.Has(0) { + b.PutInt(m.W) + } + if m.Flags.Has(0) { + b.PutInt(m.H) + } + if m.Flags.Has(1) { + if m.Thumb == nil { + return fmt.Errorf("unable to encode messageExtendedMediaPreview#ad628cc8: field thumb is nil") + } + if err := m.Thumb.Encode(b); err != nil { + return fmt.Errorf("unable to encode messageExtendedMediaPreview#ad628cc8: field thumb: %w", err) + } + } + if m.Flags.Has(2) { + b.PutInt(m.VideoDuration) + } + return nil +} + +// Decode implements bin.Decoder. +func (m *MessageExtendedMediaPreview) Decode(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't decode messageExtendedMediaPreview#ad628cc8 to nil") + } + if err := b.ConsumeID(MessageExtendedMediaPreviewTypeID); err != nil { + return fmt.Errorf("unable to decode messageExtendedMediaPreview#ad628cc8: %w", err) + } + return m.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (m *MessageExtendedMediaPreview) DecodeBare(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't decode messageExtendedMediaPreview#ad628cc8 to nil") + } + { + if err := m.Flags.Decode(b); err != nil { + return fmt.Errorf("unable to decode messageExtendedMediaPreview#ad628cc8: field flags: %w", err) + } + } + if m.Flags.Has(0) { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode messageExtendedMediaPreview#ad628cc8: field w: %w", err) + } + m.W = value + } + if m.Flags.Has(0) { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode messageExtendedMediaPreview#ad628cc8: field h: %w", err) + } + m.H = value + } + if m.Flags.Has(1) { + value, err := DecodePhotoSize(b) + if err != nil { + return fmt.Errorf("unable to decode messageExtendedMediaPreview#ad628cc8: field thumb: %w", err) + } + m.Thumb = value + } + if m.Flags.Has(2) { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode messageExtendedMediaPreview#ad628cc8: field video_duration: %w", err) + } + m.VideoDuration = value + } + return nil +} + +// SetW sets value of W conditional field. +func (m *MessageExtendedMediaPreview) SetW(value int) { + m.Flags.Set(0) + m.W = value +} + +// GetW returns value of W conditional field and +// boolean which is true if field was set. +func (m *MessageExtendedMediaPreview) GetW() (value int, ok bool) { + if m == nil { + return + } + if !m.Flags.Has(0) { + return value, false + } + return m.W, true +} + +// SetH sets value of H conditional field. +func (m *MessageExtendedMediaPreview) SetH(value int) { + m.Flags.Set(0) + m.H = value +} + +// GetH returns value of H conditional field and +// boolean which is true if field was set. +func (m *MessageExtendedMediaPreview) GetH() (value int, ok bool) { + if m == nil { + return + } + if !m.Flags.Has(0) { + return value, false + } + return m.H, true +} + +// SetThumb sets value of Thumb conditional field. +func (m *MessageExtendedMediaPreview) SetThumb(value PhotoSizeClass) { + m.Flags.Set(1) + m.Thumb = value +} + +// GetThumb returns value of Thumb conditional field and +// boolean which is true if field was set. +func (m *MessageExtendedMediaPreview) GetThumb() (value PhotoSizeClass, ok bool) { + if m == nil { + return + } + if !m.Flags.Has(1) { + return value, false + } + return m.Thumb, true +} + +// SetVideoDuration sets value of VideoDuration conditional field. +func (m *MessageExtendedMediaPreview) SetVideoDuration(value int) { + m.Flags.Set(2) + m.VideoDuration = value +} + +// GetVideoDuration returns value of VideoDuration conditional field and +// boolean which is true if field was set. +func (m *MessageExtendedMediaPreview) GetVideoDuration() (value int, ok bool) { + if m == nil { + return + } + if !m.Flags.Has(2) { + return value, false + } + return m.VideoDuration, true +} + +// MessageExtendedMedia represents TL type `messageExtendedMedia#ee479c64`. +// +// See https://core.telegram.org/constructor/messageExtendedMedia for reference. +type MessageExtendedMedia struct { + // Media field of MessageExtendedMedia. + Media MessageMediaClass +} + +// MessageExtendedMediaTypeID is TL type id of MessageExtendedMedia. +const MessageExtendedMediaTypeID = 0xee479c64 + +// construct implements constructor of MessageExtendedMediaClass. +func (m MessageExtendedMedia) construct() MessageExtendedMediaClass { return &m } + +// Ensuring interfaces in compile-time for MessageExtendedMedia. +var ( + _ bin.Encoder = &MessageExtendedMedia{} + _ bin.Decoder = &MessageExtendedMedia{} + _ bin.BareEncoder = &MessageExtendedMedia{} + _ bin.BareDecoder = &MessageExtendedMedia{} + + _ MessageExtendedMediaClass = &MessageExtendedMedia{} +) + +func (m *MessageExtendedMedia) Zero() bool { + if m == nil { + return true + } + if !(m.Media == nil) { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (m *MessageExtendedMedia) String() string { + if m == nil { + return "MessageExtendedMedia(nil)" + } + type Alias MessageExtendedMedia + return fmt.Sprintf("MessageExtendedMedia%+v", Alias(*m)) +} + +// FillFrom fills MessageExtendedMedia from given interface. +func (m *MessageExtendedMedia) FillFrom(from interface { + GetMedia() (value MessageMediaClass) +}) { + m.Media = from.GetMedia() +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*MessageExtendedMedia) TypeID() uint32 { + return MessageExtendedMediaTypeID +} + +// TypeName returns name of type in TL schema. +func (*MessageExtendedMedia) TypeName() string { + return "messageExtendedMedia" +} + +// TypeInfo returns info about TL type. +func (m *MessageExtendedMedia) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "messageExtendedMedia", + ID: MessageExtendedMediaTypeID, + } + if m == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "Media", + SchemaName: "media", + }, + } + return typ +} + +// Encode implements bin.Encoder. +func (m *MessageExtendedMedia) Encode(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't encode messageExtendedMedia#ee479c64 as nil") + } + b.PutID(MessageExtendedMediaTypeID) + return m.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (m *MessageExtendedMedia) EncodeBare(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't encode messageExtendedMedia#ee479c64 as nil") + } + if m.Media == nil { + return fmt.Errorf("unable to encode messageExtendedMedia#ee479c64: field media is nil") + } + if err := m.Media.Encode(b); err != nil { + return fmt.Errorf("unable to encode messageExtendedMedia#ee479c64: field media: %w", err) + } + return nil +} + +// Decode implements bin.Decoder. +func (m *MessageExtendedMedia) Decode(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't decode messageExtendedMedia#ee479c64 to nil") + } + if err := b.ConsumeID(MessageExtendedMediaTypeID); err != nil { + return fmt.Errorf("unable to decode messageExtendedMedia#ee479c64: %w", err) + } + return m.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (m *MessageExtendedMedia) DecodeBare(b *bin.Buffer) error { + if m == nil { + return fmt.Errorf("can't decode messageExtendedMedia#ee479c64 to nil") + } + { + value, err := DecodeMessageMedia(b) + if err != nil { + return fmt.Errorf("unable to decode messageExtendedMedia#ee479c64: field media: %w", err) + } + m.Media = value + } + return nil +} + +// GetMedia returns value of Media field. +func (m *MessageExtendedMedia) GetMedia() (value MessageMediaClass) { + if m == nil { + return + } + return m.Media +} + +// MessageExtendedMediaClassName is schema name of MessageExtendedMediaClass. +const MessageExtendedMediaClassName = "MessageExtendedMedia" + +// MessageExtendedMediaClass represents MessageExtendedMedia generic type. +// +// See https://core.telegram.org/type/MessageExtendedMedia for reference. +// +// Example: +// +// g, err := tg.DecodeMessageExtendedMedia(buf) +// if err != nil { +// panic(err) +// } +// switch v := g.(type) { +// case *tg.MessageExtendedMediaPreview: // messageExtendedMediaPreview#ad628cc8 +// case *tg.MessageExtendedMedia: // messageExtendedMedia#ee479c64 +// default: panic(v) +// } +type MessageExtendedMediaClass interface { + bin.Encoder + bin.Decoder + bin.BareEncoder + bin.BareDecoder + construct() MessageExtendedMediaClass + + // TypeID returns type id in TL schema. + // + // See https://core.telegram.org/mtproto/TL-tl#remarks. + TypeID() uint32 + // TypeName returns name of type in TL schema. + TypeName() string + // String implements fmt.Stringer. + String() string + // Zero returns true if current object has a zero value. + Zero() bool +} + +// DecodeMessageExtendedMedia implements binary de-serialization for MessageExtendedMediaClass. +func DecodeMessageExtendedMedia(buf *bin.Buffer) (MessageExtendedMediaClass, error) { + id, err := buf.PeekID() + if err != nil { + return nil, err + } + switch id { + case MessageExtendedMediaPreviewTypeID: + // Decoding messageExtendedMediaPreview#ad628cc8. + v := MessageExtendedMediaPreview{} + if err := v.Decode(buf); err != nil { + return nil, fmt.Errorf("unable to decode MessageExtendedMediaClass: %w", err) + } + return &v, nil + case MessageExtendedMediaTypeID: + // Decoding messageExtendedMedia#ee479c64. + v := MessageExtendedMedia{} + if err := v.Decode(buf); err != nil { + return nil, fmt.Errorf("unable to decode MessageExtendedMediaClass: %w", err) + } + return &v, nil + default: + return nil, fmt.Errorf("unable to decode MessageExtendedMediaClass: %w", bin.NewUnexpectedID(id)) + } +} + +// MessageExtendedMedia boxes the MessageExtendedMediaClass providing a helper. +type MessageExtendedMediaBox struct { + MessageExtendedMedia MessageExtendedMediaClass +} + +// Decode implements bin.Decoder for MessageExtendedMediaBox. +func (b *MessageExtendedMediaBox) Decode(buf *bin.Buffer) error { + if b == nil { + return fmt.Errorf("unable to decode MessageExtendedMediaBox to nil") + } + v, err := DecodeMessageExtendedMedia(buf) + if err != nil { + return fmt.Errorf("unable to decode boxed value: %w", err) + } + b.MessageExtendedMedia = v + return nil +} + +// Encode implements bin.Encode for MessageExtendedMediaBox. +func (b *MessageExtendedMediaBox) Encode(buf *bin.Buffer) error { + if b == nil || b.MessageExtendedMedia == nil { + return fmt.Errorf("unable to encode MessageExtendedMediaClass as nil") + } + return b.MessageExtendedMedia.Encode(buf) +} diff --git a/tg/tl_message_extended_media_slices_gen.go b/tg/tl_message_extended_media_slices_gen.go new file mode 100644 index 0000000000..6cb8177212 --- /dev/null +++ b/tg/tl_message_extended_media_slices_gen.go @@ -0,0 +1,307 @@ +//go:build !no_gotd_slices +// +build !no_gotd_slices + +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "github.com/gotd/td/bin" + "github.com/gotd/td/tdjson" + "github.com/gotd/td/tdp" + "github.com/gotd/td/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) + +// MessageExtendedMediaClassArray is adapter for slice of MessageExtendedMediaClass. +type MessageExtendedMediaClassArray []MessageExtendedMediaClass + +// Sort sorts slice of MessageExtendedMediaClass. +func (s MessageExtendedMediaClassArray) Sort(less func(a, b MessageExtendedMediaClass) bool) MessageExtendedMediaClassArray { + sort.Slice(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// SortStable sorts slice of MessageExtendedMediaClass. +func (s MessageExtendedMediaClassArray) SortStable(less func(a, b MessageExtendedMediaClass) bool) MessageExtendedMediaClassArray { + sort.SliceStable(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// Retain filters in-place slice of MessageExtendedMediaClass. +func (s MessageExtendedMediaClassArray) Retain(keep func(x MessageExtendedMediaClass) bool) MessageExtendedMediaClassArray { + n := 0 + for _, x := range s { + if keep(x) { + s[n] = x + n++ + } + } + s = s[:n] + + return s +} + +// First returns first element of slice (if exists). +func (s MessageExtendedMediaClassArray) First() (v MessageExtendedMediaClass, ok bool) { + if len(s) < 1 { + return + } + return s[0], true +} + +// Last returns last element of slice (if exists). +func (s MessageExtendedMediaClassArray) Last() (v MessageExtendedMediaClass, ok bool) { + if len(s) < 1 { + return + } + return s[len(s)-1], true +} + +// PopFirst returns first element of slice (if exists) and deletes it. +func (s *MessageExtendedMediaClassArray) PopFirst() (v MessageExtendedMediaClass, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[0] + + // Delete by index from SliceTricks. + copy(a[0:], a[1:]) + var zero MessageExtendedMediaClass + a[len(a)-1] = zero + a = a[:len(a)-1] + *s = a + + return v, true +} + +// Pop returns last element of slice (if exists) and deletes it. +func (s *MessageExtendedMediaClassArray) Pop() (v MessageExtendedMediaClass, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[len(a)-1] + a = a[:len(a)-1] + *s = a + + return v, true +} + +// AsMessageExtendedMediaPreview returns copy with only MessageExtendedMediaPreview constructors. +func (s MessageExtendedMediaClassArray) AsMessageExtendedMediaPreview() (to MessageExtendedMediaPreviewArray) { + for _, elem := range s { + value, ok := elem.(*MessageExtendedMediaPreview) + if !ok { + continue + } + to = append(to, *value) + } + + return to +} + +// AsMessageExtendedMedia returns copy with only MessageExtendedMedia constructors. +func (s MessageExtendedMediaClassArray) AsMessageExtendedMedia() (to MessageExtendedMediaArray) { + for _, elem := range s { + value, ok := elem.(*MessageExtendedMedia) + if !ok { + continue + } + to = append(to, *value) + } + + return to +} + +// MessageExtendedMediaPreviewArray is adapter for slice of MessageExtendedMediaPreview. +type MessageExtendedMediaPreviewArray []MessageExtendedMediaPreview + +// Sort sorts slice of MessageExtendedMediaPreview. +func (s MessageExtendedMediaPreviewArray) Sort(less func(a, b MessageExtendedMediaPreview) bool) MessageExtendedMediaPreviewArray { + sort.Slice(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// SortStable sorts slice of MessageExtendedMediaPreview. +func (s MessageExtendedMediaPreviewArray) SortStable(less func(a, b MessageExtendedMediaPreview) bool) MessageExtendedMediaPreviewArray { + sort.SliceStable(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// Retain filters in-place slice of MessageExtendedMediaPreview. +func (s MessageExtendedMediaPreviewArray) Retain(keep func(x MessageExtendedMediaPreview) bool) MessageExtendedMediaPreviewArray { + n := 0 + for _, x := range s { + if keep(x) { + s[n] = x + n++ + } + } + s = s[:n] + + return s +} + +// First returns first element of slice (if exists). +func (s MessageExtendedMediaPreviewArray) First() (v MessageExtendedMediaPreview, ok bool) { + if len(s) < 1 { + return + } + return s[0], true +} + +// Last returns last element of slice (if exists). +func (s MessageExtendedMediaPreviewArray) Last() (v MessageExtendedMediaPreview, ok bool) { + if len(s) < 1 { + return + } + return s[len(s)-1], true +} + +// PopFirst returns first element of slice (if exists) and deletes it. +func (s *MessageExtendedMediaPreviewArray) PopFirst() (v MessageExtendedMediaPreview, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[0] + + // Delete by index from SliceTricks. + copy(a[0:], a[1:]) + var zero MessageExtendedMediaPreview + a[len(a)-1] = zero + a = a[:len(a)-1] + *s = a + + return v, true +} + +// Pop returns last element of slice (if exists) and deletes it. +func (s *MessageExtendedMediaPreviewArray) Pop() (v MessageExtendedMediaPreview, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[len(a)-1] + a = a[:len(a)-1] + *s = a + + return v, true +} + +// MessageExtendedMediaArray is adapter for slice of MessageExtendedMedia. +type MessageExtendedMediaArray []MessageExtendedMedia + +// Sort sorts slice of MessageExtendedMedia. +func (s MessageExtendedMediaArray) Sort(less func(a, b MessageExtendedMedia) bool) MessageExtendedMediaArray { + sort.Slice(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// SortStable sorts slice of MessageExtendedMedia. +func (s MessageExtendedMediaArray) SortStable(less func(a, b MessageExtendedMedia) bool) MessageExtendedMediaArray { + sort.SliceStable(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// Retain filters in-place slice of MessageExtendedMedia. +func (s MessageExtendedMediaArray) Retain(keep func(x MessageExtendedMedia) bool) MessageExtendedMediaArray { + n := 0 + for _, x := range s { + if keep(x) { + s[n] = x + n++ + } + } + s = s[:n] + + return s +} + +// First returns first element of slice (if exists). +func (s MessageExtendedMediaArray) First() (v MessageExtendedMedia, ok bool) { + if len(s) < 1 { + return + } + return s[0], true +} + +// Last returns last element of slice (if exists). +func (s MessageExtendedMediaArray) Last() (v MessageExtendedMedia, ok bool) { + if len(s) < 1 { + return + } + return s[len(s)-1], true +} + +// PopFirst returns first element of slice (if exists) and deletes it. +func (s *MessageExtendedMediaArray) PopFirst() (v MessageExtendedMedia, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[0] + + // Delete by index from SliceTricks. + copy(a[0:], a[1:]) + var zero MessageExtendedMedia + a[len(a)-1] = zero + a = a[:len(a)-1] + *s = a + + return v, true +} + +// Pop returns last element of slice (if exists) and deletes it. +func (s *MessageExtendedMediaArray) Pop() (v MessageExtendedMedia, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[len(a)-1] + a = a[:len(a)-1] + *s = a + + return v, true +} diff --git a/tg/tl_message_media_gen.go b/tg/tl_message_media_gen.go index 702fcb76f1..116083454b 100644 --- a/tg/tl_message_media_gen.go +++ b/tg/tl_message_media_gen.go @@ -1664,7 +1664,7 @@ func (m *MessageMediaGame) GetGame() (value Game) { return m.Game } -// MessageMediaInvoice represents TL type `messageMediaInvoice#84551347`. +// MessageMediaInvoice represents TL type `messageMediaInvoice#f6a548d3`. // Invoice // // See https://core.telegram.org/constructor/messageMediaInvoice for reference. @@ -1712,10 +1712,14 @@ type MessageMediaInvoice struct { TotalAmount int64 // Unique bot deep-linking parameter that can be used to generate this invoice StartParam string + // ExtendedMedia field of MessageMediaInvoice. + // + // Use SetExtendedMedia and GetExtendedMedia helpers. + ExtendedMedia MessageExtendedMediaClass } // MessageMediaInvoiceTypeID is TL type id of MessageMediaInvoice. -const MessageMediaInvoiceTypeID = 0x84551347 +const MessageMediaInvoiceTypeID = 0xf6a548d3 // construct implements constructor of MessageMediaClass. func (m MessageMediaInvoice) construct() MessageMediaClass { return &m } @@ -1764,6 +1768,9 @@ func (m *MessageMediaInvoice) Zero() bool { if !(m.StartParam == "") { return false } + if !(m.ExtendedMedia == nil) { + return false + } return true } @@ -1788,6 +1795,7 @@ func (m *MessageMediaInvoice) FillFrom(from interface { GetCurrency() (value string) GetTotalAmount() (value int64) GetStartParam() (value string) + GetExtendedMedia() (value MessageExtendedMediaClass, ok bool) }) { m.ShippingAddressRequested = from.GetShippingAddressRequested() m.Test = from.GetTest() @@ -1804,6 +1812,10 @@ func (m *MessageMediaInvoice) FillFrom(from interface { m.Currency = from.GetCurrency() m.TotalAmount = from.GetTotalAmount() m.StartParam = from.GetStartParam() + if val, ok := from.GetExtendedMedia(); ok { + m.ExtendedMedia = val + } + } // TypeID returns type id in TL schema. @@ -1869,6 +1881,11 @@ func (m *MessageMediaInvoice) TypeInfo() tdp.Type { Name: "StartParam", SchemaName: "start_param", }, + { + Name: "ExtendedMedia", + SchemaName: "extended_media", + Null: !m.Flags.Has(4), + }, } return typ } @@ -1887,12 +1904,15 @@ func (m *MessageMediaInvoice) SetFlags() { if !(m.ReceiptMsgID == 0) { m.Flags.Set(2) } + if !(m.ExtendedMedia == nil) { + m.Flags.Set(4) + } } // Encode implements bin.Encoder. func (m *MessageMediaInvoice) Encode(b *bin.Buffer) error { if m == nil { - return fmt.Errorf("can't encode messageMediaInvoice#84551347 as nil") + return fmt.Errorf("can't encode messageMediaInvoice#f6a548d3 as nil") } b.PutID(MessageMediaInvoiceTypeID) return m.EncodeBare(b) @@ -1901,20 +1921,20 @@ func (m *MessageMediaInvoice) Encode(b *bin.Buffer) error { // EncodeBare implements bin.BareEncoder. func (m *MessageMediaInvoice) EncodeBare(b *bin.Buffer) error { if m == nil { - return fmt.Errorf("can't encode messageMediaInvoice#84551347 as nil") + return fmt.Errorf("can't encode messageMediaInvoice#f6a548d3 as nil") } m.SetFlags() if err := m.Flags.Encode(b); err != nil { - return fmt.Errorf("unable to encode messageMediaInvoice#84551347: field flags: %w", err) + return fmt.Errorf("unable to encode messageMediaInvoice#f6a548d3: field flags: %w", err) } b.PutString(m.Title) b.PutString(m.Description) if m.Flags.Has(0) { if m.Photo == nil { - return fmt.Errorf("unable to encode messageMediaInvoice#84551347: field photo is nil") + return fmt.Errorf("unable to encode messageMediaInvoice#f6a548d3: field photo is nil") } if err := m.Photo.Encode(b); err != nil { - return fmt.Errorf("unable to encode messageMediaInvoice#84551347: field photo: %w", err) + return fmt.Errorf("unable to encode messageMediaInvoice#f6a548d3: field photo: %w", err) } } if m.Flags.Has(2) { @@ -1923,16 +1943,24 @@ func (m *MessageMediaInvoice) EncodeBare(b *bin.Buffer) error { b.PutString(m.Currency) b.PutLong(m.TotalAmount) b.PutString(m.StartParam) + if m.Flags.Has(4) { + if m.ExtendedMedia == nil { + return fmt.Errorf("unable to encode messageMediaInvoice#f6a548d3: field extended_media is nil") + } + if err := m.ExtendedMedia.Encode(b); err != nil { + return fmt.Errorf("unable to encode messageMediaInvoice#f6a548d3: field extended_media: %w", err) + } + } return nil } // Decode implements bin.Decoder. func (m *MessageMediaInvoice) Decode(b *bin.Buffer) error { if m == nil { - return fmt.Errorf("can't decode messageMediaInvoice#84551347 to nil") + return fmt.Errorf("can't decode messageMediaInvoice#f6a548d3 to nil") } if err := b.ConsumeID(MessageMediaInvoiceTypeID); err != nil { - return fmt.Errorf("unable to decode messageMediaInvoice#84551347: %w", err) + return fmt.Errorf("unable to decode messageMediaInvoice#f6a548d3: %w", err) } return m.DecodeBare(b) } @@ -1940,11 +1968,11 @@ func (m *MessageMediaInvoice) Decode(b *bin.Buffer) error { // DecodeBare implements bin.BareDecoder. func (m *MessageMediaInvoice) DecodeBare(b *bin.Buffer) error { if m == nil { - return fmt.Errorf("can't decode messageMediaInvoice#84551347 to nil") + return fmt.Errorf("can't decode messageMediaInvoice#f6a548d3 to nil") } { if err := m.Flags.Decode(b); err != nil { - return fmt.Errorf("unable to decode messageMediaInvoice#84551347: field flags: %w", err) + return fmt.Errorf("unable to decode messageMediaInvoice#f6a548d3: field flags: %w", err) } } m.ShippingAddressRequested = m.Flags.Has(1) @@ -1952,52 +1980,59 @@ func (m *MessageMediaInvoice) DecodeBare(b *bin.Buffer) error { { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode messageMediaInvoice#84551347: field title: %w", err) + return fmt.Errorf("unable to decode messageMediaInvoice#f6a548d3: field title: %w", err) } m.Title = value } { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode messageMediaInvoice#84551347: field description: %w", err) + return fmt.Errorf("unable to decode messageMediaInvoice#f6a548d3: field description: %w", err) } m.Description = value } if m.Flags.Has(0) { value, err := DecodeWebDocument(b) if err != nil { - return fmt.Errorf("unable to decode messageMediaInvoice#84551347: field photo: %w", err) + return fmt.Errorf("unable to decode messageMediaInvoice#f6a548d3: field photo: %w", err) } m.Photo = value } if m.Flags.Has(2) { value, err := b.Int() if err != nil { - return fmt.Errorf("unable to decode messageMediaInvoice#84551347: field receipt_msg_id: %w", err) + return fmt.Errorf("unable to decode messageMediaInvoice#f6a548d3: field receipt_msg_id: %w", err) } m.ReceiptMsgID = value } { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode messageMediaInvoice#84551347: field currency: %w", err) + return fmt.Errorf("unable to decode messageMediaInvoice#f6a548d3: field currency: %w", err) } m.Currency = value } { value, err := b.Long() if err != nil { - return fmt.Errorf("unable to decode messageMediaInvoice#84551347: field total_amount: %w", err) + return fmt.Errorf("unable to decode messageMediaInvoice#f6a548d3: field total_amount: %w", err) } m.TotalAmount = value } { value, err := b.String() if err != nil { - return fmt.Errorf("unable to decode messageMediaInvoice#84551347: field start_param: %w", err) + return fmt.Errorf("unable to decode messageMediaInvoice#f6a548d3: field start_param: %w", err) } m.StartParam = value } + if m.Flags.Has(4) { + value, err := DecodeMessageExtendedMedia(b) + if err != nil { + return fmt.Errorf("unable to decode messageMediaInvoice#f6a548d3: field extended_media: %w", err) + } + m.ExtendedMedia = value + } return nil } @@ -2115,6 +2150,24 @@ func (m *MessageMediaInvoice) GetStartParam() (value string) { return m.StartParam } +// SetExtendedMedia sets value of ExtendedMedia conditional field. +func (m *MessageMediaInvoice) SetExtendedMedia(value MessageExtendedMediaClass) { + m.Flags.Set(4) + m.ExtendedMedia = value +} + +// GetExtendedMedia returns value of ExtendedMedia conditional field and +// boolean which is true if field was set. +func (m *MessageMediaInvoice) GetExtendedMedia() (value MessageExtendedMediaClass, ok bool) { + if m == nil { + return + } + if !m.Flags.Has(4) { + return value, false + } + return m.ExtendedMedia, true +} + // MessageMediaGeoLive represents TL type `messageMediaGeoLive#b940c666`. // Indicates a live geolocation¹ // @@ -2762,7 +2815,7 @@ const MessageMediaClassName = "MessageMedia" // case *tg.MessageMediaWebPage: // messageMediaWebPage#a32dd600 // case *tg.MessageMediaVenue: // messageMediaVenue#2ec0533f // case *tg.MessageMediaGame: // messageMediaGame#fdb19008 -// case *tg.MessageMediaInvoice: // messageMediaInvoice#84551347 +// case *tg.MessageMediaInvoice: // messageMediaInvoice#f6a548d3 // case *tg.MessageMediaGeoLive: // messageMediaGeoLive#b940c666 // case *tg.MessageMediaPoll: // messageMediaPoll#4bd6e798 // case *tg.MessageMediaDice: // messageMediaDice#3f7ee58b @@ -2858,7 +2911,7 @@ func DecodeMessageMedia(buf *bin.Buffer) (MessageMediaClass, error) { } return &v, nil case MessageMediaInvoiceTypeID: - // Decoding messageMediaInvoice#84551347. + // Decoding messageMediaInvoice#f6a548d3. v := MessageMediaInvoice{} if err := v.Decode(buf); err != nil { return nil, fmt.Errorf("unable to decode MessageMediaClass: %w", err) diff --git a/tg/tl_messages_get_extended_media_gen.go b/tg/tl_messages_get_extended_media_gen.go new file mode 100644 index 0000000000..fe90f555ac --- /dev/null +++ b/tg/tl_messages_get_extended_media_gen.go @@ -0,0 +1,218 @@ +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "github.com/gotd/td/bin" + "github.com/gotd/td/tdjson" + "github.com/gotd/td/tdp" + "github.com/gotd/td/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) + +// MessagesGetExtendedMediaRequest represents TL type `messages.getExtendedMedia#84f80814`. +// +// See https://core.telegram.org/method/messages.getExtendedMedia for reference. +type MessagesGetExtendedMediaRequest struct { + // Peer field of MessagesGetExtendedMediaRequest. + Peer InputPeerClass + // ID field of MessagesGetExtendedMediaRequest. + ID []int +} + +// MessagesGetExtendedMediaRequestTypeID is TL type id of MessagesGetExtendedMediaRequest. +const MessagesGetExtendedMediaRequestTypeID = 0x84f80814 + +// Ensuring interfaces in compile-time for MessagesGetExtendedMediaRequest. +var ( + _ bin.Encoder = &MessagesGetExtendedMediaRequest{} + _ bin.Decoder = &MessagesGetExtendedMediaRequest{} + _ bin.BareEncoder = &MessagesGetExtendedMediaRequest{} + _ bin.BareDecoder = &MessagesGetExtendedMediaRequest{} +) + +func (g *MessagesGetExtendedMediaRequest) Zero() bool { + if g == nil { + return true + } + if !(g.Peer == nil) { + return false + } + if !(g.ID == nil) { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (g *MessagesGetExtendedMediaRequest) String() string { + if g == nil { + return "MessagesGetExtendedMediaRequest(nil)" + } + type Alias MessagesGetExtendedMediaRequest + return fmt.Sprintf("MessagesGetExtendedMediaRequest%+v", Alias(*g)) +} + +// FillFrom fills MessagesGetExtendedMediaRequest from given interface. +func (g *MessagesGetExtendedMediaRequest) FillFrom(from interface { + GetPeer() (value InputPeerClass) + GetID() (value []int) +}) { + g.Peer = from.GetPeer() + g.ID = from.GetID() +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*MessagesGetExtendedMediaRequest) TypeID() uint32 { + return MessagesGetExtendedMediaRequestTypeID +} + +// TypeName returns name of type in TL schema. +func (*MessagesGetExtendedMediaRequest) TypeName() string { + return "messages.getExtendedMedia" +} + +// TypeInfo returns info about TL type. +func (g *MessagesGetExtendedMediaRequest) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "messages.getExtendedMedia", + ID: MessagesGetExtendedMediaRequestTypeID, + } + if g == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "Peer", + SchemaName: "peer", + }, + { + Name: "ID", + SchemaName: "id", + }, + } + return typ +} + +// Encode implements bin.Encoder. +func (g *MessagesGetExtendedMediaRequest) Encode(b *bin.Buffer) error { + if g == nil { + return fmt.Errorf("can't encode messages.getExtendedMedia#84f80814 as nil") + } + b.PutID(MessagesGetExtendedMediaRequestTypeID) + return g.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (g *MessagesGetExtendedMediaRequest) EncodeBare(b *bin.Buffer) error { + if g == nil { + return fmt.Errorf("can't encode messages.getExtendedMedia#84f80814 as nil") + } + if g.Peer == nil { + return fmt.Errorf("unable to encode messages.getExtendedMedia#84f80814: field peer is nil") + } + if err := g.Peer.Encode(b); err != nil { + return fmt.Errorf("unable to encode messages.getExtendedMedia#84f80814: field peer: %w", err) + } + b.PutVectorHeader(len(g.ID)) + for _, v := range g.ID { + b.PutInt(v) + } + return nil +} + +// Decode implements bin.Decoder. +func (g *MessagesGetExtendedMediaRequest) Decode(b *bin.Buffer) error { + if g == nil { + return fmt.Errorf("can't decode messages.getExtendedMedia#84f80814 to nil") + } + if err := b.ConsumeID(MessagesGetExtendedMediaRequestTypeID); err != nil { + return fmt.Errorf("unable to decode messages.getExtendedMedia#84f80814: %w", err) + } + return g.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (g *MessagesGetExtendedMediaRequest) DecodeBare(b *bin.Buffer) error { + if g == nil { + return fmt.Errorf("can't decode messages.getExtendedMedia#84f80814 to nil") + } + { + value, err := DecodeInputPeer(b) + if err != nil { + return fmt.Errorf("unable to decode messages.getExtendedMedia#84f80814: field peer: %w", err) + } + g.Peer = value + } + { + headerLen, err := b.VectorHeader() + if err != nil { + return fmt.Errorf("unable to decode messages.getExtendedMedia#84f80814: field id: %w", err) + } + + if headerLen > 0 { + g.ID = make([]int, 0, headerLen%bin.PreallocateLimit) + } + for idx := 0; idx < headerLen; idx++ { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode messages.getExtendedMedia#84f80814: field id: %w", err) + } + g.ID = append(g.ID, value) + } + } + return nil +} + +// GetPeer returns value of Peer field. +func (g *MessagesGetExtendedMediaRequest) GetPeer() (value InputPeerClass) { + if g == nil { + return + } + return g.Peer +} + +// GetID returns value of ID field. +func (g *MessagesGetExtendedMediaRequest) GetID() (value []int) { + if g == nil { + return + } + return g.ID +} + +// MessagesGetExtendedMedia invokes method messages.getExtendedMedia#84f80814 returning error if any. +// +// See https://core.telegram.org/method/messages.getExtendedMedia for reference. +func (c *Client) MessagesGetExtendedMedia(ctx context.Context, request *MessagesGetExtendedMediaRequest) (UpdatesClass, error) { + var result UpdatesBox + + if err := c.rpc.Invoke(ctx, request, &result); err != nil { + return nil, err + } + return result.Updates, nil +} diff --git a/tg/tl_messages_get_extended_media_slices_gen.go b/tg/tl_messages_get_extended_media_slices_gen.go new file mode 100644 index 0000000000..fe21471a4c --- /dev/null +++ b/tg/tl_messages_get_extended_media_slices_gen.go @@ -0,0 +1,35 @@ +//go:build !no_gotd_slices +// +build !no_gotd_slices + +// Code generated by gotdgen, DO NOT EDIT. + +package tg + +import ( + "context" + "errors" + "fmt" + "sort" + "strings" + + "go.uber.org/multierr" + + "github.com/gotd/td/bin" + "github.com/gotd/td/tdjson" + "github.com/gotd/td/tdp" + "github.com/gotd/td/tgerr" +) + +// No-op definition for keeping imports. +var ( + _ = bin.Buffer{} + _ = context.Background() + _ = fmt.Stringer(nil) + _ = strings.Builder{} + _ = errors.Is + _ = multierr.AppendInto + _ = sort.Ints + _ = tdp.Format + _ = tgerr.Error{} + _ = tdjson.Encoder{} +) diff --git a/tg/tl_registry_gen.go b/tg/tl_registry_gen.go index 24120d842a..941c414f38 100644 --- a/tg/tl_registry_gen.go +++ b/tg/tl_registry_gen.go @@ -32,7 +32,7 @@ var ( ) // Layer version of schema. -const Layer = 145 +const Layer = 146 // TypesMap returns mapping from type ids to TL type names. func TypesMap() map[uint32]string { @@ -67,7 +67,7 @@ func TypesMap() map[uint32]string { InputMediaPhotoExternalTypeID: "inputMediaPhotoExternal#e5bbfe1a", InputMediaDocumentExternalTypeID: "inputMediaDocumentExternal#fb52dc99", InputMediaGameTypeID: "inputMediaGame#d33f43f3", - InputMediaInvoiceTypeID: "inputMediaInvoice#d9799874", + InputMediaInvoiceTypeID: "inputMediaInvoice#8eb5a6d5", InputMediaGeoLiveTypeID: "inputMediaGeoLive#971fa843", InputMediaPollTypeID: "inputMediaPoll#f94e5f1", InputMediaDiceTypeID: "inputMediaDice#e66fbf7b", @@ -137,7 +137,7 @@ func TypesMap() map[uint32]string { MessageMediaWebPageTypeID: "messageMediaWebPage#a32dd600", MessageMediaVenueTypeID: "messageMediaVenue#2ec0533f", MessageMediaGameTypeID: "messageMediaGame#fdb19008", - MessageMediaInvoiceTypeID: "messageMediaInvoice#84551347", + MessageMediaInvoiceTypeID: "messageMediaInvoice#f6a548d3", MessageMediaGeoLiveTypeID: "messageMediaGeoLive#b940c666", MessageMediaPollTypeID: "messageMediaPoll#4bd6e798", MessageMediaDiceTypeID: "messageMediaDice#3f7ee58b", @@ -352,6 +352,7 @@ func TypesMap() map[uint32]string { UpdateRecentEmojiStatusesTypeID: "updateRecentEmojiStatuses#30f443db", UpdateRecentReactionsTypeID: "updateRecentReactions#6f7863f4", UpdateMoveStickerSetToTopTypeID: "updateMoveStickerSetToTop#86fccf85", + UpdateMessageExtendedMediaTypeID: "updateMessageExtendedMedia#5a73a98c", UpdatesStateTypeID: "updates.state#a56c2a3e", UpdatesDifferenceEmptyTypeID: "updates.differenceEmpty#5d75a138", UpdatesDifferenceTypeID: "updates.difference#f49ca0", @@ -1080,6 +1081,8 @@ func TypesMap() map[uint32]string { AccountEmailVerifiedLoginTypeID: "account.emailVerifiedLogin#e1bb0d61", PremiumSubscriptionOptionTypeID: "premiumSubscriptionOption#b6f11ebe", SendAsPeerTypeID: "sendAsPeer#b81c7034", + MessageExtendedMediaPreviewTypeID: "messageExtendedMediaPreview#ad628cc8", + MessageExtendedMediaTypeID: "messageExtendedMedia#ee479c64", InvokeAfterMsgRequestTypeID: "invokeAfterMsg#cb9f372d", InvokeAfterMsgsRequestTypeID: "invokeAfterMsgs#3dc4b4f0", InitConnectionRequestTypeID: "initConnection#c1cd5ea9", @@ -1386,6 +1389,7 @@ func TypesMap() map[uint32]string { MessagesGetTopReactionsRequestTypeID: "messages.getTopReactions#bb8125ba", MessagesGetRecentReactionsRequestTypeID: "messages.getRecentReactions#39461db2", MessagesClearRecentReactionsRequestTypeID: "messages.clearRecentReactions#9dfeefb4", + MessagesGetExtendedMediaRequestTypeID: "messages.getExtendedMedia#84f80814", UpdatesGetStateRequestTypeID: "updates.getState#edd4882a", UpdatesGetDifferenceRequestTypeID: "updates.getDifference#25939651", UpdatesGetChannelDifferenceRequestTypeID: "updates.getChannelDifference#3173d78", @@ -1869,6 +1873,7 @@ func NamesMap() map[string]uint32 { "updateRecentEmojiStatuses": UpdateRecentEmojiStatusesTypeID, "updateRecentReactions": UpdateRecentReactionsTypeID, "updateMoveStickerSetToTop": UpdateMoveStickerSetToTopTypeID, + "updateMessageExtendedMedia": UpdateMessageExtendedMediaTypeID, "updates.state": UpdatesStateTypeID, "updates.differenceEmpty": UpdatesDifferenceEmptyTypeID, "updates.difference": UpdatesDifferenceTypeID, @@ -2597,6 +2602,8 @@ func NamesMap() map[string]uint32 { "account.emailVerifiedLogin": AccountEmailVerifiedLoginTypeID, "premiumSubscriptionOption": PremiumSubscriptionOptionTypeID, "sendAsPeer": SendAsPeerTypeID, + "messageExtendedMediaPreview": MessageExtendedMediaPreviewTypeID, + "messageExtendedMedia": MessageExtendedMediaTypeID, "invokeAfterMsg": InvokeAfterMsgRequestTypeID, "invokeAfterMsgs": InvokeAfterMsgsRequestTypeID, "initConnection": InitConnectionRequestTypeID, @@ -2903,6 +2910,7 @@ func NamesMap() map[string]uint32 { "messages.getTopReactions": MessagesGetTopReactionsRequestTypeID, "messages.getRecentReactions": MessagesGetRecentReactionsRequestTypeID, "messages.clearRecentReactions": MessagesClearRecentReactionsRequestTypeID, + "messages.getExtendedMedia": MessagesGetExtendedMediaRequestTypeID, "updates.getState": UpdatesGetStateRequestTypeID, "updates.getDifference": UpdatesGetDifferenceRequestTypeID, "updates.getChannelDifference": UpdatesGetChannelDifferenceRequestTypeID, @@ -3386,6 +3394,7 @@ func TypesConstructorMap() map[uint32]func() bin.Object { UpdateRecentEmojiStatusesTypeID: func() bin.Object { return &UpdateRecentEmojiStatuses{} }, UpdateRecentReactionsTypeID: func() bin.Object { return &UpdateRecentReactions{} }, UpdateMoveStickerSetToTopTypeID: func() bin.Object { return &UpdateMoveStickerSetToTop{} }, + UpdateMessageExtendedMediaTypeID: func() bin.Object { return &UpdateMessageExtendedMedia{} }, UpdatesStateTypeID: func() bin.Object { return &UpdatesState{} }, UpdatesDifferenceEmptyTypeID: func() bin.Object { return &UpdatesDifferenceEmpty{} }, UpdatesDifferenceTypeID: func() bin.Object { return &UpdatesDifference{} }, @@ -4114,6 +4123,8 @@ func TypesConstructorMap() map[uint32]func() bin.Object { AccountEmailVerifiedLoginTypeID: func() bin.Object { return &AccountEmailVerifiedLogin{} }, PremiumSubscriptionOptionTypeID: func() bin.Object { return &PremiumSubscriptionOption{} }, SendAsPeerTypeID: func() bin.Object { return &SendAsPeer{} }, + MessageExtendedMediaPreviewTypeID: func() bin.Object { return &MessageExtendedMediaPreview{} }, + MessageExtendedMediaTypeID: func() bin.Object { return &MessageExtendedMedia{} }, InvokeAfterMsgRequestTypeID: func() bin.Object { return &InvokeAfterMsgRequest{} }, InvokeAfterMsgsRequestTypeID: func() bin.Object { return &InvokeAfterMsgsRequest{} }, InitConnectionRequestTypeID: func() bin.Object { return &InitConnectionRequest{} }, @@ -4420,6 +4431,7 @@ func TypesConstructorMap() map[uint32]func() bin.Object { MessagesGetTopReactionsRequestTypeID: func() bin.Object { return &MessagesGetTopReactionsRequest{} }, MessagesGetRecentReactionsRequestTypeID: func() bin.Object { return &MessagesGetRecentReactionsRequest{} }, MessagesClearRecentReactionsRequestTypeID: func() bin.Object { return &MessagesClearRecentReactionsRequest{} }, + MessagesGetExtendedMediaRequestTypeID: func() bin.Object { return &MessagesGetExtendedMediaRequest{} }, UpdatesGetStateRequestTypeID: func() bin.Object { return &UpdatesGetStateRequest{} }, UpdatesGetDifferenceRequestTypeID: func() bin.Object { return &UpdatesGetDifferenceRequest{} }, UpdatesGetChannelDifferenceRequestTypeID: func() bin.Object { return &UpdatesGetChannelDifferenceRequest{} }, @@ -5201,6 +5213,10 @@ func ClassConstructorsMap() map[string][]uint32 { MessageEntitySpoilerTypeID, MessageEntityCustomEmojiTypeID, }, + MessageExtendedMediaClassName: { + MessageExtendedMediaPreviewTypeID, + MessageExtendedMediaTypeID, + }, MessageMediaClassName: { MessageMediaEmptyTypeID, MessageMediaPhotoTypeID, @@ -5693,6 +5709,7 @@ func ClassConstructorsMap() map[string][]uint32 { UpdateRecentEmojiStatusesTypeID, UpdateRecentReactionsTypeID, UpdateMoveStickerSetToTopTypeID, + UpdateMessageExtendedMediaTypeID, }, UpdatesChannelDifferenceClassName: { UpdatesChannelDifferenceEmptyTypeID, diff --git a/tg/tl_server_gen.go b/tg/tl_server_gen.go index a486093c01..9b4bd5f331 100644 --- a/tg/tl_server_gen.go +++ b/tg/tl_server_gen.go @@ -5508,6 +5508,23 @@ func (s *ServerDispatcher) OnMessagesClearRecentReactions(f func(ctx context.Con s.handlers[MessagesClearRecentReactionsRequestTypeID] = handler } +func (s *ServerDispatcher) OnMessagesGetExtendedMedia(f func(ctx context.Context, request *MessagesGetExtendedMediaRequest) (UpdatesClass, error)) { + handler := func(ctx context.Context, b *bin.Buffer) (bin.Encoder, error) { + var request MessagesGetExtendedMediaRequest + if err := request.Decode(b); err != nil { + return nil, err + } + + response, err := f(ctx, &request) + if err != nil { + return nil, err + } + return &UpdatesBox{Updates: response}, nil + } + + s.handlers[MessagesGetExtendedMediaRequestTypeID] = handler +} + func (s *ServerDispatcher) OnUpdatesGetState(f func(ctx context.Context) (*UpdatesState, error)) { handler := func(ctx context.Context, b *bin.Buffer) (bin.Encoder, error) { var request UpdatesGetStateRequest diff --git a/tg/tl_update_gen.go b/tg/tl_update_gen.go index a1abaa42bd..ddf19d0d63 100644 --- a/tg/tl_update_gen.go +++ b/tg/tl_update_gen.go @@ -21053,6 +21053,204 @@ func (u *UpdateMoveStickerSetToTop) GetStickerset() (value int64) { return u.Stickerset } +// UpdateMessageExtendedMedia represents TL type `updateMessageExtendedMedia#5a73a98c`. +// +// See https://core.telegram.org/constructor/updateMessageExtendedMedia for reference. +type UpdateMessageExtendedMedia struct { + // Peer field of UpdateMessageExtendedMedia. + Peer PeerClass + // MsgID field of UpdateMessageExtendedMedia. + MsgID int + // ExtendedMedia field of UpdateMessageExtendedMedia. + ExtendedMedia MessageExtendedMediaClass +} + +// UpdateMessageExtendedMediaTypeID is TL type id of UpdateMessageExtendedMedia. +const UpdateMessageExtendedMediaTypeID = 0x5a73a98c + +// construct implements constructor of UpdateClass. +func (u UpdateMessageExtendedMedia) construct() UpdateClass { return &u } + +// Ensuring interfaces in compile-time for UpdateMessageExtendedMedia. +var ( + _ bin.Encoder = &UpdateMessageExtendedMedia{} + _ bin.Decoder = &UpdateMessageExtendedMedia{} + _ bin.BareEncoder = &UpdateMessageExtendedMedia{} + _ bin.BareDecoder = &UpdateMessageExtendedMedia{} + + _ UpdateClass = &UpdateMessageExtendedMedia{} +) + +func (u *UpdateMessageExtendedMedia) Zero() bool { + if u == nil { + return true + } + if !(u.Peer == nil) { + return false + } + if !(u.MsgID == 0) { + return false + } + if !(u.ExtendedMedia == nil) { + return false + } + + return true +} + +// String implements fmt.Stringer. +func (u *UpdateMessageExtendedMedia) String() string { + if u == nil { + return "UpdateMessageExtendedMedia(nil)" + } + type Alias UpdateMessageExtendedMedia + return fmt.Sprintf("UpdateMessageExtendedMedia%+v", Alias(*u)) +} + +// FillFrom fills UpdateMessageExtendedMedia from given interface. +func (u *UpdateMessageExtendedMedia) FillFrom(from interface { + GetPeer() (value PeerClass) + GetMsgID() (value int) + GetExtendedMedia() (value MessageExtendedMediaClass) +}) { + u.Peer = from.GetPeer() + u.MsgID = from.GetMsgID() + u.ExtendedMedia = from.GetExtendedMedia() +} + +// TypeID returns type id in TL schema. +// +// See https://core.telegram.org/mtproto/TL-tl#remarks. +func (*UpdateMessageExtendedMedia) TypeID() uint32 { + return UpdateMessageExtendedMediaTypeID +} + +// TypeName returns name of type in TL schema. +func (*UpdateMessageExtendedMedia) TypeName() string { + return "updateMessageExtendedMedia" +} + +// TypeInfo returns info about TL type. +func (u *UpdateMessageExtendedMedia) TypeInfo() tdp.Type { + typ := tdp.Type{ + Name: "updateMessageExtendedMedia", + ID: UpdateMessageExtendedMediaTypeID, + } + if u == nil { + typ.Null = true + return typ + } + typ.Fields = []tdp.Field{ + { + Name: "Peer", + SchemaName: "peer", + }, + { + Name: "MsgID", + SchemaName: "msg_id", + }, + { + Name: "ExtendedMedia", + SchemaName: "extended_media", + }, + } + return typ +} + +// Encode implements bin.Encoder. +func (u *UpdateMessageExtendedMedia) Encode(b *bin.Buffer) error { + if u == nil { + return fmt.Errorf("can't encode updateMessageExtendedMedia#5a73a98c as nil") + } + b.PutID(UpdateMessageExtendedMediaTypeID) + return u.EncodeBare(b) +} + +// EncodeBare implements bin.BareEncoder. +func (u *UpdateMessageExtendedMedia) EncodeBare(b *bin.Buffer) error { + if u == nil { + return fmt.Errorf("can't encode updateMessageExtendedMedia#5a73a98c as nil") + } + if u.Peer == nil { + return fmt.Errorf("unable to encode updateMessageExtendedMedia#5a73a98c: field peer is nil") + } + if err := u.Peer.Encode(b); err != nil { + return fmt.Errorf("unable to encode updateMessageExtendedMedia#5a73a98c: field peer: %w", err) + } + b.PutInt(u.MsgID) + if u.ExtendedMedia == nil { + return fmt.Errorf("unable to encode updateMessageExtendedMedia#5a73a98c: field extended_media is nil") + } + if err := u.ExtendedMedia.Encode(b); err != nil { + return fmt.Errorf("unable to encode updateMessageExtendedMedia#5a73a98c: field extended_media: %w", err) + } + return nil +} + +// Decode implements bin.Decoder. +func (u *UpdateMessageExtendedMedia) Decode(b *bin.Buffer) error { + if u == nil { + return fmt.Errorf("can't decode updateMessageExtendedMedia#5a73a98c to nil") + } + if err := b.ConsumeID(UpdateMessageExtendedMediaTypeID); err != nil { + return fmt.Errorf("unable to decode updateMessageExtendedMedia#5a73a98c: %w", err) + } + return u.DecodeBare(b) +} + +// DecodeBare implements bin.BareDecoder. +func (u *UpdateMessageExtendedMedia) DecodeBare(b *bin.Buffer) error { + if u == nil { + return fmt.Errorf("can't decode updateMessageExtendedMedia#5a73a98c to nil") + } + { + value, err := DecodePeer(b) + if err != nil { + return fmt.Errorf("unable to decode updateMessageExtendedMedia#5a73a98c: field peer: %w", err) + } + u.Peer = value + } + { + value, err := b.Int() + if err != nil { + return fmt.Errorf("unable to decode updateMessageExtendedMedia#5a73a98c: field msg_id: %w", err) + } + u.MsgID = value + } + { + value, err := DecodeMessageExtendedMedia(b) + if err != nil { + return fmt.Errorf("unable to decode updateMessageExtendedMedia#5a73a98c: field extended_media: %w", err) + } + u.ExtendedMedia = value + } + return nil +} + +// GetPeer returns value of Peer field. +func (u *UpdateMessageExtendedMedia) GetPeer() (value PeerClass) { + if u == nil { + return + } + return u.Peer +} + +// GetMsgID returns value of MsgID field. +func (u *UpdateMessageExtendedMedia) GetMsgID() (value int) { + if u == nil { + return + } + return u.MsgID +} + +// GetExtendedMedia returns value of ExtendedMedia field. +func (u *UpdateMessageExtendedMedia) GetExtendedMedia() (value MessageExtendedMediaClass) { + if u == nil { + return + } + return u.ExtendedMedia +} + // UpdateClassName is schema name of UpdateClass. const UpdateClassName = "Update" @@ -21173,6 +21371,7 @@ const UpdateClassName = "Update" // case *tg.UpdateRecentEmojiStatuses: // updateRecentEmojiStatuses#30f443db // case *tg.UpdateRecentReactions: // updateRecentReactions#6f7863f4 // case *tg.UpdateMoveStickerSetToTop: // updateMoveStickerSetToTop#86fccf85 +// case *tg.UpdateMessageExtendedMedia: // updateMessageExtendedMedia#5a73a98c // default: panic(v) // } type UpdateClass interface { @@ -21943,6 +22142,13 @@ func DecodeUpdate(buf *bin.Buffer) (UpdateClass, error) { return nil, fmt.Errorf("unable to decode UpdateClass: %w", err) } return &v, nil + case UpdateMessageExtendedMediaTypeID: + // Decoding updateMessageExtendedMedia#5a73a98c. + v := UpdateMessageExtendedMedia{} + if err := v.Decode(buf); err != nil { + return nil, fmt.Errorf("unable to decode UpdateClass: %w", err) + } + return &v, nil default: return nil, fmt.Errorf("unable to decode UpdateClass: %w", bin.NewUnexpectedID(id)) } diff --git a/tg/tl_update_slices_gen.go b/tg/tl_update_slices_gen.go index 2f639605b1..7b7c73c852 100644 --- a/tg/tl_update_slices_gen.go +++ b/tg/tl_update_slices_gen.go @@ -1312,6 +1312,19 @@ func (s UpdateClassArray) AsUpdateMoveStickerSetToTop() (to UpdateMoveStickerSet return to } +// AsUpdateMessageExtendedMedia returns copy with only UpdateMessageExtendedMedia constructors. +func (s UpdateClassArray) AsUpdateMessageExtendedMedia() (to UpdateMessageExtendedMediaArray) { + for _, elem := range s { + value, ok := elem.(*UpdateMessageExtendedMedia) + if !ok { + continue + } + to = append(to, *value) + } + + return to +} + // UpdateNewMessageArray is adapter for slice of UpdateNewMessage. type UpdateNewMessageArray []UpdateNewMessage @@ -9079,3 +9092,85 @@ func (s *UpdateMoveStickerSetToTopArray) Pop() (v UpdateMoveStickerSetToTop, ok return v, true } + +// UpdateMessageExtendedMediaArray is adapter for slice of UpdateMessageExtendedMedia. +type UpdateMessageExtendedMediaArray []UpdateMessageExtendedMedia + +// Sort sorts slice of UpdateMessageExtendedMedia. +func (s UpdateMessageExtendedMediaArray) Sort(less func(a, b UpdateMessageExtendedMedia) bool) UpdateMessageExtendedMediaArray { + sort.Slice(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// SortStable sorts slice of UpdateMessageExtendedMedia. +func (s UpdateMessageExtendedMediaArray) SortStable(less func(a, b UpdateMessageExtendedMedia) bool) UpdateMessageExtendedMediaArray { + sort.SliceStable(s, func(i, j int) bool { + return less(s[i], s[j]) + }) + return s +} + +// Retain filters in-place slice of UpdateMessageExtendedMedia. +func (s UpdateMessageExtendedMediaArray) Retain(keep func(x UpdateMessageExtendedMedia) bool) UpdateMessageExtendedMediaArray { + n := 0 + for _, x := range s { + if keep(x) { + s[n] = x + n++ + } + } + s = s[:n] + + return s +} + +// First returns first element of slice (if exists). +func (s UpdateMessageExtendedMediaArray) First() (v UpdateMessageExtendedMedia, ok bool) { + if len(s) < 1 { + return + } + return s[0], true +} + +// Last returns last element of slice (if exists). +func (s UpdateMessageExtendedMediaArray) Last() (v UpdateMessageExtendedMedia, ok bool) { + if len(s) < 1 { + return + } + return s[len(s)-1], true +} + +// PopFirst returns first element of slice (if exists) and deletes it. +func (s *UpdateMessageExtendedMediaArray) PopFirst() (v UpdateMessageExtendedMedia, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[0] + + // Delete by index from SliceTricks. + copy(a[0:], a[1:]) + var zero UpdateMessageExtendedMedia + a[len(a)-1] = zero + a = a[:len(a)-1] + *s = a + + return v, true +} + +// Pop returns last element of slice (if exists) and deletes it. +func (s *UpdateMessageExtendedMediaArray) Pop() (v UpdateMessageExtendedMedia, ok bool) { + if s == nil || len(*s) < 1 { + return + } + + a := *s + v = a[len(a)-1] + a = a[:len(a)-1] + *s = a + + return v, true +}