FILE / ScuroNeko/Laniakea
bot_scene.go
Исходный файл и его история в репозитории.
(fix): observer rename, panic emits ErrorEvent (refactor): Runner.Once removed, Scene.PluginName unexported (doc): godoc hygiene pre-1.0.0
56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package laniakea
|
|
|
|
func (bot *Bot[T]) getSession(key string) (SceneSession, error) {
|
|
return bot.sessionStore.Get(key)
|
|
}
|
|
|
|
func (bot *Bot[T]) setSession(key string, session SceneSession) error {
|
|
return bot.sessionStore.Set(key, session)
|
|
}
|
|
|
|
func (bot *Bot[T]) deleteSession(key string) error {
|
|
return bot.sessionStore.Delete(key)
|
|
}
|
|
func (bot *Bot[T]) findScene(name string) (*sceneMeta, bool) {
|
|
for _, plugin := range bot.plugins {
|
|
scene, ok := plugin.scenes[name]
|
|
if !ok {
|
|
continue
|
|
}
|
|
|
|
steps := make(map[string]struct{}, len(scene.steps))
|
|
for step := range scene.steps {
|
|
steps[step] = struct{}{}
|
|
}
|
|
|
|
return &sceneMeta{
|
|
Name: scene.name,
|
|
Scope: scene.scope,
|
|
Entry: scene.entry,
|
|
Steps: steps,
|
|
}, true
|
|
}
|
|
return nil, false
|
|
}
|
|
|
|
func (bot *Bot[T]) findSceneSession(ctx *MessageContext) (string, SceneSession, error) {
|
|
var zero SceneSession
|
|
|
|
for _, scope := range bot.sceneScopePriority {
|
|
key, ok := buildSceneKey(scope, ctx)
|
|
if !ok {
|
|
continue
|
|
}
|
|
|
|
session, err := bot.sessionStore.Get(key)
|
|
if err != nil {
|
|
return "", zero, err
|
|
}
|
|
if session.Scene != "" {
|
|
return key, session, nil
|
|
}
|
|
}
|
|
|
|
return "", zero, ErrCantFindSession
|
|
}
|