vegapokerbot/internal/handler/fsmwizard/base.go

74 lines
1.7 KiB
Go
Raw Normal View History

package fsmwizard
2024-05-13 16:57:55 +03:00
import (
"gitea.neur0tx.site/Neur0toxine/vegapokerbot/internal/db/model"
2024-05-13 16:57:55 +03:00
"gitea.neur0tx.site/Neur0toxine/vegapokerbot/internal/handler/iface"
"gitea.neur0tx.site/Neur0toxine/vegapokerbot/internal/locale"
"gitea.neur0tx.site/Neur0toxine/vegapokerbot/pkg/fsm"
2024-05-13 16:57:55 +03:00
"github.com/mymmrac/telego"
"golang.org/x/text/language"
2024-05-13 16:57:55 +03:00
"strings"
)
type Wizard struct {
UserID int64
ChatID int64
TGChat telego.Chat
User *model.User
Loc locale.Localizer
2024-05-13 16:57:55 +03:00
Data telego.Update
}
type State struct {
fsm.State[Wizard]
App iface.App
}
func newBase(app iface.App) State {
return State{App: app}
}
func (s State) Localizer(langCode ...string) locale.Localizer {
lang := language.English.String()
if len(langCode) > 0 {
lang = langCode[0]
2024-05-13 19:46:55 +03:00
} else {
if s.Payload.User != nil {
lang = s.Payload.User.Language
} else if s.Payload.UserID > 0 {
user, _ := s.App.DB().ForUser().ByTelegramID(s.Payload.UserID)
if user != nil && user.Language != "" {
lang = user.Language
}
}
}
if s.Payload.Loc != nil && (len(langCode) == 0 || s.Payload.Loc.Tag().String() == lang) {
return s.Payload.Loc
}
2024-05-13 16:57:55 +03:00
lang = strings.ToLower(lang)
if len(lang) > 2 {
lang = lang[:2]
}
switch lang {
case "en", "ru":
return s.App.Localizer(lang)
default:
return s.App.Localizer("en")
}
}
func (s State) LogError(err error) {
if err == nil {
return
}
if s.App.Conf().Debug {
s.App.Log().Errorf("handler error: %s, payload: %#v", err, s.Payload)
return
}
s.App.Log().Errorf("handler error: %s, user id: %d, chat id: %d", err, s.Payload.UserID, s.Payload.ChatID)
}
func (s State) Move(mc fsm.MachineControls[*Wizard], stateID fsm.StateID, pl *Wizard) {
s.LogError(mc.Move(stateID, pl))
}