Files
tgex-backend/tg_bot/screens/main_menu.go
2026-01-20 13:40:24 +03:00

87 lines
2.5 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) {
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(msgAbout, 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() {}