0

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

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

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

所以我想添加一些按钮,然后执行一个动作,但我该怎么做?我试过这样:

const buttons = Markup.keyboard([
            ["Test", "Test2"]
        ]).oneTime().resize().extra()

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

{ 
  caption: description.join("\n"), 
  parse_mode: 'MarkdownV2',
  buttons
}

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

{ 
  caption: description.join("\n"), 
  parse_mode: 'MarkdownV2'
},
buttons

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

4

1 回答 1

2

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

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

以下是在电报中发送内联键盘的方式(带有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()

如果您想改用该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
  }
)

样本输出:

在此处输入图像描述

更多资源:

于 2020-09-14T11:21:46.113 回答