我有一个包含以下代码的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但还是没用。那我该怎么办?谢谢
发布于 2020-09-14 11:21:46
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()如果要使用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
}
)示例输出:

进一步参考资料:
https://stackoverflow.com/questions/63882563
复制相似问题