Комментарии 6
А зачем генерировать код, если его можно интерпретировать?
Я создал готовое подобное решение ГрафиБот: Графический конструктор телеграм-ботов для 1С https://www.v8-pr.ru/gbc
Достаточно просто нарисовать блок-схему телеграм бота, и он сразу заработает.
Интересная мысль с генерацией python-кода. Так же, мне нравится разделение кастомного кода бизнес логики и описание UI. Единственно, что пока не понятно как оно будет работать в больших ботах со сложной логикой. Сбор всех функций в один класс станет нецелесообразным - лучше разделить их по группам. Кроме того, в ботах есть часто повторяющиеся действия - чекбоксы, выбор из динамического списка вариантов, хранящихся в БД, что сразу просится для унификации. Было бы интересно посмотреть, что из этого выйдет.
У меня есть проект, тоже позволяющий описывать UI декларативно, но я не стал пока выносить это в YAML, а предлагаю описывать в виде python-кода (хотя ребята показывали как они генерируют мои объекты из yaml). И тут уже есть свобода создания кастомных компонентов, наследования для внедрения своей логики и т.п. Велкам на гитхаб: https://github.com/Tishka17/aiogram_dialog/. И вот поверх этого уже можно генерировать превью, диаграмму переходов (с определенными ограничениями). Простенькое демо нескольких фич доступно тут: https://t.me/aiogram_dialog_demo_bot (код демо).
Условно у меня это выглядит вот так:
Dialog(
Window(
Const("Greetings! Please, introduce yourself:"),
StaticMedia(
path=os.path.join(static_dir, "python_logo.png"),
type=ContentType.PHOTO,
),
MessageInput(name_handler, content_types=[ContentType.TEXT]),
MessageInput(other_type_handler),
state=DialogSG.greeting,
),
Window(
Format("{name}! How old are you?"), # dynamic text
Select( # dynamic buttons list
Format("{item}"),
items="ages", # retrieved from getter function
item_id_getter=lambda x: x.id,
id="w_age",
on_click=on_age_changed,
),
state=DialogSG.age,
getter=get_data,
),
)
Если только как опенсорс. Так что встречал коммерческие решения, где ты просто драг'н'дропом накидывает флоу.
DSL фреймворк для создания Telegram ботов