From 690e3433c5bcfea991a8efce03e0ae2ef389df44 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 22 Jun 2025 17:42:11 +0300 Subject: =?UTF-8?q?fixes=20#5049=20(Telegram:=20=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D1=82=D1=8C=20=D0=B2=20=D1=8E=D0=B7=D0=B5=D1=80?= =?UTF-8?q?=D0=B8=D0=BD=D1=84=D0=BE=20=D0=BA=D0=B0=D0=BD=D0=B0=D0=BB=D0=B0?= =?UTF-8?q?=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA?= =?UTF-8?q?=D0=B0=D0=BD=D0=B0=D0=BB=D0=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- protocols/Telegram/src/groupchat.cpp | 31 +++++++++---------------- protocols/Telegram/src/proto.cpp | 45 ++++++++++++++++++++++++++++++++++++ protocols/Telegram/src/proto.h | 6 +++-- protocols/Telegram/src/server.cpp | 27 ++++++++++++++-------- 4 files changed, 78 insertions(+), 31 deletions(-) (limited to 'protocols/Telegram/src') diff --git a/protocols/Telegram/src/groupchat.cpp b/protocols/Telegram/src/groupchat.cpp index 7e74a40976..38ab04a307 100644 --- a/protocols/Telegram/src/groupchat.cpp +++ b/protocols/Telegram/src/groupchat.cpp @@ -391,32 +391,23 @@ void CTelegramProto::ProcessBasicGroup(TD::updateBasicGroup *pObj) pUser->bLoadMembers = true; } -void CTelegramProto::ProcessBasicGroupInfo(TD::updateBasicGroupFullInfo *pObj) +void CTelegramProto::ProcessBasicGroupInfo(TG_USER *pChat, TD::basicGroupFullInfo *pInfo) { - auto *pChat = FindUser(pObj->basic_group_id_); - if (pChat == nullptr || pChat->m_si == nullptr) - return; - - if (auto *pInfo = pObj->basic_group_full_info_.get()) { - if (!pInfo->description_.empty()) - GcChangeTopic(pChat, pInfo->description_); - - g_chatApi.UM_RemoveAll(pChat->m_si); - GcAddMembers(pChat, pInfo->members_, true); + if (!pInfo->description_.empty()) { + setUString(pChat->hContact, "About", pInfo->description_.c_str()); + GcChangeTopic(pChat, pInfo->description_); } + + g_chatApi.UM_RemoveAll(pChat->m_si); + GcAddMembers(pChat, pInfo->members_, true); } -void CTelegramProto::ProcessSuperGroupInfo(TD::updateSupergroupFullInfo *pObj) +void CTelegramProto::ProcessSuperGroupInfo(TG_USER *pUser, TD::supergroupFullInfo *pInfo) { - auto *pChat = FindUser(pObj->supergroup_id_); - if (pChat == nullptr) { - debugLogA("Uknown super group id %lld, skipping", pObj->supergroup_id_); - return; + if (!pInfo->description_.empty()) { + setUString(pUser->hContact, "About", pInfo->description_.c_str()); + GcChangeTopic(pUser, pInfo->description_); } - - auto *pInfo = pObj->supergroup_full_info_.get(); - if (!pInfo->description_.empty()) - GcChangeTopic(pChat, pInfo->description_); } void CTelegramProto::ProcessSuperGroup(TD::updateSupergroup *pObj) diff --git a/protocols/Telegram/src/proto.cpp b/protocols/Telegram/src/proto.cpp index 28202199b8..a233395481 100644 --- a/protocols/Telegram/src/proto.cpp +++ b/protocols/Telegram/src/proto.cpp @@ -392,6 +392,51 @@ INT_PTR CTelegramProto::GetCaps(int type, MCONTACT hContact) ///////////////////////////////////////////////////////////////////////////////////////// +int CTelegramProto::GetInfo(MCONTACT hContact, int) +{ + if (auto *pUser = FindUser(GetId(hContact))) { + if (!pUser->isGroupChat) + SendQuery(new TD::getUserFullInfo(pUser->id), &CTelegramProto::OnGetUserInfo, pUser); + else { + TG_SUPER_GROUP tmp(pUser->id, 0); + if (m_arSuperGroups.find(&tmp)) + SendQuery(new TD::getSupergroupFullInfo(pUser->id), &CTelegramProto::OnGetUserInfo, pUser); + else + SendQuery(new TD::getBasicGroupFullInfo(pUser->id), &CTelegramProto::OnGetUserInfo, pUser); + } + return 1; + } + return 0; +} + +void CTelegramProto::OnGetUserInfo(td::ClientManager::Response &response, void *pUserInfo) +{ + if (!response.object) + return; + + auto *pUser = (TG_USER *)pUserInfo; + + switch (response.object->get_id()) { + case TD::basicGroupFullInfo::ID: + ProcessBasicGroupInfo(pUser, (TD::basicGroupFullInfo *)response.object.get()); + break; + case TD::supergroupFullInfo::ID: + ProcessSuperGroupInfo(pUser, (TD::supergroupFullInfo *)response.object.get()); + break; + case TD::updateUserFullInfo::ID: + ProcessUserInfo(pUser->id, (TD::userFullInfo *)response.object.get()); + break; + + default: + debugLogA("Gotten class ID %d instead of %d, exiting", response.object->get_id(), TD::chats::ID); + return; + } + + ProtoBroadcastAck(pUser->hContact, ACKTYPE_GETINFO, ACKRESULT_SUCCESS, HANDLE(1)); +} + +///////////////////////////////////////////////////////////////////////////////////////// + void CTelegramProto::OnSearchResults(td::ClientManager::Response &response) { int iCount = ::InterlockedDecrement(&m_iSearchCount); diff --git a/protocols/Telegram/src/proto.h b/protocols/Telegram/src/proto.h index c0c8bca7a6..56cf85d7f6 100644 --- a/protocols/Telegram/src/proto.h +++ b/protocols/Telegram/src/proto.h @@ -238,6 +238,7 @@ class CTelegramProto : public PROTO void OnGetFileLink(td::ClientManager::Response &response); void OnGetHistory(td::ClientManager::Response &response, void *pUserInfo); void OnGetSessions(td::ClientManager::Response &response, void *pUserInfo); + void OnGetUserInfo(td::ClientManager::Response &response, void *pUserInfo); void OnKillSession(td::ClientManager::Response &response, void *pUserInfo); void OnLeaveChat(td::ClientManager::Response &response, void *pUserInfo); void OnSendFile(td::ClientManager::Response &response, void *pUserInfo); @@ -259,7 +260,7 @@ class CTelegramProto : public PROTO void ProcessAvatar(const TD::file *pFile, TG_USER *pUser); void ProcessAuth(TD::updateAuthorizationState *pObj); void ProcessBasicGroup(TD::updateBasicGroup *pObj); - void ProcessBasicGroupInfo(TD::updateBasicGroupFullInfo *pObj); + void ProcessBasicGroupInfo(TG_USER *pUser, TD::basicGroupFullInfo *pObj); void ProcessChat(TD::updateNewChat *pObj); void ProcessChatAction(TD::updateChatAction *pObj); void ProcessChatHasProtected(TD::updateChatHasProtectedContent *pObj); @@ -284,7 +285,7 @@ class CTelegramProto : public PROTO void ProcessServiceNotification(TD::updateServiceNotification *pObj); void ProcessStatus(TD::updateUserStatus *pObj); void ProcessSuperGroup(TD::updateSupergroup *pObj); - void ProcessSuperGroupInfo(TD::updateSupergroupFullInfo *pObj); + void ProcessSuperGroupInfo(TG_USER *pUser, TD::supergroupFullInfo *pObj); void ProcessUser(TD::updateUser *pObj); void ProcessUserInfo(TD::int53 userId, TD::userFullInfo *pObj); @@ -405,6 +406,7 @@ public: int AuthRequest(MCONTACT hContact, const wchar_t *) override; INT_PTR GetCaps(int type, MCONTACT hContact = NULL) override; + int GetInfo(MCONTACT hContact, int type) override; HANDLE SendFile(MCONTACT hContact, const wchar_t *szDescription, wchar_t **ppszFiles) override; diff --git a/protocols/Telegram/src/server.cpp b/protocols/Telegram/src/server.cpp index 148a68928c..8333e032a0 100644 --- a/protocols/Telegram/src/server.cpp +++ b/protocols/Telegram/src/server.cpp @@ -216,11 +216,15 @@ void CTelegramProto::ProcessResponse(td::ClientManager::Response response) break; case TD::updateBasicGroup::ID: - ProcessBasicGroup((TD::updateBasicGroup*)response.object.get()); + ProcessBasicGroup((TD::updateBasicGroup *)response.object.get()); break; case TD::updateBasicGroupFullInfo::ID: - ProcessBasicGroupInfo((TD::updateBasicGroupFullInfo *)response.object.get()); + { + auto *pObj = (TD::updateBasicGroupFullInfo *)response.object.get(); + if (auto *pChat = FindUser(pObj->basic_group_id_)) + ProcessBasicGroupInfo(pChat, pObj->basic_group_full_info_.get()); + } break; case TD::updateChatAction::ID: @@ -244,7 +248,7 @@ void CTelegramProto::ProcessResponse(td::ClientManager::Response response) break; case TD::updateChatNotificationSettings::ID: - ProcessChatNotification((TD::updateChatNotificationSettings*)response.object.get()); + ProcessChatNotification((TD::updateChatNotificationSettings *)response.object.get()); break; case TD::updateChatPosition::ID: @@ -260,9 +264,9 @@ void CTelegramProto::ProcessResponse(td::ClientManager::Response response) break; case TD::updateDeleteMessages::ID: - ProcessDeleteMessage((TD::updateDeleteMessages*)response.object.get()); + ProcessDeleteMessage((TD::updateDeleteMessages *)response.object.get()); break; - + case TD::updateConnectionState::ID: ProcessConnectionState((TD::updateConnectionState *)response.object.get()); break; @@ -272,7 +276,7 @@ void CTelegramProto::ProcessResponse(td::ClientManager::Response response) break; case TD::updateForumTopicInfo::ID: - ProcessForum((TD::updateForumTopicInfo*)response.object.get()); + ProcessForum((TD::updateForumTopicInfo *)response.object.get()); break; case TD::updateMessageContent::ID: @@ -312,8 +316,7 @@ void CTelegramProto::ProcessResponse(td::ClientManager::Response response) ProcessChat((TD::updateNewChat *)response.object.get()); break; - case TD::updateNewMessage::ID: - { + case TD::updateNewMessage::ID: { auto *pMessage = ((TD::updateNewMessage *)response.object.get())->message_.get(); TG_OWN_MESSAGE tmp(0, 0, msg2id(pMessage)); if (!m_arOwnMsg.find(&tmp)) @@ -338,7 +341,13 @@ void CTelegramProto::ProcessResponse(td::ClientManager::Response response) break; case TD::updateSupergroupFullInfo::ID: - ProcessSuperGroupInfo((TD::updateSupergroupFullInfo *)response.object.get()); + { + auto *pObj = (TD::updateSupergroupFullInfo *)response.object.get(); + if (auto *pUser = FindUser(pObj->supergroup_id_)) + ProcessSuperGroupInfo(pUser, pObj->supergroup_full_info_.get()); + else + debugLogA("Uknown super group id %lld, skipping", pObj->supergroup_id_); + } break; case TD::updateUserStatus::ID: -- cgit v1.2.3