4aff8edbcd8e6e5fa13aec11e65d6f30bb39f613
BotPages.Core
BotPages.Core — это универсальный фреймворк для построения ботов с декларативными страницами, навигацией и единым контекстом.
Поддерживает работу сразу с несколькими транспортами (например, Telegram и MAX), сохраняя чистую архитектуру и удобный developer experience.
✨ Основные идеи
- PageResult — декларативный результат обработки страницы (сообщение, файлы, кнопки, навигация).
- PageMessage — объект сообщения с поддержкой форматов (Plain/Markdown/HTML), флагов (
IsSilent,DisableWebPreview). - PageNavigate — объект навигации (переход на другую страницу, аргументы, режим Replace).
- PageAction — кнопки (inline/reply, ссылки, запрос контакта/локации, стили).
- UpdateContext — универсальный контекст обновления, независимый от транспорта, с полем
Transportдля разделения Telegram/MAX. - PageRegistry — реестр страниц, умеет собирать их автоматически из сборки (
CreateFromAssembly,CreateFromApplication). - IStateStore — хранилище состояния пользователя, ключом является
(Transport, ChatId).
🚀 Быстрый старт
// Создаём реестр страниц
var registry = PageRegistry.CreateFromApplication(defaultPageId: "main");
// Хранилище состояния
IStateStore store = new InMemoryStateStore();
// Навигация
INavigationService nav = new NavigationService(registry, store);
// Запуск Telegram
var telegramBot = new TelegramBotClient("TELEGRAM_TOKEN");
telegramBot.StartReceiving(async (bot, update, ct) =>
{
var ctx = TelegramUpdateMapper.Map(bot, nav, store, update);
await nav.HandleAsync(ctx, ct);
});
// Запуск MAX
var maxClient = new MaxClientAdapter("MAX_CONFIG");
maxClient.OnUpdate(async (update, ct) =>
{
var ctx = MaxUpdateMapper.Map(maxClient, nav, store, update);
ctx.Transport = "max";
await nav.HandleAsync(ctx, ct);
});
📌 Пример страницы
public sealed class MainPage : IPage
{
public string Id => "main";
public PageResult Handle(UpdateContext ctx)
{
return PageResult.Text("🏠 Главная страница", new[]
{
new PageAction { Label = "Перейти", Value = "inlinePage", Placement = ActionPlacement.Inline }
});
}
}
🛠️ Возможности
- ✅ Декларативные страницы (
PageResult) - ✅ Навигация (
PageNavigate) - ✅ Сообщения с форматами и флагами (
PageMessage) - ✅ Кнопки с расширенными параметрами (
PageAction) - ✅ Поддержка нескольких транспортов (Telegram)
- ✅ Автоматическая регистрация страниц (
PageRegistry.CreateFromApplication) - ✅ Хранение состояния по
(ChatClientId, ChatId)
📂 Структура проекта
BotPages/
├── BotPages.Core/ # Основные классы (PageResult, PageMessage, PageNavigate, UpdateContext)
├── Demo/ # Пример страниц и запуск
├── Adapters/ # Транспортные адаптеры (Telegram)
└── README.md
📖 TODO
- Поддержка медиагрупп (альбомов) в Telegram
- Расширенные стили кнопок
- TTL для сообщений
- Плагины для сторонних транспортов
Releases
25
BotPages_v0.6.1
Latest
Languages
C#
99.3%
PowerShell
0.4%
Shell
0.3%