11 errTelegramOtherMedia = errors.New("only text messages are supported")
12 errTelegramPhotoSize = errors.New("no photo size fits 1568 pixels")
15 // telegramImageText selects a supplied photo size, or an image document, and
16 // stores it before returning marker text with the unchanged caption.
17 func telegramImageText(ctx context.Context, api *TelegramAPI, store *ImageStore, message *TelegramMessage) (string, error) {
23 if len(message.Photo) > 0 {
26 for _, photo := range message.Photo {
27 if photo.Width <= 0 || photo.Height <= 0 || max(photo.Width, photo.Height) > 1568 {
31 if photo.Width*photo.Height > area {
34 area = photo.Width * photo.Height
39 return "", errTelegramPhotoSize
41 } else if message.Document != nil {
42 document := message.Document
43 switch document.MimeType {
44 case "image/jpeg", "image/png", "image/webp":
46 size = document.FileSize
48 if strings.HasPrefix(document.MimeType, "image/") {
49 return "", errImageFormat
52 return "", errTelegramOtherMedia
56 if size > imageMaxBytes {
57 return "", errImageSize
60 data, err := api.GetImage(ctx, id)
62 return "", fmt.Errorf("download image: %w", err)
65 name, err := store.Save(data)
67 return "", fmt.Errorf("store image: %w", err)
70 return imageText([]string{name}, message.Caption), nil