Есть ли какие-то общепринятые шаблоны для написания ботов?

Пишу бота для телеграмма. Как не гуглил, а везде лишь мануалы по отправке сообщений и прочего. Меня интересует архитектура бота.

Мой бот простой и по сути заменяет UI программы. Я сделал что-то вроде state-machine, но без явных переходов от одного состояния к другому. Т.е. у меня есть куча классов-наследников BaseBotState класса с методом Activate.

Текущее состояние хранится в объекте, описывающем пользователя.

Функция Activate изменяет текущее состояние пользователя и при следующем сообщении вызывается уже другой State.

Есть ли более правильные подходы похожие на мой? Этакий best-practices?

Извиняюсь, если вопрос не совсем конкретный.


Ответы (1 шт):

Автор решения: TemaTre

В свое время тоже задавался этим вопросом. Бота правда так и не написал. Но мысль была примерно следующая.

Есть такие вещи как WorkflowEngine. Их много, от очень старых, предложенных Microsoft до OpenSource реализаций. В нем мы можем задавать состояния в которых находится "таска" и куда она может перейти в зависимости от условий.

По сути наш диалог с ботом это и есть переходы по состояниям (по дереву состояний). Это и есть конечный автомат с набором состояний и переходов. Но чтобы самому не изобретать велосипед, я бы взял за основу какой-нибудь WorkflowEngine. А для работы с данными и внешними сервисами можно использовать обычную монолитную архитектуру с типовыми Provider'ами и Service'ами работающими через IoC контейнер.

Боты обычно не сильно сложные а потому нет смысла городить какие-то микросервисы.

→ Ссылка