Upload image bytes instead of blob URL
All checks were successful
/ build (push) Successful in 1m31s

This commit is contained in:
Astra 2026-05-24 17:19:38 +01:00
parent 48d565111e
commit 025282ff39

36
main.go
View file

@ -198,6 +198,21 @@ func (h *handler) HandleEvent(ctx context.Context, event *models.Event) error {
return nil 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) { func (h *handler) handleVideo(media bsky.ParsedEmbeds) (tgbotapi.InputMedia, error) {
url := buildBlobURL(h.bsky.Bluesky.Cfg.PDSURL, h.bsky.Bluesky.Cfg.DID, media.URI) url := buildBlobURL(h.bsky.Bluesky.Cfg.PDSURL, h.bsky.Bluesky.Cfg.DID, media.URI)
log.Printf("Fetching video: %s\n", url) log.Printf("Fetching video: %s\n", url)
@ -373,12 +388,16 @@ func (h *handler) ProcessPost(event *models.Event) error {
case "record": case "record":
continue continue
case "image": 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 { if len(mediaGroup) == 0 {
mediaAdd.Caption = captionText mediaAdd.Caption = captionText
mediaAdd.ParseMode = tgbotapi.ModeHTML mediaAdd.ParseMode = tgbotapi.ModeHTML
} }
mediaGroup = append(mediaGroup, &mediaAdd) mediaGroup = append(mediaGroup, mediaAdd)
case "video": case "video":
mediaAdd, err := h.handleVideo(media) mediaAdd, err := h.handleVideo(media)
if err != nil { if err != nil {
@ -400,12 +419,16 @@ func (h *handler) ProcessPost(event *models.Event) error {
for _, media := range po { for _, media := range po {
switch media.Type { switch media.Type {
case "image": 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 { if len(mediaGroup) == 0 {
mediaAdd.Caption = captionText mediaAdd.Caption = captionText
mediaAdd.ParseMode = tgbotapi.ModeHTML mediaAdd.ParseMode = tgbotapi.ModeHTML
} }
mediaGroup = append(mediaGroup, &mediaAdd) mediaGroup = append(mediaGroup, mediaAdd)
case "video": case "video":
mediaAdd, err := h.handleVideo(media) mediaAdd, err := h.handleVideo(media)
if err != nil { 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)) h.tg.Send(tgbotapi.NewEditMessageCaption(telegramRecord.ChannelID, telegramRecord.MessageID[0], captionText))
} else { } else {
resp, err := h.tg.SendMediaGroup(tgbotapi.NewMediaGroup(cid, mediaGroup)) resp, err := h.tg.SendMediaGroup(tgbotapi.NewMediaGroup(cid, mediaGroup))
fmt.Println(err)
h.cleanupFiles() h.cleanupFiles()
if err != nil || len(resp) == 0 {
log.Printf("Failed to send media group: %v\n", err)
return err
}
uri, postCid := getLink(event) uri, postCid := getLink(event)
var messageIDs []int var messageIDs []int
for _, msgID := range resp { for _, msgID := range resp {