← Вернуться к списку тем

inline меню в боте на node.js с использованием telegraf

Привет. Я недавно начал создавать ботов. Сейчас вникаю в создание кнопок меню с помощью node.js и telegraf.

Предисловие:
1. Я до сих пор еще не полностью понимаю как правильно пользоваться справкой от https://telegraf.js.org
2. Я не знаю js. Изучаю js на практике создания ботов в телеграм

Вопрос:
Моя задача: Создание информационного бота со встроенным меню под сообщением. Меню должно иметь подменю (При нажатии на один из пунктов основного меню должно появляться другое меню с несколькими кнопками)

Какие варианты я нашел:
1. Это из видео на ютубе какого-то англоязычного парня.
bot.command('gogo', (ctx) => {
        ctx.telegram.sendMessage(ctx.chat.id, 'gngffgfghgf!',
    {
        reply_markup: {
            inline_keyboard: [
               [{text:"delfi", callback_data: "DL"},{text:"еще текст", callback_data: "KK"}],
              [{text:"кнопка 3", callback_data: "LL"}]
           ]
        }
    });
});

bot.action("DL",(ctx) => {
    ctx.reply('нажатие первой кнопки прошло успешно');
});
2. Этот кусок кода мне подсказали в одном из чатов телеграмма по js
return Telegraf.Extra
    .markup((m) =>
      m.inlineKeyboard([
          m.callbackButton('Plot', plot)
      ])
    );
3. Этот вариант я нашел вроде как в справке https://telegraf.js.org. Но мне сказали что "это какой-то мусор"
https://github.com/EdJoPaTo/telegraf-inline-menu

Какой именно вариант относится к https://telegraf.js.org ? Какой лучше использовать? В 1 и 3 варианте я пробовал писать код и кнопки выводились. Но как делать подменю я не разобрался (думаю меня подводит незнание синтаксиса).
До второго варианта я еще не добрался. Как то мало примера в этом коде для новичка.

Будет очень здорово если у кого-нибудь есть рабочий пример такого меню на node.js - telegraf.
Давайте создадим нормальную инфу по inline клавиатурам, чтобы новичкам было проще обучаться ботостроению.

Ответы


  • iMakeBots [14.08.2020 в 11:59 → Иван]
    Я по части php больше.
    по Вашему 2 варианту накидал вывод меню.
    Предполагаю, что надо написать функцию которая бы по переданным критериям формировала меню - из бд или массива.

    // Подключаем модули
    const Telegraf = require('telegraf');
    // Общие настройки
    const config = {
      "token": ""
    };
    // Создаем объект бота
    const bot = new Telegraf(config.token, {});
    // кнопки меню
    const menu = () => {
      return Telegraf.Extra
        .markup((m) =>
          m.inlineKeyboard([
            [
              m.callbackButton('Press 0', '0'),
              m.callbackButton('Press 1', '1')
            ]
          ])
        )
    };
    // Старт бота
    bot.start((ctx) => ctx.reply('Type me something'));
    // слушаем
    bot
      .on('message', (ctx) => {
        ctx.reply("Выберите действие.", menu());
      })
      .on('callback_query', (ctx) => {
        // отвечаем телеграму что получили от него запрос
        ctx.answerCbQuery();
        // удаляем сообщение
        ctx.deleteMessage();
        // отвечаем на нажатие кнопки
        ctx.reply('You press '   ctx.callbackQuery.data, menu())
      });
    // запускаем бот
    bot.launch();