Это не самый питонический способ сделать это. Это проблема, которую вы должны запрограммировать, чтобы решить.
По сути, вы должны поддерживать некоторые переменные состояния для каждого пользователя. Когда приходит новое сообщение, бот проверяет, в каком состоянии находится этот пользователь, и отвечает соответствующим образом.
Предположим, у вас есть функция 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, фреймворк Python, который я создал для Telegram Bot API. . В нем есть функции, которые решают именно такие проблемы.
Например, ниже показан бот, который подсчитывает, сколько сообщений было отправлено отдельным пользователем. Если в течение 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>
Перейдите на страницу проекта, чтобы узнать больше, если вам интересно. Есть много документации и нетривиальных примеров.
person
Nick Lee
schedule
30.10.2015