Язык Go. Telego получение id любого пользователя Телеграмма

Для получения id любого пользователя, есть несколько вариантов, рассмотрим хард способ.

Откройте файл \go\pkg\mod\github.com\mymmrac\telego@v1.0.2\types.go

Найдите объект Message, в него нужно добавить свойство

// Message - This object represents a message.
type Message struct {
	.......................//.........................

	ForwardFrom MessageFrom `json:"forward_from,omitempty"`

	.......................//.........................
	`
}

В этом же файле нужно добавить объект «MessageFrom»

type MessageFrom struct {
	ID int64 `json:"id"`

	IsBot bool `json:"is_bot"`

	FirstName string `json:"first_name,omitempty"`

	LastName string `json:"last_name,omitempty"`
}

Сохраните файл.

Теперь можно пользоваться данным объектом в Вашем Телеграм боте.

К примеру: 
_.HandleMessage(func(ctx *th.Context, msg telego.Message) error {

    fmt.Println(msg.ForwardFrom.ID) // здесь Ваш искомый ID
    fmt.Println(msg.ForwardFrom.FirstName)
    fmt.Println(msg.ForwardFrom.LastName)

}

Благодаря добавленным объектам, вы можете пользоваться переменными

msg.ForwardFrom.ID, 

msg.ForwardFrom.FirstName, 

msg.ForwardFrom.IsBot, 

msg.ForwardFrom.LastName

Где msg это telego.Message.

Стоит добавить, что данные переменные будут доступны, если боту переслать какое-либо сообщение, любого, не «скрытого» пользователя. И будет доступен блок(telego.Message) под капотом:

        "forward_from": {
            "id": 123456789,
            "is_bot": false,
            "first_name": "Mr.Smith",
            "last_name": "DimariGG"
        },

Есть более корректный способ получения id пользователей, если обратить внимание на блок:

type MessageOrigin interface {
	OriginType() string
	OriginalDate() int64
	// Disallow external implementations
	iMessageOrigin()
}

Как видите iMessageOrigin() отключен в данной библиотеке, но подключить не очень сложно.

В iMessageOrigin() есть возможность получать все возможные варианты значений из блока

«forward_origin» / «sender_user» , что более логично, так как блок «forward_from» не всегда доступен.

Добавить комментарий