правки
This commit is contained in:
@@ -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> — новый канал
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user