【问题标题】:Creating a handler by clicking on dynamic inline buttons通过单击动态内联按钮创建处理程序
【发布时间】:2021-05-10 15:12:09
【问题描述】:

我在数组中动态创建了按钮

keyboard = InlineKeyboardMarkup()
keyboard.row_width = 2
for i in range(0, len(adress)):
    keyboard.add(InlineKeyboardButton(adress[i].text, callback_data="address_"))
bot.send_message(cid, 'Выберите адрес парковки', reply_markup=keyboard)

如何跟踪其中一个按钮的点击并从中获取文本?我将所有按钮设置为相同的 callback_data。也许你可以这样做if call. data = = "address_":,但是我如何获取按钮文本?

【问题讨论】:

  • '我将所有按钮设置为相同的 callback_data':不是吗? callback_data 的想法是知道按下了什么按钮。

标签: python telegram telegram-bot python-telegram-bot py-telegram-bot-api


【解决方案1】:

当用户点击带有callback_dataInlineKeyboardButton 时,会生成CallbackQueryCallbackQuery 不包含有关单击的按钮文本的信息,而仅包含有关按钮具有的callback_data 的信息。因此,如果您想知道与该按钮关联的文本,我建议您使每个按钮的 callback_data 唯一。你可以

  • 将该文本直接放入callback_data
  • 使callback_data 成为唯一标识符并存储映射标识符 → 文本
  • 使callback_data 成为唯一标识符,并通过检查callback_query.message.reply_markup.keyboard 中的哪个按钮具有callback_data 来提取文本。请注意,这不适用于来自内联消息的回调查询,因为那些不带 callback_query.message

我个人推荐第二种解决方案。

【讨论】:

  • 如何做到这一点?我可以使callback_data 独一无二,但是如何创建处理程序以及如何获取消息? callback_data 总是不同的,因为它是动态生成的
  • > 如何创建处理程序无法回答,因为我不熟悉 pyTelegramBotApi > 如果不是内联消息,我如何获取消息,它将包含在更新中电报发送
猜你喜欢
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 2019-06-22
  • 2016-03-01
  • 2020-10-04
  • 1970-01-01
  • 2020-04-29
  • 2015-03-02
相关资源
最近更新 更多