middleware: add context arg to the Recover

pull/671/merge v3.3.3-beta
Demian 2 months ago
parent af50a953b5
commit a26ba9f0bd

@ -32,26 +32,28 @@ func IgnoreVia() tele.MiddlewareFunc {
} }
} }
type RecoverFunc = func(error, tele.Context)
// Recover returns a middleware that recovers a panic happened in // Recover returns a middleware that recovers a panic happened in
// the handler. // the handler.
func Recover(onError ...func(error)) tele.MiddlewareFunc { func Recover(onError ...RecoverFunc) tele.MiddlewareFunc {
return func(next tele.HandlerFunc) tele.HandlerFunc { return func(next tele.HandlerFunc) tele.HandlerFunc {
return func(c tele.Context) error { return func(c tele.Context) error {
var f func(error) var f RecoverFunc
if len(onError) > 0 { if len(onError) > 0 {
f = onError[0] f = onError[0]
} else { } else {
f = func(err error) { f = func(err error, c tele.Context) {
c.Bot().OnError(err, nil) c.Bot().OnError(err, c)
} }
} }
defer func() { defer func() {
if r := recover(); r != nil { if r := recover(); r != nil {
if err, ok := r.(error); ok { if err, ok := r.(error); ok {
f(err) f(err, c)
} else if s, ok := r.(string); ok { } else if s, ok := r.(string); ok {
f(errors.New(s)) f(errors.New(s), c)
} }
} }
}() }()

Loading…
Cancel
Save