Files
tgex-backend/tg_bot/screens/main_menu.go
Artem Tsyrulnikov 09145e510a fix
2026-02-03 22:21:08 +03:00

101 lines
3.9 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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>
<blockquote expandable>
За что отвечает каждая кнопка в этом окне:
<b>• Рабочее пространство</b> — Одно можно использовать для своих проектов, а другое, например, для проектов, где вы являетесь закупщиком.
<b>• Мои проекты</b> — Управляйте вашими телеграм-каналами: добавляйте новые, привязывайте к ним креативы, создавайте закупы.
<b>• Размещения</b> — Просматривайте статистику по всем сделанным размещениям или создавайте новые (бот автоматически сформирует для вас креатив и заменит в нём пригласительную ссылку).
<b>• Веб-платформа</b> — Используйте функционал нашего сервиса на все 100%: планируйте размещения, просматривайте аналитику, следите за показателями проектов.
<b>• Помощь</b> — Изучите инструкции, как пользоваться нашим сервисом или напишите в поддержку, если возникли какие-то вопросы.
</blockquote>
Чтобы делать закупы, добавьте канал и креатив:
<b>/addchannel</b> — новый канал
`
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://t.me/SmartpostSupport")),
Row(Button("Размещения", "placements"), URLButton("Дашборд", fmt.Sprintf("https://app.smart-post.ru/dashboard/%s", b.Session.WorkspaceID))),
)
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() {}