Файли
2026-11-07 01:35:12 +00:00

39 рядки
1.1 KiB
Go

package shared
import (
"github.com/mymmrac/telego"
th "github.com/mymmrac/telego/telegohandler"
"git.entityseven.com/rilaxik/pllist/internal/domain"
"git.entityseven.com/rilaxik/pllist/internal/service"
)
// PendingHandler consumes free text for a feature after its prompt.
type PendingHandler func(
ctx *th.Context, user domain.User, pending service.Pending, message telego.Message,
) error
// PendingRouter lets features own their prompt handlers without making the
// root dispatcher know every feature.
type PendingRouter struct {
handlers map[service.PendingAction]PendingHandler
}
func NewPendingRouter() *PendingRouter {
return &PendingRouter{handlers: make(map[service.PendingAction]PendingHandler)}
}
func (r *PendingRouter) Register(action service.PendingAction, handler PendingHandler) {
r.handlers[action] = handler
}
func (r *PendingRouter) Dispatch(
ctx *th.Context, user domain.User, pending service.Pending, message telego.Message,
) (bool, error) {
handler, ok := r.handlers[pending.Action]
if !ok {
return false, nil
}
return true, handler(ctx, user, pending, message)
}