Написать сервис обновления.
На стороне бота написать класс (или метод) апдейтера (не должен зависеть от бота), который будет отправлять на сервис обновления текущую версию бота -> сервис получает версию бота, сравнивает с актуальной версией текущего -> если обновления есть -> вернуть ссылку на zip (при обновлении корневого бота можно автоматически паковать в архив).
Апдейтер (класс) получает пакет, делает бэкап текущего бота куда-нибудь, затирает и распаковывает нового. Версию можно хранить либо файлом, либо свойством, либо вычислять md5 хеш ядра (основного файла бота). Последний вариант мастхэв :)