Задать вопрос
@buhantsev

Почему не работают Scenes в Telegram?

В Telegraf не работает функционал сцен. Не могу понять почему не срабатывает middleware. Мой код:
import { Telegraf, Scenes } from "telegraf";

let token = 'XXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXX';

let bot = new Telegraf(token);

let scene1 = new Scenes.BaseScene('test1');
scene1.enter((ctx) => { console.log('Enter to Scene 1'); })
scene1.command('test', ctx => { console.log('Test in scene 1')})
scene1.leave(()=> { console.log('Exit scene 1')})

let scene2 = new Scenes.BaseScene('test2');
scene2.enter((ctx) => { console.log('Enter to Scene 2'); })
scene2.command('test', ctx => { console.log('Test in scene 2')})
scene2.leave(()=> { console.log('Exit scene 2')})

let stage = new Scenes.Stage([scene1, scene2], { ttl: 10 });

bot.use(stage.middleware());

bot.command('lt', ctx => {
  ctx.scene.enter('test1')
})

bot.on('text', ctx => {
  console.log('text');
})

bot.launch();


После вызова bot.use(stage.middleware()) в переменной контекста ctx не появляется секция ctx.scene
При вызове сцены соответственно появляется ошибка:
ctx.scene.enter('test1')
            ^
TypeError: Cannot read properties of undefined (reading 'enter')
  • Вопрос задан
  • 487 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@EvgenyParomov
Сам долго бился с этой проблемой, для того что бы работали telegraph сцены session middleware нужен. В твоём примере есть только stage.middleware()

bot.use(session());
bot.use(stage.middleware());
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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