Учи, как работает асинхронное программирование.
Если на пальцах: всякий раз, когда ты делаешь await чтототам, выполнение асинхронной функции (вроде обработчика события) приостанавливается, и передаётся другой.
А вот код в промежутке между await вызовами (ну или началом-концом функции) выполняется непрерывно, и занимает поток управления.
Пока этот код выполняется, остальной бот стоит!
Теперь посмотри что у тебя:
while (True):
user.balance += user.s9 * 30
time.sleep(30)
user.save()
time.sleep() понятия не имеет про асинхронность, и не отдаёт управление другим асинхронным функциям. Поэтому пока она выполняется,
остальной бот стоит.
Да, даже для одного пользователя.
Как минимум, нужно исправить две вещи.
1. используй await asyncio.sleep() вместо time.sleep(). asyncio.sleep() знает про асинхронность, и приостановит функцию с передачей управления, т.е. бот сможет делать что-то ещё пока эта функция ждёт.
2. while (True) - это не тру. Предусмотри код выхода из цикла! Или по максимальному числу итераций, или по команде, или по смене статуса пользователя... или по всему вышеперечисленному.