4.5 KiB
Документация проекта BotPages
Краткая документация по всему проекту. Описывает архитектуру, основные компоненты, сценарии использования и сборки.
Структура репозитория
-
BotPages.Core— ядро фреймворка.- Навигация:
NavigationService, страницы:Page,StatefulPage,SingletonPage. - Маршрутизация:
RoutesRegistry(авторегистрация черезAutoMapRoute). - Команды:
CommandsRegistry(парсер шаблонов команд,TryDispatch). - Middleware: интерфейс
IPageMiddlewareи реализацияLoggingMiddleware. - Абстракции адаптеров/адаптер-фабрика:
IMessangerAdapterSetup,IMessengerAdapterFactory(напримерMultiAdapterFactory). - Хранилище состояния:
IStateStorage.
- Навигация:
-
BotPages.Telegram— реализация адаптера для Telegram (используетTelegram.Bot). -
Demo— демонстрационное приложение с примерами страниц и конфигурации. -
BotPages— мета-проект/пакет для упаковки.
Главные сущности и сценарии использования
-
BotPagesApp— точка конфигурации и запуска приложения.- Регистрация адаптеров:
AddAdapter(string messengerType, IMessangerAdapterSetup adapter). - Регистрация middleware:
AddMiddleware<T>(T instance). - Регистрация команд:
MapCommand<TPage>(string template)илиMapCommand(string template, CommandHandler handler). - Маршруты:
MapRoute<TPage>(string template)иAutoMapRoute()для автоматического поиска страниц по рефлексии. - Запуск:
Build(CancellationToken)— старт адаптеров и приём апдейтов.
- Регистрация адаптеров:
-
Страницы:
Page— базовый класс (абстрактный) с жизненным циклом (OnEnter,OnUpdate,OnText,OnButton,OnFile,OnError).StatefulPage— хранит состояние вIStateStorage(сериализация полей, атрибуты для stateful-полей).SingletonPage— один экземпляр на приложение, без per-session состояния.
-
Навигация:
NavigationServiceуправляет текущей страницей пользователя (определяется поPageContext.SessionKey) и предоставляет методыGoToAsync<TPage>,GoToHomeAsync. -
Команды: шаблоны вида
/cmd {arg} {opt?}. Парсер вCommandsRegistry.ToRegexподдерживает именованные группы и опциональные аргументы. При совпадении вызываетсяCommandHandler(PageContext, IDictionary<string,string>, CancellationToken). -
Middleware: реализуют
IPageMiddleware.InvokeAsync(PageContext, Func<Task> next, CancellationToken ct); вызываются в порядке регистрации (конвейер).
Формат и схема апдейта
UpdateContextсодержит данные апдейта:MessengerType,Chat,User,Kind(флагиText,Button,File),Text,Files.- При поступлении апдейта
BotPagesApp.HandleUpdateAsyncсоздаётPageContextи:- Проверяет команды (если текст и начинается с
/) — команды имеют приоритет. - Запускает pipeline middleware.
- Передаёт управление текущей странице через
DispatchToPageAsync.
- Проверяет команды (если текст и начинается с
Расширение и адаптеры
- Чтобы добавить новый мессенджер, реализуйте
IMessangerAdapterSetup/IMessengerAdapterи зарегистрируйте черезBotPagesApp.AddAdapter. MultiAdapterFactoryслужит для хранения и разрешения адаптеров по ключуmessengerType.
Сборка и запуск
Требования:
- .NET 8 SDK
Сборка проекта:
dotnet build
Запуск демонстрации:
dotnet run --project Demo
Для Telegram-адаптера настройте токен и параметры в Demo (или в коде инициализации адаптера).
Документы API и комментарии
XML-документация генерируется флагом GenerateDocumentationFile в .csproj для проектов. Для автогенерации документации используйте стандартные инструменты (например, docfx, doxygen или MkDocs с генерацией из XML).
Примеры
- Пример регистрации кусочка конфигурации:
var app = new BotPagesApp(stateStorage, logger)
.AddAdapter("telegram", new TelegramAdapterSetup(token))
.AddMiddleware(new LoggingMiddleware(logger))
.MapCommand<WelcomePage>("/start")
.AddDefaultPage<WelcomePage>();
await app.Build(CancellationToken.None);
- Пример простой страницы:
public sealed class WelcomePage : StatefulPage
{
public override async Task OnEnter(PageContext ctx, CancellationToken ct)
{
await ctx.SendTextAsync("Добро пожаловать", ct: ct);
}
}
Вклад и тестирование
- Направляйте PR в репозиторий. Описывайте изменения в заголовке и теле PR.
- Поддерживайте единый стиль кода и null-safe практики (
Nullableвключён).
Лицензия
Проект распространяется под лицензией MIT (см. .csproj и LICENSE).
Это краткий обзор. При необходимости можно сгенерировать подробный Reference по API (список публичных типов и методов) в отдельный документ.