package screens import ( "context" "fmt" "example.com/m/bot" "github.com/NicoNex/echotron/v3" "github.com/rs/zerolog/log" ) type Login struct{} func (s *Login) Enter(b *bot.Bot, mode bot.RenderMode) { // JWT уже создан в Bot.Update() с актуальными данными пользователя // Теперь создаем login token (это разовый токен для авторизации на сайте) var username *string // Получаем username из сессии если он там сохранен if b.Session.UserName != "" { username = &b.Session.UserName } token, err := b.Backend.CreateLoginToken(context.Background(), b.ChatID, username) if err != nil { log.Error().Err(err).Msg("Failed to create login token") b.SendMessage("❌ Произошла ошибка при создании токена входа. Попробуйте позже.", b.ChatID, nil) return } loginURL := b.Backend.GetLoginURL(token) usernameDisplay := "аноним" if username != nil && *username != "" { usernameDisplay = *username } message := fmt.Sprintf("Привет, %s!\n\nНажми кнопку ниже для входа на сайт.", usernameDisplay) b.SendMessageWithURLButton(message, "Войти на сайт", loginURL) } func (s *Login) HandleCallback(b *bot.Bot, u *echotron.Update) { return } func (s *Login) HandleMessage(b *bot.Bot, u *echotron.Update) { return } func (s *Login) Handle(b *bot.Bot, u *echotron.Update) { b.SetState(&MainMenu{}, bot.NewMessage) return }