Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.07.2021, 13:41
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

Бот для телеги, кейсы ввода на кнопках и не только
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)
или это надо какую-то внутреннюю сессию для пользователя делать? (что в данный момент видит то-то, потому что нажал то-то...)
Ответить с цитированием
  #2 (permalink)  
Старый 13.07.2021, 11:23
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

Для тех, у кого такая же мысля зародиться ...

В общем, из коробки такой фичи нет в node-telegram-bot-api и в самой телеге.

Есть другая либа https://telegraf.js.org/, в ней есть Scene, WizardScene, Session...

В питоне эта хрень называется ConversationHandler...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Валидатор для ввода любой арифметической операции Mirendo Общие вопросы Javascript 2 06.06.2017 06:08
Регулярка для поля ввода числа Bab Общие вопросы Javascript 14 08.04.2017 19:11
Background-attachment только для вертикального скроллинга Lex4e Общие вопросы Javascript 2 04.02.2010 12:08
Форма для ввода текста с расширенными функциями 0x22b Элементы интерфейса 0 01.09.2008 10:38
JS'ом поменять textDecoration только для случаев link и visited lancer Элементы интерфейса 3 05.04.2008 20:51