public async Task HandleAsync(IUpdateContext context, UpdateDelegate next, CancellationToken cancellationToken) { CallbackQuery cq = context.Update.CallbackQuery; ValeoKeyboard reply = await _responseController.UpdateUserStateAsync(cq.Message.Chat.Id, cq.Data); if (reply.Location != null) { await context.Bot.Client.SendLocationAsync( cq.Message.Chat.Id, reply.Location.Latitude, reply.Location.Longitude ); await context.Bot.Client.SendTextMessageAsync( cq.Message.Chat.Id, reply.Message, ParseMode.Markdown, replyMarkup : reply.Markup ); return; } if (reply.AlbumImagesPathList != null) { List <Stream> photosStreams = new List <Stream>(); List <InputMediaPhoto> inputMediaPhotos = new List <InputMediaPhoto>(); foreach (string path in reply.AlbumImagesPathList) { inputMediaPhotos.Add(new InputMediaPhoto(new InputMedia(System.IO.File.OpenRead(path), path))); } IAlbumInputMedia[] inputMedia = inputMediaPhotos.ToArray(); await context.Bot.Client.DeleteMessageAsync( cq.Message.Chat.Id, cq.Message.MessageId ); await context.Bot.Client.SendMediaGroupAsync( inputMedia, cq.Message.Chat.Id ); await context.Bot.Client.SendTextMessageAsync( cq.Message.Chat.Id, reply.Message, replyMarkup : reply.Markup, parseMode : ParseMode.Markdown ); photosStreams.ForEach(stream => stream.Dispose()); return; } if (reply.ImagePath != null) { await context.Bot.Client.DeleteMessageAsync( cq.Message.Chat.Id, cq.Message.MessageId ); using (var photo = new FileStream(reply.ImagePath, FileMode.Open)) { await context.Bot.Client.SendPhotoAsync( cq.Message.Chat.Id, photo, caption : reply.Message, replyMarkup : reply.Markup, parseMode : ParseMode.Markdown ); } return; } if (cq.Message.Type == MessageType.Photo) { await context.Bot.Client.DeleteMessageAsync( cq.Message.Chat.Id, cq.Message.MessageId ); await context.Bot.Client.SendTextMessageAsync( cq.Message.Chat.Id, reply.Message, replyMarkup : reply.Markup ); return; } await context.Bot.Client.EditMessageTextAsync( cq.Message.Chat.Id, cq.Message.MessageId, reply.Message, ParseMode.Markdown); await context.Bot.Client.EditMessageReplyMarkupAsync( cq.Message.Chat.Id, cq.Message.MessageId, reply.Markup); await next(context); }