没有一种最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`
这适用于一个简单的程序。
对于更复杂的情况,我建议使用telepot,这是我为 Telegram Bot API 创建的 Python 框架。它具有专门解决此类问题的功能。
例如,下面是一个机器人,它计算单个用户发送了多少条消息。如果 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>
如果您有兴趣,请转到项目页面以了解更多信息。有很多文档和重要的例子。