Блэд.
По поводу кэтча попробую вам всем объяснить.
1. Каждая асинхронная мидлварь (вернее, коллбэк аля async ctx => ctx
) по определению промис-функция вызываемая next() в промисе async (ctx, next) => next()
.) .
2. Async/await/catch это сахар над Promise.then.
3. Для того, чтобы цепочка корректно работала и промис резолвися, необходимо что-то возвращать промис {async ctx => return ctx.reply}
или async (ctx, next) => next()
4. bot.catch()
это глобальная обертка над всей этой цепочкой ваших асинхронных мидлварей
5. Резюмируя: Для того, чтобы глобальный кэтч над тем что в пункте 1 в конце работал корректно, вам необходимо чтобы ваши async промисы возвращали другие промисы и цепочка не прерывалась.
TL;DR: возвращайте в async мидлварях промисы a.k.a. return next() или return ctx.reply() и будет вам щастье глобального обработчика
короче, прикол, что next работает, но по доке то, что вне wizard сцены, игнорируется, и поэтому bot.catch не ловит ничо(