From fabe33ee70142ddadacedb205a38b2b902e7b2c4 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Thu, 9 Mar 2023 18:42:17 +0300 Subject: for #3395 - remote message deletion --- protocols/Telegram/src/proto.h | 1 + protocols/Telegram/src/server.cpp | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) (limited to 'protocols/Telegram/src') diff --git a/protocols/Telegram/src/proto.h b/protocols/Telegram/src/proto.h index 83909acf1f..d0cdd764c2 100644 --- a/protocols/Telegram/src/proto.h +++ b/protocols/Telegram/src/proto.h @@ -191,6 +191,7 @@ class CTelegramProto : public PROTO void ProcessChat(TD::updateNewChat *pObj); void ProcessChatLastMessage(TD::updateChatLastMessage *pObj); void ProcessChatPosition(TD::updateChatPosition *pObj); + void ProcessDeleteMessage(TD::updateDeleteMessages *pObj); void ProcessFile(TD::updateFile *pObj); void ProcessGroups(TD::updateChatFilters *pObj); void ProcessMarkRead(TD::updateChatReadInbox *pObj); diff --git a/protocols/Telegram/src/server.cpp b/protocols/Telegram/src/server.cpp index d3a5afcacd..8611c6f625 100644 --- a/protocols/Telegram/src/server.cpp +++ b/protocols/Telegram/src/server.cpp @@ -150,6 +150,10 @@ void CTelegramProto::ProcessResponse(td::ClientManager::Response response) ProcessMarkRead((TD::updateChatReadInbox *)response.object.get()); break; + case TD::updateDeleteMessages::ID: + ProcessDeleteMessage((TD::updateDeleteMessages*)response.object.get()); + break; + case TD::updateFile::ID: ProcessFile((TD::updateFile *)response.object.get()); break; @@ -383,6 +387,25 @@ void CTelegramProto::ProcessChatPosition(TD::updateChatPosition *pObj) } } +void CTelegramProto::ProcessDeleteMessage(TD::updateDeleteMessages *pObj) +{ + if (!pObj->is_permanent_) + return; + + auto *pUser = FindChat(pObj->chat_id_); + if (pUser == nullptr || pUser->hContact == INVALID_CONTACT_ID) { + debugLogA("message from unknown chat, ignored"); + return; + } + + for (auto &it : pObj->message_ids_) { + char id[100]; + _i64toa(it, id, 10); + if (MEVENT hEvent = db_event_getById(m_szModuleName, id)) + db_event_delete(hEvent); + } +} + void CTelegramProto::ProcessGroups(TD::updateChatFilters *pObj) { for (auto &grp : pObj->chat_filters_) { -- cgit v1.2.3