Добавьте файлы проекта.
This commit is contained in:
43
BotPages.Core/Transport/DefaultFileService.cs
Normal file
43
BotPages.Core/Transport/DefaultFileService.cs
Normal file
@@ -0,0 +1,43 @@
|
||||
namespace BotPages.Core
|
||||
{
|
||||
/// <summary>
|
||||
/// Транспорт-независимая реализация отправки пачек через клиент.
|
||||
/// </summary>
|
||||
public sealed class DefaultFileService : IFileService
|
||||
{
|
||||
/// <summary>
|
||||
/// Заглушка загрузки файла (реализуется в адаптере транспорта).
|
||||
/// </summary>
|
||||
public Task<FileDescriptor> DownloadAsync(string fileId, CancellationToken ct)
|
||||
{
|
||||
throw new System.NotImplementedException("DownloadAsync должен быть реализован конкретным транспортным адаптером.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Загружает несколько файлов по идентификаторам.
|
||||
/// </summary>
|
||||
public async Task<IReadOnlyList<FileDescriptor>> DownloadManyAsync(IEnumerable<string> fileIds, CancellationToken ct)
|
||||
{
|
||||
var res = new List<FileDescriptor>();
|
||||
foreach (var id in fileIds)
|
||||
res.Add(await DownloadAsync(id, ct));
|
||||
return res;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Отправляет один файл через клиент.
|
||||
/// </summary>
|
||||
public Task SendAsync(IChatClient client, long chatId, FileDescriptor file, CancellationToken ct)
|
||||
{
|
||||
return client.SendFilesAsync(chatId, new[] { file }, ct);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Отправляет несколько файлов через клиент.
|
||||
/// </summary>
|
||||
public Task SendManyAsync(IChatClient client, long chatId, IEnumerable<FileDescriptor> files, CancellationToken ct)
|
||||
{
|
||||
return client.SendFilesAsync(chatId, files, ct);
|
||||
}
|
||||
}
|
||||
}
|
||||
27
BotPages.Core/Transport/IChatClient.cs
Normal file
27
BotPages.Core/Transport/IChatClient.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
namespace BotPages.Core
|
||||
{
|
||||
/// <summary>
|
||||
/// Универсальный клиент для отправки сообщений и файлов в чат.
|
||||
/// Адаптеры (Telegram, MAX и др.) реализуют этот интерфейс.
|
||||
/// </summary>
|
||||
public interface IChatClient
|
||||
{
|
||||
/// <summary>
|
||||
/// Отправляет текстовое сообщение.
|
||||
/// Может сопровождаться клавиатурой (inline или reply).
|
||||
/// </summary>
|
||||
/// <param name="chatId">Идентификатор чата.</param>
|
||||
/// <param name="message">Сообщение.</param>
|
||||
/// <param name="actions">Кнопки для отображения (опционально).</param>
|
||||
/// <param name="ct">Токен отмены.</param>
|
||||
Task SendTextAsync(long chatId, PageMessage message, IEnumerable<PageAction>? actions, CancellationToken ct);
|
||||
|
||||
/// <summary>
|
||||
/// Отправляет файлы в чат.
|
||||
/// </summary>
|
||||
/// <param name="chatId">Идентификатор чата.</param>
|
||||
/// <param name="files">Файлы для отправки.</param>
|
||||
/// <param name="ct">Токен отмены.</param>
|
||||
Task SendFilesAsync(long chatId, IEnumerable<FileDescriptor> files, CancellationToken ct);
|
||||
}
|
||||
}
|
||||
28
BotPages.Core/Transport/IFileService.cs
Normal file
28
BotPages.Core/Transport/IFileService.cs
Normal file
@@ -0,0 +1,28 @@
|
||||
namespace BotPages.Core
|
||||
{
|
||||
/// <summary>
|
||||
/// Сервис работы с файлами: загрузка и отправка пакетами.
|
||||
/// </summary>
|
||||
public interface IFileService
|
||||
{
|
||||
/// <summary>
|
||||
/// Загружает файл по идентификатору транспорта.
|
||||
/// </summary>
|
||||
Task<FileDescriptor> DownloadAsync(string fileId, CancellationToken ct);
|
||||
|
||||
/// <summary>
|
||||
/// Загружает несколько файлов по их идентификаторам.
|
||||
/// </summary>
|
||||
Task<IReadOnlyList<FileDescriptor>> DownloadManyAsync(IEnumerable<string> fileIds, CancellationToken ct);
|
||||
|
||||
/// <summary>
|
||||
/// Отправляет один файл в чат.
|
||||
/// </summary>
|
||||
Task SendAsync(IChatClient client, long chatId, FileDescriptor file, CancellationToken ct);
|
||||
|
||||
/// <summary>
|
||||
/// Отправляет несколько файлов в чат.
|
||||
/// </summary>
|
||||
Task SendManyAsync(IChatClient client, long chatId, IEnumerable<FileDescriptor> files, CancellationToken ct);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user