【发布时间】:2021-04-03 16:52:36
【问题描述】:
-
我需要获取聊天中的所有消息。我使用 C# 和 TLSharp 库。
-
我已授权,成功获得令牌等。
-
但是当我试图在一个循环中获取消息时,我会进入一个无限循环。
-
所以带有结果的文本永远不会出现在文本框中。 我想知道我做错了什么以及如何解决它。谢谢。
using TeleSharp.TL; using TeleSharp.TL.Messages; using TLSharp.Core; //using other standard... //code for authorization etc. is skipped int VKFID = 1175259547; //ID of the chat int offset = 0; int n = 1; StringBuilder sb = new StringBuilder(); TelegramClient client = new TelegramClient(<key>, <hash>); TLUser user; private DateTime ConvertFromUnixTimestamp(double timestamp) { DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0); return origin.AddSeconds(timestamp); } private async void button3_Click(object sender, EventArgs e) { sb.Append("#\tDate\tTime\tMID\tTUID\tText" + Environment.NewLine); TLDialogsSlice dialogs = (TLDialogsSlice)await client.GetUserDialogsAsync(); TLChannel chat = dialogs.Chats.Where(c => c.GetType() == typeof(TLChannel)).Cast<TLChannel>().FirstOrDefault(c => c.Id == VKFID); TLInputPeerChannel inputPeer = new TLInputPeerChannel() { ChannelId = chat.Id, AccessHash = (long)chat.AccessHash }; while (true) { try { TLChannelMessages res = await client.SendRequestAsync<TLChannelMessages> (new TLRequestGetHistory() { Peer = inputPeer, Limit = 1000, AddOffset = offset, OffsetId = 0 }); var msgs = res.Messages; if (res.Count > offset) { offset += msgs.Count; foreach (TLAbsMessage msg in msgs) { if (msg is TLMessage) { TLMessage message = msg as TLMessage; sb.Append(n.ToString() + "\t" + ConvertFromUnixTimestamp(message.Date).ToLocalTime().ToString("dd'.'MM'.'yyyy") + "\t" + ConvertFromUnixTimestamp(message.Date).ToLocalTime().ToString("HH':'mm':'ss") + "\t" + message.Id + "\t" + message.FromId + "\t" + message.Message + Environment.NewLine); } if (msg is TLMessageService) continue; n++; } Thread.Sleep(22000); //to avoid TelegramFloodException } else break; } catch (Exception ex) { MessageBox.Show(ex.Message); break; } finally { await Task.Delay(22000); //to avoid TelegramFloodException } } textBox2.Text = sb.ToString(); MessageBox.Show("Done"); }
【问题讨论】:
标签: c# telegram telegram-api