Add plugin message fallback
Route unmatched messages through plugin fallback handlers Add observer coverage and bump version to rc.15
This commit is contained in:
+15
-7
@@ -171,7 +171,8 @@ type Plugin[T AppData] struct {
|
||||
skipAutoCmd bool // If true, all commands in this plugin are excluded from auto-help
|
||||
logger *slog.Logger
|
||||
|
||||
handlers map[tgapi.UpdateType]CommandExecutor[T]
|
||||
messageFallback CommandExecutor[T]
|
||||
handlers map[tgapi.UpdateType]CommandExecutor[T]
|
||||
|
||||
onClose func() error
|
||||
}
|
||||
@@ -243,12 +244,6 @@ func (p *Plugin[T]) AddScene(scene *Scene[T]) *Plugin[T] {
|
||||
return p
|
||||
}
|
||||
|
||||
// UsePolicy registers a Policy as plugin middleware for all plugin handlers.
|
||||
func (p *Plugin[T]) UsePolicy(name string, policy Policy[T]) *Plugin[T] {
|
||||
mw := RequirePolicy(name, policy)
|
||||
return p.AddMiddleware(mw)
|
||||
}
|
||||
|
||||
// NewScene creates, registers, and returns a new scene owned by the plugin.
|
||||
func (p *Plugin[T]) NewScene(name string) *Scene[T] {
|
||||
scene := NewScene[T](name)
|
||||
@@ -257,6 +252,12 @@ func (p *Plugin[T]) NewScene(name string) *Scene[T] {
|
||||
return scene
|
||||
}
|
||||
|
||||
// UsePolicy registers a Policy as plugin middleware for all plugin handlers.
|
||||
func (p *Plugin[T]) UsePolicy(name string, policy Policy[T]) *Plugin[T] {
|
||||
mw := RequirePolicy(name, policy)
|
||||
return p.AddMiddleware(mw)
|
||||
}
|
||||
|
||||
// AddUpdateHandler registers a handler for a non-command update type.
|
||||
// Message, channel post, and callback query updates stay on the command/payload flow.
|
||||
func (p *Plugin[T]) AddUpdateHandler(t tgapi.UpdateType, handler CommandExecutor[T]) *Plugin[T] {
|
||||
@@ -316,6 +317,13 @@ func (p *Plugin[T]) SetOnClose(f func() error) *Plugin[T] {
|
||||
return p
|
||||
}
|
||||
|
||||
// SetMessageFallback registers a fallback handler for messages that do not
|
||||
// match a command.
|
||||
func (p *Plugin[T]) SetMessageFallback(handler CommandExecutor[T]) *Plugin[T] {
|
||||
p.messageFallback = handler
|
||||
return p
|
||||
}
|
||||
|
||||
// Close releases plugin-owned resources such as its logger and optional
|
||||
// OnClose callback.
|
||||
func (p *Plugin[T]) Close() error {
|
||||
|
||||
Reference in New Issue
Block a user