Бот для телеги, кейсы ввода на кнопках и не только
const TelegramBot = require('node-telegram-bot-api'); const token = ''; const bot = new TelegramBot(token, { polling: true }); const keyboard = [ [ { text: 'Ввести имя', callback_data: 'userKeyboard', } ], [ { text: 'Ввести число', callback_data: 'numberKeyboard', } ], ]; const userKeyboard = [ [ // в этом месте конечно можно сделать свою виртуальную клавиатуру и апдейтить оригинальный мессэдж в зависимости от нажатий на виртуальную клаву, но я так не хочу // вообще есть возможность вводить в стандартное телеграммовское текстовое поле, и чтобы это сообщение аттачилось к текущему выбранному кейсу { text: 'кнопока 1', callback_data: 'ready' }, ] ]; const numberKeyboard = [ [ { text: 'кнопока 2', callback_data: 'ready' }, ] ] bot.on('message', (msg) => { // предположим это можно переписать на bot.onText(/start/)... const chatId = msg.chat.id; bot.sendMessage(chatId, 'Привет', { reply_markup: { inline_keyboard: keyboard } }); }); bot.on('callback_query', (query) => { const chatId = query.message.chat.id; if (query.data === 'userKeyboard') { bot.editMessageReplyMarkup({ inline_keyboard: userKeyboard }, { chat_id: chatId, message_id: query.message.message_id }) } else if (query.data === 'numberKeyboard') { bot.editMessageReplyMarkup({ inline_keyboard: numberKeyboard }, { chat_id: chatId, message_id: query.message.message_id }) } else { bot.editMessageReplyMarkup({ inline_keyboard: keyboard }, { chat_id: chatId, message_id: query.message.message_id }) } }); то есть 1) пользователь заходит и видит "Привет" и две кнопки "Ввести имя" и "Ввести число" 2) жмет на "Ввести имя" 3) Результат ввода в стандартное телеграммовское поле для ввода, жмет отправить 4) и как понять что он ввел имя, потому что (см.п.2) или это надо какую-то внутреннюю сессию для пользователя делать? (что в данный момент видит то-то, потому что нажал то-то...) |
Для тех, у кого такая же мысля зародиться ;)...
В общем, из коробки такой фичи нет в node-telegram-bot-api и в самой телеге. Есть другая либа https://telegraf.js.org/, в ней есть Scene, WizardScene, Session... В питоне эта хрень называется ConversationHandler... |
Часовой пояс GMT +3, время: 14:35. |