diff --git a/tg_bot/screens/creative_details.go b/tg_bot/screens/creative_details.go index 57bebef..bf18b91 100644 --- a/tg_bot/screens/creative_details.go +++ b/tg_bot/screens/creative_details.go @@ -351,12 +351,11 @@ func (s *CreativeDetails) updateCreative(b *bot.Bot) { log.Info().Str("creative_id", s.CreativeID).Msg("Creative updated successfully") // Возвращаемся назад + s.CleanupMessages(b) if s.ViewMode && s.ViewBackTo != nil { - // Если открыты из view mode, возвращаемся к просмотру - b.SetState(s.ViewBackTo, bot.EditMessage) + b.SetState(s.ViewBackTo, bot.NewMessage) } else if s.BackState != nil { - // Иначе возвращаемся к BackState - b.SetState(s.BackState, bot.EditMessage) + b.SetState(s.BackState, bot.NewMessage) } } @@ -372,7 +371,8 @@ func (s *CreativeDetails) deleteCreative(b *bot.Bot) { return } + s.CleanupMessages(b) if s.BackState != nil { - b.SetState(s.BackState, bot.EditMessage) + b.SetState(s.BackState, bot.NewMessage) } } diff --git a/tg_bot/screens/creative_editor.go b/tg_bot/screens/creative_editor.go index 4776e0a..6186171 100644 --- a/tg_bot/screens/creative_editor.go +++ b/tg_bot/screens/creative_editor.go @@ -146,6 +146,7 @@ func (e *CreativeEditorFields) CleanupMessages(b *bot.Bot) { b.DeleteMessage(b.ChatID, *e.ControlPanelMessageID) e.ControlPanelMessageID = nil } + b.LastMessageID = 0 } const mediaGroupDebounce = 2 * time.Second diff --git a/tg_bot/screens/creative_view.go b/tg_bot/screens/creative_view.go index 8a909ef..6a94151 100644 --- a/tg_bot/screens/creative_view.go +++ b/tg_bot/screens/creative_view.go @@ -101,8 +101,9 @@ func (s *CreativeView) HandleCallback(b *bot.Bot, u *echotron.Update) { switch { case data == "back": + s.CleanupMessages(b) if s.BackState != nil { - b.SetState(s.BackState, bot.EditMessage) + b.SetState(s.BackState, bot.NewMessage) } case data == "rename": @@ -116,22 +117,22 @@ func (s *CreativeView) HandleCallback(b *bot.Bot, u *echotron.Update) { s.showActionPanel(b) case data == "edit": - // Переход к редактированию креатива + s.CleanupMessages(b) b.SetState(&CreativeDetails{ CreativeID: s.CreativeID, ProjectID: s.ProjectID, - ViewMode: true, // Флаг, что мы открылись из view mode - ViewBackTo: s, // Возврат к этому экрану после сохранения + ViewMode: true, + ViewBackTo: s, ProjectTitle: s.ProjectTitle, BackState: s.BackState, - }, bot.EditMessage) + }, bot.NewMessage) case data == "toggle_tag": // Переключение тега (testing <-> production) s.toggleTag(b) case data == "purchase_creative": - // Переход к созданию закупа с предвыбором проекта и креатива + s.CleanupMessages(b) creativeTitle := "" if s.Name != nil { creativeTitle = *s.Name diff --git a/tg_bot/screens/purchase_optional_details.go b/tg_bot/screens/purchase_optional_details.go index 3dbf1fa..87e562c 100644 --- a/tg_bot/screens/purchase_optional_details.go +++ b/tg_bot/screens/purchase_optional_details.go @@ -328,13 +328,25 @@ func (s *PurchaseOptionalDetails) HandleCallback(b *bot.Bot, u *echotron.Update) if strings.HasPrefix(u.CallbackQuery.Data, "type:") { value := strings.TrimPrefix(u.CallbackQuery.Data, "type:") // Нормализуем значение для БД + var normalized string switch value { case "mutual_pr": - s.PurchaseType = "взаимный пиар" + normalized = "взаимный пиар" case "standard": - s.PurchaseType = "стандарт" + normalized = "стандарт" } - s.InputMode = "" + if s.CurrentChannel != "" { + s.PurchaseTypeByChannel[s.CurrentChannel] = normalized + } else { + s.PurchaseType = normalized + } + if s.ReturnMode != "" { + s.InputMode = s.ReturnMode + s.ReturnMode = "" + } else { + s.InputMode = "" + } + s.CurrentChannel = "" s.Enter(b, bot.EditMessage) return }