@PanLipton

Не работает практически такой же пример из примеров telegraf, scene?

Вставляю пример из документации (он реально работает)
const Telegraf = require('telegraf')
const session = require('telegraf/session')
const Stage = require('telegraf/stage')
const Scene = require('telegraf/scenes/base')
const bot = new Telegraf("ТОКЕН", { handlerTimeout: 100 });
// Handler factoriess
const { enter, leave } = Stage

// Greeter scene
const greeterScene = new Scene('greeter')
greeterScene.enter((ctx) => ctx.reply('Hi'))
greeterScene.leave((ctx) => ctx.reply('Bye'))
greeterScene.hears('hi', enter('greeter'))
greeterScene.on('message', (ctx) => ctx.replyWithMarkdown('Send `hi`'))

// Echo scene
const echoScene = new Scene('echo')
echoScene.enter((ctx) => ctx.reply('echo scene'))
echoScene.leave((ctx) => ctx.reply('exiting echo scene'))
echoScene.command('back', leave())
echoScene.on('text', (ctx) => ctx.reply(ctx.message.text))
echoScene.on('message', (ctx) => ctx.reply('Only text messages please'))


const stage = new Stage([greeterScene, echoScene], { ttl: 10 })
bot.use(session())
bot.use(stage.middleware())
bot.command('greeter', (ctx) => ctx.scene.enter('greeter'))
bot.command('echo', (ctx) => ctx.scene.enter('echo'))
bot.on('message', (ctx) => ctx.reply('Try /echo or /greeter'))
bot.launch()


Моя попытка повторить что-то подобное -- не работает.
const Telegraf = require('telegraf')
const session = require('telegraf/session')
const Stage = require('telegraf/stage')
const Scene = require('telegraf/scenes/base')
const bot = new Telegraf("ТОКЕН", { handlerTimeout: 100 });

const { enter, leave } = Stage

const NameScene = new Scene("namespace");

NameScene.enter((ctx) => {
    ctx.reply("Send your name, user");
    namespace.on('text', async(ctx) =>{
      let HeName = ctx.message.text
    }) 
    if (HeName.lenght() < 2) {
        ctx.reply("Setup your real name")
    }
})

bot.command('start', (ctx) => ctx.scene.enter('namespace'))

const stage = new Stage([NameScene], { ttl: 10 })
bot.use(session())
bot.use(stage.middleware())

bot.launch()


Выдаёт ошибку:
TypeError: Cannot read property 'enter' of undefined.
scenes.js:21:41
  • Вопрос задан
  • 1366 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Lokot
To do so:

Initialize session like this:
‘’’
session({
property: 'chatSession',
getSessionKey: (ctx) => ctx.chat && ctx.chat.id,
})
‘’’

pass { sessionName: 'chatSession' } in Stage constructor
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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