问题描述
我有一个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
}
)
示例输出:
其他资源: