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

Dynamically creating inline keyboard buttons telegram api?

我正在尝试使用电报机器人 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' }]
                        ]
                    })
                };

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

如果我理解你就好了。

我们将在这里使用 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'
          }],
        ],
      }),
    }

您也可以尝试使用简单的 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'}]
    ]
*/