// Code generated by gotdgen, DO NOT EDIT. package tg import ( "context" "errors" "fmt" "sort" "strings" "go.uber.org/multierr" "go.mau.fi/mautrix-telegram/pkg/gotd/bin" "go.mau.fi/mautrix-telegram/pkg/gotd/tdjson" "go.mau.fi/mautrix-telegram/pkg/gotd/tdp" "go.mau.fi/mautrix-telegram/pkg/gotd/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{} ) // ContactsGetTopPeersRequest represents TL type `contacts.getTopPeers#973478b6`. // Get most used peers // // See https://core.telegram.org/method/contacts.getTopPeers for reference. type ContactsGetTopPeersRequest struct { // Flags, see TL conditional fields¹ // // Links: // 1) https://core.telegram.org/mtproto/TL-combinators#conditional-fields Flags bin.Fields // Users we've chatted most frequently with Correspondents bool // Most used bots BotsPm bool // Most used inline bots BotsInline bool // Most frequently called users PhoneCalls bool // Users to which the users often forwards messages to ForwardUsers bool // Chats to which the users often forwards messages to ForwardChats bool // Often-opened groups and supergroups Groups bool // Most frequently visited channels Channels bool // Most frequently used Main Mini Bot Apps¹. // // Links: // 1) https://core.telegram.org/api/bots/webapps#main-mini-apps BotsApp bool // Offset for pagination¹ // // Links: // 1) https://core.telegram.org/api/offsets Offset int // Maximum number of results to return, see pagination¹ // // Links: // 1) https://core.telegram.org/api/offsets Limit int // Hash used for caching, for more info click here¹ // // Links: // 1) https://core.telegram.org/api/offsets#hash-generation Hash int64 } // ContactsGetTopPeersRequestTypeID is TL type id of ContactsGetTopPeersRequest. const ContactsGetTopPeersRequestTypeID = 0x973478b6 // Ensuring interfaces in compile-time for ContactsGetTopPeersRequest. var ( _ bin.Encoder = &ContactsGetTopPeersRequest{} _ bin.Decoder = &ContactsGetTopPeersRequest{} _ bin.BareEncoder = &ContactsGetTopPeersRequest{} _ bin.BareDecoder = &ContactsGetTopPeersRequest{} ) func (g *ContactsGetTopPeersRequest) Zero() bool { if g == nil { return true } if !(g.Flags.Zero()) { return false } if !(g.Correspondents == false) { return false } if !(g.BotsPm == false) { return false } if !(g.BotsInline == false) { return false } if !(g.PhoneCalls == false) { return false } if !(g.ForwardUsers == false) { return false } if !(g.ForwardChats == false) { return false } if !(g.Groups == false) { return false } if !(g.Channels == false) { return false } if !(g.BotsApp == false) { return false } if !(g.Offset == 0) { return false } if !(g.Limit == 0) { return false } if !(g.Hash == 0) { return false } return true } // String implements fmt.Stringer. func (g *ContactsGetTopPeersRequest) String() string { if g == nil { return "ContactsGetTopPeersRequest(nil)" } type Alias ContactsGetTopPeersRequest return fmt.Sprintf("ContactsGetTopPeersRequest%+v", Alias(*g)) } // FillFrom fills ContactsGetTopPeersRequest from given interface. func (g *ContactsGetTopPeersRequest) FillFrom(from interface { GetCorrespondents() (value bool) GetBotsPm() (value bool) GetBotsInline() (value bool) GetPhoneCalls() (value bool) GetForwardUsers() (value bool) GetForwardChats() (value bool) GetGroups() (value bool) GetChannels() (value bool) GetBotsApp() (value bool) GetOffset() (value int) GetLimit() (value int) GetHash() (value int64) }) { g.Correspondents = from.GetCorrespondents() g.BotsPm = from.GetBotsPm() g.BotsInline = from.GetBotsInline() g.PhoneCalls = from.GetPhoneCalls() g.ForwardUsers = from.GetForwardUsers() g.ForwardChats = from.GetForwardChats() g.Groups = from.GetGroups() g.Channels = from.GetChannels() g.BotsApp = from.GetBotsApp() g.Offset = from.GetOffset() g.Limit = from.GetLimit() g.Hash = from.GetHash() } // TypeID returns type id in TL schema. // // See https://core.telegram.org/mtproto/TL-tl#remarks. func (*ContactsGetTopPeersRequest) TypeID() uint32 { return ContactsGetTopPeersRequestTypeID } // TypeName returns name of type in TL schema. func (*ContactsGetTopPeersRequest) TypeName() string { return "contacts.getTopPeers" } // TypeInfo returns info about TL type. func (g *ContactsGetTopPeersRequest) TypeInfo() tdp.Type { typ := tdp.Type{ Name: "contacts.getTopPeers", ID: ContactsGetTopPeersRequestTypeID, } if g == nil { typ.Null = true return typ } typ.Fields = []tdp.Field{ { Name: "Correspondents", SchemaName: "correspondents", Null: !g.Flags.Has(0), }, { Name: "BotsPm", SchemaName: "bots_pm", Null: !g.Flags.Has(1), }, { Name: "BotsInline", SchemaName: "bots_inline", Null: !g.Flags.Has(2), }, { Name: "PhoneCalls", SchemaName: "phone_calls", Null: !g.Flags.Has(3), }, { Name: "ForwardUsers", SchemaName: "forward_users", Null: !g.Flags.Has(4), }, { Name: "ForwardChats", SchemaName: "forward_chats", Null: !g.Flags.Has(5), }, { Name: "Groups", SchemaName: "groups", Null: !g.Flags.Has(10), }, { Name: "Channels", SchemaName: "channels", Null: !g.Flags.Has(15), }, { Name: "BotsApp", SchemaName: "bots_app", Null: !g.Flags.Has(16), }, { Name: "Offset", SchemaName: "offset", }, { Name: "Limit", SchemaName: "limit", }, { Name: "Hash", SchemaName: "hash", }, } return typ } // SetFlags sets flags for non-zero fields. func (g *ContactsGetTopPeersRequest) SetFlags() { if !(g.Correspondents == false) { g.Flags.Set(0) } if !(g.BotsPm == false) { g.Flags.Set(1) } if !(g.BotsInline == false) { g.Flags.Set(2) } if !(g.PhoneCalls == false) { g.Flags.Set(3) } if !(g.ForwardUsers == false) { g.Flags.Set(4) } if !(g.ForwardChats == false) { g.Flags.Set(5) } if !(g.Groups == false) { g.Flags.Set(10) } if !(g.Channels == false) { g.Flags.Set(15) } if !(g.BotsApp == false) { g.Flags.Set(16) } } // Encode implements bin.Encoder. func (g *ContactsGetTopPeersRequest) Encode(b *bin.Buffer) error { if g == nil { return fmt.Errorf("can't encode contacts.getTopPeers#973478b6 as nil") } b.PutID(ContactsGetTopPeersRequestTypeID) return g.EncodeBare(b) } // EncodeBare implements bin.BareEncoder. func (g *ContactsGetTopPeersRequest) EncodeBare(b *bin.Buffer) error { if g == nil { return fmt.Errorf("can't encode contacts.getTopPeers#973478b6 as nil") } g.SetFlags() if err := g.Flags.Encode(b); err != nil { return fmt.Errorf("unable to encode contacts.getTopPeers#973478b6: field flags: %w", err) } b.PutInt(g.Offset) b.PutInt(g.Limit) b.PutLong(g.Hash) return nil } // Decode implements bin.Decoder. func (g *ContactsGetTopPeersRequest) Decode(b *bin.Buffer) error { if g == nil { return fmt.Errorf("can't decode contacts.getTopPeers#973478b6 to nil") } if err := b.ConsumeID(ContactsGetTopPeersRequestTypeID); err != nil { return fmt.Errorf("unable to decode contacts.getTopPeers#973478b6: %w", err) } return g.DecodeBare(b) } // DecodeBare implements bin.BareDecoder. func (g *ContactsGetTopPeersRequest) DecodeBare(b *bin.Buffer) error { if g == nil { return fmt.Errorf("can't decode contacts.getTopPeers#973478b6 to nil") } { if err := g.Flags.Decode(b); err != nil { return fmt.Errorf("unable to decode contacts.getTopPeers#973478b6: field flags: %w", err) } } g.Correspondents = g.Flags.Has(0) g.BotsPm = g.Flags.Has(1) g.BotsInline = g.Flags.Has(2) g.PhoneCalls = g.Flags.Has(3) g.ForwardUsers = g.Flags.Has(4) g.ForwardChats = g.Flags.Has(5) g.Groups = g.Flags.Has(10) g.Channels = g.Flags.Has(15) g.BotsApp = g.Flags.Has(16) { value, err := b.Int() if err != nil { return fmt.Errorf("unable to decode contacts.getTopPeers#973478b6: field offset: %w", err) } g.Offset = value } { value, err := b.Int() if err != nil { return fmt.Errorf("unable to decode contacts.getTopPeers#973478b6: field limit: %w", err) } g.Limit = value } { value, err := b.Long() if err != nil { return fmt.Errorf("unable to decode contacts.getTopPeers#973478b6: field hash: %w", err) } g.Hash = value } return nil } // SetCorrespondents sets value of Correspondents conditional field. func (g *ContactsGetTopPeersRequest) SetCorrespondents(value bool) { if value { g.Flags.Set(0) g.Correspondents = true } else { g.Flags.Unset(0) g.Correspondents = false } } // GetCorrespondents returns value of Correspondents conditional field. func (g *ContactsGetTopPeersRequest) GetCorrespondents() (value bool) { if g == nil { return } return g.Flags.Has(0) } // SetBotsPm sets value of BotsPm conditional field. func (g *ContactsGetTopPeersRequest) SetBotsPm(value bool) { if value { g.Flags.Set(1) g.BotsPm = true } else { g.Flags.Unset(1) g.BotsPm = false } } // GetBotsPm returns value of BotsPm conditional field. func (g *ContactsGetTopPeersRequest) GetBotsPm() (value bool) { if g == nil { return } return g.Flags.Has(1) } // SetBotsInline sets value of BotsInline conditional field. func (g *ContactsGetTopPeersRequest) SetBotsInline(value bool) { if value { g.Flags.Set(2) g.BotsInline = true } else { g.Flags.Unset(2) g.BotsInline = false } } // GetBotsInline returns value of BotsInline conditional field. func (g *ContactsGetTopPeersRequest) GetBotsInline() (value bool) { if g == nil { return } return g.Flags.Has(2) } // SetPhoneCalls sets value of PhoneCalls conditional field. func (g *ContactsGetTopPeersRequest) SetPhoneCalls(value bool) { if value { g.Flags.Set(3) g.PhoneCalls = true } else { g.Flags.Unset(3) g.PhoneCalls = false } } // GetPhoneCalls returns value of PhoneCalls conditional field. func (g *ContactsGetTopPeersRequest) GetPhoneCalls() (value bool) { if g == nil { return } return g.Flags.Has(3) } // SetForwardUsers sets value of ForwardUsers conditional field. func (g *ContactsGetTopPeersRequest) SetForwardUsers(value bool) { if value { g.Flags.Set(4) g.ForwardUsers = true } else { g.Flags.Unset(4) g.ForwardUsers = false } } // GetForwardUsers returns value of ForwardUsers conditional field. func (g *ContactsGetTopPeersRequest) GetForwardUsers() (value bool) { if g == nil { return } return g.Flags.Has(4) } // SetForwardChats sets value of ForwardChats conditional field. func (g *ContactsGetTopPeersRequest) SetForwardChats(value bool) { if value { g.Flags.Set(5) g.ForwardChats = true } else { g.Flags.Unset(5) g.ForwardChats = false } } // GetForwardChats returns value of ForwardChats conditional field. func (g *ContactsGetTopPeersRequest) GetForwardChats() (value bool) { if g == nil { return } return g.Flags.Has(5) } // SetGroups sets value of Groups conditional field. func (g *ContactsGetTopPeersRequest) SetGroups(value bool) { if value { g.Flags.Set(10) g.Groups = true } else { g.Flags.Unset(10) g.Groups = false } } // GetGroups returns value of Groups conditional field. func (g *ContactsGetTopPeersRequest) GetGroups() (value bool) { if g == nil { return } return g.Flags.Has(10) } // SetChannels sets value of Channels conditional field. func (g *ContactsGetTopPeersRequest) SetChannels(value bool) { if value { g.Flags.Set(15) g.Channels = true } else { g.Flags.Unset(15) g.Channels = false } } // GetChannels returns value of Channels conditional field. func (g *ContactsGetTopPeersRequest) GetChannels() (value bool) { if g == nil { return } return g.Flags.Has(15) } // SetBotsApp sets value of BotsApp conditional field. func (g *ContactsGetTopPeersRequest) SetBotsApp(value bool) { if value { g.Flags.Set(16) g.BotsApp = true } else { g.Flags.Unset(16) g.BotsApp = false } } // GetBotsApp returns value of BotsApp conditional field. func (g *ContactsGetTopPeersRequest) GetBotsApp() (value bool) { if g == nil { return } return g.Flags.Has(16) } // GetOffset returns value of Offset field. func (g *ContactsGetTopPeersRequest) GetOffset() (value int) { if g == nil { return } return g.Offset } // GetLimit returns value of Limit field. func (g *ContactsGetTopPeersRequest) GetLimit() (value int) { if g == nil { return } return g.Limit } // GetHash returns value of Hash field. func (g *ContactsGetTopPeersRequest) GetHash() (value int64) { if g == nil { return } return g.Hash } // ContactsGetTopPeers invokes method contacts.getTopPeers#973478b6 returning error if any. // Get most used peers // // Possible errors: // // 400 TYPES_EMPTY: No top peer type was provided. // // See https://core.telegram.org/method/contacts.getTopPeers for reference. func (c *Client) ContactsGetTopPeers(ctx context.Context, request *ContactsGetTopPeersRequest) (ContactsTopPeersClass, error) { var result ContactsTopPeersBox if err := c.rpc.Invoke(ctx, request, &result); err != nil { return nil, err } return result.TopPeers, nil }