tg/src/tx/session.go

59 lines
1.3 KiB
Go
Raw Normal View History

package tx
2023-07-09 01:28:59 +03:00
2023-07-12 14:06:05 +03:00
import (
apix "github.com/go-telegram-bot-api/telegram-bot-api/v5"
)
type Update = apix.Update
2023-07-09 01:28:59 +03:00
// Represents unique value to identify chats.
// In fact is simply ID of the chat.
type SessionId int64
// The type represents current state of
// user interaction per each of them.
type Session struct {
2023-07-12 14:06:05 +03:00
// Unique identifier for the session, Telegram chat's ID.
2023-07-09 01:28:59 +03:00
Id SessionId
2023-07-12 14:06:05 +03:00
// Current screen identifier.
2023-07-09 01:28:59 +03:00
CurrentScreenId ScreenId
2023-07-12 14:06:05 +03:00
// ID of the previous screen.
2023-07-09 01:28:59 +03:00
PreviousScreenId ScreenId
// The currently showed on display keyboard inside Action.
KeyboardId KeyboardId
// Is true if currently reading the Update.
readingUpdate bool
// Custom data for each user.
V map[string]any
2023-07-09 01:28:59 +03:00
}
// The type represents map of sessions using
// as key.
type SessionMap map[SessionId]*Session
2023-07-09 01:28:59 +03:00
// Return new empty session with
2023-07-12 14:06:05 +03:00
func NewSession(id SessionId) *Session {
return &Session{
Id: id,
V: make(map[string]any),
2023-07-12 14:06:05 +03:00
}
}
// Changes screen of user to the Id one for the session.
func (c *Session) ChangeScreen(screenId ScreenId) {
c.PreviousScreenId = c.CurrentScreenId
c.CurrentScreenId = screenId
}
// Convert the SessionId to Telegram API's type.
func (si SessionId) ToTelegram() int64 {
return int64(si)
}
2023-07-12 14:06:05 +03:00
// Add new empty session by it's ID.
func (sm SessionMap) Add(sid SessionId) {
2023-07-12 14:06:05 +03:00
sm[sid] = NewSession(sid)
}