如何在电报上检测已编辑或已删除的消息

Moh*_*Mad 6 c# telegram

我试图通过c#中的TLSharp库在电报上的订阅频道上检测编辑或删除的消息.

1- while(true)循环我得到最新的更新.

2-当我删除或编辑测试消息时,我只收到TLUpdateChannelTooLong.

3-然后我使用client.GetHistoryAsync函数来获取频道消息,并检查他们的EditDate.

但是我不知道我应该在历史中深入了解多少,而且我很难用这段代码找到已删除的消息.

有没有解决方案可以轻松安全地找到已删除/已编辑的邮件?

我的部分代码:

state = await client.SendRequestAsync<TLState>(new TLRequestGetState());
while (true)
{
    await Task.Delay(1000);
    var req = new TLRequestGetDifference() { Date = state.Date, Pts = state.Pts, Qts = state.Qts };
    TLDifference diff = null;
    try
    {
        diff = await client.SendRequestAsync<TLAbsDifference>(req) as TLDifference;
    }
    catch (Exception ex)
    {
        HandleThisException(ex);
    }
    //--
    if (diff != null)
    {
        state = await client.SendRequestAsync<TLState>(new TLRequestGetState());
        foreach (var upd in diff.OtherUpdates.OfType<TLUpdateNewChannelMessage>())
        {
            var tm = (upd.Message as TLMessage);
            if (tm == null) { continue; } // ?
            var textMessage = tm.Message;
            if (tm.Media != null)
            {
                if (tm.Media.GetType().ToString() == "TeleSharp.TL.TLMessageMediaPhoto")
                {
                    var tLMessageMediaPhoto = (tm.Media as TLMessageMediaPhoto);
                    textMessage = tLMessageMediaPhoto.Caption;
                }
            }
            try
            {
                var from = (tm.ToId as TLPeerChannel).ChannelId;
                long replyTo = tm.ReplyToMsgId == null ? 0 : (long)tm.ReplyToMsgId;
                await AnalyzeNewMessage( ... );
            }
            catch (Exception exParsing)
            {
                HandleThisException(exParsing);
            }
        }
         // Checking Edited/Deleted Messages
        foreach(var upLong in diff.OtherUpdates.OfType<TLUpdateChannelTooLong>())
        {
            TLChannel theChat = null;
            foreach(var chat in diff.Chats.OfType<TLChannel>())
            {
                if(chat.Id == upLong.ChannelId) { theChat = chat;  break; }
            }
            if (theChat != null)
            {
                var x = await client.GetHistoryAsync(
                    new TLInputPeerChannel { ChannelId = theChat.Id, AccessHash = (long)theChat.AccessHash },
                    0,-1,2
                    ); // checking only 2 last messages!
                var ChMsgs = x as TLChannelMessages;
                foreach (var msg in ChMsgs.Messages.OfType<TLMessage>())
                {
                    if(msg.EditDate != null)
                    {
                        var txt = msg.Message;
                        if (msg.Media != null)
                        {
                            if (msg.Media.GetType().ToString() == "TeleSharp.TL.TLMessageMediaPhoto")
                            {
                                txt = (msg.Media as TLMessageMediaPhoto).Caption;
                            }
                        }
                        await AnalyzeEditedMessage( ... );
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)