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 }