2023-08-10 15:49:25 +03:00
|
|
|
package tx
|
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 {
|
|
|
|
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
|
2023-08-11 10:41:17 +03:00
|
|
|
// The currently showed on display keyboard inside Action.
|
2023-07-12 02:02:33 +03:00
|
|
|
KeyboardId KeyboardId
|
2023-08-12 14:35:33 +03:00
|
|
|
V any
|
2023-07-09 01:28:59 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
// The type represents map of sessions using
|
|
|
|
// as key.
|
2023-08-10 15:49:25 +03:00
|
|
|
type SessionMap map[SessionId]*Session
|
2023-07-09 01:28:59 +03:00
|
|
|
|
2023-08-12 14:35:33 +03:00
|
|
|
// Session information for a group.
|
|
|
|
type GroupSession struct {
|
|
|
|
Id SessionId
|
|
|
|
// Information for each user in the group.
|
|
|
|
V map[SessionId]any
|
|
|
|
}
|
|
|
|
|
|
|
|
// Map for every user in every chat sessions.
|
|
|
|
type GroupSessionMap map[SessionId]*GroupSession
|
|
|
|
|
|
|
|
// Return new empty session with specified user ID.
|
2023-07-12 14:06:05 +03:00
|
|
|
func NewSession(id SessionId) *Session {
|
|
|
|
return &Session{
|
|
|
|
Id: id,
|
2023-08-10 15:49:25 +03:00
|
|
|
V: make(map[string]any),
|
2023-07-12 14:06:05 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-08-12 14:35:33 +03:00
|
|
|
// Returns new empty group session with specified group and user IDs.
|
|
|
|
func NewGroupSession(id SessionId) *GroupSession {
|
|
|
|
return &GroupSession{
|
|
|
|
Id: id,
|
|
|
|
V: make(map[SessionId]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.
|
2023-07-12 00:33:51 +03:00
|
|
|
func (si SessionId) ToTelegram() int64 {
|
|
|
|
return int64(si)
|
|
|
|
}
|
|
|
|
|
2023-07-12 14:06:05 +03:00
|
|
|
// Add new empty session by it's ID.
|
2023-07-12 00:33:51 +03:00
|
|
|
func (sm SessionMap) Add(sid SessionId) {
|
2023-07-12 14:06:05 +03:00
|
|
|
sm[sid] = NewSession(sid)
|
2023-07-12 00:33:51 +03:00
|
|
|
}
|