Всем привет, делаю middleware для wizard сцен на кнопку отмена,

код выглядит так:

const { Markup, Scenes } = require('telegraf')

exports.cancelMiddleware = (ctx, next) => {
if (ctx.callbackQuery && ctx.callbackQuery.data === 'cancel') {
ctx.answerCbQuery('Отменено!');
return ctx.scene.leave();
}
return next();
}

exports.addCancelButtonMiddlewareInScenesReply = (ctx, next) => {
const originalReply = ctx.reply;

ctx.reply = (text, ...args) => {
const cancelButton = Markup.button.callback('❌Отмена❌', 'cancel');

args[0].reply_markup.inline_keyboard.push([cancelButton]);
return originalReply.call(ctx, text, ...args);
};

return next();
};

=========

const stage = new Scenes.Stage([
registrationWizard,
successVideoReportWizard,
sendWorkVideoReportWizard,
sendMoneyWizard,
upProxyLimitWizard
]);
stage.use(cancelMiddleware);
stage.use(addCancelButtonMiddlewareInScenesReply);
bot.use(stage.middleware());


Но не могу придумать как сделать так что бы кнопка отмены добавлялась ТОЛЬКО когда юзеру приходит сообщение из wizard сцены, это возможно?
ctx не содержит в себе переменной что юзер находится в сцене

5 ответов

8 просмотров
Dmitry- Автор вопроса

Решил задачу таким кодом const scenesList = [ registrationWizard, successVideoReportWizard, sendWorkVideoReportWizard, sendMoneyWizard, upProxyLimitWizard, ]; scenesList.map((scene) => {scene.use(addCancelButtonMiddlewareInScenesReply)}) const stage = new Scenes.Stage(scenesList);

Dmitry
Решил задачу таким кодом const scenesList = [ ...

В принципе норм вариант, а так по идее должен быть объект сцены в ctx.scene.current

Dmitry- Автор вопроса
🇦niCoder
В принципе норм вариант, а так по идее должен быт...

он наверное есть в контексте внутри сцены, а миддлвейр не там, там нет ctx.scene.current

Dmitry- Автор вопроса
🇦niCoder
В принципе норм вариант, а так по идее должен быт...

вообще плохой вариант, я все переписал. Переопределил reply и добавил функцию replyWithCancel так лучше на много, а то пихает ее в конце сцены туда где она не нужна

Похожие вопросы

Обсуждают сегодня

Сonst magicTgHTML = (text, entities) => { let processedText = text; let offsetShift = 0; entities.forEach(entity => { const { offset, length, type, url, ...
Андрей
1
Кстати, раз про скачивание файлов разговор зашел) Сделал бота для себя (транскрибирующего и суммаризирующего встречи) но не ожидал что за 2 месяца 10к пользователей набежит😅...
Andrey Obolenskiy
8
коллеги привет. уже второй день бьемся об заклад с одной ошибкой, может вы сталкивались с таки странным поведением? есть тестовый сервер, на который паблишим релизную версию W...
Magzhan
11
Слушайте, а при создании навигации на Tailor рили нельзя определять активный пункт навигации, как в Static Pages?
Pavel Lautsevich
11
Всем привет, подскажите где можно найти фриланс работы?
Вадим
7
Господа, а как такое в миграцию засунуть?
Денис Александрович
12
Привет. Кто-то использует Vault KV как корпоративную хранилку паролей? Какие минусы?)
Alex R
3
Добрый день, в тейлоре насоздавал галерей и хочу на странице вывести только те, что указаны в массиве и самое главное в том же порядке. gallery.whereIn возвращает какой свой ...
Artem Anufrirev
2
Ребят, а как ограничить количество страниц в пагинаторе?
Atid Kitdeveloper.ru
2
Так а кто может спарсить всех участников чата? Идишники
Magic
18
Карта сайта