Переработанная версия ядра
All checks were successful
CI / build-test (push) Successful in 42s

This commit is contained in:
2025-12-05 12:57:05 +03:00
parent ee175a35a0
commit d817417a69
81 changed files with 2335 additions and 1453 deletions

View File

@@ -1,48 +1,59 @@
namespace BotPages.Core
namespace BotPages.Core.Context;
using BotPages.Core.Abstractions;
/// <summary>
/// Тип входящего обновления.
/// </summary>
[Flags]
public enum UpdateKind
{
/// <summary>Неизвестное сообщение.</summary>
None = 0,
/// <summary>Текстовое сообщение.</summary>
Text = 1 << 0,
/// <summary>Файлы (один или несколько).</summary>
File = 1 << 1,
/// <summary>Нажатие кнопки.</summary>
Button = 1 << 2,
}
/// <summary>
/// Контекст входящего обновления от мессенджера.
/// Содержит нормализованные данные для страниц.
/// </summary>
public sealed class UpdateContext
{
/// <summary>Тип мессенджера.</summary>
public required string MessengerType { get; init; }
/// <summary>
/// Универсальный контекст обновления, независимый от транспорта.
/// Данные пользователя, от которого пришло обновление.
/// </summary>
public sealed class UpdateContext
{
/// <summary>
/// Клиент транспорта для отправки сообщений/файлов.
/// </summary>
public required IChatClient Client { get; init; }
public required UserContext User { get; init; }
/// <summary>
/// Контекст чата.
/// </summary>
public required ChatContext Chat { get; init; }
/// <summary>
/// Данные чата, в котором произошло обновление.
/// </summary>
public required ChatContext Chat { get; init; }
/// <summary>
/// Контекст пользователя.
/// </summary>
public required UserContext User { get; init; }
/// <summary>
/// Тип обновления (текст, файлы, кнопка).
/// </summary>
public required UpdateKind Kind { get; init; }
/// <summary>
/// Текст сообщения или полезная нагрузка колбэка, если доступна.
/// </summary>
public string? Text { get; init; }
/// <summary>
/// Текст сообщения, если Kind = Text.
/// Payload кнопки, если Kind = Button.
/// </summary>
public string? Text { get; init; }
/// <summary>
/// Список полученных файлов (если транспорт поддерживает).
/// </summary>
public IReadOnlyList<FileDescriptor>? IncomingFiles { get; init; }
/// <summary>
/// Сырой объект обновления транспорта (например, Telegram.Update).
/// </summary>
public object? RawUpdate { get; init; }
/// <summary>
/// Сервис навигации страниц.
/// </summary>
public required INavigationService Nav { get; init; }
/// <summary>
/// Хранилище состояния пользователя.
/// </summary>
public required IStateStore State { get; init; }
}
}
/// <summary>
/// Список файлов, если Kind = File.
/// Может содержать один или несколько файлов.
/// </summary>
public List<FileDescriptor> Files { get; init; } = new();
}