diff --git a/main.go b/main.go index 701c9d0..4a6a6db 100644 --- a/main.go +++ b/main.go @@ -198,6 +198,21 @@ func (h *handler) HandleEvent(ctx context.Context, event *models.Event) error { return nil } +func (h *handler) handleImage(did string, media bsky.ParsedEmbeds) (*tgbotapi.InputMediaPhoto, error) { + blobURL := buildBlobURL(h.bsky.Bluesky.Cfg.PDSURL, did, media.URI) + resp, err := http.Get(blobURL) + if err != nil { + return nil, fmt.Errorf("failed to fetch image: %w", err) + } + defer resp.Body.Close() + data, err := io.ReadAll(resp.Body) + if err != nil { + return nil, fmt.Errorf("failed to read image: %w", err) + } + mediaAdd := tgbotapi.NewInputMediaPhoto(tgbotapi.FileBytes{Name: "image.jpg", Bytes: data}) + return &mediaAdd, nil +} + func (h *handler) handleVideo(media bsky.ParsedEmbeds) (tgbotapi.InputMedia, error) { url := buildBlobURL(h.bsky.Bluesky.Cfg.PDSURL, h.bsky.Bluesky.Cfg.DID, media.URI) log.Printf("Fetching video: %s\n", url) @@ -373,12 +388,16 @@ func (h *handler) ProcessPost(event *models.Event) error { case "record": continue case "image": - mediaAdd := tgbotapi.NewInputMediaPhoto(tgbotapi.FileURL(buildBlobURL(h.bsky.Bluesky.Cfg.PDSURL, h.bsky.Bluesky.Cfg.DID, media.URI))) + mediaAdd, err := h.handleImage(event.Did, media) + if err != nil { + log.Printf("Failed to handle image: %s\n", err) + continue + } if len(mediaGroup) == 0 { mediaAdd.Caption = captionText mediaAdd.ParseMode = tgbotapi.ModeHTML } - mediaGroup = append(mediaGroup, &mediaAdd) + mediaGroup = append(mediaGroup, mediaAdd) case "video": mediaAdd, err := h.handleVideo(media) if err != nil { @@ -400,12 +419,16 @@ func (h *handler) ProcessPost(event *models.Event) error { for _, media := range po { switch media.Type { case "image": - mediaAdd := tgbotapi.NewInputMediaPhoto(tgbotapi.FileURL(buildBlobURL(h.bsky.Bluesky.Cfg.PDSURL, h.bsky.Bluesky.Cfg.DID, media.URI))) + mediaAdd, err := h.handleImage(event.Did, media) + if err != nil { + log.Printf("Failed to handle image: %s\n", err) + continue + } if len(mediaGroup) == 0 { mediaAdd.Caption = captionText mediaAdd.ParseMode = tgbotapi.ModeHTML } - mediaGroup = append(mediaGroup, &mediaAdd) + mediaGroup = append(mediaGroup, mediaAdd) case "video": mediaAdd, err := h.handleVideo(media) if err != nil { @@ -427,8 +450,11 @@ func (h *handler) ProcessPost(event *models.Event) error { h.tg.Send(tgbotapi.NewEditMessageCaption(telegramRecord.ChannelID, telegramRecord.MessageID[0], captionText)) } else { resp, err := h.tg.SendMediaGroup(tgbotapi.NewMediaGroup(cid, mediaGroup)) - fmt.Println(err) h.cleanupFiles() + if err != nil || len(resp) == 0 { + log.Printf("Failed to send media group: %v\n", err) + return err + } uri, postCid := getLink(event) var messageIDs []int for _, msgID := range resp {