1
bot/process_update.go
2024-10-17 11:17:15 +03:00

46 lines
760 B
Go

package bot
import (
"context"
"github.com/go-telegram/bot/models"
)
func applyMiddlewares(h HandlerFunc, m ...Middleware) HandlerFunc {
if len(m) < 1 {
return h
}
wrapped := h
for i := len(m) - 1; i >= 0; i-- {
wrapped = m[i](wrapped)
}
return wrapped
}
// ProcessUpdate allows you to process update
func (b *Bot) ProcessUpdate(ctx context.Context, upd *models.Update) {
h := b.findHandler(upd)
r := applyMiddlewares(h, b.middlewares...)
if b.notAsyncHandlers {
r(ctx, b, upd)
return
}
go r(ctx, b, upd)
}
func (b *Bot) findHandler(upd *models.Update) HandlerFunc {
b.handlersMx.RLock()
defer b.handlersMx.RUnlock()
for _, h := range b.handlers {
if h.match(upd) {
return h.handler
}
}
return b.defaultHandlerFunc
}