то, что у бота единая точка входа, это нормально, так как у тебя есть один листенер одного типа события.
для себя при создании подобного проекта я использовал идеи http сервера c роутом, мидлварами и хендлером обработчиком.
По сути весь код раскладывается на файлы хендлеров, которые мапаются к тем или иным командам, пропуская между роутом и хендлером через мидлвары безопасности
итоговая картинка может быть следующей:
1. пишешь движок, который воспроизводит обработку всей логики для события из листенера.
2. описываешь карту роутов из серии route.add("/start", startHandler), route.add("/get_price", authMW, getPriceHandler)
3. описываешь сами handlers где определяешь достаточный объем входящих в функцию параметров для работы твоего бота.