From c3e59b8daf2b44e9ff1d89d085a69f37d2c17bee Mon Sep 17 00:00:00 2001 From: George Hazan Date: Fri, 13 Sep 2024 13:26:30 +0300 Subject: =?UTF-8?q?fixes=20#4646=20(Telegram:=20=D0=B8=D0=BC=D1=8F=20?= =?UTF-8?q?=D1=87=D0=B0=D1=82=D0=B0=20=D0=BC=D0=B5=D0=BD=D1=8F=D0=B5=D1=82?= =?UTF-8?q?=D1=81=D1=8F=20=D0=B2=20=D0=9C=D0=B8=D1=80=D0=B0=D0=BD=D0=B4?= =?UTF-8?q?=D0=B5=20=D0=BB=D0=B8=D1=88=D1=8C=20=D0=BF=D1=80=D0=B8=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- protocols/Telegram/src/groupchat.cpp | 22 ++++++++++++++++++---- protocols/Telegram/src/proto.h | 3 ++- protocols/Telegram/src/server.cpp | 17 +++++++++++------ protocols/Telegram/src/utils.cpp | 2 +- 4 files changed, 32 insertions(+), 12 deletions(-) (limited to 'protocols/Telegram/src') diff --git a/protocols/Telegram/src/groupchat.cpp b/protocols/Telegram/src/groupchat.cpp index a591e1ae80..a5c575c66d 100644 --- a/protocols/Telegram/src/groupchat.cpp +++ b/protocols/Telegram/src/groupchat.cpp @@ -308,13 +308,14 @@ void CTelegramProto::GcChangeMember(TG_USER *pChat, const char *adminId, TD::int } } -void CTelegramProto::GcChangeTopic(TG_USER *pChat, const wchar_t *pwszNewTopic) +void CTelegramProto::GcChangeTopic(TG_USER *pChat, const std::string &szNewTopic) { - if (pChat->m_si == nullptr || pwszNewTopic == nullptr) + if (pChat->m_si == nullptr) return; + Utf2T wszTopic(szNewTopic.c_str()); GCEVENT gce = { pChat->m_si, GC_EVENT_TOPIC }; - gce.pszText.w = pwszNewTopic; + gce.pszText.w = wszTopic; gce.time = time(0); Chat_Event(&gce); } @@ -400,7 +401,7 @@ void CTelegramProto::ProcessBasicGroupInfo(TD::updateBasicGroupFullInfo *pObj) if (auto *pInfo = pObj->basic_group_full_info_.get()) { if (!pInfo->description_.empty()) - GcChangeTopic(pChat, Utf2T(pInfo->description_.c_str())); + GcChangeTopic(pChat, pInfo->description_); g_chatApi.UM_RemoveAll(pChat->m_si); GcAddMembers(pChat, pInfo->members_, true); @@ -436,6 +437,19 @@ void CTelegramProto::ProcessForum(TD::updateForumTopicInfo *pForum) Chat_Control(si, SESSION_ONLINE); } +void CTelegramProto::ProcessSuperGroupInfo(TD::updateSupergroupFullInfo *pObj) +{ + auto *pChat = FindUser(pObj->supergroup_id_); + if (pChat == nullptr) { + debugLogA("Uknown super group id %lld, skipping", pObj->supergroup_id_); + return; + } + + auto *pInfo = pObj->supergroup_full_info_.get(); + if (!pInfo->description_.empty()) + GcChangeTopic(pChat, pInfo->description_); +} + void CTelegramProto::ProcessSuperGroup(TD::updateSupergroup *pObj) { auto iStatusId = pObj->supergroup_->status_->get_id(); diff --git a/protocols/Telegram/src/proto.h b/protocols/Telegram/src/proto.h index b13a6cec52..06f14d61e9 100644 --- a/protocols/Telegram/src/proto.h +++ b/protocols/Telegram/src/proto.h @@ -279,6 +279,7 @@ class CTelegramProto : public PROTO void ProcessScopeNotification(TD::updateScopeNotificationSettings *pObj); void ProcessStatus(TD::updateUserStatus *pObj); void ProcessSuperGroup(TD::updateSupergroup *pObj); + void ProcessSuperGroupInfo(TD::updateSupergroupFullInfo *pObj); void ProcessUser(TD::updateUser *pObj); void UnregisterSession(); @@ -328,7 +329,7 @@ class CTelegramProto : public PROTO bool GetGcUserId(TG_USER *pUser, const TD::message *pMsg, char *dest); void GcAddMembers(TG_USER *pChat, const TD::array> &pMembers, bool bSilent); void GcChangeMember(TG_USER *pChat, const char *adminId, TD::int53 userId, bool bJoined); - void GcChangeTopic(TG_USER *pChat, const wchar_t *pwszNewTopic); + void GcChangeTopic(TG_USER *pChat, const std::string &szNewTopic); void GcRun(TG_USER *pChat); // Search diff --git a/protocols/Telegram/src/server.cpp b/protocols/Telegram/src/server.cpp index b8450f98c1..d5f3caa43b 100644 --- a/protocols/Telegram/src/server.cpp +++ b/protocols/Telegram/src/server.cpp @@ -322,6 +322,10 @@ void CTelegramProto::ProcessResponse(td::ClientManager::Response response) ProcessSuperGroup((TD::updateSupergroup *)response.object.get()); break; + case TD::updateSupergroupFullInfo::ID: + ProcessSuperGroupInfo((TD::updateSupergroupFullInfo *)response.object.get()); + break; + case TD::updateUserStatus::ID: ProcessStatus((TD::updateUserStatus *)response.object.get()); break; @@ -540,7 +544,10 @@ void CTelegramProto::ProcessChat(TD::updateNewChat *pObj) break; case TD::chatTypeBasicGroup::ID: - userId = ((TD::chatTypeBasicGroup *)pChat->type_.get())->basic_group_id_; + { + auto *pGroup = (TD::chatTypeBasicGroup *)pChat->type_.get(); + userId = pGroup->basic_group_id_; + } szTitle = pChat->title_; break; @@ -548,9 +555,9 @@ void CTelegramProto::ProcessChat(TD::updateNewChat *pObj) { auto *pGroup = (TD::chatTypeSupergroup *)pChat->type_.get(); userId = pGroup->supergroup_id_; - szTitle = pChat->title_; isChannel = pGroup->is_channel_; } + szTitle = pChat->title_; break; default: @@ -573,10 +580,8 @@ void CTelegramProto::ProcessChat(TD::updateNewChat *pObj) m_arChats.insert(pUser); if (!szTitle.empty()) { - if (hContact != INVALID_CONTACT_ID) { - setUString(hContact, "Nick", szTitle.c_str()); - pUser->wszNick = Utf2T(szTitle.c_str()); - } + if (hContact != INVALID_CONTACT_ID) + GcChangeTopic(pUser, szTitle); else if (pUser->wszNick.IsEmpty()) pUser->wszFirstName = Utf2T(szTitle.c_str()); } diff --git a/protocols/Telegram/src/utils.cpp b/protocols/Telegram/src/utils.cpp index d69f1231e0..b57bed69a9 100644 --- a/protocols/Telegram/src/utils.cpp +++ b/protocols/Telegram/src/utils.cpp @@ -599,7 +599,7 @@ CMStringA CTelegramProto::GetMessageText(TG_USER *pUser, const TD::message *pMsg case TD::messageChatChangeTitle::ID: if (auto *pDoc = (TD::messageChatChangeTitle *)pBody) - GcChangeTopic(pUser, Utf2T(pDoc->title_.c_str())); + setUString(pUser->hContact, "Nick", pDoc->title_.c_str()); break; case TD::messagePhoto::ID: -- cgit v1.2.3