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 = ` Главное меню 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() {}