using BotPages.Core; using Telegram.Bot; namespace BotPages.Telegram { /// /// FileService для Telegram: загрузка по FileId. /// public sealed class TelegramFileService : IFileService { private readonly ITelegramBotClient _bot; /// /// Создаёт файловый сервис для Telegram. /// public TelegramFileService(ITelegramBotClient bot) => _bot = bot; /// /// Загружает файл по идентификатору Telegram FileId. /// public async Task DownloadAsync(string fileId, CancellationToken ct) { var file = await _bot.GetFile(fileId, ct); var ms = new MemoryStream(); await _bot.DownloadFile(file.FilePath!, ms, ct); ms.Position = 0; var name = System.IO.Path.GetFileName(file.FilePath!); return new FileDescriptor(file.FileId, name, "application/octet-stream", ms); } /// /// Загружает несколько файлов по их идентификаторам. /// public async Task> DownloadManyAsync(IEnumerable fileIds, CancellationToken ct) { var res = new List(); foreach (var id in fileIds) res.Add(await DownloadAsync(id, ct)); return res; } /// /// Отправляет один файл в чат. /// public async Task SendAsync(IChatClient client, long chatId, FileDescriptor file, CancellationToken ct) { await client.SendFilesAsync(chatId, new[] { file }, ct); } /// /// Отправляет несколько файлов в чат. /// public Task SendManyAsync(IChatClient client, long chatId, IEnumerable files, CancellationToken ct) { return client.SendFilesAsync(chatId, files, ct); } } }