callback_data
, и наоборот, инлайновые кнопки не могут возвращать текст.bot.command('command', callback) // вместо command - текст кнопки без /
bot.on('text', callback) // и проверять не равно ли ctx.message.text нужному значению
const { message } = require('telegraf/filters')
bot.on(message('text'), callback) // рекомендуемая версия предыдущего примера
callback_data
, кодом, который предложил выше StepsOnes ctx.wizard.state
, куда можно положить любые данные, например так:const { Composer, Scenes, Telegraf } = require('telegraf');
const TELEGRAM_BOT_TOKEN = process.env.TELEGRAM_BOT_TOKEN;
const bot = new Telegraf(TELEGRAM_BOT_TOKEN);
const first_handler = new Composer();
const second_handler = new Composer();
const exit = new Composer();
first_handler.on('text', async ctx => {
ctx.wizard.state.name = ctx.message.text;
await ctx.reply("Отлично, теперь введи свой возраст: ");
return ctx.wizard.next();
});
second_handler.hears(/[0-9]+/, async ctx => {
ctx.wizard.state.age = ctx.message.text;
await ctx.reply('Отлично. Теперь введи свой адрес: ');
return ctx.wizard.next();
});
exit.on('text', async ctx => {
ctx.wizard.state.address = ctx.message.text;
await ctx.reply(
`Твое имя: ${ctx.wizard.state.name}
Твой возраст: ${ctx.wizard.state.age}
Твой адрес: ${ctx.wizard.state.address}`)
return ctx.scene.leave();
});
const wizard_scene = new Scenes.WizardScene('wizard_scene', first_handler, second_handler, exit);
const stage = new Scenes.Stage([wizard_scene]);
bot.use(session(), stage.middleware());
bot.start(async ctx => {
await ctx.reply('Привет! Введи свое имя: ');
return ctx.scene.enter('wizard_scene');
});
bot.launch().then(
console.log('Bot launched!')
);
// Enable graceful stop
process.once('SIGINT', () => bot.stop('SIGINT'));
process.once('SIGTERM', () => bot.stop('SIGTERM'));
ctx.wizard.state
написать ctx.state
.