Files
lukaszraczylo ac7cae8fa7 Initial release of go-telegram
A fully-generated, strongly-typed Go client for the Telegram Bot API.

* 176 methods + 301 types generated from Bot API v10.0
* 1408 auto-generated tests (8 scenarios per method)
* Typed unions throughout — no 'any' in the public surface
* Pluggable HTTP transport and JSON codec (default goccy/go-json)
* Built-in retry middleware honouring Telegram's retry_after
* Generic dispatcher with filters and conversation handlers
* Self-verifying codegen pipeline (regen → audit → emit → run tests)
* 14 example bots covering common patterns
2026-05-09 13:09:27 +01:00

28 lines
728 B
Go

package dispatch
import (
"fmt"
"runtime/debug"
"github.com/lukaszraczylo/go-telegram/api"
)
// Recovery returns middleware that recovers from panics in downstream
// handlers, converting them into a returned error and logging via the
// bot's configured logger. Registered automatically by NewRouter.
func Recovery() Middleware[*api.Update] {
return func(next Handler[*api.Update]) Handler[*api.Update] {
return func(c *Context, u *api.Update) (err error) {
defer func() {
if r := recover(); r != nil {
err = fmt.Errorf("panic in handler: %v\n%s", r, debug.Stack())
if c.Bot != nil {
c.Bot.Logger().Error("dispatch recovered panic", "err", err)
}
}
}()
return next(c, u)
}
}
}