93 lines
2.7 KiB
Go
93 lines
2.7 KiB
Go
package screens
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/NicoNex/echotron/v3"
|
|
"github.com/TelegramExchange/tgex-backend/tg_bot/bot"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
type MainMenu struct{}
|
|
|
|
const msgAbout = `
|
|
<i>Главное меню</i>
|
|
|
|
Smartpost — платформа для покупки и продажи рекламы без ЛС и ручных таблиц.
|
|
|
|
• Внутренний счёт и безопасные сделки
|
|
• Фиксация цен, дат и форматов
|
|
• Автоматические отчёты
|
|
• Повторные закупки в пару кликов
|
|
|
|
Комиссия — 7%. Без скрытых платежей.
|
|
`
|
|
|
|
func (s *MainMenu) Enter(b *bot.Bot, mode bot.RenderMode) {
|
|
msg := msgAbout
|
|
if b.Session.WasRestarted {
|
|
msg = "⚠️ Бот был перезапущен. Извиняемся за неудобства :(\n\n" + msgAbout
|
|
b.Session.WasRestarted = false
|
|
}
|
|
|
|
loadWorkspace := func() string {
|
|
workspaces, err := b.Backend.GetWorkspaces(context.Background(), b.Session.JWT)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("Failed to get workspaces for main menu")
|
|
return "ошибка"
|
|
}
|
|
if len(workspaces) == 0 {
|
|
workspace, err := b.Backend.CreateWorkspace(context.Background(), b.Session.JWT, "Личное")
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("Failed to create workspace")
|
|
}
|
|
|
|
workspaces = append(workspaces, workspace)
|
|
}
|
|
|
|
selected := workspaces[0] // дефолт — первый
|
|
|
|
if b.Session.WorkspaceID != "" {
|
|
for _, ws := range workspaces {
|
|
if ws.ID == b.Session.WorkspaceID {
|
|
selected = ws
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
b.Session.WorkspaceID = selected.ID
|
|
return selected.Name
|
|
}
|
|
|
|
workspaceName := loadWorkspace()
|
|
|
|
keyboard := Keyboard(
|
|
Row(Button(fmt.Sprintf("Рабочее пространство: %s", workspaceName), "workspace_menu")),
|
|
Row(Button("Мои проекты", "my_projects"), URLButton("Поддержка", "https://example.com")),
|
|
Row(Button("Размещения", "placements"), URLButton("Дашборд", "https://example.com")),
|
|
)
|
|
|
|
b.Render(msg, keyboard, mode)
|
|
}
|
|
|
|
func (s *MainMenu) HandleCallback(b *bot.Bot, u *echotron.Update) {
|
|
switch u.CallbackQuery.Data {
|
|
case "my_projects":
|
|
b.SetState(&MyProjects{BackState: &MainMenu{}}, bot.EditMessage)
|
|
case "placements":
|
|
b.SetState(&MyProjects{BackState: &MainMenu{}, OpenPlacements: true}, bot.EditMessage)
|
|
case "workspace_menu":
|
|
b.SetState(&WorkspaceMenu{BackState: &MainMenu{}}, bot.EditMessage)
|
|
default:
|
|
s.Enter(b, bot.NewMessage)
|
|
}
|
|
}
|
|
|
|
func (s *MainMenu) HandleMessage(b *bot.Bot, u *echotron.Update) {}
|
|
|
|
func (s *MainMenu) Handle(b *bot.Bot, u *echotron.Update) { b.SetState(&MainMenu{}, bot.NewMessage) }
|
|
|
|
func (s *MainMenu) Exit() {}
|