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);
}
}
}