7a04f298d2
- update to latest telegram layer - remove some references to fields in tg.Entities that don't exist in the schema - originally added here: https://github.com/beeper/td/commit/820929062a2ba0104397bc01235ab58a9cff780e - referenced here - https://github.com/mautrix/telegramgo/commit/124f0967ed195b5a380c9bd02e170ada9710dde3 - https://github.com/mautrix/telegramgo/commit/4205047aab2e0639217148b5d125bfaab668bd8e
1072 lines
26 KiB
Go
Generated
1072 lines
26 KiB
Go
Generated
// 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{}
|
|
)
|
|
|
|
// RequestedPeerUser represents TL type `requestedPeerUser#d62ff46a`.
|
|
// Info about a user, shared by a user with the currently logged in bot using messages
|
|
// sendBotRequestedPeer¹.
|
|
// All fields except the ID are optional, and will be populated if present on the chosen
|
|
// user, according to the parameters of the requesting inputKeyboardButtonRequestPeer¹.
|
|
//
|
|
// Links:
|
|
// 1. https://core.telegram.org/method/messages.sendBotRequestedPeer
|
|
// 2. https://core.telegram.org/constructor/inputKeyboardButtonRequestPeer
|
|
//
|
|
// See https://core.telegram.org/constructor/requestedPeerUser for reference.
|
|
type RequestedPeerUser struct {
|
|
// Flags, see TL conditional fields¹
|
|
//
|
|
// Links:
|
|
// 1) https://core.telegram.org/mtproto/TL-combinators#conditional-fields
|
|
Flags bin.Fields
|
|
// User ID.
|
|
UserID int64
|
|
// First name.
|
|
//
|
|
// Use SetFirstName and GetFirstName helpers.
|
|
FirstName string
|
|
// Last name.
|
|
//
|
|
// Use SetLastName and GetLastName helpers.
|
|
LastName string
|
|
// Username.
|
|
//
|
|
// Use SetUsername and GetUsername helpers.
|
|
Username string
|
|
// Profile photo.
|
|
//
|
|
// Use SetPhoto and GetPhoto helpers.
|
|
Photo PhotoClass
|
|
}
|
|
|
|
// RequestedPeerUserTypeID is TL type id of RequestedPeerUser.
|
|
const RequestedPeerUserTypeID = 0xd62ff46a
|
|
|
|
// construct implements constructor of RequestedPeerClass.
|
|
func (r RequestedPeerUser) construct() RequestedPeerClass { return &r }
|
|
|
|
// Ensuring interfaces in compile-time for RequestedPeerUser.
|
|
var (
|
|
_ bin.Encoder = &RequestedPeerUser{}
|
|
_ bin.Decoder = &RequestedPeerUser{}
|
|
_ bin.BareEncoder = &RequestedPeerUser{}
|
|
_ bin.BareDecoder = &RequestedPeerUser{}
|
|
|
|
_ RequestedPeerClass = &RequestedPeerUser{}
|
|
)
|
|
|
|
func (r *RequestedPeerUser) Zero() bool {
|
|
if r == nil {
|
|
return true
|
|
}
|
|
if !(r.Flags.Zero()) {
|
|
return false
|
|
}
|
|
if !(r.UserID == 0) {
|
|
return false
|
|
}
|
|
if !(r.FirstName == "") {
|
|
return false
|
|
}
|
|
if !(r.LastName == "") {
|
|
return false
|
|
}
|
|
if !(r.Username == "") {
|
|
return false
|
|
}
|
|
if !(r.Photo == nil) {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
// String implements fmt.Stringer.
|
|
func (r *RequestedPeerUser) String() string {
|
|
if r == nil {
|
|
return "RequestedPeerUser(nil)"
|
|
}
|
|
type Alias RequestedPeerUser
|
|
return fmt.Sprintf("RequestedPeerUser%+v", Alias(*r))
|
|
}
|
|
|
|
// FillFrom fills RequestedPeerUser from given interface.
|
|
func (r *RequestedPeerUser) FillFrom(from interface {
|
|
GetUserID() (value int64)
|
|
GetFirstName() (value string, ok bool)
|
|
GetLastName() (value string, ok bool)
|
|
GetUsername() (value string, ok bool)
|
|
GetPhoto() (value PhotoClass, ok bool)
|
|
}) {
|
|
r.UserID = from.GetUserID()
|
|
if val, ok := from.GetFirstName(); ok {
|
|
r.FirstName = val
|
|
}
|
|
|
|
if val, ok := from.GetLastName(); ok {
|
|
r.LastName = val
|
|
}
|
|
|
|
if val, ok := from.GetUsername(); ok {
|
|
r.Username = val
|
|
}
|
|
|
|
if val, ok := from.GetPhoto(); ok {
|
|
r.Photo = val
|
|
}
|
|
|
|
}
|
|
|
|
// TypeID returns type id in TL schema.
|
|
//
|
|
// See https://core.telegram.org/mtproto/TL-tl#remarks.
|
|
func (*RequestedPeerUser) TypeID() uint32 {
|
|
return RequestedPeerUserTypeID
|
|
}
|
|
|
|
// TypeName returns name of type in TL schema.
|
|
func (*RequestedPeerUser) TypeName() string {
|
|
return "requestedPeerUser"
|
|
}
|
|
|
|
// TypeInfo returns info about TL type.
|
|
func (r *RequestedPeerUser) TypeInfo() tdp.Type {
|
|
typ := tdp.Type{
|
|
Name: "requestedPeerUser",
|
|
ID: RequestedPeerUserTypeID,
|
|
}
|
|
if r == nil {
|
|
typ.Null = true
|
|
return typ
|
|
}
|
|
typ.Fields = []tdp.Field{
|
|
{
|
|
Name: "UserID",
|
|
SchemaName: "user_id",
|
|
},
|
|
{
|
|
Name: "FirstName",
|
|
SchemaName: "first_name",
|
|
Null: !r.Flags.Has(0),
|
|
},
|
|
{
|
|
Name: "LastName",
|
|
SchemaName: "last_name",
|
|
Null: !r.Flags.Has(0),
|
|
},
|
|
{
|
|
Name: "Username",
|
|
SchemaName: "username",
|
|
Null: !r.Flags.Has(1),
|
|
},
|
|
{
|
|
Name: "Photo",
|
|
SchemaName: "photo",
|
|
Null: !r.Flags.Has(2),
|
|
},
|
|
}
|
|
return typ
|
|
}
|
|
|
|
// SetFlags sets flags for non-zero fields.
|
|
func (r *RequestedPeerUser) SetFlags() {
|
|
if !(r.FirstName == "") {
|
|
r.Flags.Set(0)
|
|
}
|
|
if !(r.LastName == "") {
|
|
r.Flags.Set(0)
|
|
}
|
|
if !(r.Username == "") {
|
|
r.Flags.Set(1)
|
|
}
|
|
if !(r.Photo == nil) {
|
|
r.Flags.Set(2)
|
|
}
|
|
}
|
|
|
|
// Encode implements bin.Encoder.
|
|
func (r *RequestedPeerUser) Encode(b *bin.Buffer) error {
|
|
if r == nil {
|
|
return fmt.Errorf("can't encode requestedPeerUser#d62ff46a as nil")
|
|
}
|
|
b.PutID(RequestedPeerUserTypeID)
|
|
return r.EncodeBare(b)
|
|
}
|
|
|
|
// EncodeBare implements bin.BareEncoder.
|
|
func (r *RequestedPeerUser) EncodeBare(b *bin.Buffer) error {
|
|
if r == nil {
|
|
return fmt.Errorf("can't encode requestedPeerUser#d62ff46a as nil")
|
|
}
|
|
r.SetFlags()
|
|
if err := r.Flags.Encode(b); err != nil {
|
|
return fmt.Errorf("unable to encode requestedPeerUser#d62ff46a: field flags: %w", err)
|
|
}
|
|
b.PutLong(r.UserID)
|
|
if r.Flags.Has(0) {
|
|
b.PutString(r.FirstName)
|
|
}
|
|
if r.Flags.Has(0) {
|
|
b.PutString(r.LastName)
|
|
}
|
|
if r.Flags.Has(1) {
|
|
b.PutString(r.Username)
|
|
}
|
|
if r.Flags.Has(2) {
|
|
if r.Photo == nil {
|
|
return fmt.Errorf("unable to encode requestedPeerUser#d62ff46a: field photo is nil")
|
|
}
|
|
if err := r.Photo.Encode(b); err != nil {
|
|
return fmt.Errorf("unable to encode requestedPeerUser#d62ff46a: field photo: %w", err)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Decode implements bin.Decoder.
|
|
func (r *RequestedPeerUser) Decode(b *bin.Buffer) error {
|
|
if r == nil {
|
|
return fmt.Errorf("can't decode requestedPeerUser#d62ff46a to nil")
|
|
}
|
|
if err := b.ConsumeID(RequestedPeerUserTypeID); err != nil {
|
|
return fmt.Errorf("unable to decode requestedPeerUser#d62ff46a: %w", err)
|
|
}
|
|
return r.DecodeBare(b)
|
|
}
|
|
|
|
// DecodeBare implements bin.BareDecoder.
|
|
func (r *RequestedPeerUser) DecodeBare(b *bin.Buffer) error {
|
|
if r == nil {
|
|
return fmt.Errorf("can't decode requestedPeerUser#d62ff46a to nil")
|
|
}
|
|
{
|
|
if err := r.Flags.Decode(b); err != nil {
|
|
return fmt.Errorf("unable to decode requestedPeerUser#d62ff46a: field flags: %w", err)
|
|
}
|
|
}
|
|
{
|
|
value, err := b.Long()
|
|
if err != nil {
|
|
return fmt.Errorf("unable to decode requestedPeerUser#d62ff46a: field user_id: %w", err)
|
|
}
|
|
r.UserID = value
|
|
}
|
|
if r.Flags.Has(0) {
|
|
value, err := b.String()
|
|
if err != nil {
|
|
return fmt.Errorf("unable to decode requestedPeerUser#d62ff46a: field first_name: %w", err)
|
|
}
|
|
r.FirstName = value
|
|
}
|
|
if r.Flags.Has(0) {
|
|
value, err := b.String()
|
|
if err != nil {
|
|
return fmt.Errorf("unable to decode requestedPeerUser#d62ff46a: field last_name: %w", err)
|
|
}
|
|
r.LastName = value
|
|
}
|
|
if r.Flags.Has(1) {
|
|
value, err := b.String()
|
|
if err != nil {
|
|
return fmt.Errorf("unable to decode requestedPeerUser#d62ff46a: field username: %w", err)
|
|
}
|
|
r.Username = value
|
|
}
|
|
if r.Flags.Has(2) {
|
|
value, err := DecodePhoto(b)
|
|
if err != nil {
|
|
return fmt.Errorf("unable to decode requestedPeerUser#d62ff46a: field photo: %w", err)
|
|
}
|
|
r.Photo = value
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetUserID returns value of UserID field.
|
|
func (r *RequestedPeerUser) GetUserID() (value int64) {
|
|
if r == nil {
|
|
return
|
|
}
|
|
return r.UserID
|
|
}
|
|
|
|
// SetFirstName sets value of FirstName conditional field.
|
|
func (r *RequestedPeerUser) SetFirstName(value string) {
|
|
r.Flags.Set(0)
|
|
r.FirstName = value
|
|
}
|
|
|
|
// GetFirstName returns value of FirstName conditional field and
|
|
// boolean which is true if field was set.
|
|
func (r *RequestedPeerUser) GetFirstName() (value string, ok bool) {
|
|
if r == nil {
|
|
return
|
|
}
|
|
if !r.Flags.Has(0) {
|
|
return value, false
|
|
}
|
|
return r.FirstName, true
|
|
}
|
|
|
|
// SetLastName sets value of LastName conditional field.
|
|
func (r *RequestedPeerUser) SetLastName(value string) {
|
|
r.Flags.Set(0)
|
|
r.LastName = value
|
|
}
|
|
|
|
// GetLastName returns value of LastName conditional field and
|
|
// boolean which is true if field was set.
|
|
func (r *RequestedPeerUser) GetLastName() (value string, ok bool) {
|
|
if r == nil {
|
|
return
|
|
}
|
|
if !r.Flags.Has(0) {
|
|
return value, false
|
|
}
|
|
return r.LastName, true
|
|
}
|
|
|
|
// SetUsername sets value of Username conditional field.
|
|
func (r *RequestedPeerUser) SetUsername(value string) {
|
|
r.Flags.Set(1)
|
|
r.Username = value
|
|
}
|
|
|
|
// GetUsername returns value of Username conditional field and
|
|
// boolean which is true if field was set.
|
|
func (r *RequestedPeerUser) GetUsername() (value string, ok bool) {
|
|
if r == nil {
|
|
return
|
|
}
|
|
if !r.Flags.Has(1) {
|
|
return value, false
|
|
}
|
|
return r.Username, true
|
|
}
|
|
|
|
// SetPhoto sets value of Photo conditional field.
|
|
func (r *RequestedPeerUser) SetPhoto(value PhotoClass) {
|
|
r.Flags.Set(2)
|
|
r.Photo = value
|
|
}
|
|
|
|
// GetPhoto returns value of Photo conditional field and
|
|
// boolean which is true if field was set.
|
|
func (r *RequestedPeerUser) GetPhoto() (value PhotoClass, ok bool) {
|
|
if r == nil {
|
|
return
|
|
}
|
|
if !r.Flags.Has(2) {
|
|
return value, false
|
|
}
|
|
return r.Photo, true
|
|
}
|
|
|
|
// RequestedPeerChat represents TL type `requestedPeerChat#7307544f`.
|
|
// Info about a chat¹, shared by a user with the currently logged in bot using messages
|
|
// sendBotRequestedPeer².
|
|
// All fields except the ID are optional, and will be populated if present on the chosen
|
|
// chat, according to the parameters of the requesting inputKeyboardButtonRequestPeer¹.
|
|
//
|
|
// Links:
|
|
// 1. https://core.telegram.org/api/channel
|
|
// 2. https://core.telegram.org/method/messages.sendBotRequestedPeer
|
|
// 3. https://core.telegram.org/constructor/inputKeyboardButtonRequestPeer
|
|
//
|
|
// See https://core.telegram.org/constructor/requestedPeerChat for reference.
|
|
type RequestedPeerChat struct {
|
|
// Flags, see TL conditional fields¹
|
|
//
|
|
// Links:
|
|
// 1) https://core.telegram.org/mtproto/TL-combinators#conditional-fields
|
|
Flags bin.Fields
|
|
// Chat ID.
|
|
ChatID int64
|
|
// Chat title.
|
|
//
|
|
// Use SetTitle and GetTitle helpers.
|
|
Title string
|
|
// Chat photo.
|
|
//
|
|
// Use SetPhoto and GetPhoto helpers.
|
|
Photo PhotoClass
|
|
}
|
|
|
|
// RequestedPeerChatTypeID is TL type id of RequestedPeerChat.
|
|
const RequestedPeerChatTypeID = 0x7307544f
|
|
|
|
// construct implements constructor of RequestedPeerClass.
|
|
func (r RequestedPeerChat) construct() RequestedPeerClass { return &r }
|
|
|
|
// Ensuring interfaces in compile-time for RequestedPeerChat.
|
|
var (
|
|
_ bin.Encoder = &RequestedPeerChat{}
|
|
_ bin.Decoder = &RequestedPeerChat{}
|
|
_ bin.BareEncoder = &RequestedPeerChat{}
|
|
_ bin.BareDecoder = &RequestedPeerChat{}
|
|
|
|
_ RequestedPeerClass = &RequestedPeerChat{}
|
|
)
|
|
|
|
func (r *RequestedPeerChat) Zero() bool {
|
|
if r == nil {
|
|
return true
|
|
}
|
|
if !(r.Flags.Zero()) {
|
|
return false
|
|
}
|
|
if !(r.ChatID == 0) {
|
|
return false
|
|
}
|
|
if !(r.Title == "") {
|
|
return false
|
|
}
|
|
if !(r.Photo == nil) {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
// String implements fmt.Stringer.
|
|
func (r *RequestedPeerChat) String() string {
|
|
if r == nil {
|
|
return "RequestedPeerChat(nil)"
|
|
}
|
|
type Alias RequestedPeerChat
|
|
return fmt.Sprintf("RequestedPeerChat%+v", Alias(*r))
|
|
}
|
|
|
|
// FillFrom fills RequestedPeerChat from given interface.
|
|
func (r *RequestedPeerChat) FillFrom(from interface {
|
|
GetChatID() (value int64)
|
|
GetTitle() (value string, ok bool)
|
|
GetPhoto() (value PhotoClass, ok bool)
|
|
}) {
|
|
r.ChatID = from.GetChatID()
|
|
if val, ok := from.GetTitle(); ok {
|
|
r.Title = val
|
|
}
|
|
|
|
if val, ok := from.GetPhoto(); ok {
|
|
r.Photo = val
|
|
}
|
|
|
|
}
|
|
|
|
// TypeID returns type id in TL schema.
|
|
//
|
|
// See https://core.telegram.org/mtproto/TL-tl#remarks.
|
|
func (*RequestedPeerChat) TypeID() uint32 {
|
|
return RequestedPeerChatTypeID
|
|
}
|
|
|
|
// TypeName returns name of type in TL schema.
|
|
func (*RequestedPeerChat) TypeName() string {
|
|
return "requestedPeerChat"
|
|
}
|
|
|
|
// TypeInfo returns info about TL type.
|
|
func (r *RequestedPeerChat) TypeInfo() tdp.Type {
|
|
typ := tdp.Type{
|
|
Name: "requestedPeerChat",
|
|
ID: RequestedPeerChatTypeID,
|
|
}
|
|
if r == nil {
|
|
typ.Null = true
|
|
return typ
|
|
}
|
|
typ.Fields = []tdp.Field{
|
|
{
|
|
Name: "ChatID",
|
|
SchemaName: "chat_id",
|
|
},
|
|
{
|
|
Name: "Title",
|
|
SchemaName: "title",
|
|
Null: !r.Flags.Has(0),
|
|
},
|
|
{
|
|
Name: "Photo",
|
|
SchemaName: "photo",
|
|
Null: !r.Flags.Has(2),
|
|
},
|
|
}
|
|
return typ
|
|
}
|
|
|
|
// SetFlags sets flags for non-zero fields.
|
|
func (r *RequestedPeerChat) SetFlags() {
|
|
if !(r.Title == "") {
|
|
r.Flags.Set(0)
|
|
}
|
|
if !(r.Photo == nil) {
|
|
r.Flags.Set(2)
|
|
}
|
|
}
|
|
|
|
// Encode implements bin.Encoder.
|
|
func (r *RequestedPeerChat) Encode(b *bin.Buffer) error {
|
|
if r == nil {
|
|
return fmt.Errorf("can't encode requestedPeerChat#7307544f as nil")
|
|
}
|
|
b.PutID(RequestedPeerChatTypeID)
|
|
return r.EncodeBare(b)
|
|
}
|
|
|
|
// EncodeBare implements bin.BareEncoder.
|
|
func (r *RequestedPeerChat) EncodeBare(b *bin.Buffer) error {
|
|
if r == nil {
|
|
return fmt.Errorf("can't encode requestedPeerChat#7307544f as nil")
|
|
}
|
|
r.SetFlags()
|
|
if err := r.Flags.Encode(b); err != nil {
|
|
return fmt.Errorf("unable to encode requestedPeerChat#7307544f: field flags: %w", err)
|
|
}
|
|
b.PutLong(r.ChatID)
|
|
if r.Flags.Has(0) {
|
|
b.PutString(r.Title)
|
|
}
|
|
if r.Flags.Has(2) {
|
|
if r.Photo == nil {
|
|
return fmt.Errorf("unable to encode requestedPeerChat#7307544f: field photo is nil")
|
|
}
|
|
if err := r.Photo.Encode(b); err != nil {
|
|
return fmt.Errorf("unable to encode requestedPeerChat#7307544f: field photo: %w", err)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Decode implements bin.Decoder.
|
|
func (r *RequestedPeerChat) Decode(b *bin.Buffer) error {
|
|
if r == nil {
|
|
return fmt.Errorf("can't decode requestedPeerChat#7307544f to nil")
|
|
}
|
|
if err := b.ConsumeID(RequestedPeerChatTypeID); err != nil {
|
|
return fmt.Errorf("unable to decode requestedPeerChat#7307544f: %w", err)
|
|
}
|
|
return r.DecodeBare(b)
|
|
}
|
|
|
|
// DecodeBare implements bin.BareDecoder.
|
|
func (r *RequestedPeerChat) DecodeBare(b *bin.Buffer) error {
|
|
if r == nil {
|
|
return fmt.Errorf("can't decode requestedPeerChat#7307544f to nil")
|
|
}
|
|
{
|
|
if err := r.Flags.Decode(b); err != nil {
|
|
return fmt.Errorf("unable to decode requestedPeerChat#7307544f: field flags: %w", err)
|
|
}
|
|
}
|
|
{
|
|
value, err := b.Long()
|
|
if err != nil {
|
|
return fmt.Errorf("unable to decode requestedPeerChat#7307544f: field chat_id: %w", err)
|
|
}
|
|
r.ChatID = value
|
|
}
|
|
if r.Flags.Has(0) {
|
|
value, err := b.String()
|
|
if err != nil {
|
|
return fmt.Errorf("unable to decode requestedPeerChat#7307544f: field title: %w", err)
|
|
}
|
|
r.Title = value
|
|
}
|
|
if r.Flags.Has(2) {
|
|
value, err := DecodePhoto(b)
|
|
if err != nil {
|
|
return fmt.Errorf("unable to decode requestedPeerChat#7307544f: field photo: %w", err)
|
|
}
|
|
r.Photo = value
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetChatID returns value of ChatID field.
|
|
func (r *RequestedPeerChat) GetChatID() (value int64) {
|
|
if r == nil {
|
|
return
|
|
}
|
|
return r.ChatID
|
|
}
|
|
|
|
// SetTitle sets value of Title conditional field.
|
|
func (r *RequestedPeerChat) SetTitle(value string) {
|
|
r.Flags.Set(0)
|
|
r.Title = value
|
|
}
|
|
|
|
// GetTitle returns value of Title conditional field and
|
|
// boolean which is true if field was set.
|
|
func (r *RequestedPeerChat) GetTitle() (value string, ok bool) {
|
|
if r == nil {
|
|
return
|
|
}
|
|
if !r.Flags.Has(0) {
|
|
return value, false
|
|
}
|
|
return r.Title, true
|
|
}
|
|
|
|
// SetPhoto sets value of Photo conditional field.
|
|
func (r *RequestedPeerChat) SetPhoto(value PhotoClass) {
|
|
r.Flags.Set(2)
|
|
r.Photo = value
|
|
}
|
|
|
|
// GetPhoto returns value of Photo conditional field and
|
|
// boolean which is true if field was set.
|
|
func (r *RequestedPeerChat) GetPhoto() (value PhotoClass, ok bool) {
|
|
if r == nil {
|
|
return
|
|
}
|
|
if !r.Flags.Has(2) {
|
|
return value, false
|
|
}
|
|
return r.Photo, true
|
|
}
|
|
|
|
// RequestedPeerChannel represents TL type `requestedPeerChannel#8ba403e4`.
|
|
// Info about a channel/supergroup¹, shared by a user with the currently logged in bot
|
|
// using messages.sendBotRequestedPeer².
|
|
// All fields except the ID are optional, and will be populated if present on the chosen
|
|
// channel/supergroup, according to the parameters of the requesting
|
|
// inputKeyboardButtonRequestPeer¹.
|
|
//
|
|
// Links:
|
|
// 1. https://core.telegram.org/api/channel
|
|
// 2. https://core.telegram.org/method/messages.sendBotRequestedPeer
|
|
// 3. https://core.telegram.org/constructor/inputKeyboardButtonRequestPeer
|
|
//
|
|
// See https://core.telegram.org/constructor/requestedPeerChannel for reference.
|
|
type RequestedPeerChannel struct {
|
|
// Flags, see TL conditional fields¹
|
|
//
|
|
// Links:
|
|
// 1) https://core.telegram.org/mtproto/TL-combinators#conditional-fields
|
|
Flags bin.Fields
|
|
// Channel/supergroup ID.
|
|
ChannelID int64
|
|
// Channel/supergroup title.
|
|
//
|
|
// Use SetTitle and GetTitle helpers.
|
|
Title string
|
|
// Channel/supergroup username.
|
|
//
|
|
// Use SetUsername and GetUsername helpers.
|
|
Username string
|
|
// Channel/supergroup photo.
|
|
//
|
|
// Use SetPhoto and GetPhoto helpers.
|
|
Photo PhotoClass
|
|
}
|
|
|
|
// RequestedPeerChannelTypeID is TL type id of RequestedPeerChannel.
|
|
const RequestedPeerChannelTypeID = 0x8ba403e4
|
|
|
|
// construct implements constructor of RequestedPeerClass.
|
|
func (r RequestedPeerChannel) construct() RequestedPeerClass { return &r }
|
|
|
|
// Ensuring interfaces in compile-time for RequestedPeerChannel.
|
|
var (
|
|
_ bin.Encoder = &RequestedPeerChannel{}
|
|
_ bin.Decoder = &RequestedPeerChannel{}
|
|
_ bin.BareEncoder = &RequestedPeerChannel{}
|
|
_ bin.BareDecoder = &RequestedPeerChannel{}
|
|
|
|
_ RequestedPeerClass = &RequestedPeerChannel{}
|
|
)
|
|
|
|
func (r *RequestedPeerChannel) Zero() bool {
|
|
if r == nil {
|
|
return true
|
|
}
|
|
if !(r.Flags.Zero()) {
|
|
return false
|
|
}
|
|
if !(r.ChannelID == 0) {
|
|
return false
|
|
}
|
|
if !(r.Title == "") {
|
|
return false
|
|
}
|
|
if !(r.Username == "") {
|
|
return false
|
|
}
|
|
if !(r.Photo == nil) {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
// String implements fmt.Stringer.
|
|
func (r *RequestedPeerChannel) String() string {
|
|
if r == nil {
|
|
return "RequestedPeerChannel(nil)"
|
|
}
|
|
type Alias RequestedPeerChannel
|
|
return fmt.Sprintf("RequestedPeerChannel%+v", Alias(*r))
|
|
}
|
|
|
|
// FillFrom fills RequestedPeerChannel from given interface.
|
|
func (r *RequestedPeerChannel) FillFrom(from interface {
|
|
GetChannelID() (value int64)
|
|
GetTitle() (value string, ok bool)
|
|
GetUsername() (value string, ok bool)
|
|
GetPhoto() (value PhotoClass, ok bool)
|
|
}) {
|
|
r.ChannelID = from.GetChannelID()
|
|
if val, ok := from.GetTitle(); ok {
|
|
r.Title = val
|
|
}
|
|
|
|
if val, ok := from.GetUsername(); ok {
|
|
r.Username = val
|
|
}
|
|
|
|
if val, ok := from.GetPhoto(); ok {
|
|
r.Photo = val
|
|
}
|
|
|
|
}
|
|
|
|
// TypeID returns type id in TL schema.
|
|
//
|
|
// See https://core.telegram.org/mtproto/TL-tl#remarks.
|
|
func (*RequestedPeerChannel) TypeID() uint32 {
|
|
return RequestedPeerChannelTypeID
|
|
}
|
|
|
|
// TypeName returns name of type in TL schema.
|
|
func (*RequestedPeerChannel) TypeName() string {
|
|
return "requestedPeerChannel"
|
|
}
|
|
|
|
// TypeInfo returns info about TL type.
|
|
func (r *RequestedPeerChannel) TypeInfo() tdp.Type {
|
|
typ := tdp.Type{
|
|
Name: "requestedPeerChannel",
|
|
ID: RequestedPeerChannelTypeID,
|
|
}
|
|
if r == nil {
|
|
typ.Null = true
|
|
return typ
|
|
}
|
|
typ.Fields = []tdp.Field{
|
|
{
|
|
Name: "ChannelID",
|
|
SchemaName: "channel_id",
|
|
},
|
|
{
|
|
Name: "Title",
|
|
SchemaName: "title",
|
|
Null: !r.Flags.Has(0),
|
|
},
|
|
{
|
|
Name: "Username",
|
|
SchemaName: "username",
|
|
Null: !r.Flags.Has(1),
|
|
},
|
|
{
|
|
Name: "Photo",
|
|
SchemaName: "photo",
|
|
Null: !r.Flags.Has(2),
|
|
},
|
|
}
|
|
return typ
|
|
}
|
|
|
|
// SetFlags sets flags for non-zero fields.
|
|
func (r *RequestedPeerChannel) SetFlags() {
|
|
if !(r.Title == "") {
|
|
r.Flags.Set(0)
|
|
}
|
|
if !(r.Username == "") {
|
|
r.Flags.Set(1)
|
|
}
|
|
if !(r.Photo == nil) {
|
|
r.Flags.Set(2)
|
|
}
|
|
}
|
|
|
|
// Encode implements bin.Encoder.
|
|
func (r *RequestedPeerChannel) Encode(b *bin.Buffer) error {
|
|
if r == nil {
|
|
return fmt.Errorf("can't encode requestedPeerChannel#8ba403e4 as nil")
|
|
}
|
|
b.PutID(RequestedPeerChannelTypeID)
|
|
return r.EncodeBare(b)
|
|
}
|
|
|
|
// EncodeBare implements bin.BareEncoder.
|
|
func (r *RequestedPeerChannel) EncodeBare(b *bin.Buffer) error {
|
|
if r == nil {
|
|
return fmt.Errorf("can't encode requestedPeerChannel#8ba403e4 as nil")
|
|
}
|
|
r.SetFlags()
|
|
if err := r.Flags.Encode(b); err != nil {
|
|
return fmt.Errorf("unable to encode requestedPeerChannel#8ba403e4: field flags: %w", err)
|
|
}
|
|
b.PutLong(r.ChannelID)
|
|
if r.Flags.Has(0) {
|
|
b.PutString(r.Title)
|
|
}
|
|
if r.Flags.Has(1) {
|
|
b.PutString(r.Username)
|
|
}
|
|
if r.Flags.Has(2) {
|
|
if r.Photo == nil {
|
|
return fmt.Errorf("unable to encode requestedPeerChannel#8ba403e4: field photo is nil")
|
|
}
|
|
if err := r.Photo.Encode(b); err != nil {
|
|
return fmt.Errorf("unable to encode requestedPeerChannel#8ba403e4: field photo: %w", err)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Decode implements bin.Decoder.
|
|
func (r *RequestedPeerChannel) Decode(b *bin.Buffer) error {
|
|
if r == nil {
|
|
return fmt.Errorf("can't decode requestedPeerChannel#8ba403e4 to nil")
|
|
}
|
|
if err := b.ConsumeID(RequestedPeerChannelTypeID); err != nil {
|
|
return fmt.Errorf("unable to decode requestedPeerChannel#8ba403e4: %w", err)
|
|
}
|
|
return r.DecodeBare(b)
|
|
}
|
|
|
|
// DecodeBare implements bin.BareDecoder.
|
|
func (r *RequestedPeerChannel) DecodeBare(b *bin.Buffer) error {
|
|
if r == nil {
|
|
return fmt.Errorf("can't decode requestedPeerChannel#8ba403e4 to nil")
|
|
}
|
|
{
|
|
if err := r.Flags.Decode(b); err != nil {
|
|
return fmt.Errorf("unable to decode requestedPeerChannel#8ba403e4: field flags: %w", err)
|
|
}
|
|
}
|
|
{
|
|
value, err := b.Long()
|
|
if err != nil {
|
|
return fmt.Errorf("unable to decode requestedPeerChannel#8ba403e4: field channel_id: %w", err)
|
|
}
|
|
r.ChannelID = value
|
|
}
|
|
if r.Flags.Has(0) {
|
|
value, err := b.String()
|
|
if err != nil {
|
|
return fmt.Errorf("unable to decode requestedPeerChannel#8ba403e4: field title: %w", err)
|
|
}
|
|
r.Title = value
|
|
}
|
|
if r.Flags.Has(1) {
|
|
value, err := b.String()
|
|
if err != nil {
|
|
return fmt.Errorf("unable to decode requestedPeerChannel#8ba403e4: field username: %w", err)
|
|
}
|
|
r.Username = value
|
|
}
|
|
if r.Flags.Has(2) {
|
|
value, err := DecodePhoto(b)
|
|
if err != nil {
|
|
return fmt.Errorf("unable to decode requestedPeerChannel#8ba403e4: field photo: %w", err)
|
|
}
|
|
r.Photo = value
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetChannelID returns value of ChannelID field.
|
|
func (r *RequestedPeerChannel) GetChannelID() (value int64) {
|
|
if r == nil {
|
|
return
|
|
}
|
|
return r.ChannelID
|
|
}
|
|
|
|
// SetTitle sets value of Title conditional field.
|
|
func (r *RequestedPeerChannel) SetTitle(value string) {
|
|
r.Flags.Set(0)
|
|
r.Title = value
|
|
}
|
|
|
|
// GetTitle returns value of Title conditional field and
|
|
// boolean which is true if field was set.
|
|
func (r *RequestedPeerChannel) GetTitle() (value string, ok bool) {
|
|
if r == nil {
|
|
return
|
|
}
|
|
if !r.Flags.Has(0) {
|
|
return value, false
|
|
}
|
|
return r.Title, true
|
|
}
|
|
|
|
// SetUsername sets value of Username conditional field.
|
|
func (r *RequestedPeerChannel) SetUsername(value string) {
|
|
r.Flags.Set(1)
|
|
r.Username = value
|
|
}
|
|
|
|
// GetUsername returns value of Username conditional field and
|
|
// boolean which is true if field was set.
|
|
func (r *RequestedPeerChannel) GetUsername() (value string, ok bool) {
|
|
if r == nil {
|
|
return
|
|
}
|
|
if !r.Flags.Has(1) {
|
|
return value, false
|
|
}
|
|
return r.Username, true
|
|
}
|
|
|
|
// SetPhoto sets value of Photo conditional field.
|
|
func (r *RequestedPeerChannel) SetPhoto(value PhotoClass) {
|
|
r.Flags.Set(2)
|
|
r.Photo = value
|
|
}
|
|
|
|
// GetPhoto returns value of Photo conditional field and
|
|
// boolean which is true if field was set.
|
|
func (r *RequestedPeerChannel) GetPhoto() (value PhotoClass, ok bool) {
|
|
if r == nil {
|
|
return
|
|
}
|
|
if !r.Flags.Has(2) {
|
|
return value, false
|
|
}
|
|
return r.Photo, true
|
|
}
|
|
|
|
// RequestedPeerClassName is schema name of RequestedPeerClass.
|
|
const RequestedPeerClassName = "RequestedPeer"
|
|
|
|
// RequestedPeerClass represents RequestedPeer generic type.
|
|
//
|
|
// See https://core.telegram.org/type/RequestedPeer for reference.
|
|
//
|
|
// Example:
|
|
//
|
|
// g, err := tg.DecodeRequestedPeer(buf)
|
|
// if err != nil {
|
|
// panic(err)
|
|
// }
|
|
// switch v := g.(type) {
|
|
// case *tg.RequestedPeerUser: // requestedPeerUser#d62ff46a
|
|
// case *tg.RequestedPeerChat: // requestedPeerChat#7307544f
|
|
// case *tg.RequestedPeerChannel: // requestedPeerChannel#8ba403e4
|
|
// default: panic(v)
|
|
// }
|
|
type RequestedPeerClass interface {
|
|
bin.Encoder
|
|
bin.Decoder
|
|
bin.BareEncoder
|
|
bin.BareDecoder
|
|
construct() RequestedPeerClass
|
|
|
|
// 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
|
|
|
|
// Profile photo.
|
|
GetPhoto() (value PhotoClass, ok bool)
|
|
}
|
|
|
|
// DecodeRequestedPeer implements binary de-serialization for RequestedPeerClass.
|
|
func DecodeRequestedPeer(buf *bin.Buffer) (RequestedPeerClass, error) {
|
|
id, err := buf.PeekID()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
switch id {
|
|
case RequestedPeerUserTypeID:
|
|
// Decoding requestedPeerUser#d62ff46a.
|
|
v := RequestedPeerUser{}
|
|
if err := v.Decode(buf); err != nil {
|
|
return nil, fmt.Errorf("unable to decode RequestedPeerClass: %w", err)
|
|
}
|
|
return &v, nil
|
|
case RequestedPeerChatTypeID:
|
|
// Decoding requestedPeerChat#7307544f.
|
|
v := RequestedPeerChat{}
|
|
if err := v.Decode(buf); err != nil {
|
|
return nil, fmt.Errorf("unable to decode RequestedPeerClass: %w", err)
|
|
}
|
|
return &v, nil
|
|
case RequestedPeerChannelTypeID:
|
|
// Decoding requestedPeerChannel#8ba403e4.
|
|
v := RequestedPeerChannel{}
|
|
if err := v.Decode(buf); err != nil {
|
|
return nil, fmt.Errorf("unable to decode RequestedPeerClass: %w", err)
|
|
}
|
|
return &v, nil
|
|
default:
|
|
return nil, fmt.Errorf("unable to decode RequestedPeerClass: %w", bin.NewUnexpectedID(id))
|
|
}
|
|
}
|
|
|
|
// RequestedPeer boxes the RequestedPeerClass providing a helper.
|
|
type RequestedPeerBox struct {
|
|
RequestedPeer RequestedPeerClass
|
|
}
|
|
|
|
// Decode implements bin.Decoder for RequestedPeerBox.
|
|
func (b *RequestedPeerBox) Decode(buf *bin.Buffer) error {
|
|
if b == nil {
|
|
return fmt.Errorf("unable to decode RequestedPeerBox to nil")
|
|
}
|
|
v, err := DecodeRequestedPeer(buf)
|
|
if err != nil {
|
|
return fmt.Errorf("unable to decode boxed value: %w", err)
|
|
}
|
|
b.RequestedPeer = v
|
|
return nil
|
|
}
|
|
|
|
// Encode implements bin.Encode for RequestedPeerBox.
|
|
func (b *RequestedPeerBox) Encode(buf *bin.Buffer) error {
|
|
if b == nil || b.RequestedPeer == nil {
|
|
return fmt.Errorf("unable to encode RequestedPeerClass as nil")
|
|
}
|
|
return b.RequestedPeer.Encode(buf)
|
|
}
|