@ArtChaos1

Как сделать проверку, что пользователь отравил сообщение(не важен тип, лишь сам факт)?

Как сделать проверку , что пользователь отравил сообщение?
Ситуация следующая: от пользователя ожидается сообщение( тип не важен, хотя просят фотографию), и, если он отправляет фотографию, то переходит в следующий стейт. Если же он сидит долго( забил на это), то его надо выкинуть из стейта. Как можно такое провернуть? Заранее благодарю

Библиотека 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()
  • Вопрос задан
  • 115 просмотров
Пригласить эксперта
Ответы на вопрос 1
gnifajio
@gnifajio
Совершенствуюсь каждый день
Скорее всего, Вам нужно это:

class SomeState(StatesGroup):
    name = State()


@dp.message_handler(commands='timer')
async def register_executor(msg):
    await msg.answer('Отправь мне свое имя')
    SomeState.name.set()


@dp.message_handler(state=SomeState.name)
async def re_get_about(msg):
    state.update_data(name=msg.text)
    user_data = await state.get_data()
    await msg.answer(f'Твое имя {user_data["name"]}')
    SomeState.finish()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы