Вы не обяъвили
STATE_DICT
)
В Вашем случае :
import config
import telebot
bot = telebot.TeleBot(config.token)
STATE_DICT = {}
Во вторых не надо везде хендлить. Для этого вам и нужен конечный автомат - он отслеживает состояние и сам перекидывает на нужную функцию.
Ниже полный пример. Должен работать(не уверен так как писал на память, но логика верная)
import config
import telebot
from telebot import types
bot = telebot.TeleBot(config.token)
STATE_DICT = {}
@bot.message_handler(commands=['start'])
def start(message):
markup = types.ReplyKeyboardMarkup(
one_time_keyboard=False,
resize_keyboard=True
)
markup.add('Кнопка1')
markup.add('Кнопка2')
question = 'Выбери'
chat_id = message.chat.id
STATE_DICT[chat_id] = 'START'
bot.send_message(chat_id, question, reply_markup=markup)
def start_work(message):
chat_id = message.chat.id
markup = types.ReplyKeyboardMarkup(
one_time_keyboard=False,
resize_keyboard=True
)
if message.text == 'Кнопка1':
STATE_DICT[chat_id] = 'VAR1'
markup.add('Кнопка3')
markup.add('Кнопка4')
bot.send_message(chat_id, 'Вы выбрали ответ 1', reply_markup=markup)
else:
STATE_DICT[chat_id] = 'VAR2'
markup.add('Кнопка5')
markup.add('Кнопка6')
bot.send_message(chat_id, 'Вы выбрали ответ 2', reply_markup=markup)
def var1(message):
chat_id = message.chat.id
if message.text == 'Кнопка3':
bot.send_message(chat_id, 'Конец с кнопкой3')
else:
STATE_DICT[chat_id] = 'VAR2'
bot.send_message(chat_id, 'Конец с кнопкой2')
def var2(message):
chat_id = message.chat.id
if message.text == 'Кнопка5':
bot.send_message(chat_id, 'Конец с кнопкой5')
else:
STATE_DICT[chat_id] = 'VAR2'
bot.send_message(chat_id, 'Конец с кнопкой6')
@bot.message_handler(func=lambda message: True)
def start_finite_machine(message):
states = {
'START': start_work,
'VAR1': var1,
'VAR2': var2,
}
chat_id = message.chat.id
states[STATE_DICT[chat_id]](message)
if __name__ == '__main__':
bot.polling(none_stop=True)