бот несколько медиа

This commit is contained in:
Artem Tsyrulnikov
2026-01-23 16:04:28 +03:00
parent 912b543f75
commit b5d839ddae
5 changed files with 350 additions and 90 deletions

View File

@@ -3,6 +3,7 @@ package screens
import (
"context"
"fmt"
"sort"
"strings"
"github.com/NicoNex/echotron/v3"
@@ -42,8 +43,19 @@ func (s *CreativeDetails) Enter(b *bot.Bot, mode bot.RenderMode) {
} else {
log.Info().Msg("Creative text is empty from backend")
}
s.MediaType = creative.MediaType
s.MediaFileID = creative.MediaFileID
s.MediaItems = nil
if len(creative.MediaItems) > 0 {
mediaItems := append([]backend.CreativeMediaItem(nil), creative.MediaItems...)
sort.Slice(mediaItems, func(i, j int) bool {
return mediaItems[i].Position < mediaItems[j].Position
})
for _, item := range mediaItems {
s.MediaItems = append(s.MediaItems, MediaItem{
MediaType: item.MediaType,
MediaFileID: item.MediaFileID,
})
}
}
s.Buttons = nil
for _, btn := range creative.Buttons {
s.Buttons = append(s.Buttons, InlineButton{Text: btn.Text, URL: btn.URL})
@@ -92,8 +104,7 @@ func (s *CreativeDetails) HandleCallback(b *bot.Bot, u *echotron.Update) {
s.ShowMediaPanel(b)
case data == "delete_media":
s.MediaType = ""
s.MediaFileID = ""
s.MediaItems = nil
s.MediaChanged = true
s.UpdateCreativePreview(b)
s.showManagementPanelWithDelete(b)
@@ -166,10 +177,17 @@ func (s *CreativeDetails) HandleMessage(b *bot.Bot, u *echotron.Update) {
if !s.SetMediaFromMessage(u.Message) {
return
}
s.DeleteUserMessage(b, u.Message.ID)
if u.Message.MediaGroupID != "" {
groupID := u.Message.MediaGroupID
s.scheduleMediaGroupAction(groupID, func() {
s.UpdateCreativePreview(b)
s.ShowMediaPanel(b)
})
b.MarkHandled()
return
}
s.UpdateCreativePreview(b)
s.ClearInputMode()
s.showManagementPanelWithDelete(b)
s.ShowMediaPanel(b)
return
case inputModeButtonText:
if u.Message.Text == "" {
@@ -220,7 +238,6 @@ func (s *CreativeDetails) HandleMessage(b *bot.Bot, u *echotron.Update) {
}
text := ui.FormatMessageHTML(u.Message)
s.Text = &text
s.DeleteUserMessage(b, u.Message.ID)
s.UpdateCreativePreview(b)
@@ -233,7 +250,6 @@ func (s *CreativeDetails) HandleMessage(b *bot.Bot, u *echotron.Update) {
if u.Message.Text != "" {
text := ui.FormatMessageHTML(u.Message)
s.Text = &text
s.DeleteUserMessage(b, u.Message.ID)
s.UpdateCreativePreview(b)
@@ -279,13 +295,8 @@ func (s *CreativeDetails) updateCreative(b *bot.Bot) {
Text: s.Text,
}
if s.MediaChanged {
mediaType := s.MediaType
mediaFileID := s.MediaFileID
input.MediaType = &mediaType
input.MediaFileID = &mediaFileID
if s.MediaFileID != "" {
mediaData, err := b.DownloadFileBytes(s.MediaFileID)
if len(s.MediaItems) > 0 {
mediaItems, err := s.BuildMediaInputs(b)
if err != nil {
log.Error().Err(err).Msg("Failed to download creative media")
// Показываем ошибку через панель управления
@@ -295,10 +306,10 @@ func (s *CreativeDetails) updateCreative(b *bot.Bot) {
})
return
}
input.MediaData = &mediaData
input.MediaItems = &mediaItems
} else {
emptyData := []byte{}
input.MediaData = &emptyData
emptyItems := []backend.CreativeMediaInput{}
input.MediaItems = &emptyItems
}
}