фиксы

This commit is contained in:
Artem Tsyrulnikov
2026-01-08 21:50:04 +03:00
parent 3e5bdb8164
commit eb54b01835
20 changed files with 462 additions and 405 deletions

View File

@@ -500,26 +500,8 @@ func escapeHTML(s string) string {
return s
}
// showCreativeConfirmation показывает превью креатива + панель с предложением добавить
func (s *AddCreative) showCreativeConfirmation(b *bot.Bot) {
// 1. Отправляем/обновляем превью креатива
if s.CreativeMessageID == nil {
s.SendCreativePreview(b)
} else {
s.UpdateCreativePreview(b)
}
// 2. Формируем текст панели управления
// Экранируем HTML-символы в названии для безопасного вывода
escapedName := escapeHTML(*s.Name)
confirmText := fmt.Sprintf(`<b> Добавляем этот креатив?</b>
<b>Название креатива:</b> %s
<i>Если нужно изменить название креатива, просто введите его здесь. Название автоматически сохранится. Лимит 200 символов.</i>`, escapedName)
// 3. Показываем панель с кнопками редактирования + сохранения
// buildEditorButtons создает кнопки для панели редактирования креатива
func (s *AddCreative) buildEditorButtons(confirmText, cancelCallback string) [][]echotron.InlineKeyboardButton {
var buttons [][]echotron.InlineKeyboardButton
// Кнопки редактирования
@@ -559,15 +541,39 @@ func (s *AddCreative) showCreativeConfirmation(b *bot.Bot) {
// Финальные кнопки
if s.Text != nil {
buttons = append(buttons, bot.Row(
bot.Button("← Отмена", "cancel"),
bot.Button("✓ Сохранить", "confirm_create"),
bot.Button("← "+cancelCallback, "cancel"),
bot.Button(confirmText, "confirm_create"),
))
} else {
buttons = append(buttons, bot.Row(
bot.Button("← Отмена", "cancel"),
bot.Button("← "+cancelCallback, "cancel"),
))
}
return buttons
}
// showCreativeConfirmation показывает превью креатива + панель с предложением добавить
func (s *AddCreative) showCreativeConfirmation(b *bot.Bot) {
// 1. Отправляем/обновляем превью креатива
if s.CreativeMessageID == nil {
s.SendCreativePreview(b)
} else {
s.UpdateCreativePreview(b)
}
// 2. Формируем текст панели управления
// Экранируем HTML-символы в названии для безопасного вывода
escapedName := escapeHTML(*s.Name)
confirmText := fmt.Sprintf(`<b> Добавляем этот креатив?</b>
<b>Название креатива:</b> %s
<i>Если нужно изменить название креатива, просто введите его здесь. Название автоматически сохранится. Лимит 200 символов.</i>`, escapedName)
// 3. Показываем панель с кнопками редактирования + сохранения
buttons := s.buildEditorButtons("✓ Сохранить", "Отмена")
s.ShowControlPanel(b, confirmText, buttons)
}
@@ -596,9 +602,9 @@ func (s *AddCreative) createCreative(b *bot.Bot) {
mediaData, err = b.DownloadFileBytes(s.MediaFileID)
if err != nil {
log.Error().Err(err).Msg("Failed to download creative media")
b.SendNew("<b>❌ Не удалось загрузить медиа</b>", bot.Keyboard(
bot.Row(bot.Button("← Назад", "cancel")),
))
// Показываем ошибку через панель управления
buttons := s.buildEditorButtons("✓ Попробовать снова", "Отмена")
s.ShowControlPanel(b, "<b>❌ Не удалось загрузить медиа</b>\n\nПопробуйте удалить медиа и добавить заново.", buttons)
return
}
}
@@ -653,12 +659,16 @@ func (s *AddCreative) createCreative(b *bot.Bot) {
<b>Пример правильного текста:</b>
<i>Присоединяйтесь к нашему каналу!
https://t.me/+AbCdEfGhIjKlMn</i>`
https://t.me/+AbCdEfGhIjKlMn</i>
<b>Нажмите "✎ Текст" ниже чтобы исправить.</b>`
} else if strings.Contains(errMsg, "Creative text must contain only one invite link") {
userMsg = `<b>❌ Слишком много ссылок</b>
Текст должен содержать <b>ТОЛЬКО ОДНУ</b> инвайт-ссылку.
У вас их несколько. Удалите лишние.`
У вас их несколько. Удалите лишние.
<b>Нажмите "✎ Текст" ниже чтобы исправить.</b>`
} else {
userMsg = `<b>❌ Ошибка создания</b>
@@ -666,9 +676,9 @@ https://t.me/+AbCdEfGhIjKlMn</i>`
Попробуйте ещё раз или вернитесь назад.`
}
b.SendNew(userMsg, bot.Keyboard(
bot.Row(bot.Button("← Назад", "back_from_preview")),
))
// Показываем ошибку через панель управления, чтобы не ломать порядок сообщений
buttons := s.buildEditorButtons("✓ Попробовать снова", "Отмена")
s.ShowControlPanel(b, userMsg, buttons)
return
}