namespace Deal.Telegram.Telegram; /// /// Диалог (источник) аккаунта в нейтральном для TL-слоя виде (план Task 10; Ruling 3/7). /// /// Это результат «списка диалогов» сессии (refresh_dialogs прототипа L505–519): id в подписанном /// каноне контракта («-100…» каналы, «-…» группы, «+…» личные), отображаемое имя, username, тип /// канона channel|group|forum|chat и счётчики для догонялки непрочитанных (realtime_sweep L427–456). /// TL-реализация () и фейки тестов возвращают именно этот тип; /// службы каталога не зависят от библиотеки WTelegramClient. /// public sealed record TelegramDialog { /// /// Создаёт описание диалога. /// /// Подписанный id диалога (каналы «-100…», группы «-…», личные «+…»). /// Отображаемое имя (title/first_name) или id, если имени нет. /// Username (handle); пуст, если публичного username нет. /// Тип канона: channel|group|forum|chat (шапка telegram.proto). /// Число непрочитанных сообщений (для realtime_sweep). /// Id самого свежего сообщения диалога (для read-ack). public TelegramDialog(string id, string name, string username, string kind, int unreadCount, int topMessageId) { Id = id; Name = name; Username = username; Kind = kind; UnreadCount = unreadCount; TopMessageId = topMessageId; } /// /// Подписанный id диалога (каналы «-100…», группы «-…», личные «+…»). /// public string Id { get; } /// /// Отображаемое имя (title/first_name) или id, если имени нет. /// public string Name { get; } /// /// Username (handle); пуст, если публичного username нет. /// public string Username { get; } /// /// Тип канона контракта: channel|group|forum|chat. /// public string Kind { get; } /// /// Число непрочитанных сообщений диалога (для догона realtime_sweep). /// public int UnreadCount { get; } /// /// Id самого свежего сообщения диалога. /// public int TopMessageId { get; } }