これを行うための最もpythonicな方法はありません。それはあなたが解決するためにプログラムしなければならない問題です。
基本的に、各ユーザーに関するいくつかの状態変数を維持する必要があります。新しいメッセージが到着すると、ボットはそのユーザーの状態を確認し、それに応じて応答します。
handle(msg)
到着するメッセージごとに呼び出される関数 があるとします。
user_states = {}
def handle(msg):
chat_id = msg['chat']['id']
if chat_id not in user_states:
user_states[chat_id] = some initial state ...
state = user_states[chat_id]
# respond according to `state`
これは単純なプログラムで十分です。
より複雑な状況では、Telegram Bot API 用に作成した Python フレームワークであるtelepotを使用することをお勧めします。この種の問題を具体的に解決する機能を備えています。
たとえば、以下は、個々のユーザーが送信したメッセージの数をカウントするボットです。10 秒経過してもメッセージが受信されない場合は、最初からやり直します (タイムアウト)。カウントはチャットごとに行われます。これが重要なポイントです。
import sys
import telepot
from telepot.delegate import per_chat_id, create_open
class MessageCounter(telepot.helper.ChatHandler):
def __init__(self, seed_tuple, timeout):
super(MessageCounter, self).__init__(seed_tuple, timeout)
self._count = 0
def on_message(self, msg):
self._count += 1
self.sender.sendMessage(self._count)
TOKEN = sys.argv[1] # get token from command-line
bot = telepot.DelegatorBot(TOKEN, [
(per_chat_id(), create_open(MessageCounter, timeout=10)),
])
bot.notifyOnMessage(run_forever=True)
次の方法でプログラムを実行します。
python messagecounter.py <token>
興味のある方は、プロジェクト ページにアクセスして詳細をご覧ください。多くのドキュメントと重要な例があります。