From cde15ed520b736560605d4ce021d99364778b06e Mon Sep 17 00:00:00 2001 From: George Hazan Date: Mon, 6 May 2024 14:12:03 +0300 Subject: =?UTF-8?q?fixes=20#4402=20(Discord:=20=D1=81=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=B2=D0=BB=D0=B0=D0=B4=D0=B5=D0=BB=D1=8C=D1=86=D0=B0?= =?UTF-8?q?=20=D0=BD=D0=B5=20=D0=BE=D1=82=D1=80=D0=B0=D0=B6=D0=B0=D0=B5?= =?UTF-8?q?=D1=82=D1=81=D1=8F=20=D0=B2=20=D0=BD=D0=B8=D0=BA=D0=BB=D0=B8?= =?UTF-8?q?=D1=81=D1=82=D0=B5=20=D0=B4=D0=BE=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- protocols/Discord/src/dispatch.cpp | 40 ++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/protocols/Discord/src/dispatch.cpp b/protocols/Discord/src/dispatch.cpp index df6c9b2d7d..503b24f682 100644 --- a/protocols/Discord/src/dispatch.cpp +++ b/protocols/Discord/src/dispatch.cpp @@ -175,26 +175,46 @@ void CDiscordProto::OnCommandChannelUpdated(const JSONNode &pRoot) pUser->lastMsgId = ::getId(pRoot["last_message_id"]); - SnowFlake guildId = ::getId(pRoot["guild_id"]); - if (guildId != 0) { - CDiscordGuild *pGuild = FindGuild(guildId); - if (pGuild == nullptr) - return; + // if channel name was changed + CMStringW wszName = pRoot["name"].as_mstring(); + if (!wszName.IsEmpty()) { + SnowFlake guildId = ::getId(pRoot["guild_id"]); + if (guildId != 0) { + CDiscordGuild *pGuild = FindGuild(guildId); + if (pGuild == nullptr) + return; - CMStringW wszName = pRoot["name"].as_mstring(); - if (!wszName.IsEmpty()) { CMStringW wszNewName = pGuild->m_wszName + L"#" + wszName; Chat_ChangeSessionName(pUser->si, wszNewName); } + else Chat_ChangeSessionName(pUser->si, wszName); + } - CMStringW wszTopic = pRoot["topic"].as_mstring(); - Chat_SetStatusbarText(pUser->si, wszTopic); - + // if a topic was changed + CMStringW wszTopic = pRoot["topic"].as_mstring(); + Chat_SetStatusbarText(pUser->si, wszTopic); + { GCEVENT gce = { pUser->si, GC_EVENT_TOPIC }; gce.pszText.w = wszTopic; gce.time = time(0); Chat_Event(&gce); } + + // reset members info for private channels + if (pUser->pGuild == nullptr) { + SnowFlake ownerId = getId(pUser->hContact, DB_KEY_OWNERID); + + for (auto &it : pRoot["recipients"]) { + CMStringW wszNick(getName(it)), wszUserId(it["id"].as_mstring()); + + GCEVENT gce = { pUser->si, GC_EVENT_SETSTATUS }; + gce.pszNick.w = wszNick; + gce.pszUID.w = wszUserId; + gce.pszStatus.w = (_wtoi64(wszUserId) == ownerId) ? L"Owners" : L"Participants"; + gce.time = time(0); + Chat_Event(&gce); + } + } } ///////////////////////////////////////////////////////////////////////////////////////// -- cgit v1.2.3