бот несколько медиа
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user