Files
mautrix-telegram/pkg/gotd/telegram/updates/hook/hook.go
T
2025-06-27 20:03:37 -07:00

35 lines
937 B
Go

// Package hook contains telegram update hook middleware.
package hook
import (
"context"
"github.com/go-faster/errors"
"go.mau.fi/mautrix-telegram/pkg/gotd/bin"
"go.mau.fi/mautrix-telegram/pkg/gotd/telegram"
"go.mau.fi/mautrix-telegram/pkg/gotd/tg"
)
// UpdateHook middleware is called on each tg.UpdatesClass method result.
//
// Function is called before invoker return. Returned error will be wrapped
// and returned as InvokeRaw result.
type UpdateHook func(ctx context.Context, u tg.UpdatesClass) error
// Handle implements telegram.Middleware.
func (h UpdateHook) Handle(next tg.Invoker) telegram.InvokeFunc {
return func(ctx context.Context, input bin.Encoder, output bin.Decoder) error {
if err := next.Invoke(ctx, input, output); err != nil {
return err
}
if u, ok := output.(*tg.UpdatesBox); ok {
if err := h(ctx, u.Updates); err != nil {
return errors.Wrap(err, "hook")
}
}
return nil
}
}