当我添加bot.hears(...)
时,它会注册用于处理匹配文本消息的中间件。但现在它将处理这些消息,即使它们是在任何时间发送的,即使不是预期的。因此,如果我正在创建一个有状态的服务,我只想在适当的时候监听特定的消息。
如何注销中间件,使其不再hear
以前处理过的消息?
发布于 2021-04-01 00:16:49
我发现我是在找Scenes。在Github上描述了如何使用它们。
我将从上面的链接中发布一个稍微修改过的代码:
const { Telegraf, Scenes, session } = require('telegraf')
const contactDataWizard = new Scenes.WizardScene(
'CONTACT_DATA_WIZARD_SCENE_ID', // first argument is Scene_ID, same as for BaseScene
(ctx) => {
ctx.reply('Please enter guest\'s first name', Markup.removeKeyboard());
ctx.wizard.state.contactData = {};
return ctx.wizard.next();
},
(ctx) => {
// validation example
if (ctx.message.text.length < 2) {
ctx.reply('Please enter real name');
return;
}
ctx.wizard.state.contactData.firstName = ctx.message.text;
ctx.reply('And last name...');
return ctx.wizard.next();
},
);
const stage = new Scenes.Stage();
stage.register(contactDataWizard);
bot.use(session());
bot.use(stage.middleware());
但是我仍然不知道如何实现它,所以我需要在Telegraf的场景代码中找到它。
https://stackoverflow.com/questions/66887703
复制相似问题