Javascript 在Node.js问题中使用Telegraf的电报机器人
我对Node.js还是个新手, 我正在尝试制作一个机器人,它会提示用户搜索一个单词,然后在MySQL数据库中查找匹配的行。 搜索过程应分为两个步骤: 用户被要求通过内联键盘选择一个选项,只有这样; 用户被要求写下要搜索的单词。 Bot应该在步骤1中的option选择的表中搜索数据库,查找步骤2中输入的单词,然后检索该行。 此外,bot还应该处理多个用户。 我尝试过使用向导,但由于没有太多文档,我无法处理内联键盘回调。 Sql部分不是什么大问题,我使用的是npm mysql 下面是我想出的代码:Javascript 在Node.js问题中使用Telegraf的电报机器人,javascript,node.js,telegram,telegraf,Javascript,Node.js,Telegram,Telegraf,我对Node.js还是个新手, 我正在尝试制作一个机器人,它会提示用户搜索一个单词,然后在MySQL数据库中查找匹配的行。 搜索过程应分为两个步骤: 用户被要求通过内联键盘选择一个选项,只有这样; 用户被要求写下要搜索的单词。 Bot应该在步骤1中的option选择的表中搜索数据库,查找步骤2中输入的单词,然后检索该行。 此外,bot还应该处理多个用户。 我尝试过使用向导,但由于没有太多文档,我无法处理内联键盘回调。 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();
使用向导是最好的方法吗?
谢谢我刚开始: