public async Task DownloadFileFromContactTest() { using (var client = await NewClient().ConfigureAwait(false)) { await client.ConnectService.ConnectAsync().ConfigureAwait(false); var result = await client.ContactsService.GetContactsAsync().ConfigureAwait(false); var user = result.Cast <TContacts>().Users.Items .OfType <TUser>() .FirstOrDefault(x => x.Phone == NumberToSendMessage); var inputPeer = new TInputPeerUser { UserId = user.Id, AccessHash = 0 }; var res = await client.SendService.SendRequestAsync( new RequestGetHistory { Peer = inputPeer, Limit = 3, AddOffset = 0, MaxId = 0, MinId = 0, OffsetDate = 0, OffsetId = 0 }); var document = res.As <TMessages>().Messages.Items .OfType <TMessage>() .Where(m => m.Media != null) .Select(m => m.Media) .OfType <TMessageMediaDocument>() .Select(md => md.Document) .OfType <TDocument>() .First(); var resFile = await client.UploadService.GetFile( new TInputDocumentFileLocation { AccessHash = document.AccessHash, Id = document.Id, Version = document.Version }) .ConfigureAwait(false); Assert.True(resFile.Cast <TFileCdnRedirect>().EncryptionIv.Length > 0); } }
public static async Task <bool> Operation() { await TelegramClientGet().UsersService.GetCurrentUserFullAsync(); Console.WriteLine("\nEnter Target Account Username Which You Want To Calculate The Chat Time: "); string strTargetUsername = System.Console.ReadLine(); string strSearchValue = strTargetUsername.Trim().ToLower(); if (strSearchValue.StartsWith("@")) { strSearchValue = strSearchValue.Substring(1); } string strSaveFile = string.Format("MessagesInChatWith-{0}.json", strTargetUsername); var chatsSearch = await TelegramClientGet().ContactsService.SearchUserAsync(strSearchValue); TUser oTargetUser = chatsSearch.Users.Where(current => current.GetType() == typeof(TUser) && (!string.IsNullOrEmpty(((TUser)current).Username) && ((TUser)current).Username.Trim().ToLower() == strSearchValue)) .FirstOrDefault() .As <TUser>(); if (oTargetUser == null) { Console.WriteLine("Fail! Cannot Find Target User ..."); return(false); } List <TMessage> ChatMessages = new List <TMessage>(); List <TmessageJustIntTime> ChatMessageTimes = new List <TmessageJustIntTime>(); if (File.Exists(strSaveFile)) { string strJsonDataOfSavedFile = string.Empty; using (StreamReader reader = new StreamReader(strSaveFile)) { strJsonDataOfSavedFile = await reader.ReadToEndAsync(); } ChatMessageTimes = Newtonsoft.Json.JsonConvert.DeserializeObject <List <TmessageJustIntTime> >(strJsonDataOfSavedFile); } else { var TargetUserPeer = new TInputPeerUser() { AccessHash = oTargetUser.AccessHash, UserId = oTargetUser.Id, }; var ChatHisrtoy = await TelegramClientGet().MessagesService.GetHistoryAsync(TargetUserPeer, 0, -1, -1); int MessageCount = ChatHisrtoy.As <TMessagesSlice>().Count; Console.WriteLine(string.Format("\nYou Two Have {0} Messages In Your Telegram Chat", MessageCount)); Console.WriteLine("Please Wait Until All Messages Load From Telegram! We Cant Download Them In One Package Because Of Telegram Flood Detection System!\n"); int GetMessageLimit = 100; for (int i = 0; i < MessageCount; i += GetMessageLimit) { Console.WriteLine("Getting Messages Batch Number : " + i); GetChatHistoryMessagesResponse oResponse = await GetChatHistoryMessages(TargetUserPeer, GetMessageLimit, i); while (!oResponse.Success) { await Task.Delay(1000); oResponse = await GetChatHistoryMessages(TargetUserPeer, GetMessageLimit, i); } ChatMessages.AddRange( oResponse.Messages ); await Task.Delay(1000); } ChatMessages = ChatMessages.DistinctBy(current => current.Id).ToList(); ChatMessageTimes = ChatMessages .Select(currnet => new TmessageJustIntTime() { date = currnet.Date }) .ToList(); string strMessagesInJsonFormat = Newtonsoft.Json.JsonConvert.SerializeObject(ChatMessageTimes); using (StreamWriter writer = new StreamWriter(strSaveFile, false)) { await writer.WriteAsync(strMessagesInJsonFormat); } } ChatMessageTimes = ChatMessageTimes .OrderBy(current => current.date) .ToList(); int SumOfChatsTimes = 0; List <List <TmessageJustIntTime> > Chats = new List <List <TmessageJustIntTime> >(); int TempChatStartIndex = -1; int AllMessageCount = ChatMessageTimes.Count(); for (int i = 0; i < AllMessageCount; i++) { if ((i + 1) == AllMessageCount) { continue; } if ((ChatMessageTimes[i + 1].date - ChatMessageTimes[i].date) > 150) { if (TempChatStartIndex == -1) { var chat = new List <TmessageJustIntTime>(); chat.Add(ChatMessageTimes[i]); Chats.Add(chat); } else { var chat = new List <TmessageJustIntTime>(); for (int j = TempChatStartIndex; j <= i; j++) { chat.Add(ChatMessageTimes[j]); } Chats.Add(chat); TempChatStartIndex = -1; } } else { if (TempChatStartIndex == -1) { TempChatStartIndex = i; } } } Chats.RemoveAll(current => current.Count() < 4); foreach (var chat in Chats) { int duration = chat[chat.Count() - 1].date - chat[0].date; SumOfChatsTimes += duration; } Console.WriteLine(string.Format("\n**************** Sum of All Your Chats Duration With {0} is {1} Seconds ****************", strTargetUsername, SumOfChatsTimes)); System.TimeSpan chatsTimeSpan = System.TimeSpan.FromSeconds(SumOfChatsTimes); Console.WriteLine(string.Format("\n**************** In Other Words {0} Days, {1} Hours, {2} Minutes and {3} Seconds ****************", chatsTimeSpan.Days, chatsTimeSpan.Hours, chatsTimeSpan.Minutes, chatsTimeSpan.Seconds)); return(true); }
public static async Task <GetChatHistoryMessagesResponse> GetChatHistoryMessages(TInputPeerUser targetUserPeer, int messageLimit, int offset) { GetChatHistoryMessagesResponse oResponse = new GetChatHistoryMessagesResponse() { Success = false, Messages = new List <TMessage>(), }; try { var getMessages = await TelegramClientGet().MessagesService.GetHistoryAsync(targetUserPeer, offset, -1, messageLimit); oResponse.Messages = getMessages .As <TMessagesSlice>() .Messages .OfType <TMessage>() .ToList(); oResponse.Success = true; } catch (Exception) { return(oResponse); } return(oResponse); }