动态创建内联键盘按钮telegram api?

时间:2017-09-06 08:30:23

标签: javascript node.js telegram-bot

我正在尝试使用电报bot api将按钮发送到我的电报机器人。目前,为了创建按钮,我必须对字段中的值进行硬编码,但是我想要通过数组动态创建内联键盘按钮,并将数组索引和数组值作为参数传递。我该怎么办呢?  这是我到目前为止所尝试的。

  var menu =["Nightclub","Parks","Restaurants","Telecom","Internet"];
    var options = {
                    reply_markup: JSON.stringify({
                        inline_keyboard: [
                            [{ text: 'Some button text 1', callback_data: '1' }],
                            [{ text: 'Some button text 2', callback_data: '2' }],
                            [{ text: 'Some button text 3', callback_data: '3' }]
                        ]
                    })
                };

假设我想在我的选项中动态传递菜单数组中的数据。我该怎么做呢?

2 个答案:

答案 0 :(得分:4)

如果我理解你的话。

我们将在这里使用Array.map函数使用菜单数组创建一个数组。

  var menu = ["Nightclub", "Parks", "Restaurants", "Telecom", "Internet"];


  var options = {
       reply_markup: JSON.stringify({
            inline_keyboard: menu.map((x, xi) => ([{
                text: x,
                callback_data: String(xi + 1),
            }])),
      }),
  };

结果是:

    {
      reply_markup: JSON.stringify({
        inline_keyboard: [
          [{
            text: 'Nightclub',
            callback_data: '1'
          }],
          [{
            text: 'Parks',
            callback_data: '2'
          }],
          [{
            text: 'Restaurants',
            callback_data: '3'
          }],
          [{
            text: 'Telecom',
            callback_data: '4'
          }],
          [{
            text: 'Internet',
            callback_data: '5'
          }],
        ],
      }),
    }

答案 1 :(得分:2)

您也可以尝试使用简单的for循环:

var keyboard = [];
var menu = ['Nightclub', 'Parks', 'Restaurants', 'Telecom', 'Internet'];

for (var i = 0; i < menu.length; i++) {
  keyboard.push([{'text': menu[i], 'callback_data': (i + 1)}]);
}

{
  'reply_markup': JSON.stringify({
    inline_keyboard: keyboard
  })
}


/* The result will be:
{
  'reply_markup': JSON.stringify({
    inline_keyboard: [
      [{'text': 'Nightclub', 'callback_data': '1'}],
      [{'text': 'Parks', 'callback_data': '2'}],
      [{'text': 'Restaurants', 'callback_data': '3'}],
      [{'text': 'Telecom', 'callback_data': '4'}],
      [{'text': 'Internet', 'callback_data': '5'}]
    ]
*/