При использовании Telegram бота пользователь iOS может одновременно нажать две инлайн кнопки и отправить два калбека. Как решить эту проблему?

При установке флага некоторые дубли всё равно успевают проскочить:

class PreventDuplicateAnswerMiddleware(BaseMiddleware):

    async def __call__(
        self,
        handler: Callable[[CallbackQuery, Dict[str, Any]], Awaitable[Any]],
        event: CallbackQuery,
        data: Dict[str, Any]
    ) -> Any:

        logger.info(
            'Вошли в миддлварь %s, тип события %s',
            __class__.__name__,
            event.__class__.__name__
        )
        state: FSMContext = data["state"]

        state_data = await state.get_data()
        if state_data.get("has_answered"):
            logger.info(f"Ответ пользователя был обработан ранее.")
            return

        await state.update_data(has_answered=True)
        updated_state_data = await state.get_data()
        logger.info(
            f"Ответ пользователя передан на обработку. "
            f"Обновлёно состояние ответа: has_answered={updated_state_data.get('has_answered')}"
        )

        result = await handler(event, data)

        logger.info('Выходим из миддлвари  %s', __class__.__name__)

        await state.update_data(has_answered=False)
        final_state_data = await state.get_data()
        logger.info(
            f"Ответ пользователя обработан. "
            f"Обновлёно состояние ответа: has_answered={final_state_data.get('has_answered')}"
        )

        return result

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