Как сделать проверку , что пользователь отравил сообщение?
Ситуация следующая: от пользователя ожидается сообщение( тип не важен, хотя просят фотографию), и, если он отправляет фотографию, то переходит в следующий стейт. Если же он сидит долго( забил на это), то его надо выкинуть из стейта. Как можно такое провернуть? Заранее благодарю
Библиотека Aiogram, IDE pycharm. на просторах интернета нашел вот такой вариант:
Если брать код без последней строки (без finish в else), то срабатывает один раз( то есть имя из стейта бот запомнит, и в следующий раз проверка на время уже не работает) , если же добавить последнюю строку то срабатывают всегда оба условия( и выдает имя и пишет, что пользователь на написал имя)
@dp.message_handler(state=TimerState.T1)
@dp.message_handler(Command("timer"))
async def enterIndication(message: types.Message,state:FSMContext):
if message.text == '/timer':
await message.answer(text="Отправь мне свое имя")
await TimerState.T1.set() # Ваш state
await asyncio.sleep(5) # 5 сек спим
try:
data = await state.get_data()
if data['get_name'] == 'true':
pass
except KeyError:
# Если пользователь не ответил или за это время state завершился, получаем KeyError
await message.answer(f'Жаль, что ты не ответил')
await state.finish()
else:
await state.update_data(get_name='true')
await message.answer(f'Твое имя {message.text}')
await state.finish()