Так, концепция пока такая:
Три вида шагов:
1. Ввод данных:
* выбор из списка и/или ввода текста
* введённые данные преобразуются в нужный тип (указывается при старте)
* можно опционально указать прошлый и следующий шаг
2. Выбор стейта: для каждого элемента списка устанавливается следующий стейт
3. Все что сами придумаете
Диалог:
* принимает словарь стейты-шаги.
* 4 встроенные кнопки (назад, пропустить, закончить и отмена). Отключаются для каждого шага или для всего сразу
* можно вешать колбэки на разные события (смена шага, закрытие диалога, завершение, отмена, старт) путем наследования или просто добавив функцию. Туда передаются все данные из мидлвари
* при старте можно задать начальные данные, при завершении все введённые данные передаются в колбэк
* для исключения конфликтов можно задать свои префиксы на кнопки, а так же временные данные чтобы хранились отдельным словарем в сторадже. При завершении этот словарь удаляется, а стейт возвращается к состоянию до старта диалога
Что ещё важно?