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

问题描述

我有一个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

,但仍然无法正常工作。那我该怎么办?谢谢

解决方法

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

您可能正在寻找inline-keyboards(位于邮件成员底部的按钮可以与之交互)。

以下是在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()

如果您想改用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"),reply_markup: buttons
  }
)

示例输出:

enter image description here

其他资源:

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...