如何解决在Node.js中使用Telegraf的Telegram机器人问题
我对Node.js还是很陌生, 我正在尝试制作一个提示用户搜索单词的机器人,然后在MySQL数据库中查找匹配的行。 搜索过程应分为两个步骤:
- 仅在那时才要求用户通过嵌入式键盘选择选项;
- 要求用户写单词进行搜索。
Bot应该在步骤1的选项所选择的表中的数据库中搜索在步骤2中输入的单词,并检索该行。 机器人还应处理多个用户。 我尝试使用向导,但是由于没有大量文档,所以我无法处理嵌入式键盘回调。 sql部分没什么大问题,我正在使用npm“ mysql”。
这是我想出的代码:
const { Telegraf } = require('telegraf');
const session = require('telegraf/session');
const Stage = require('telegraf/stage');
const WizardScene = require('telegraf/scenes/wizard');
const bot = new Telegraf('token-here');
bot.start( (ctx) => {
ctx.reply('Bot started!');
})
const menuKeyboard = [
[
{text: 'OPT1',callback_data: 'CB_OPT1'},{text: 'OPT2',callback_data: 'CB_OPT2'},{text: 'OPT3',callback_data: 'CB_OPT3'}
],[
{text: 'OPT4',callback_data: 'CB_OPT4'},{text: 'OPT5',callback_data: 'CB_OPT5'},{text: 'OPT6',callback_data: 'CB_OPT6'}
]
]
bot.action(['CB_OPT1','CB_OPT2','CB_OPT3','CB_OPT4','CB_OPT5','CB_OPT6'],(ctx) => {
ctx.deleteMessage();
ctx.reply(`Insert search term:`);
return ctx.wizard.steps[1](ctx); //Re-enters wizard?
})
//Wizzard setup
const superWizard = new WizardScene('super-wizard',//Step 1 - Ask option
ctx => {
ctx.reply("Select an option:",{
reply_markup: {
inline_keyboard: menuKeyboard
}
});
ctx.wizard.state.data = {};
return ctx.wizard.next();
//Callback calls bot.action above
},ctx => {
ctx.deleteMessage();
ctx.wizard.state.data.option = ctx.message.text;
}
);
const stage = new Stage([superWizard]);
bot.use(session());
bot.use(stage.middleware());
bot.command('search',(ctx) => {
//ctx.scene.enter('super-wizard');
ctx.reply("Select an option:",{
reply_markup: {
inline_keyboard: menuKeyboard
}
});
})
bot.launch();
使用向导是最好的方法吗? 谢谢!,我才刚开始:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。