где проблема в коде, aiogram

не могу понять что не так с кодом, бот не реагирует на команду play

class User(StatesGroup):
        step1=State()
        step2=State()
        
    
    @dp.message_handler(commands=['play'], state=User.step1)
    async def play(message: types.Message, state: FSMContext):
        await message.answer(text='готов сыграть?')
        lol = random.randint(1,3)
    
        await step1.set()
    
    @dp.message_handler(state=User.step2)
    async def pl2step(message: types.Message, state: FSMContext):
        await message.answer(text='нвпиши число от 1 до 3')
        if message.text == lol:
            await message.answer(text='ты выйграл')
        else:
            await message.answer(text='ты проебал')
    
        await step2.set()

Ответы (2 шт):

Автор решения: CausonQ

Вам нужно повторить основы синтаксиса python. Судя по вашему коду, хендлеры находятся в классе User. Поэтому и не реагирует. Попробуйте так:

class User(StatesGroup):
    step1=State()
    step2=State()
    

@dp.message_handler(commands=['play'], state=User.step1)
async def play(message: types.Message, state: FSMContext):
    await message.answer(text='готов сыграть?')
    lol = random.randint(1,3)

    await step1.set()

@dp.message_handler(state=User.step2)
async def pl2step(message: types.Message, state: FSMContext):
    await message.answer(text='нвпиши число от 1 до 3')
    if message.text == lol:
        await message.answer(text='ты выйграл')
    else:
        await message.answer(text='ты проебал')

    await step2.set()
→ Ссылка
Автор решения: qwehopelessness

попробуй сделать так, версия aiogram 3.1.1

test1.py

import asyncio
import colorama
from aiogram import Bot, Dispatcher
from aiogram.enums import ParseMode

import test2


async def main():
    dp = Dispatcher()
    bot = Bot('токен', parse_mode=ParseMode.HTML)

    dp.include_router(test2.router)

    await bot.delete_webhook(drop_pending_updates=True)
    await dp.start_polling(bot)


if __name__ == '__main__':
    print(colorama.Fore.RED + 'bot started')
    asyncio.run(main())

test2.py

from aiogram.fsm.context import FSMContext
from aiogram.types import Message
import random
from aiogram.filters import Command, CommandStart
from aiogram import Router
from aiogram.fsm.state import State, StatesGroup

router = Router()


class User(StatesGroup):
    step1 = State()
    step2 = State()


@router.message(Command('play'))
async def play(message: Message, state: FSMContext):
    await message.answer(text='готов сыграть?')
    await state.set_state(User.step1)


@router.message(User.step1)
async def play_step1(message: Message, state: FSMContext):
    await message.answer(text='нвпиши число от 1 до 3')
    await state.set_state(User.step2)


@router.message(User.step2)
async def play_step2(message: Message, state: FSMContext):
    lol = random.randint(1, 3)
    qwe = await state.update_data(idk=message.text)

    formated_txt = []
    [
        formated_txt.append(f'{value}')
        for key, value in qwe.items()
    ]

    formated_str = "".join(formated_txt)
    if int(formated_str) == lol:
        await message.answer(text=f'ты выйграл, число {lol}')
    elif formated_str != lol:
        await message.answer(text=f'ты проебал, было число {lol}')
    else:
        await message.answer('err')
        await message.answer('/play?')
    await message.answer('еще одну? напиши /play?')

@router.message(CommandStart)
async def start_bot(message: Message):
    await message.answer('hi')
→ Ссылка