Update videos to work again
All checks were successful
/ build (push) Successful in 2m23s

This commit is contained in:
Astra 2026-04-13 13:09:49 +01:00
parent b3e37757a2
commit 907a191bfa

53
main.go
View file

@ -41,13 +41,15 @@ type handler struct {
tg *tgbotapi.BotAPI
bsky *bsky.BSky
channelAdmins map[int64]bool
openFiles []*os.File
tempFiles []string
}
var (
post = flag.String("post", "", "URL to a BlueSky post")
delete = flag.Bool("delete", false, "true/false to delete post")
oldPosts = flag.Float64("oldposttime", 1, "Ignore posts if createdAt more than this many hours ago")
botOnly = flag.Bool("bot", false, "Run only the Telegram bot listener, without Jetstream sync")
post = flag.String("post", "", "URL to a BlueSky post")
delete = flag.Bool("delete", false, "true/false to delete post")
oldPosts = flag.Float64("oldposttime", 1, "Ignore posts if createdAt more than this many hours ago")
botOnly = flag.Bool("bot", false, "Run only the Telegram bot listener, without Jetstream sync")
)
func main() {
@ -211,38 +213,55 @@ func (h *handler) handleVideo(media bsky.ParsedEmbeds) (tgbotapi.InputMedia, err
if err != nil {
return nil, fmt.Errorf("failed to create video file: %w", err)
}
defer func() {
f.Close()
os.Remove(filename)
}()
if _, err := io.Copy(f, resp.Body); err != nil {
f.Close()
os.Remove(filename)
return nil, fmt.Errorf("failed to write video: %w", err)
}
if _, err := f.Seek(0, 0); err != nil {
f.Close()
os.Remove(filename)
return nil, fmt.Errorf("failed to seek video: %w", err)
}
mediaAdd := tgbotapi.NewInputMediaVideo(tgbotapi.FileReader{Name: "video.mp4", Reader: f})
metadata, err := getVideoMetadata(f.Name())
if err != nil {
f.Close()
os.Remove(filename)
return nil, fmt.Errorf("failed to read video metadata: %w", err)
}
mediaAdd.SupportsStreaming = true
mediaAdd.Height = metadata.Height()
mediaAdd.Width = metadata.Width()
mediaAdd.Duration = int(metadata.Duration())
frames, _ := metadata.ReadFrames(0)
var buf bytes.Buffer
jpeg.Encode(&buf, frames[0], &jpeg.Options{Quality: 90})
// Keep file open for SendMediaGroup to read, cleanup happens in ProcessPost after sending
mediaAdd := tgbotapi.NewInputMediaVideo(tgbotapi.FileReader{Name: "video.mp4", Reader: f})
mediaAdd.SupportsStreaming = true
mediaAdd.Height = metadata.Height()
mediaAdd.Width = metadata.Width()
mediaAdd.Duration = int(metadata.Duration())
mediaAdd.Thumb = tgbotapi.FileBytes{Name: "thumb.jpg", Bytes: buf.Bytes()}
// Store file reference for cleanup after sending
h.openFiles = append(h.openFiles, f)
h.tempFiles = append(h.tempFiles, filename)
return &mediaAdd, nil
}
func (h *handler) cleanupFiles() {
for _, f := range h.openFiles {
f.Close()
}
for _, filename := range h.tempFiles {
os.Remove(filename)
}
h.openFiles = nil
h.tempFiles = nil
}
func (h *handler) ProcessPost(event *models.Event) error {
ps, _ := h.bsky.ParsePost(event.Commit.Record)
po := ps.GetEmbeds()
@ -407,7 +426,9 @@ func (h *handler) ProcessPost(event *models.Event) error {
if isEditedPost {
h.tg.Send(tgbotapi.NewEditMessageCaption(telegramRecord.ChannelID, telegramRecord.MessageID[0], captionText))
} else {
resp, _ := h.tg.SendMediaGroup(tgbotapi.NewMediaGroup(cid, mediaGroup))
resp, err := h.tg.SendMediaGroup(tgbotapi.NewMediaGroup(cid, mediaGroup))
fmt.Println(err)
h.cleanupFiles()
uri, postCid := getLink(event)
var messageIDs []int
for _, msgID := range resp {