Вообще не разбираюсь в асинхронных вещах.
Откладываешь бота, разбираешься как следует, возвращаешься к боту. Без понимания этого механизма бота сложнее hello world не написать.
В чем может быть дело?
Для работы асинхронного кода он должен быть запущен через рабочий цикл (т.н. реактор, в терминах asyncio - event loop). Этот цикл обычно занимает тот поток, где он создан, и поочерёдно планирует выполнение вызванных корутин (async функций). Когда корутина делает await-вызов, она приостанавливается, а реактор занимается другими делами (в частности, выполняет этот вызов), пока вызов не завершится. После чего корутина продолжает работу.
asyncio создаёт реактор автоматически для главного потока, но не для вспомогательных потоков. Просто потому, что обычно весь код асинхронного приложения работает в рамках реактора, а иметь несколько реакторов в разных потоках - это извращение. Но если очень нужно, ты можешь вызвать asyncio.new_event_loop() в твоём новом потоке, чтобы создать реактор, а потом задать этот реактор для потока вызовом asyncio.set_event_loop() (в этом же потоке). И только после этого запускать там асинхронный код.