правки

This commit is contained in:
Artem Tsyrulnikov
2026-02-03 14:22:49 +03:00
parent 26a5792665
commit c99afd6c0a
3 changed files with 49 additions and 31 deletions

View File

@@ -14,7 +14,7 @@ type MainMenu struct{}
const msgAbout = ` const msgAbout = `
<i>Главное меню</i> <i>Главное меню</i>
<pre> <blockquote>
За что отвечает каждая кнопка в этом окне: За что отвечает каждая кнопка в этом окне:
<b>• Рабочее пространство</b> — Одно можно использовать для своих проектов, а другое, например, для проектов, где вы являетесь закупщиком. <b>• Рабочее пространство</b> — Одно можно использовать для своих проектов, а другое, например, для проектов, где вы являетесь закупщиком.
@@ -26,7 +26,7 @@ const msgAbout = `
<b>• Веб-платформа</b> — Используйте функционал нашего сервиса на все 100%: планируйте размещения, просматривайте аналитику, следите за показателями проектов. <b>• Веб-платформа</b> — Используйте функционал нашего сервиса на все 100%: планируйте размещения, просматривайте аналитику, следите за показателями проектов.
<b>• Помощь</b> — Изучите инструкции, как пользоваться нашим сервисом или напишите в поддержку, если возникли какие-то вопросы. <b>• Помощь</b> — Изучите инструкции, как пользоваться нашим сервисом или напишите в поддержку, если возникли какие-то вопросы.
</pre> </blockquote>
Чтобы делать закупы, добавьте канал и креатив: Чтобы делать закупы, добавьте канал и креатив:
<b>/addchannel</b> — новый канал <b>/addchannel</b> — новый канал

View File

@@ -252,15 +252,17 @@ func (s *PurchaseOptionalDetails) HandleCallback(b *bot.Bot, u *echotron.Update)
s.Enter(b, bot.EditMessage) s.Enter(b, bot.EditMessage)
case "back": case "back":
// Сохраняем текущее состояние перед возвратом назад
b.SetState(&SelectChannelsForPurchase{ b.SetState(&SelectChannelsForPurchase{
ProjectID: s.ProjectID, ProjectID: s.ProjectID,
ProjectTitle: s.ProjectTitle, ProjectTitle: s.ProjectTitle,
CreativeID: s.CreativeID, CreativeID: s.CreativeID,
CreativeTitle: s.CreativeTitle, CreativeTitle: s.CreativeTitle,
Channels: s.Channels, Channels: s.Channels,
Duplicates: []string{}, Duplicates: []string{},
ParsingErrors: []ParseError{}, ParsingErrors: []ParseError{},
BackState: s.BackState, OptionalDetailsState: s, // Сохраняем текущее состояние
BackState: s.BackState,
}, bot.EditMessage) }, bot.EditMessage)
case "next": case "next":
jwt := b.Session.JWT jwt := b.Session.JWT
@@ -2234,6 +2236,12 @@ func (s *PurchaseOptionalDetails) createPurchase(b *bot.Bot, jwt string) {
} }
} }
// Очищаем сохранённое состояние после успешного создания
// Находим SelectChannelsForPurchase в BackState и очищаем его OptionalDetailsState
if selectState, ok := s.BackState.(*SelectChannelsForPurchase); ok {
selectState.OptionalDetailsState = nil
}
b.SetState(&Placements{ b.SetState(&Placements{
ProjectID: s.ProjectID, ProjectID: s.ProjectID,
ProjectTitle: s.ProjectTitle, ProjectTitle: s.ProjectTitle,

View File

@@ -22,19 +22,20 @@ type PurchaseChannelInput struct {
} }
type SelectChannelsForPurchase struct { type SelectChannelsForPurchase struct {
ProjectID string ProjectID string
ProjectTitle string ProjectTitle string
ProjectTelegramID int64 ProjectTelegramID int64
ProjectUsername string ProjectUsername string
ProjectStatus string ProjectStatus string
CreativeID string CreativeID string
CreativeTitle string CreativeTitle string
Channels []PurchaseChannelInput Channels []PurchaseChannelInput
CurrentPage int CurrentPage int
InvalidUsernames []string InvalidUsernames []string
Duplicates []string // дубликаты каналов Duplicates []string // дубликаты каналов
ParsingErrors []ParseError // ошибки парсинга с предложениями ParsingErrors []ParseError // ошибки парсинга с предложениями
BackState bot.State OptionalDetailsState *PurchaseOptionalDetails // сохранённое состояние деталей
BackState bot.State
} }
// ParseError представляет ошибку парсинга с предложением исправления // ParseError представляет ошибку парсинга с предложением исправления
@@ -216,14 +217,23 @@ func (s *SelectChannelsForPurchase) HandleCallback(b *bot.Bot, u *echotron.Updat
} }
// Каналы уже резолвлены в HandleMessage, переходим к следующему шагу // Каналы уже резолвлены в HandleMessage, переходим к следующему шагу
b.SetState(&PurchaseOptionalDetails{ // Если есть сохранённое состояние - используем его, иначе создаём новое
ProjectID: s.ProjectID, var optionalDetails *PurchaseOptionalDetails
ProjectTitle: s.ProjectTitle, if s.OptionalDetailsState != nil {
CreativeID: s.CreativeID, optionalDetails = s.OptionalDetailsState
CreativeTitle: s.CreativeTitle, // Обновляем каналы на случай если они изменились
Channels: s.Channels, optionalDetails.Channels = s.Channels
BackState: s.BackState, } else {
}, bot.EditMessage) optionalDetails = &PurchaseOptionalDetails{
ProjectID: s.ProjectID,
ProjectTitle: s.ProjectTitle,
CreativeID: s.CreativeID,
CreativeTitle: s.CreativeTitle,
Channels: s.Channels,
BackState: s,
}
}
b.SetState(optionalDetails, bot.EditMessage)
case "back_to_select": case "back_to_select":
s.Enter(b, bot.EditMessage) s.Enter(b, bot.EditMessage)