Добавьте файлы проекта.

This commit is contained in:
2025-12-02 15:57:42 +03:00
parent cf107b62a3
commit 7f69eab545
44 changed files with 1470 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
namespace BotPages.Core
{
/// <summary>
/// Описывает чат/конверсацию для универсального контекста.
/// </summary>
public sealed class ChatContext
{
/// <summary>
/// Уникальный идентификатор чата/диалога.
/// </summary>
public long Id { get; init; }
/// <summary>
/// Человеко-читаемое имя чата (если доступно).
/// </summary>
public string? Title { get; init; }
}
}

View File

@@ -0,0 +1,12 @@
namespace BotPages.Core
{
/// <summary>
/// Универсальный дескриптор файла для операций загрузки/отправки.
/// </summary>
public sealed record FileDescriptor(
string Id,
string Name,
string MimeType,
Stream? Content = null
);
}

View File

@@ -0,0 +1,48 @@
namespace BotPages.Core
{
/// <summary>
/// Универсальный контекст обновления, независимый от транспорта.
/// </summary>
public sealed class UpdateContext
{
/// <summary>
/// Клиент транспорта для отправки сообщений/файлов.
/// </summary>
public required IChatClient Client { get; init; }
/// <summary>
/// Контекст чата.
/// </summary>
public required ChatContext Chat { get; init; }
/// <summary>
/// Контекст пользователя.
/// </summary>
public required UserContext User { get; init; }
/// <summary>
/// Текст сообщения или полезная нагрузка колбэка, если доступна.
/// </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; }
}
}

View File

@@ -0,0 +1,18 @@
namespace BotPages.Core
{
/// <summary>
/// Описывает пользователя для универсального контекста.
/// </summary>
public sealed class UserContext
{
/// <summary>
/// Уникальный идентификатор пользователя в транспортном слое.
/// </summary>
public long Id { get; init; }
/// <summary>
/// Отображаемое имя пользователя (если доступно).
/// </summary>
public string? DisplayName { get; init; }
}
}