【问题标题】:How to get the last executed command in a Telegram bot?如何在电报机器人中获取最后执行的命令?
【发布时间】:2017-02-20 06:24:03
【问题描述】:

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

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

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

基本问题:

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

一些方法:

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

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

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


我通过在上述场景中添加步骤 3 和 4 来编辑问题。

【问题讨论】:

    标签: bots telegram


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      2) Bot 接收到带有reply_to_message 对象的新消息,该对象包含用户之前的消息和photo

      【讨论】:

        【解决方案3】:

        问题一:

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

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

        查看 Telegram 文档:

        更新的唯一标识符。更新标识符从 一定的正数并依次增加。这个ID变成 如果您使用 Webhooks,则特别方便,因为它允许您 忽略重复更新或恢复正确的更新顺序, 他们是否会出现故障。

        问题 2:

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

        使用 InlineKeyboardMarkup 和最后执行的命令作为回调数据。当用户选择内联按钮时,您可以从其更新中获取回调数据。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-13
          • 2021-03-10
          • 2023-03-12
          • 2017-09-24
          • 2015-12-14
          相关资源
          最近更新 更多