带有回调的python电报机器人

时间:2019-01-07 11:00:51

标签: python bots telegram telegram-bot python-telegram-bot

我正在使用模块python-telegram-bot

我想写一个类似于@vkmusic_bot的机器人:

  1. 用户向机器人发送带有歌曲名称的搜索查询
  2. Bot处理此查询字符串并将文件选项菜单发送给用户
  3. 用户选择所需的歌曲,然后按相应的按钮
  4. Bot将.mp3文件发送给用户

Episode II: Customizing serialization using the gson library in the Mobile Services Android client

我的问题是关于处理回调的。尤其是我对第2步感到困惑-如何创建菜单以及机器人如何解析用户的选择?

1 个答案:

答案 0 :(得分:0)

免责声明:我使用了一个不同的框架,因此在curl中将为您提供指向Telegram Bot API文档和示例的链接。下面的所有内容仅是示例;有很多方法可以实现您的目标。


  

如何制作菜单?

如果要发送与示例图片相似的菜单,请使用inline keyboard

基本上,这里的菜单是InlineKeyboardMarkup object,其中包含InlineKeyboardButton objects的数组。每个按钮必须指定2个属性:

  1. text-这只是一个按钮的标题
  2. callback_data-此属性保存一个文本数据,稍后它将被bot用于确定用户按下了哪个按钮。如何将信息存储在此属性中取决于您。 请注意,此属性的大小限制为64个字节。

因此callback_data可用于标识特定的.mp3文件。这有点像一个按钮的id和一首歌曲的id。也许,您应该在硬盘驱动器(例如)上的文件路径与其各自的id的路径之间存储关联。 Bot应该能够找到具有给定id的数据库中的文件路径,然后在磁盘上找到文件。

最后,当您的菜单准备就绪时,将其作为reply_markup method中的sendMessage属性发送。

简单的curl示例:

curl -v -H "Content-Type: application/json" \
-d '{"chat_id": <YOUR_USER_ID>, "text": "Choose the song:", "reply_markup": {"inline_keyboard": [[{"text": "song 1", "callback_data": "file78435675234"}],[{"text": "song 2", "callback_data": "file789231467982134"}],[{"text": "song 3", "callback_data": "file135423854423"}]]}}' \
https://api.telegram.org/bot<YOUR_BOT_ID>/sendMessage

  

机器人如何解析用户的选择?

如果您使用上例中的嵌入式键盘,则bot可以从传入objectdata updateCallbackQuery属性中检索有关用户选择的信息。

因此,当用户按下菜单中的特定按钮时,漫游器会收到该按钮的1)user_id和2)callback_data

借助此信息,机器人将能够在磁盘上找到所需的.mp3文件,然后使用sendAudio method将此文件发送给用户。