serhiy1994

C# Telegram API - Retrieving all messages in a chat

Dec 25th, 2020 (edited)
453
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.88 KB | None | 0 0
  1. using TeleSharp.TL;
  2. using TeleSharp.TL.Messages;
  3. using TLSharp.Core;
  4. //using other standard...
  5.  
  6. //code for authorization etc. is skipped
  7.  
  8. int VKFID = 1175259547;
  9. int offset = 0;
  10. int n = 1;
  11. StringBuilder sb = new StringBuilder();
  12. TelegramClient client = new TelegramClient(<key>, <hash>);
  13. TLUser user;
  14.  
  15.         private DateTime ConvertFromUnixTimestamp(double timestamp)
  16.         {
  17.             DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
  18.             return origin.AddSeconds(timestamp);
  19.         }
  20.  
  21.         private async void button3_Click(object sender, EventArgs e)
  22.         {
  23.             sb.Append("#\tDate\tTime\tMID\tTUID\tText" + Environment.NewLine);
  24.             TLDialogsSlice dialogs = (TLDialogsSlice)await client.GetUserDialogsAsync();
  25.             TLChannel chat = dialogs.Chats.Where(c => c.GetType() == typeof(TLChannel)).Cast<TLChannel>().FirstOrDefault(c => c.Id == VKFID);
  26.             TLInputPeerChannel inputPeer = new TLInputPeerChannel() { ChannelId = chat.Id, AccessHash = (long)chat.AccessHash };
  27.             while (true)
  28.             {
  29.                 try
  30.                 {
  31.                     TLChannelMessages res = await client.SendRequestAsync<TLChannelMessages>
  32.                     (new TLRequestGetHistory() { Peer = inputPeer, Limit = 1000, AddOffset = offset, OffsetId = 0 });
  33.                     var msgs = res.Messages;
  34.                     if (res.Count > offset)
  35.                     {
  36.                         offset += msgs.Count;
  37.                         foreach (TLAbsMessage msg in msgs)
  38.                         {
  39.                             if (msg is TLMessage)
  40.                             {
  41.                                 TLMessage message = msg as TLMessage;
  42.                                 sb.Append(n.ToString() + "\t" +
  43.                                     ConvertFromUnixTimestamp(message.Date).ToLocalTime().ToString("dd'.'MM'.'yyyy") + "\t" +
  44.                                     ConvertFromUnixTimestamp(message.Date).ToLocalTime().ToString("HH':'mm':'ss") + "\t" +
  45.                                     message.Id + "\t" + message.FromId + "\t" + message.Message + Environment.NewLine);
  46.                             }
  47.                             if (msg is TLMessageService)
  48.                                 continue;
  49.                             n++;
  50.                         }
  51.                         //Thread.Sleep(22000); //чтобы обойти TelegramFloodException
  52.                     }
  53.                     else
  54.                         break;
  55.                 }
  56.                 catch (Exception ex)
  57.                 {
  58.                     MessageBox.Show(ex.Message);
  59.                     break;
  60.                 }
  61.                 finally
  62.                 {
  63.                     await Task.Delay(22000);
  64.                 }
  65.             }
  66.             textBox2.Text = sb.ToString();
  67.             MessageBox.Show("Done");
  68.         }
  69.  
Add Comment
Please, Sign In to add comment