Как реализован register_next_step_handler() в pyTelegramBotAPI?
Сразу оговорюсь — я начинающий, так что могу не знать вещей, кажущихся для вас очевидными. Итак, решил написать тг-бота с вебхуками на Питоне без использования соответствующих библиотек, напрямую взаимодействуя с Telegram Bot API. Мне не удалось найти примеры готового кода, реализованного таким способом, так что, вероятно, я нагородил велосипедов и костылей. Кратко опишу, какая получилась механика: все JSON-объекты, которые присылает тг, попадают в одну-единственную функцию-обработчик, а дальше распределяются по другим. Не представляю, как организовать это иначе, но выглядит странно, как мне кажется. Сумбурно и бардачно.
Вернусь к сути. Хоть код мне и не нравился, но всё шло неплохо, пока не взялся за реализацию фичи по добавлению через бот связанных данных (нужно три раза запросить у пользователя ввод текста и один раз геолокацию). В библиотеке pyTelegramBotAPI, например, для этой задачи есть register_next_step_handler(). Собственно вопрос, как работает изнутри этот метод? Я задачу решил, мой бот работает, как задумано. Но моё решение кажется мне из рук вон плохим. Код получился неподдерживаемым — даже я вряд ли через недельку в нём разберусь. Наговнокодил, получается :) Кто сталкивался, поделитесь, пожалуйста, как это грамотно реализовать?
P.S. Своё творение показывать стыдно :) Но могу описать. Я инициализирую две глобальные переменные — одна будет для хранения message_id сообщения, которое вызвало функцию добавления связанных данных, вторая — счётчик шагов (которых 4). Далее мой основной обработчик проверяет message_id каждого нового сообщения и если оно равно message_id первого инициировавшего вызов функции добавления + 2 * номер_шага, то вызывается функция, где, в свою очередь, выполняется код, предназначенный для текущего шага. После четвёртого шага переменные сбрасываются к своим дефолтным значениям, и так едет мой велосипед.