From 10e25cc25f981a6e4e10f320a47c8e1e8c94c382 Mon Sep 17 00:00:00 2001 From: Dusk-92 Date: Wed, 2 Sep 2026 15:20:04 +0200 Subject: [PATCH] Omit empty Discord activity fields --- src/WowPresenceLauncher.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/WowPresenceLauncher.c b/src/WowPresenceLauncher.c index 88ee4f3..285bc07 100644 --- a/src/WowPresenceLauncher.c +++ b/src/WowPresenceLauncher.c @@ -404,9 +404,26 @@ static void format_activity(const Status *s, char *out, size_t out_size, long lo lstrcpynA(details, extra, sizeof(details)); } - _snprintf(out, out_size, - "{\"details\":\"%s\",\"state\":\"%s\",\"timestamps\":{\"start\":%lld}}", - details, s->zone, session_start); + /* Discord rejects empty string values for Rich Presence text fields. + * Omit a field entirely when the user did not choose anything that maps + * to it, so Race/Class/Faction/Guild-only and Zone-only combinations work. */ + if (details[0] && s->zone[0]) { + _snprintf(out, out_size, + "{\"details\":\"%s\",\"state\":\"%s\",\"timestamps\":{\"start\":%lld}}", + details, s->zone, session_start); + } else if (details[0]) { + _snprintf(out, out_size, + "{\"details\":\"%s\",\"timestamps\":{\"start\":%lld}}", + details, session_start); + } else if (s->zone[0]) { + _snprintf(out, out_size, + "{\"state\":\"%s\",\"timestamps\":{\"start\":%lld}}", + s->zone, session_start); + } else { + _snprintf(out, out_size, + "{\"timestamps\":{\"start\":%lld}}", + session_start); + } out[out_size - 1] = 0; }