Как обнаружить отредактированные или удаленные сообщения в телеграмме - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь определить, какое сообщение отредактировано или удалено на подписанном канале в телеграмме с помощью библиотеки TLSharp в c #.

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( ... );
                    }
                }
            }
        }
    }
}
...