hey try using an asyncio.Event to wait for new input in a device seperate task. when the event fires, tick off the pause and resume the loop. might help without stalling everything.
Based on my own experience working on a similar bot, I found that creating an asyncio.Future tied to a specific input event works well. The Future is awaited within the loop, essentially pausing execution until it is set with new user data. Once the data is received, the loop continues normally. This approach avoids blocking the event loop, ensuring that the whole bot remains responsive while specific parts of the code patiently wait for input.