summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2024-05-03 21:14:45 +0300
committerGeorge Hazan <george.hazan@gmail.com>2024-05-03 21:14:45 +0300
commite0b13265d8b6c888bfe87047b2f895a8e0f6d2a7 (patch)
treee1d15b7f8400042013b3a6064fdedaf0247a8ff0
parent45ba633b285b3c66d5f563993aa06b3f58078e28 (diff)
Discord: global_name field to be used as FirstName/LastName and as a nick in group chats
-rw-r--r--protocols/Discord/src/utils.cpp35
1 files changed, 23 insertions, 12 deletions
diff --git a/protocols/Discord/src/utils.cpp b/protocols/Discord/src/utils.cpp
index f35c81cfaa..9b62c9fa93 100644
--- a/protocols/Discord/src/utils.cpp
+++ b/protocols/Discord/src/utils.cpp
@@ -163,6 +163,7 @@ CDiscordUser* CDiscordProto::FindUserByChannel(SnowFlake channelId)
void CDiscordProto::PreparePrivateChannel(const JSONNode &root)
{
+ SESSION_INFO *si;
CDiscordUser *pUser = nullptr;
CMStringW wszChannelId = root["id"].as_mstring();
@@ -190,7 +191,9 @@ void CDiscordProto::PreparePrivateChannel(const JSONNode &root)
if (pUser->wszChannelName.IsEmpty()) {
int i = 0;
for (auto &it : root["recipients"]) {
- CMStringW wszNick = it["username"].as_mstring();
+ CMStringW wszNick = it["global_name"].as_mstring();
+ if (wszNick.IsEmpty())
+ wszNick = it["username"].as_mstring();
if (wszNick.IsEmpty())
continue;
@@ -202,19 +205,19 @@ void CDiscordProto::PreparePrivateChannel(const JSONNode &root)
break;
}
}
- {
- SESSION_INFO *si = pUser->si = Chat_NewSession(GCW_CHATROOM, m_szModuleName, pUser->wszUsername, pUser->wszChannelName);
- pUser->hContact = si->hContact;
-
- Chat_AddGroup(si, LPGENW("Owners"));
- Chat_AddGroup(si, LPGENW("Participants"));
+
+ si = pUser->si = Chat_NewSession(GCW_CHATROOM, m_szModuleName, pUser->wszUsername, pUser->wszChannelName);
+ pUser->hContact = si->hContact;
+ Chat_AddGroup(si, LPGENW("Owners"));
+ Chat_AddGroup(si, LPGENW("Participants"));
+ {
SnowFlake ownerId = _wtoi64(root["owner_id"].as_mstring());
GCEVENT gce = { si, GC_EVENT_JOIN };
for (auto &it : root["recipients"]) {
CMStringW wszId = it["id"].as_mstring();
- CMStringW wszNick = it["nick"].as_mstring();
+ CMStringW wszNick = it["global_name"].as_mstring();
if (wszNick.IsEmpty())
wszNick = getNick(it);
@@ -223,7 +226,7 @@ void CDiscordProto::PreparePrivateChannel(const JSONNode &root)
gce.pszStatus.w = (_wtoi64(wszId) == ownerId) ? L"Owners" : L"Participants";
Chat_Event(&gce);
}
-
+
CMStringW wszId(FORMAT, L"%lld", getId(DB_KEY_ID)), wszNick;
if (auto iDiscr = getDword(DB_KEY_DISCR))
wszNick.Format(L"%s#%d", getMStringW(DB_KEY_NICK).c_str(), iDiscr);
@@ -235,10 +238,10 @@ void CDiscordProto::PreparePrivateChannel(const JSONNode &root)
gce.pszNick.w = wszNick;
gce.pszStatus.w = (_wtoi64(wszId) == ownerId) ? L"Owners" : L"Participants";
Chat_Event(&gce);
-
- Chat_Control(si, m_bHideGroupchats ? WINDOW_HIDDEN : SESSION_INITDONE);
- Chat_Control(si, SESSION_ONLINE);
}
+
+ Chat_Control(si, m_bHideGroupchats ? WINDOW_HIDDEN : SESSION_INITDONE);
+ Chat_Control(si, SESSION_ONLINE);
break;
default:
@@ -301,6 +304,14 @@ CDiscordUser* CDiscordProto::PrepareUser(const JSONNode &user)
pUser->hContact = hContact;
}
+ CMStringW wszName(user["global_name"].as_mstring());
+ int idx = wszName.ReverseFind(' ');
+ if (idx != -1) {
+ setWString(pUser->hContact, "FirstName", wszName.Left(idx));
+ setWString(pUser->hContact, "LastName", wszName.Mid(idx + 1));
+ }
+ else setWString(pUser->hContact, "FirstName", wszName);
+
CheckAvatarChange(pUser->hContact, user["avatar"].as_mstring());
return pUser;
}