From 1ba1e51fc6fa7e30b0a627a141348f515ffaba76 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sat, 13 Oct 2018 21:29:05 +0300 Subject: chat api: - GC_SHAREDUSERS flag added to share the same array of users for all group chats; - USERINFO.next removed; - MODULEINFO.arUsers & SESSION_INFO.arUsers introduced to maintain user lists; - MM_AddModule removed; - memory allocation model changed for MODULEINFO & SESSION_INFO - MM_CreateModule & SM_CreateSession members are added to g_chatApi --- protocols/Discord/src/guilds.cpp | 49 +++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 23 deletions(-) (limited to 'protocols/Discord/src/guilds.cpp') diff --git a/protocols/Discord/src/guilds.cpp b/protocols/Discord/src/guilds.cpp index 0bb61ed52a..1d0a137fea 100644 --- a/protocols/Discord/src/guilds.cpp +++ b/protocols/Discord/src/guilds.cpp @@ -98,9 +98,8 @@ CDiscordUser* CDiscordProto::ProcessGuildChannel(CDiscordGuild *pGuild, const JS CMStringW wszChannelName = pGuild->wszName + L"#" + pch["name"].as_mstring(); // filter our all channels but the text ones - if (pch["type"].as_int() != 0) { + if (pch["type"].as_int() != 0) return nullptr; - } CMStringW wszTopic = pch["topic"].as_mstring(); @@ -139,18 +138,34 @@ CDiscordUser* CDiscordProto::ProcessGuildChannel(CDiscordGuild *pGuild, const JS SnowFlake oldMsgId = getId(pUser->hContact, DB_KEY_LASTMSGID); if (oldMsgId != 0 && pUser->lastMsg.id > oldMsgId) RetrieveHistory(pUser->hContact, MSG_AFTER, oldMsgId, 99); - - for (auto &it : pGuild->arChatUsers) - AddUserToChannel(*pUser, *it); - return pUser; } ///////////////////////////////////////////////////////////////////////////////////////// -void CDiscordProto::AddUserToChannel(const CDiscordUser &pChannel, const CDiscordGuildMember &pUser) +void CDiscordProto::AddGuildUser(SnowFlake guildId, const CDiscordGuildMember &pUser) { - GCEVENT gce = { m_szModuleName, pChannel.wszUsername, GC_EVENT_JOIN }; + const CDiscordUser *pChannel = nullptr; + for (auto &it : arUsers) + if (it->guildId == guildId) { + pChannel = it; + break; + } + + if (pChannel == nullptr) + return; + + int flags = GC_SSE_ONLYLISTED; + switch (pUser.iStatus) { + case ID_STATUS_ONLINE: case ID_STATUS_NA: case ID_STATUS_DND: + flags += GC_SSE_ONLINE; + break; + + default: + return; + } + + GCEVENT gce = { m_szModuleName, pChannel->wszUsername, GC_EVENT_JOIN }; gce.time = time(0); gce.dwFlags = GCEF_SILENT; @@ -163,15 +178,7 @@ void CDiscordProto::AddUserToChannel(const CDiscordUser &pChannel, const CDiscor gce.ptszNick = pUser.wszNick; Chat_Event(&gce); - int flags = GC_SSE_ONLYLISTED; - switch (pUser.iStatus) { - case ID_STATUS_ONLINE: case ID_STATUS_NA: case ID_STATUS_DND: - flags += GC_SSE_ONLINE; - break; - default: - flags += GC_SSE_OFFLINE; - } - Chat_SetStatusEx(m_szModuleName, pChannel.wszUsername, flags, wszUserId); + Chat_SetStatusEx(m_szModuleName, pChannel->wszUsername, flags, wszUserId); } ///////////////////////////////////////////////////////////////////////////////////////// @@ -222,10 +229,6 @@ void CDiscordProto::ParseGuildContents(CDiscordGuild *pGuild, const JSONNode &pR gm->iStatus = StrToStatus(s["status"].as_mstring()); } - for (auto &pm : newMembers) { - for (auto &pUser : arUsers) { - if (pUser->guildId == pGuild->id) - AddUserToChannel(*pUser, *pm); - } - } + for (auto &pm : newMembers) + AddGuildUser(pGuild->id, *pm); } -- cgit v1.2.3