【问题标题】:Telegraf.js add buttons with markup on sendPhotoTelegraf.js 在 sendPhoto 上添加带有标记的按钮
【发布时间】:2020-09-14 10:31:45
【问题描述】:

我有一个bot.telegram.sendPhoto(),上面有这个代码:

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

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

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

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

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

【问题讨论】:

    标签: node.js telegraf telegram-api telegraf.js


    【解决方案1】:

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

    您可能正在寻找inline-keyboards(附加在消息底部的按钮,成员可以与之交互)。

    以下是在电报中发送内联键盘的方法(例如 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
      }
    )
    
    

    样本输出:

    更多资源:

    【讨论】:

    • 你一定是做错了什么。我附上的示例输出是我给出的示例代码的直接结果。 Edit your question 添加您编写的 sn-p,或通过 pastebin/Github Gist 分享 - 以便我可以提供帮助
    • 不,对不起,我的错我忘了我用标记添加了一些东西,我忘了转义一个点。它完美地工作。但是,如果我使用 Markup.inlineKeyboards,为什么它不起作用? (来自 require('telegraf/markup');?
    • 我给你加了一个例子,请看更新后的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    相关资源
    最近更新 更多