Чтобы функция запустилась, её нужно вызвать. Предположу, что из-за этого и ошибок нет (либо вызовете её там, где нужно, а не при запуске бота)
if __name__ == '__main__':
profit()
А т.к. она у вас засыпает, нужно её будить, поэтому добавляем
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.create_task(profit())
Опять же не видел логики всей скрипта вашего. Когда и зачем запускается функция профит. В некоторых случаях, все, что я написал - неактуально (например нужно вызвать колбэком)
Когда уже сделаете то, что написал выше - появятся ошибки. Как-то так