2016-10-11 23 views
2

私はこのような電報ボット持つ:C#(私も他の言語との答えを歓迎) Telegramボットで最後に実行されたコマンドを取得する方法は?

  • 我々が次のシナリオを持っている:webhook

  • 言語でアップデートを入手

    • をユーザー:

      1. コマンドをボットに送信する
      2. ボットに別の写真を送るボット
      3. に別の写真を送るボット
      4. に写真を送る

    ベースの質問:

    最良の方法は何ですか/MyPhoto a_parameterコマンドを送信した直後に、ユーザーが送信した写真が正しいことを確認しますか?

    いくつかの方法:

    • 彼らはその後、同じである場合、私は、データベースに各ユーザーによって実行されたすべてのコマンドを保存して、現在のユーザーが最後に実行したコマンドをフェッチし、/MyPhotoとそれを比較することができます/MyPhotoコマンドの後にユーザーが写真を送信していることを確認してください。
    • 最後を保持するためにキャッシュシステムを作成し、各ユーザー(DBとのミックス)

    によってコマンドを実行しかし、それは可能であるならば、私は最後に実行したコマンド をフェッチ防ぐたいデータベースからへのパフォーマンスを改善する

    もっと良い解決法をご存知ですか?たとえば、テレグラムのAPIを使って、最後に実行したコマンドをユーザとボット間のメッセージの送受信に隠しておくことができます。


    Iは、上記のシナリオの手順3 & 4を添加して質問を編集しました。

  • 答えて

    0

    このような質問があります。oneです。基本的には、履歴を保持する以外の方法はありません(または、ユーザーごとに最後のコマンドのみを保持する場合)。チャットIDをキーとして単純なハッシュテーブルを使用して、各ユーザーとのやりとりを取得できます。

    1

    これはまさにForceReplyボタン用に作られたものです。https://core.telegram.org/bots/api#forcereply

    1)BotはMyPhotoコマンドを受信し、このメッセージをForceReplyキーボードでユーザーに返します。

    2)ボットは、ユーザーの以前のメッセージを含むreply_to_messageオブジェクトに新しいメッセージを受信して​​、photo

    1

    質問1:

    ユーザーによって送信された写真は、後 右であることを確認するための最良の方法は何ですか送信/ MyPhoto a_parameterコマンド?

    私は最善の解決策は、各ユーザーの/ MyPhoto update_idを保存し、アップロードされた写真update_idとそれを比較することであると思います。

    アップデートの一意の識別子:

    は電報のドキュメントを参照してください。更新識別子は から始まり、特定の正の数で始まり、順番に増加します。 は繰り返し更新を無視したり、正しい更新シーケンスを復元するために、 になります.Webhooksを使用している場合は、 が無効になるはずです。

    質問2:

    あなたがよりよい解決策を知っていますか?例えば、 テレグラムのAPIを使用して、最後に実行したコマンドを隠しておくようにします。 ユーザとボットの間でメッセージを送受信します。

    最後に実行されたコマンドをコールバックデータとして使用するInlineKeyboardMarkupを使用します。ユーザーがインラインボタンを選択すると、その更新からコールバックデータを取得できます。

    関連する問題