diff options
author | George Hazan <ghazan@miranda.im> | 2017-02-15 16:39:34 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2017-02-15 16:39:34 +0300 |
commit | abe6893ccd9bb88abf7541b46c9a430f4e058317 (patch) | |
tree | 7ec12e0c416b8549f14fba29e0d5eccab9eb01bc | |
parent | 2bb0ece5e88be17b6f3a561ccddfd07035cb6252 (diff) |
we add all users to a chat first, only then open a room
-rw-r--r-- | protocols/Discord/src/dispatch.cpp | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/protocols/Discord/src/dispatch.cpp b/protocols/Discord/src/dispatch.cpp index 571bbed738..615cb6d3de 100644 --- a/protocols/Discord/src/dispatch.cpp +++ b/protocols/Discord/src/dispatch.cpp @@ -210,9 +210,6 @@ void CDiscordProto::ProcessGuild(const JSONNode &readState, const JSONNode &p) setId(si->hContact, DB_KEY_OWNERID, ownerId); BuildStatusList(guildId, wszChannelId); - Chat_Control(m_szModuleName, wszChannelId, WINDOW_HIDDEN); - Chat_Control(m_szModuleName, wszChannelId, SESSION_ONLINE); - if (!wszTopic.IsEmpty()) { Chat_SetStatusbarText(m_szModuleName, wszChannelId, wszTopic); @@ -250,17 +247,21 @@ void CDiscordProto::OnCommandGuildCreated(const JSONNode &pRoot) void CDiscordProto::OnCommandGuildSync(const JSONNode &pRoot) { const JSONNode &pStatuses = pRoot["presences"]; + const JSONNode &pMembers = pRoot["members"]; SnowFlake guildId = ::getId(pRoot["id"]); - const JSONNode &pMembers = pRoot["members"]; - for (auto it = pMembers.begin(); it != pMembers.end(); ++it) { - const JSONNode &m = *it; + for (int i = 0; i < arUsers.getCount(); i++) { + CDiscordUser &pUser = arUsers[i]; + if (pUser.guildId != guildId) + continue; - for (int i = 0; i < arUsers.getCount(); i++) { - CDiscordUser &pUser = arUsers[i]; - if (pUser.guildId != guildId) - continue; + GCDEST gcd = { m_szModuleName, pUser.wszUsername, GC_EVENT_JOIN }; + GCEVENT gce = { &gcd }; + gce.time = time(0); + + for (auto it = pMembers.begin(); it != pMembers.end(); ++it) { + const JSONNode &m = *it; CDiscordRole *pRole = nullptr; const JSONNode &pRoles = m["roles"]; @@ -270,9 +271,6 @@ void CDiscordProto::OnCommandGuildSync(const JSONNode &pRoot) break; } - GCDEST gcd = { m_szModuleName, pUser.wszUsername, GC_EVENT_JOIN }; - GCEVENT gce = { &gcd }; - CMStringW wszNick = m["nick"].as_mstring(); CMStringW wszUsername = m["user"]["username"].as_mstring() + L"#" + m["user"]["discriminator"].as_mstring(); CMStringW wszUserId = m["user"]["id"].as_mstring(); @@ -285,7 +283,6 @@ void CDiscordProto::OnCommandGuildSync(const JSONNode &pRoot) gce.bIsMe = (userId == m_ownId); gce.ptszUID = wszUserId; gce.ptszNick = wszNick.IsEmpty() ? wszUsername : wszNick; - gce.time = time(0); Chat_Event(&gce); int flags = GC_SSE_ONLYLISTED; @@ -298,6 +295,10 @@ void CDiscordProto::OnCommandGuildSync(const JSONNode &pRoot) } Chat_SetStatusEx(m_szModuleName, pUser.wszUsername, flags, wszUserId); } + + // okay, users added & topic set, now we can move a room online + Chat_Control(m_szModuleName, pUser.wszUsername, WINDOW_HIDDEN); + Chat_Control(m_szModuleName, pUser.wszUsername, SESSION_ONLINE); } } |