Так как проверка каждые 15 сек баланса, и само постоянное прибавление баланса абсолютно всем пользователям будет очень сильно нагружать. Лучше сделать так: в БД добавить параметр последней проверки баланса. time.time(), а далее, когда пользователь снова вводит команду баланса, ему в БД устанавливается в этот момент значение соответствующее;
money(
Деньги записанные в БД) + (time.time() - int(
Время последнего обновления баланса записанное с БД)) // 15
Таким образом это уменьшит нагрузку, и создаст иллюзию, что деньги прибавляет каждые 15 секунд.
Минусы - если пользователь будет постоянно делать проверку баланса или тд, ему может и не начислять каждые 15 сек, так как время между запросами будет постоянно обновляться.
Решение - сохранять в БД лишь то время, когда
money + (time.time() - int(update_balance_time)) // 15
Является больше нуля, если же меньше, то не обновлять в БД значение