Убрать очевидные <param> токенов отмены и ужать 3 summary

73 <param name="ct|cancellationToken"> («Токен отмены.») — пересказ сигнатуры,
запрещённый §5, удалены в 17 файлах; ужаты 2 многосентенционных и 1 длинное
summary. Контроль краткости: <remarks> 0, inline-<summary> 0, многосентенционных
0, TODO 0. Build 5 sln 0/0, тесты зелёные (1340/130/52/38/9).
This commit is contained in:
Rustam Khalimov
2026-09-11 19:17:00 +03:00
parent a7e38846d7
commit fd64c11441
20 changed files with 10 additions and 79 deletions
@@ -13,7 +13,6 @@ public interface ICoreIngressClient
/// </summary>
/// <param name="tenantId">Id тенанта.</param>
/// <param name="request">Запись в контракте PushSourceRequest.</param>
/// <param name="cancellationToken">Отмена вызова.</param>
/// <returns>Ответ ядра (accepted/duplicate — дубль источника в очереди не растёт).</returns>
public Task<PushSourceReply> PushSourceAsync(
string tenantId,
@@ -25,7 +24,6 @@ public interface ICoreIngressClient
/// </summary>
/// <param name="tenantId">Id тенанта.</param>
/// <param name="entries">Актуальный каталог диалогов (как refresh_dialogs).</param>
/// <param name="cancellationToken">Отмена вызова.</param>
/// <returns>Список id диалогов с включённым мониторингом (по версии ядра).</returns>
public Task<IReadOnlyList<string>> SyncDialogsAsync(
string tenantId,
@@ -75,7 +75,6 @@ public sealed class BackfillService
/// <param name="tenantId">Id тенанта.</param>
/// <param name="dialogId">Подписанный id диалога.</param>
/// <param name="force">True — «Перечитать» по кнопке (семантика флага — в ядре, см. класс).</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>Сколько сообщений отправлено в ядро (0 — диалог уже перечитывается/нет текстов).</returns>
public async Task<int> ExecuteAsync(
string tenantId,
@@ -10,7 +10,6 @@ public interface IBackfillPacer
/// </summary>
/// <param name="minSeconds">Нижняя граница паузы, секунды (≥ 0).</param>
/// <param name="maxSeconds">Верхняя граница паузы, секунды (≥ minSeconds).</param>
/// <param name="cancellationToken">Отмена ожидания.</param>
/// <returns>Задача ожидания.</returns>
public Task WaitAsync(
double minSeconds,
@@ -58,7 +58,6 @@ public sealed class RealtimeSweep
/// <summary>
/// Один цикл догона
/// </summary>
/// <param name="cancellationToken">Отмена цикла.</param>
public async Task SweepAllAsync(CancellationToken cancellationToken)
{
foreach (TenantSession session in _sessionFarm.Sessions)
@@ -56,7 +56,6 @@ public sealed class DiscoveryOps
/// <param name="tenantId">Id тенанта.</param>
/// <param name="query">Поисковый запрос (ключ задачи discovery).</param>
/// <param name="limit">Верхняя граница результата.</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>Найденные источники (каналы/группы/личные) без дублей, не длиннее limit.</returns>
public async Task<IReadOnlyList<TelegramDialog>> SearchAsync(
string tenantId,
@@ -78,7 +77,6 @@ public sealed class DiscoveryOps
/// </summary>
/// <param name="tenantId">Id тенанта.</param>
/// <param name="dialogId">Подписанный id источника («-100…»/«-…»/«+…»).</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>Инфо об источнике (сбои определения не бросаются — см. ISessionClient.GetInfoAsync).</returns>
public Task<TelegramSourceInfo> GetInfoAsync(
string tenantId,
@@ -92,7 +90,6 @@ public sealed class DiscoveryOps
/// <param name="tenantId">Id тенанта.</param>
/// <param name="dialogId">Подписанный id источника.</param>
/// <param name="limit">Размер выборки (≤ 0 — дефолт; форумы читаются по активным темам).</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>ok/сообщения либо ok=false/error="no_history" (не ошибка RPC).</returns>
public Task<DiscoveryReadResult> ReadForEvalAsync(
string tenantId,
@@ -106,7 +103,6 @@ public sealed class DiscoveryOps
/// </summary>
/// <param name="tenantId">Id тенанта.</param>
/// <param name="username">Username источника («@»/пробелы нормализуются).</param>
/// <param name="cancellationToken">Отмена операции.</param>
public async Task JoinAsync(
string tenantId,
string username,
@@ -127,7 +123,6 @@ public sealed class DiscoveryOps
/// </summary>
/// <param name="tenantId">Id тенанта.</param>
/// <param name="dialogId">Подписанный id диалога.</param>
/// <param name="cancellationToken">Отмена операции.</param>
public Task LeaveAsync(
string tenantId,
string dialogId,
@@ -69,7 +69,6 @@ public sealed class RealtimeMonitorService : BackgroundService
/// <summary>
/// При остановке хоста отписывает все listener'ы.
/// </summary>
/// <param name="cancellationToken">Токен остановки.</param>
public override async Task StopAsync(CancellationToken cancellationToken)
{
await base.StopAsync(cancellationToken).ConfigureAwait(false);
@@ -62,7 +62,6 @@ public sealed class SessionHeartbeatService : BackgroundService
/// <summary>
/// При остановке хоста сохраняет живые сессии.
/// </summary>
/// <param name="cancellationToken">Токен остановки.</param>
public override async Task StopAsync(CancellationToken cancellationToken)
{
await base.StopAsync(cancellationToken).ConfigureAwait(false);
@@ -52,7 +52,6 @@ public sealed class SessionFarm
/// </summary>
/// <param name="tenantId">Id тенанта.</param>
/// <param name="limit">Верхняя граница числа диалогов.</param>
/// <param name="cancellationToken">Отмена операции.</param>
public Task<IReadOnlyList<TelegramDialog>> ListDialogsAsync(
string tenantId,
int limit,
@@ -65,7 +64,6 @@ public sealed class SessionFarm
/// <param name="tenantId">Id тенанта.</param>
/// <param name="dialogId">Подписанный id диалога.</param>
/// <param name="limit">Сколько последних сообщений запросить.</param>
/// <param name="cancellationToken">Отмена операции.</param>
public Task<IReadOnlyList<TelegramMessage>> GetMessagesAsync(
string tenantId,
string dialogId,
@@ -79,7 +77,6 @@ public sealed class SessionFarm
/// <param name="tenantId">Id тенанта.</param>
/// <param name="dialogId">Подписанный id диалога.</param>
/// <param name="msgId">Id сообщения в Telegram.</param>
/// <param name="cancellationToken">Отмена операции.</param>
public Task<TelegramMessage?> GetMessageAsync(
string tenantId,
string dialogId,
@@ -92,7 +89,6 @@ public sealed class SessionFarm
/// </summary>
/// <param name="tenantId">Id тенанта.</param>
/// <param name="dialogId">Подписанный id диалога.</param>
/// <param name="cancellationToken">Отмена операции.</param>
public Task MarkReadAsync(
string tenantId,
string dialogId,
@@ -105,7 +101,6 @@ public sealed class SessionFarm
/// <param name="tenantId">Id тенанта.</param>
/// <param name="query">Поисковый запрос (ключ задачи discovery).</param>
/// <param name="limit">Верхняя граница результата.</param>
/// <param name="cancellationToken">Отмена операции.</param>
public Task<IReadOnlyList<TelegramDialog>> SearchAsync(
string tenantId,
string query,
@@ -118,7 +113,6 @@ public sealed class SessionFarm
/// </summary>
/// <param name="tenantId">Id тенанта.</param>
/// <param name="dialogId">Подписанный id источника.</param>
/// <param name="cancellationToken">Отмена операции.</param>
public Task<TelegramSourceInfo> GetInfoAsync(
string tenantId,
string dialogId,
@@ -131,7 +125,6 @@ public sealed class SessionFarm
/// <param name="tenantId">Id тенанта.</param>
/// <param name="dialogId">Подписанный id источника.</param>
/// <param name="limit">Размер выборки.</param>
/// <param name="cancellationToken">Отмена операции.</param>
public Task<DiscoveryReadResult> ReadForEvalAsync(
string tenantId,
string dialogId,
@@ -144,7 +137,6 @@ public sealed class SessionFarm
/// </summary>
/// <param name="tenantId">Id тенанта.</param>
/// <param name="username">Username (без «@»; нормализует DiscoveryOps).</param>
/// <param name="cancellationToken">Отмена операции.</param>
public Task JoinAsync(
string tenantId,
string username,
@@ -156,7 +148,6 @@ public sealed class SessionFarm
/// </summary>
/// <param name="tenantId">Id тенанта.</param>
/// <param name="dialogId">Подписанный id диалога.</param>
/// <param name="cancellationToken">Отмена операции.</param>
public Task LeaveAsync(
string tenantId,
string dialogId,
@@ -170,7 +161,6 @@ public sealed class SessionFarm
/// <param name="apiId">api_id приложения.</param>
/// <param name="apiHash">api_hash приложения.</param>
/// <param name="phone">Номер телефона.</param>
/// <param name="cancellationToken">Отмена операции.</param>
public Task<TenantSessionSnapshot> StartPhoneAsync(
string tenantId,
int apiId,
@@ -185,7 +175,6 @@ public sealed class SessionFarm
/// <param name="tenantId">Id тенанта.</param>
/// <param name="apiId">api_id приложения.</param>
/// <param name="apiHash">api_hash приложения.</param>
/// <param name="cancellationToken">Отмена операции.</param>
public Task<TenantSessionSnapshot> StartQrAsync(
string tenantId,
int apiId,
@@ -198,7 +187,6 @@ public sealed class SessionFarm
/// </summary>
/// <param name="tenantId">Id тенанта.</param>
/// <param name="code">Код.</param>
/// <param name="cancellationToken">Отмена операции.</param>
public Task<TenantSessionSnapshot> SendCodeAsync(
string tenantId,
string code,
@@ -210,7 +198,6 @@ public sealed class SessionFarm
/// </summary>
/// <param name="tenantId">Id тенанта.</param>
/// <param name="password">Пароль.</param>
/// <param name="cancellationToken">Отмена операции.</param>
public Task<TenantSessionSnapshot> SendPasswordAsync(
string tenantId,
string password,
@@ -221,7 +208,6 @@ public sealed class SessionFarm
/// Отключение аккаунта
/// </summary>
/// <param name="tenantId">Id тенанта.</param>
/// <param name="cancellationToken">Отмена операции.</param>
public Task<TenantSessionSnapshot?> LogoutAsync(string tenantId, CancellationToken cancellationToken)
{
TenantSession? session = FindSession(tenantId);
@@ -238,7 +224,6 @@ public sealed class SessionFarm
/// Статус сессии тенанта; null — аккаунт не подключён
/// </summary>
/// <param name="tenantId">Id тенанта.</param>
/// <param name="cancellationToken">Отмена операции.</param>
public Task<TenantSessionSnapshot?> GetStatusAsync(string tenantId, CancellationToken cancellationToken)
{
TenantSession? session = FindSession(tenantId);
@@ -248,7 +233,6 @@ public sealed class SessionFarm
/// <summary>
/// Авто-возобновление на старте
/// </summary>
/// <param name="cancellationToken">Отмена операции.</param>
public async Task ResumeAllAsync(CancellationToken cancellationToken)
{
foreach (string tenantId in _sessionStore.ListTenantIds())
@@ -282,7 +266,6 @@ public sealed class SessionFarm
/// <summary>
/// Сердцебиение
/// </summary>
/// <param name="cancellationToken">Отмена операции.</param>
public async Task HeartbeatTickAsync(CancellationToken cancellationToken)
{
foreach (TenantSession session in _sessions.Values)
@@ -299,7 +282,6 @@ public sealed class SessionFarm
/// <summary>
/// Остановка хоста
/// </summary>
/// <param name="cancellationToken">Отмена операции.</param>
public async Task ShutdownAsync(CancellationToken cancellationToken)
{
foreach (TenantSession session in _sessions.Values)
@@ -39,7 +39,6 @@ public sealed class SessionStore
/// Читает и расшифровывает сессию тенанта.
/// </summary>
/// <param name="tenantId">Id тенанта.</param>
/// <param name="cancellationToken">Отмена операции.</param>
public async Task<StoredSession?> LoadAsync(string tenantId, CancellationToken cancellationToken = default)
{
string filePath = PathFor(tenantId);
@@ -95,7 +94,6 @@ public sealed class SessionStore
/// </summary>
/// <param name="tenantId">Id тенанта.</param>
/// <param name="session">Открытое содержимое сессии для шифрования at-rest.</param>
/// <param name="cancellationToken">Отмена операции.</param>
public async Task SaveAsync(
string tenantId,
StoredSession session,
@@ -124,7 +122,6 @@ public sealed class SessionStore
/// Удаляет файл сессии тенанта
/// </summary>
/// <param name="tenantId">Id тенанта.</param>
/// <param name="cancellationToken">Отмена операции.</param>
public Task DeleteAsync(string tenantId, CancellationToken cancellationToken = default)
{
string filePath = PathFor(tenantId);
@@ -78,7 +78,6 @@ public sealed class TenantSession : IAsyncDisposable
/// <param name="apiId">api_id приложения (из тела запроса ядра).</param>
/// <param name="apiHash">api_hash приложения.</param>
/// <param name="phone">Номер телефона (международный формат).</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>Снимок состояния после операции (фаза "code").</returns>
/// <exception cref="SessionException">Нет ключей (INVALID_ARGUMENT) / ошибки Telegram.</exception>
public async Task<TenantSessionSnapshot> StartPhoneAsync(
@@ -139,7 +138,6 @@ public sealed class TenantSession : IAsyncDisposable
/// </summary>
/// <param name="apiId">api_id приложения.</param>
/// <param name="apiHash">api_hash приложения.</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>Снимок состояния: Qr с qrUrl или Ready (авторизация уже была).</returns>
/// <exception cref="SessionException">Нет ключей (INVALID_ARGUMENT) / ошибки Telegram до первого URL.</exception>
public async Task<TenantSessionSnapshot> StartQrAsync(
@@ -218,10 +216,9 @@ public sealed class TenantSession : IAsyncDisposable
}
/// <summary>
/// Отправить SMS-код. Фазы вне "code" — FAILED_PRECONDITION.
/// Отправить SMS-код.
/// </summary>
/// <param name="code">Код из SMS/Telegram-сообщения.</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>Снимок состояния: "password" при 2FA либо "ready" после авторизации.</returns>
public async Task<TenantSessionSnapshot> SendCodeAsync(string code, CancellationToken cancellationToken)
{
@@ -266,7 +263,6 @@ public sealed class TenantSession : IAsyncDisposable
/// Отправить облачный пароль 2FA.
/// </summary>
/// <param name="password">Облачный пароль.</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>Снимок состояния после операции (фаза "ready").</returns>
public async Task<TenantSessionSnapshot> SendPasswordAsync(string password, CancellationToken cancellationToken)
{
@@ -303,7 +299,6 @@ public sealed class TenantSession : IAsyncDisposable
/// <summary>
/// Отключить аккаунт и удалить сессию тенанта.
/// </summary>
/// <param name="cancellationToken">Отмена операции.</param>
public async Task<TenantSessionSnapshot?> LogoutAsync(CancellationToken cancellationToken)
{
await _gate.WaitAsync(cancellationToken).ConfigureAwait(false);
@@ -357,7 +352,6 @@ public sealed class TenantSession : IAsyncDisposable
/// <summary>
/// Снимок состояния для GetStatus; null — сессии тенанта нет
/// </summary>
/// <param name="cancellationToken">Отмена операции.</param>
public async Task<TenantSessionSnapshot?> GetSnapshotAsync(CancellationToken cancellationToken)
{
await _gate.WaitAsync(cancellationToken).ConfigureAwait(false);
@@ -376,7 +370,6 @@ public sealed class TenantSession : IAsyncDisposable
/// Список диалогов аккаунта; фаза обязана быть ready.
/// </summary>
/// <param name="limit">Верхняя граница числа диалогов.</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>Диалоги аккаунта (нейтральный вид).</returns>
public async Task<IReadOnlyList<TelegramDialog>> ListDialogsAsync(int limit, CancellationToken cancellationToken)
{
@@ -397,7 +390,6 @@ public sealed class TenantSession : IAsyncDisposable
/// </summary>
/// <param name="dialogId">Подписанный id диалога.</param>
/// <param name="limit">Сколько последних сообщений запросить.</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>Сообщения диалога (от новых к старым, непустые тексты).</returns>
public async Task<IReadOnlyList<TelegramMessage>> GetMessagesAsync(
string dialogId,
@@ -421,7 +413,6 @@ public sealed class TenantSession : IAsyncDisposable
/// </summary>
/// <param name="dialogId">Подписанный id диалога.</param>
/// <param name="msgId">Id сообщения в Telegram.</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>Сообщение с текстом либо null (медиа без текста/не найдено).</returns>
public async Task<TelegramMessage?> GetMessageAsync(
string dialogId,
@@ -444,7 +435,6 @@ public sealed class TenantSession : IAsyncDisposable
/// Помечает диалог прочитанным
/// </summary>
/// <param name="dialogId">Подписанный id диалога.</param>
/// <param name="cancellationToken">Отмена операции.</param>
public async Task MarkReadAsync(string dialogId, CancellationToken cancellationToken)
{
await _gate.WaitAsync(cancellationToken).ConfigureAwait(false);
@@ -465,7 +455,6 @@ public sealed class TenantSession : IAsyncDisposable
/// </summary>
/// <param name="query">Поисковый запрос (ключ задачи discovery).</param>
/// <param name="limit">Верхняя граница результата.</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>Найденные источники.</returns>
public async Task<IReadOnlyList<TelegramDialog>> SearchAsync(
string query,
@@ -488,7 +477,6 @@ public sealed class TenantSession : IAsyncDisposable
/// Инфо об источнике для оценки кандидата; фаза ready.
/// </summary>
/// <param name="dialogId">Подписанный id источника.</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>Инфо (по умолчанию — только id; сбои определения не бросаются, см. ISessionClient).</returns>
public async Task<TelegramSourceInfo> GetInfoAsync(string dialogId, CancellationToken cancellationToken)
{
@@ -509,7 +497,6 @@ public sealed class TenantSession : IAsyncDisposable
/// </summary>
/// <param name="dialogId">Подписанный id источника.</param>
/// <param name="limit">Размер выборки (limit ≤ 0 — пусто без сети).</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>Результат чтения (ok/messages либо no_history).</returns>
public async Task<DiscoveryReadResult> ReadForEvalAsync(
string dialogId,
@@ -532,7 +519,6 @@ public sealed class TenantSession : IAsyncDisposable
/// Вступить в канал/группу по username; фаза ready.
/// </summary>
/// <param name="username">Username (без «@»; нормализует DiscoveryOps).</param>
/// <param name="cancellationToken">Отмена операции.</param>
public async Task JoinAsync(string username, CancellationToken cancellationToken)
{
await _gate.WaitAsync(cancellationToken).ConfigureAwait(false);
@@ -551,7 +537,6 @@ public sealed class TenantSession : IAsyncDisposable
/// Выйти из канала/группы; фаза ready.
/// </summary>
/// <param name="dialogId">Подписанный id диалога.</param>
/// <param name="cancellationToken">Отмена операции.</param>
public async Task LeaveAsync(string dialogId, CancellationToken cancellationToken)
{
await _gate.WaitAsync(cancellationToken).ConfigureAwait(false);
@@ -649,7 +634,6 @@ public sealed class TenantSession : IAsyncDisposable
/// Авто-возобновление на старте...
/// </summary>
/// <param name="stored">Содержимое файла сессии тенанта.</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>True — сессия возобновлена (ready); false — не авторизована/сбой.</returns>
public async Task<bool> TryResumeAsync(StoredSession stored, CancellationToken cancellationToken)
{
@@ -708,7 +692,6 @@ public sealed class TenantSession : IAsyncDisposable
/// <summary>
/// Сердцебиение: для фазы "ready" при обрыве соединения — повторный connect.
/// </summary>
/// <param name="cancellationToken">Отмена операции.</param>
public async Task TryReconnectAsync(CancellationToken cancellationToken)
{
await _gate.WaitAsync(cancellationToken).ConfigureAwait(false);
@@ -748,7 +731,6 @@ public sealed class TenantSession : IAsyncDisposable
/// <summary>
/// Остановка (хост гасится)
/// </summary>
/// <param name="cancellationToken">Отмена операции.</param>
public async Task FlushAndDisposeAsync(CancellationToken cancellationToken)
{
await _gate.WaitAsync(cancellationToken).ConfigureAwait(false);
@@ -33,21 +33,18 @@ public interface ISessionClient : IAsyncDisposable
/// <summary>
/// Устанавливает соединение с Telegram
/// </summary>
/// <param name="cancellationToken">Отмена операции.</param>
public Task ConnectAsync(CancellationToken cancellationToken);
/// <summary>
/// Запрашивает SMS-код для номера.
/// </summary>
/// <param name="phone">Номер в международном формате (как ввёл пользователь).</param>
/// <param name="cancellationToken">Отмена операции.</param>
public Task RequestCodeAsync(string phone, CancellationToken cancellationToken);
/// <summary>
/// Отправляет SMS-код. Возвращает следующий запрашиваемый шаг
/// Отправляет SMS-код.
/// </summary>
/// <param name="code">Код из SMS/Telegram-сообщения.</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>"password" при необходимости 2FA, иначе null.</returns>
public Task<string?> SubmitCodeAsync(string code, CancellationToken cancellationToken);
@@ -55,26 +52,22 @@ public interface ISessionClient : IAsyncDisposable
/// Отправляет облачный пароль 2FA.
/// </summary>
/// <param name="password">Облачный пароль.</param>
/// <param name="cancellationToken">Отмена операции.</param>
public Task SubmitPasswordAsync(string password, CancellationToken cancellationToken);
/// <summary>
/// Выполняет QR-вход
/// </summary>
/// <param name="onQrUrl">Колбэк нового URL QR-входа (tg://login?token=...).</param>
/// <param name="cancellationToken">Отмена операции (прерывает ожидание сканирования).</param>
public Task StartQrAsync(Action<string> onQrUrl, CancellationToken cancellationToken);
/// <summary>
/// Полный выход: отзывает авторизацию на стороне Telegram
/// </summary>
/// <param name="cancellationToken">Отмена операции.</param>
public Task LogOutAsync(CancellationToken cancellationToken);
/// <summary>
/// Возвращает строку аккаунта для статуса
/// </summary>
/// <param name="cancellationToken">Отмена операции.</param>
public Task<string> GetAccountAsync(CancellationToken cancellationToken);
@@ -82,7 +75,6 @@ public interface ISessionClient : IAsyncDisposable
/// Список диалогов аккаунта.
/// </summary>
/// <param name="limit">Верхняя граница числа диалогов.</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>Диалоги аккаунта в нейтральном виде.</returns>
public Task<IReadOnlyList<TelegramDialog>> GetDialogsAsync(int limit, CancellationToken cancellationToken);
@@ -91,7 +83,6 @@ public interface ISessionClient : IAsyncDisposable
/// </summary>
/// <param name="dialogId">Подписанный id диалога (каналы "-100…", группы "-…", личные "+…").</param>
/// <param name="limit">Сколько последних сообщений запросить.</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>Сообщения диалога (с канальными полями для PushSource).</returns>
public Task<IReadOnlyList<TelegramMessage>> GetMessagesAsync(
string dialogId,
@@ -103,7 +94,6 @@ public interface ISessionClient : IAsyncDisposable
/// </summary>
/// <param name="dialogId">Подписанный id диалога (каналы "-100…", группы "-…", личные "+…").</param>
/// <param name="msgId">Id сообщения в Telegram.</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>Сообщение с текстом либо null (медиа без текста/не найдено).</returns>
public Task<TelegramMessage?> GetMessageAsync(
string dialogId,
@@ -114,7 +104,6 @@ public interface ISessionClient : IAsyncDisposable
/// Помечает весь диалог прочитанным.
/// </summary>
/// <param name="dialogId">Подписанный id диалога.</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>Задача завершения.</returns>
public Task MarkReadAsync(string dialogId, CancellationToken cancellationToken);
@@ -129,7 +118,6 @@ public interface ISessionClient : IAsyncDisposable
/// </summary>
/// <param name="query">Поисковый запрос (ключ задачи discovery).</param>
/// <param name="limit">Верхняя граница результата.</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>Найденные источники в нейтральном виде (каналы/группы/личные).</returns>
public Task<IReadOnlyList<TelegramDialog>> SearchAsync(
string query,
@@ -140,7 +128,6 @@ public interface ISessionClient : IAsyncDisposable
/// Инфо об источнике для оценки кандидата
/// </summary>
/// <param name="dialogId">Подписанный id источника («-100…»/«-…»/«+…»).</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>Инфо об источнике (по умолчанию — только id и name=id).</returns>
public Task<TelegramSourceInfo> GetInfoAsync(string dialogId, CancellationToken cancellationToken);
@@ -149,7 +136,6 @@ public interface ISessionClient : IAsyncDisposable
/// </summary>
/// <param name="dialogId">Подписанный id источника.</param>
/// <param name="limit">Размер выборки.</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>Результат чтения выборки (ok + сообщения либо no_history).</returns>
public Task<DiscoveryReadResult> ReadForEvalAsync(
string dialogId,
@@ -160,7 +146,6 @@ public interface ISessionClient : IAsyncDisposable
/// Вступить в канал/группу по username.
/// </summary>
/// <param name="username">Username канала/группы (без «@»).</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>Задача завершения (ok=true при успехе).</returns>
public Task JoinAsync(string username, CancellationToken cancellationToken);
@@ -168,7 +153,6 @@ public interface ISessionClient : IAsyncDisposable
/// Выйти из канала/группы.
/// </summary>
/// <param name="dialogId">Подписанный id диалога.</param>
/// <param name="cancellationToken">Отмена операции.</param>
/// <returns>Задача завершения (ok=true при успехе).</returns>
public Task LeaveAsync(string dialogId, CancellationToken cancellationToken);
}