где проблема в коде, 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')