public EjooUtilBotInstance( ItemsQueueRepo itemsQueueRepo, SubscriberRepo subscriberRepo, ITelegramBotClient telegramClient, ILogger <EjooUtilBotInstance> logger) { ItemsQueueRepo = itemsQueueRepo; SubscriberRepo = subscriberRepo; TelegramClient = telegramClient; Logger = logger; }
private void AddItem(Update update, SubscriberRecord subscriberRecord) { var item = new ItemRecord { BotInstanceId = BotInstanceId, MessageId = update.Message.MessageId, ChatId = subscriberRecord.ChatId, }; if (update.Message.Type == MessageType.Photo) { item.ItemType = ItemRecord.ItemTypes.IMAGE; item.FileId = update.Message.Photo[update.Message.Photo.Length - 1].FileId; ItemsQueueRepo.Add(subscriberRecord, item); } else if (update.Message.Type == MessageType.Text) { var isUri = Uri.IsWellFormedUriString(update.Message.Text, UriKind.RelativeOrAbsolute); item.ItemType = ItemRecord.ItemTypes.WEB_PAGE; item.Text = update.Message.Text; } else if (update.Message.Type == MessageType.Document) { switch (update.Message.Document.MimeType) { case "application/pdf": item.ItemType = ItemRecord.ItemTypes.PDF_FILE; item.FileId = update.Message.Document.FileId; ItemsQueueRepo.Add(subscriberRecord, item); break; case "image/jpeg": case "image/png": item.ItemType = ItemRecord.ItemTypes.IMAGE; item.FileId = update.Message.Document.FileId; ItemsQueueRepo.Add(subscriberRecord, item); break; } } }
private void Flush(Update update, SubscriberRecord subscriberRecord) { var currentSessionImages = ItemsQueueRepo.GetCurrentSessionImages(subscriberRecord).ToArray(); if (!currentSessionImages.Any()) { TelegramClient.SendTextMessageAsync(subscriberRecord.ChatId, "چیزی برای تبدیل به پی دی اف وجود ندارد.", replyMarkup: Keyboards.FlushMarkup); return; } TelegramClient.SendTextMessageAsync(subscriberRecord.ChatId, $"در حال بارگزاری { currentSessionImages.Length } فایل", replyMarkup: Keyboards.FlushMarkup); var progreessMsgId = TelegramClient.SendTextMessageAsync(subscriberRecord.ChatId, GetProgressString(0, 10)).Result.MessageId; var memStream = new MemoryStream(); using (var pdfWriter = new PdfWriter(memStream)) using (var pdfDoc = new PdfDocument(pdfWriter)) using (var document = new iText.Layout.Document(pdfDoc, new PageSize(0, 0))) { for (var i = 0; i < currentSessionImages.Length; i++) { var currentSessionImage = currentSessionImages[i]; switch (currentSessionImage.ItemType) { case ItemRecord.ItemTypes.IMAGE: { var imageStream = new MemoryStream(); var result = TelegramClient .GetInfoAndDownloadFileAsync(currentSessionImage.FileId, imageStream).Result; var image = new Image(ImageDataFactory.Create(imageStream.ToArray())); pdfDoc.AddNewPage(new PageSize(image.GetImageWidth(), image.GetImageHeight())); image.SetFixedPosition(pdfDoc.GetNumberOfPages(), 0, 0); document.Add(image); } break; case ItemRecord.ItemTypes.PDF_FILE: { try { var memoryStream = new MemoryStream(); var result = TelegramClient.GetInfoAndDownloadFileAsync(currentSessionImage.FileId, memoryStream).Result; var bytes = memoryStream.ToArray(); var tempStream = new MemoryStream(bytes); using (var pdfReader = new PdfReader(tempStream)) { using (var newPdfDoc = new PdfDocument(pdfReader)) { newPdfDoc.CopyPagesTo(1, newPdfDoc.GetNumberOfPages(), pdfDoc); } } tempStream.Close(); memoryStream.Close(); } catch (Exception exception) { var baseException = exception.GetBaseException(); Logger.LogError(baseException, "Read Pdf File Failed: {Message} -> {StackTrace}", baseException.Message, baseException.StackTrace); } } break; default: break; } TelegramClient.EditMessageTextAsync(subscriberRecord.ChatId, progreessMsgId, GetProgressString(i + 1, currentSessionImages.Length)); } } var resultEdit = TelegramClient.EditMessageTextAsync(subscriberRecord.ChatId, progreessMsgId, "در حال آپلود فایل...").Result; SendPdf(subscriberRecord, memStream); memStream.Close(); ItemsQueueRepo.ClearCurrentSessionImages(subscriberRecord); }