Инициализировать репозиторий «Дейл»
Первый коммит: модульный монолит ядра (.NET 10) и gRPC-сервисы ai/ml/telegram, фронтенд Vue 3/Vite/Tailwind, документация (ТЗ, инструкция пользователя, техдокументация, код-стайл), бэклог, скрипты развёртывания и архив прототипа LeadRadar.
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
namespace Deal.Telegram.Telegram;
|
||||
|
||||
/// <summary>
|
||||
/// Диалог (источник) аккаунта в нейтральном для TL-слоя виде (план Task 10; Ruling 3/7).
|
||||
///
|
||||
/// Это результат «списка диалогов» сессии (refresh_dialogs прототипа L505–519): id в подписанном
|
||||
/// каноне контракта («-100…» каналы, «-…» группы, «+…» личные), отображаемое имя, username, тип
|
||||
/// канона channel|group|forum|chat и счётчики для догонялки непрочитанных (realtime_sweep L427–456).
|
||||
/// TL-реализация (<see cref="WTelegramSessionClient"/>) и фейки тестов возвращают именно этот тип;
|
||||
/// службы каталога не зависят от библиотеки WTelegramClient.
|
||||
/// </summary>
|
||||
public sealed record TelegramDialog
|
||||
{
|
||||
/// <summary>
|
||||
/// Создаёт описание диалога.
|
||||
/// </summary>
|
||||
/// <param name="id">Подписанный id диалога (каналы «-100…», группы «-…», личные «+…»).</param>
|
||||
/// <param name="name">Отображаемое имя (title/first_name) или id, если имени нет.</param>
|
||||
/// <param name="username">Username (handle); пуст, если публичного username нет.</param>
|
||||
/// <param name="kind">Тип канона: channel|group|forum|chat (шапка telegram.proto).</param>
|
||||
/// <param name="unreadCount">Число непрочитанных сообщений (для realtime_sweep).</param>
|
||||
/// <param name="topMessageId">Id самого свежего сообщения диалога (для read-ack).</param>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Подписанный id диалога (каналы «-100…», группы «-…», личные «+…»).
|
||||
/// </summary>
|
||||
public string Id { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Отображаемое имя (title/first_name) или id, если имени нет.
|
||||
/// </summary>
|
||||
public string Name { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Username (handle); пуст, если публичного username нет.
|
||||
/// </summary>
|
||||
public string Username { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Тип канона контракта: channel|group|forum|chat.
|
||||
/// </summary>
|
||||
public string Kind { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Число непрочитанных сообщений диалога (для догона realtime_sweep).
|
||||
/// </summary>
|
||||
public int UnreadCount { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Id самого свежего сообщения диалога.
|
||||
/// </summary>
|
||||
public int TopMessageId { get; }
|
||||
}
|
||||
Reference in New Issue
Block a user