(new): add scene payload routing
Golang lint / lint (push) Has been cancelled

(fix): stabilize config file versions

(tests): cover routing and versions

(doc): improve exported godoc
This commit is contained in:
2026-04-24 11:34:53 +03:00
parent 7d4b150b0b
commit b0882a46d5
11 changed files with 327 additions and 17 deletions
+35
View File
@@ -86,6 +86,41 @@ func (bot *Bot[T]) executeScene(ctx *SceneContext, scene *Scene[T]) (bool, error
// instead of also triggering the active scene step or fallback handler.
return false, nil
}
query := ctx.Update.CallbackQuery
if query != nil {
data, err := bot.decodePayload(query.Data)
if err != nil {
return false, err
}
ctx.Args = data.Args
cmd := data.Command
if _, ok := scene.payloads[cmd]; ok {
startTime := time.Now()
bot.emitSceneStarted(ctx, scene, HandlerScenePayloadKind, cmd)
res, _, err := scene.executePayload(cmd, ctx, bot.appData)
if err != nil {
bot.emitSceneFinished(ctx, scene, HandlerScenePayloadKind, cmd, startTime, err)
bot.emitSceneError(ctx, scene, HandlerScenePayloadKind, cmd, err)
return false, err
}
from := ctx.sess.Step
ok, err := bot.applySceneResult(scene, ctx, res)
bot.emitSceneFinished(ctx, scene, HandlerScenePayloadKind, cmd, startTime, err)
if err != nil {
bot.emitSceneError(ctx, scene, HandlerScenePayloadKind, cmd, err)
}
if ok {
bot.emitSceneTransition(ctx, scene, from, res)
}
return ok, err
}
// Unmatched payloads should not trigger the active scene step or fallback handler.
// This allows using payloads for other bot features like pagination without interfering with active scenes.
return false, nil
}
ctx.Text = text
ctx.Args = nil
ctx.Prefix = ""