1. storage - объявили, но не используете, надо:
bot = telebot.TeleBot('TOKEN', state_storage=storage)
2. Состояние не меняете.
3. В интернете логичнее всего смотреть примеры в репе создателей:
custom_states.
4. Код:
import telebot
from telebot import types
from telebot.states import State, StatesGroup
from telebot.states.sync.context import StateContext
from telebot.states.sync.middleware import StateMiddleware
from telebot.storage import StateMemoryStorage
from telebot.types import ReplyParameters
storage = StateMemoryStorage()
bot = telebot.TeleBot('TOKEN', state_storage=storage, use_class_middlewares=True)
class MyStates(StatesGroup):
START = State()
US = State()
SUP = State()
@bot.message_handler(commands=["start"])
def start(message: types.Message, state: StateContext):
state.set(MyStates.START)
bot.send_message(
message.chat.id,
f'Привет, {message.from_user.first_name}!\n/sup - оформить подписку\n/us - информация о нас',
reply_parameters=ReplyParameters(message_id=message.message_id),
)
@bot.message_handler(commands=["us"])
def us(message: types.Message, state: StateContext):
state.set(MyStates.US)
bot.send_message(
message.chat.id,
'Информация о нас',
reply_parameters=ReplyParameters(message_id=message.message_id),
)
@bot.message_handler(commands=["sup"])
def sup(message: types.Message, state: StateContext):
state.set(MyStates.SUP)
bot.send_message(
message.chat.id,
'Оформить подписку',
reply_parameters=ReplyParameters(message_id=message.message_id),
)
if __name__ == '__main__':
print('start')
bot.setup_middleware(StateMiddleware(bot))
bot.infinity_polling()