101 lines
3.9 KiB
Go
101 lines
3.9 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>
|
||
|
||
<blockquote>
|
||
За что отвечает каждая кнопка в этом окне:
|
||
|
||
<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() {}
|