diff --git a/src/CasaBot/CasaBotApp/BotHandler.cs b/src/CasaBot/CasaBotApp/BotHandler.cs index d3ed355..901bacb 100644 --- a/src/CasaBot/CasaBotApp/BotHandler.cs +++ b/src/CasaBot/CasaBotApp/BotHandler.cs @@ -16,6 +16,8 @@ public class BotHandler : IUpdateHandler private readonly TelegramOptions _telegramOptions; private readonly List _subscribers = []; private readonly Dictionary _commands; + + public Func? OnReply { get; set; } = null; private readonly IBotClient _bot; @@ -113,6 +115,20 @@ public class BotHandler : IUpdateHandler await SndPhoto(subscriber, stream); } } + + public async Task SendVideo(long chatId, string path) + { + _logger.LogInformation("Sending video to {ChatId}", chatId); + await using var stream = File.OpenRead(path); + var send = new SendVideoFile(chatId.ToString(), stream); + var response = await _bot.HandleAsync(send); + if (!response.Ok) + { + _logger.LogError("Error sending video."); + } + _logger.LogInformation("Video sent to {ChatId}", chatId); + stream.Close(); + } public async Task UpdatePhotos(string[] paths) { @@ -133,7 +149,10 @@ public class BotHandler : IUpdateHandler private async Task UpdatePhotosInt(string[] paths) { var streams = paths.Select(File.OpenRead).ToList(); - var photos = streams.Select(stream => new PhotoFile(stream)).Cast().ToList(); + var photos = streams.Select(stream => new PhotoFile(stream) + { + Caption = Path.GetFileNameWithoutExtension(stream.Name) + }).Cast().ToList(); var s0 = _subscribers.FirstOrDefault()?.Id.ToString(); if(s0 is null) @@ -180,12 +199,44 @@ public class BotHandler : IUpdateHandler await _bot.HandleAsync(send); } + /// + /// Send photos to a specific chat + /// + /// + /// + public async Task SendPhotos(long chatId, string[] paths) + { + var streams = paths.Select(File.OpenRead).ToArray(); + var photos = streams.Select(stream => new PhotoFile(stream) + { + Caption = Path.GetFileNameWithoutExtension(stream.Name) + }).Cast().ToArray(); + + var request = new SendMediaGroup(chatId.ToString(), photos); + var response = await _bot.HandleAsync(request); + if (!response.Ok) + { + _logger.LogError("Error sending photos."); + } + + foreach (var stream in streams) + { + stream.Close(); + await stream.DisposeAsync(); + } + } + private async Task OnMessage(TextMessage msg) { if(!_commands.TryGetValue(msg.Text, out var command)) { + if (msg.ReplyToMessage != null && OnReply is not null) + { + await OnReply(msg); + return; + } await SendHelp(msg); return; }