FrigaT ee175a35a0
Some checks failed
CI / build-test (push) Failing after 39s
Размер файлов
2025-12-03 13:44:09 +03:00
ci
2025-12-02 17:50:32 +03:00
2025-12-03 13:44:09 +03:00
ci
2025-12-02 16:03:27 +03:00
ci
2025-12-02 16:03:27 +03:00

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 для сообщений
  • Плагины для сторонних транспортов
Description
No description provided
Readme MIT 402 KiB
2026-04-12 16:57:32 +03:00
Languages
C# 99.3%
PowerShell 0.4%
Shell 0.3%