У тебя будет проблема с циклическим импортом: основной файл будет импортировать модули с функциями, но этим модулям будет требоваться экземпляр бота, описанный в основном файле. Эту проблему можно обойти так:
# submodule_1.py - модуль, содержащий часть функций бота
def setup(bot):
# bot - объект бота. Можешь добавить и другие полезные параметры, такие как:
# - объект logging.Logger для журналирования
# - объект соединения с БД
# - ну и что там ещё тебе потребуется
# все обработчики событий объявляем ВНУТРИ setup()
# тогда они смогут ссылаться на переданные параметры
@bot.command('/start') # например, чтобы использовать декораторы
def on_start(message):
message.reply('foobar')
# мы описали функцию setup(), но здесь мы её не вызываем!
# main.py - основной файл бота
bot = ... # создаём объект бота
import submodule_1 # импортируем модуль с функциями
# при вызове setup() будут заданы обработчики событий, описанные в ней
submodule_1.setup(bot) # функции передаём объект бота (и другие объекты, если она их ожидает)
# функцию setup() нужно вызывать не более одного раза!
# так можно добавлять столько модулей, сколько требуется.
bot.run() # дальше бота запускаем как обычно