Telegraf.js 在 sendPhoto 上添加带有标记的按钮

Mat*_*tia 2 node.js telegraf telegraf.js telegram-api

我有bot.telegram.sendPhoto()这个代码:

bot.telegram.sendPhoto(
  channel_id,
  {source: filepath},
  { 
    caption: description.join("\n"), 
    parse_mode: 'MarkdownV2'
  }
)
Run Code Online (Sandbox Code Playgroud)

(描述是一个带有一些文本的数组。

所以我想添加一些按钮,然后执行一个操作,但我该怎么办?我已经尝试过这样的方式:

const buttons = Markup.keyboard([
            ["Test", "Test2"]
        ]).oneTime().resize().extra()
Run Code Online (Sandbox Code Playgroud)

然后将其添加到 parse_mode 之后的 {...} 中:

{ 
  caption: description.join("\n"), 
  parse_mode: 'MarkdownV2',
  buttons
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用。我也在 {...} 之后尝试过

{ 
  caption: description.join("\n"), 
  parse_mode: 'MarkdownV2'
},
buttons
Run Code Online (Sandbox Code Playgroud)

但它仍然不起作用。那我该怎么办呢?谢谢

Tib*_*. M 6

Markup.keyboard代表用于回复文本的自定义键盘(请参阅此处) - 它不可能在频道中使用(因为成员无法在频道中发送消息)。

您可能正在寻找内联键盘(附加在消息底部的按钮,成员可以与之交互)。

以下是如何在 telegraf 中发送内联键盘(带有callback_data按钮的示例):

const buttons = Telegraf.Extra.markup((m) =>
  m.inlineKeyboard([
      [ m.callbackButton('Test', 'test') ],
      [ m.callbackButton('Test 2', 'test2') ]
  ])
)

bot.action('test', async (ctx) => {
  console.log(ctx)
  try {
    await ctx.answerCbQuery();    
  } catch (error) {
  }
})


bot.telegram.sendPhoto(
  channel_id,
  {source: filepath},
  { 
    caption: description.join("\n"), 
    parse_mode: 'MarkdownV2',
    reply_markup: buttons.reply_markup
  }
)

bot.launch()
Run Code Online (Sandbox Code Playgroud)

如果您想改用该telegraf/markup模块,请按如下方式更新代码:

const Markup = require('telegraf/markup')

const buttons = Markup.inlineKeyboard([
  [Markup.callbackButton('Test', 'test')],
  [Markup.callbackButton('Test 2', 'test2')]
])

bot.telegram.sendPhoto(
  channel_id, {
    source: filepath
  }, {
    caption: description.join("\n"),
    parse_mode: 'MarkdownV2',
    reply_markup: buttons
  }
)

Run Code Online (Sandbox Code Playgroud)

示例输出:

在此输入图像描述

更多资源: