package telegram import ( "fmt" "github.com/gotd/td/tg" ) func extractMessages(resp tg.MessagesMessagesClass) ([]*tg.Message, error) { switch v := resp.(type) { case *tg.MessagesMessages: return filterMessages(v.Messages), nil case *tg.MessagesMessagesSlice: return filterMessages(v.Messages), nil case *tg.MessagesChannelMessages: return filterMessages(v.Messages), nil case *tg.MessagesMessagesNotModified: return nil, fmt.Errorf("messages not modified") default: return nil, fmt.Errorf("unsupported response type %T", resp) } } func filterMessages(values []tg.MessageClass) []*tg.Message { result := make([]*tg.Message, 0, len(values)) for _, m := range values { if msg, ok := m.(*tg.Message); ok { result = append(result, msg) } } return result } func extractMessageByID(resp tg.MessagesMessagesClass, id int) (*tg.Message, error) { messages, err := extractMessages(resp) if err != nil { return nil, err } for _, msg := range messages { if msg.ID == id { return msg, nil } } return nil, fmt.Errorf("message %d not found", id) } func isFromBot(msg *tg.Message, botID int64) bool { if msg == nil || msg.Out { return false } if peer, ok := msg.GetPeerID().(*tg.PeerUser); ok && peer.UserID == botID { return true } if fromClass, ok := msg.GetFromID(); ok { if from, ok := fromClass.(*tg.PeerUser); ok && from.UserID == botID { return true } } return false }