@getaxe
JS developer

Как правильно записать сцены в сессию telegraf.js?

На хабре много вопросов, но вопроса с ответом так и не нашел.

При записи новой сцены, предыдущая стирается, хотя контекст хранит их массивом, следовательно их может быть несколько. Делать костыль, из разряда пуша в массив новых сцен, пока что желания нет. Но чувствую скоро появиться. По сему прошу знающих людей объяснить, как правильно передать сцены в сессию.

Мой код на данный момент:
bot.use(session());
const giftCreate = new Stage([require('./scenes/giftCreate.js')(bot)]);
bot.use(giftCreate.middleware());
const giftUse = new Stage([require('./scenes/giftUse.js')(bot)]);
bot.use(giftUse.middleware());
const priceEdit = new Stage([require('./scenes/priceEdit.js')(bot)]);
bot.use(priceEdit.middleware());


Далее происходит вызов сцен, на который я ловлю ошибку.
case 'edit180':
            ctx.scene.enter('priceEdit');
            break;
        case 'giftCreate':
            ctx.scene.enter('giftCreate'); //Failed to process updates. Error: Can't find scene: giftCreate
            break;


При логировании вижу, что только сцена priceEdit, которую записывал последней, находиться в массиве.

Очень надеюсь на объяснение.

UPD: То как я в обработчик передал сцены - моя хотелка, ибо там должен оказаться еще и bot. В любом случае, все 3 работают, тогда, когда записываешь их последней.
  • Вопрос задан
  • 1073 просмотра
Решения вопроса 1
@getaxe Автор вопроса
JS developer
В общем, нашел причину.

Оставляю ответ тут, ибо куча вопросов на хабре, и нет ответов.

Суть в том, что Stage сделаны, чтоб заменять друг друга. А сцену нужно все помещать в 1 массив.
Надеюсь помогу кому-нибудь.

Было:
bot.use(session());
const giftCreate = new Stage([require('./scenes/giftCreate.js')(bot)]);
bot.use(giftCreate.middleware());
const giftUse = new Stage([require('./scenes/giftUse.js')(bot)]);
bot.use(giftUse.middleware());
const ы = new Stage([require('./scenes/priceEdit.js')(bot)]);
bot.use(priceEdit.middleware());


Стало:
bot.use(session());

const stage = new Stage([require('./scenes/giftCreate.js')(bot), require('./scenes/priceEdit.js')(bot), require('./scenes/giftUse.js')(bot)]);
bot.use(stage.middleware());
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы