From fc06fc0a10dba14724cd278f8356520e4e71080e Mon Sep 17 00:00:00 2001 From: George Hazan Date: Fri, 3 May 2024 20:19:06 +0300 Subject: =?UTF-8?q?fixes=20#4396=20(Discord:=20=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B8=20=D1=83=D0=B4?= =?UTF-8?q?=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=BE=D0=B2=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D1=83=D1=87=D0=B0=D1=81=D1=82=D0=BD=D0=B8=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=B2=20=D1=87=D0=B0=D1=82=20=D0=BE=D1=82=D1=80=D0=B0?= =?UTF-8?q?=D0=B6=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D0=BB=D0=B8=D1=88=D1=8C?= =?UTF-8?q?=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- protocols/Discord/src/dispatch.cpp | 33 +++++++++++++++++++++++++++++++++ protocols/Discord/src/proto.h | 2 ++ 2 files changed, 35 insertions(+) (limited to 'protocols') diff --git a/protocols/Discord/src/dispatch.cpp b/protocols/Discord/src/dispatch.cpp index 995efac43a..604d82a01b 100644 --- a/protocols/Discord/src/dispatch.cpp +++ b/protocols/Discord/src/dispatch.cpp @@ -34,6 +34,8 @@ static handlers[] = // these structures must me sorted alphabetically { L"CHANNEL_CREATE", &CDiscordProto::OnCommandChannelCreated }, { L"CHANNEL_DELETE", &CDiscordProto::OnCommandChannelDeleted }, + { L"CHANNEL_RECIPIENT_ADD", &CDiscordProto::OnCommandChannelUserAdded }, + { L"CHANNEL_RECIPIENT_REMOVE", &CDiscordProto::OnCommandChannelUserLeft }, { L"CHANNEL_UPDATE", &CDiscordProto::OnCommandChannelUpdated }, { L"GUILD_CREATE", &CDiscordProto::OnCommandGuildCreated }, @@ -115,6 +117,37 @@ void CDiscordProto::OnCommandChannelDeleted(const JSONNode &pRoot) } } +void CDiscordProto::OnCommandChannelUserAdded(const JSONNode &pRoot) +{ + CDiscordUser *pUser = FindUserByChannel(::getId(pRoot["channel_id"])); + if (pUser == nullptr || pUser->si == nullptr) + return; + + auto nUser = pRoot["user"]; + CMStringW wszUserId = nUser["id"].as_mstring(); + CMStringW wszNick = getNick(nUser); + + GCEVENT gce = { pUser->si, GC_EVENT_JOIN }; + gce.pszUID.w = wszUserId; + gce.pszNick.w = wszNick; + gce.time = time(0); + Chat_Event(&gce); +} + +void CDiscordProto::OnCommandChannelUserLeft(const JSONNode &pRoot) +{ + CDiscordUser *pUser = FindUserByChannel(::getId(pRoot["channel_id"])); + if (pUser == nullptr || pUser->si == nullptr) + return; + + CMStringW wszUserId = pRoot["user"]["id"].as_mstring(); + + GCEVENT gce = { pUser->si, GC_EVENT_PART }; + gce.pszUID.w = wszUserId; + gce.time = time(0); + Chat_Event(&gce); +} + void CDiscordProto::OnCommandChannelUpdated(const JSONNode &pRoot) { CDiscordUser *pUser = FindUserByChannel(::getId(pRoot["id"])); diff --git a/protocols/Discord/src/proto.h b/protocols/Discord/src/proto.h index 38bf253ae1..0392907394 100644 --- a/protocols/Discord/src/proto.h +++ b/protocols/Discord/src/proto.h @@ -481,6 +481,8 @@ public: void OnCommandChannelCreated(const JSONNode &json); void OnCommandChannelDeleted(const JSONNode &json); void OnCommandChannelUpdated(const JSONNode &json); + void OnCommandChannelUserAdded(const JSONNode &json); + void OnCommandChannelUserLeft(const JSONNode &json); void OnCommandGuildCreated(const JSONNode &json); void OnCommandGuildDeleted(const JSONNode &json); void OnCommandGuildMemberAdded(const JSONNode &json); -- cgit v1.2.3