Хранение состояния
Текущий бот
Золотая рыбка

Золотая рыбка
def weather(message):
if message.text == '/start':
bot.send_message(
message.chat.id,
'Это погодный бот: он умеет подсказывать погоду на сегодня и на завтра',
)
elif message.text == 'Привет':
bot.reply_to(message, 'Ну привет! ' + message.from_user.first_name )
elif message.text == 'Погода на сегодня':
bot.reply_to(message, '14 градусов')
elif message.text == 'Погода на завтра':
bot.reply_to(message, '18 градусов')
else:
bot.reply_to(message, 'Я тебя не понял')
Золотая рыбка

Конечный автомат состояний
FSM
Конечный автомат состояний
FSM

Конечный

Автомат

Состояний

FSM

Продумываем шаги

Рисуем
Как бы мы реализовавали это?
while True:
inp = input()
if inp == 'Погода':
inp = input()
if inp == 'Сегодня':
...
elif inp == 'Завтра':
...
else:
...
continue
else:
continue
Мы забыли про альтернативные выходы


Реализация в ботах
states = {100205: 'weather_date', 50123: 'main'}
@message_handler
def dispatcher(message):
user_id = message.from_user.id
current_user_state = states.get(user_id, 'main')
if current_user_state == "main":
main_handler(message)
elif current_user_state == "weather_date":
weather_date_handler(message)
...
Реализация в ботах

Реализация в ботах
states = {100205: 'weather_date', 50123: 'main'}
def main(message):
if message.text == 'Погода':
send_message('Уточни дату')
states[message.from_user.id] = 'weather_date'
...
Реализация в ботах
states = {100205: 'weather_date', 50123: 'main'}
@message_handler
def dispatcher(message):
user_id = message.from_user.id
current_user_state = states.get(user_id, 'main')
if current_user_state == "main":
main_handleer(message)
elif current_user_state == "weather_date":
main_handleer(message)
...
[54636] State Storage
By b0g3r
[54636] State Storage
- 325