如何在Telegram bot中获取最后执行的命令?

时间:2016-10-11 16:11:41

标签: bots telegram

我有一个像这样的电报机器人

  • webhook
  • 获取更新
  • 语言:C#(我也欢迎使用其他语言的答案)
  • 我们为用户提供了以下方案:

    1. /MyPhoto a_parameter命令发送到bot
    2. 将照片发送到机器人
    3. 将另一张照片发送到机器人
    4. 将另一张照片发送到机器人

基本问题:

在发送/MyPhoto a_parameter命令后确保用户发送的照片的最佳方式是什么?

某些方式:

  • 我可以保存数据库中每个用户执行的每个命令,并获取当前用户最后执行的命令并将其与/MyPhoto进行比较,如果它们相等则我确定用户在/MyPhoto命令后发送照片。
  • 创建缓存系统以保存每个用户的上次执行的命令(与db混合)
  

但如果有可能,我希望阻止获取最后执行的命令   从数据库到提高性能

您知道更好的解决方案吗?例如,使用电报机器人API中的一些东西来保持最后执行的命令隐藏在用户和机器人之间的发送/接收消息中。

我通过添加第3步和第3步编辑了这个问题。 4在上面的场景中。

3 个答案:

答案 0 :(得分:1)

这正是ForceReply按钮的制作。 https://core.telegram.org/bots/api#forcereply

1)Bot接收MyPhoto命令并使用ForceReply键盘将此消息发送回用户。

2)Bot收到包含用户上一条消息的reply_to_message对象的新消息,photo

答案 1 :(得分:1)

问题1:

  

确保用户发送的照片是正确的最佳方法是什么   发送/ MyPhoto a_parameter命令后?

我认为最佳解决方案是为每位用户存储/ MyPhoto update_id,并将其与上传的照片update_id进行比较。

请参阅电报文档:

  

更新的唯一标识符。更新标识符从a开始   某些正数并按顺序增加。这个ID变成了   如果你使用Webhooks,特别方便,因为它允许你   忽略重复更新或恢复正确的更新顺序,   如果它们失灵了。

问题2:

  

您知道更好的解决方案吗?比如使用一些东西   telegram bot API将上次执行的命令保持为隐藏状态   在用户和机器人之间发送/接收消息。

将InlineKeyboardMarkup与上次执行的命令一起用作回调数据。当用户选择内联按钮时,您可以从其更新中获取回调数据。

答案 2 :(得分:0)

关于SO的类似问题,例如one。基本上除了保留历史记录之外没有办法(或者在你的情况下只保留每个用户的最后一个命令)。您可以使用简单的哈希表,使用chat_id作为检索与每个用户交互的密钥。