Skip to content

Commit 97a5617

Browse files
committed
Attempt to use the global 'Display Name' for users in group chats
1 parent a6a5ec2 commit 97a5617

File tree

3 files changed

+52
-3
lines changed

3 files changed

+52
-3
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ libdiscord.dll
55
libdiscord.so
66
libdiscord3.so
77
po/*.mo
8+
*.deb

libdiscord.c

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,7 @@ typedef struct {
346346
GHashTable *guild_memberships;
347347
gboolean bot;
348348
gchar *custom_status;
349+
gchar *global_name;
349350
} DiscordUser;
350351

351352
typedef struct {
@@ -506,6 +507,7 @@ discord_new_user(JsonObject *json)
506507
user->discriminator = to_int(json_object_get_string_member(json, "discriminator"));
507508
user->bot = json_object_get_boolean_member(json, "bot");
508509
user->avatar = g_strdup(json_object_get_string_member(json, "avatar"));
510+
user->global_name = g_strdup(json_object_get_string_member(json, "global_name"));
509511

510512
user->guild_memberships = g_hash_table_new_full(g_int64_hash, g_int64_equal, NULL, discord_free_guild_membership);
511513
user->status = user->bot ? USER_ONLINE : USER_OFFLINE; /* Is offline the best assumption on a new user? */
@@ -666,6 +668,7 @@ discord_free_user(gpointer data)
666668
g_free(user->game);
667669
g_free(user->avatar);
668670
g_free(user->custom_status);
671+
g_free(user->global_name);
669672

670673
g_hash_table_unref(user->guild_memberships);
671674
g_free(user);
@@ -2397,6 +2400,18 @@ discord_get_real_name(PurpleConnection *pc, gint id, const char *who)
23972400
return g_strdup(who);
23982401
}
23992402

2403+
static gchar *
2404+
discord_get_cb_alias(PurpleConnection *pc, int id, const char *who)
2405+
{
2406+
DiscordAccount *da = purple_connection_get_protocol_data(pc);
2407+
DiscordUser *user = discord_get_user_fullname(da, who);
2408+
if (user && user->global_name) {
2409+
return g_strdup(user->global_name);
2410+
}
2411+
2412+
return discord_get_real_name(pc, id, who);
2413+
}
2414+
24002415
static time_t
24012416
discord_parse_timestring(const gchar *timestring)
24022417
{
@@ -3919,6 +3934,14 @@ discord_process_dispatch(DiscordAccount *da, const gchar *type, JsonObject *data
39193934
discord_get_avatar(da, user, TRUE);
39203935
}
39213936

3937+
// Handle global name change
3938+
const gchar *new_global_name = json_object_get_string_member(userdata, "global_name");
3939+
if (!purple_strequal(user->global_name, new_global_name)) {
3940+
g_free(user->global_name);
3941+
user->global_name = g_strdup(new_global_name);
3942+
purple_serv_got_alias(da->pc, username, user->global_name);
3943+
}
3944+
39223945
// Handle a user being renamed
39233946
const gchar *new_username = json_object_get_string_member(userdata, "username");
39243947
const gchar *new_discriminator = json_object_get_string_member(userdata, "discriminator");
@@ -5199,6 +5222,9 @@ discord_create_relationship(DiscordAccount *da, JsonObject *json)
51995222
}
52005223

52015224
discord_get_avatar(da, user, TRUE);
5225+
if (user->global_name && *user->global_name) {
5226+
purple_serv_got_alias(da->pc, merged_username, user->global_name);
5227+
}
52025228

52035229
} else if (type == RELATIONSHIP_BLOCKED) {
52045230
/* blocked buddy */
@@ -10421,6 +10447,20 @@ typedef struct
1042110447
{
1042210448
PurplePluginProtocolInfo parent;
1042310449

10450+
GHashTable *(* get_account_text_table)(PurpleAccount *account);
10451+
#if !PURPLE_VERSION_CHECK(2, 6, 0)
10452+
gboolean (*initiate_media)(PurpleAccount *account, const char *who, PurpleMediaSessionType type);
10453+
PurpleMediaCaps (*get_media_caps)(PurpleAccount *account, const char *who);
10454+
#endif
10455+
#if !PURPLE_VERSION_CHECK(2, 7, 0)
10456+
PurpleMood *(*get_moods)(PurpleAccount *account);
10457+
void (*set_public_alias)(PurpleConnection *gc, const char *alias, PurpleSetPublicAliasSuccessCallback success_cb, PurpleSetPublicAliasFailureCallback failure_cb);
10458+
void (*get_public_alias)(PurpleConnection *gc, PurpleGetPublicAliasSuccessCallback success_cb, PurpleGetPublicAliasFailureCallback failure_cb);
10459+
#endif
10460+
#if !PURPLE_VERSION_CHECK(2, 8, 0)
10461+
void (*add_buddy_with_invite)(PurpleConnection *pc, PurpleBuddy *buddy, PurpleGroup *group, const char *message);
10462+
void (*add_buddies_with_invite)(PurpleConnection *pc, GList *buddies, GList *groups, const char *message);
10463+
#endif
1042410464
#if !PURPLE_VERSION_CHECK(2, 14, 0)
1042510465
char *(*get_cb_alias)(PurpleConnection *gc, int id, const char *who);
1042610466
gboolean (*chat_can_receive_file)(PurpleConnection *, int id);
@@ -10450,7 +10490,7 @@ plugin_init(PurplePlugin *plugin)
1045010490

1045110491
info->extra_info = prpl_info;
1045210492
#if PURPLE_MINOR_VERSION >= 5
10453-
prpl_info->struct_size = sizeof(PurplePluginProtocolInfo);
10493+
prpl_info->struct_size = sizeof(PurplePluginProtocolInfoExt);
1045410494
#endif
1045510495
#if PURPLE_MINOR_VERSION >= 8
1045610496
/* prpl_info->add_buddy_with_invite = discord_add_buddy_with_invite; */
@@ -10505,6 +10545,11 @@ plugin_init(PurplePlugin *plugin)
1050510545
prpl_info_ext->chat_send_file = discord_chat_send_file;
1050610546
prpl_info_ext->chat_can_receive_file = discord_chat_can_receive_file;
1050710547
#endif
10548+
#if PURPLE_VERSION_CHECK(2, 14, 0)
10549+
prpl_info->get_cb_alias = discord_get_cb_alias;
10550+
#else
10551+
prpl_info_ext->get_cb_alias = discord_get_cb_alias;
10552+
#endif
1050810553

1050910554
prpl_info->roomlist_get_list = discord_roomlist_get_list;
1051010555
prpl_info->roomlist_room_serialize = discord_roomlist_serialize;

po/purple-discord.pot

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ msgid ""
88
msgstr ""
99
"Project-Id-Version: PACKAGE VERSION\n"
1010
"Report-Msgid-Bugs-To: \n"
11-
"POT-Creation-Date: 2025-06-29 22:12+0100\n"
11+
"POT-Creation-Date: 2025-10-08 11:21+0100\n"
1212
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -353,6 +353,9 @@ msgstr ""
353353
msgid "Use status message as in-game info"
354354
msgstr ""
355355

356+
msgid "Override global custom status message"
357+
msgstr ""
358+
356359
msgid "Auto-create rooms on buddy list"
357360
msgstr ""
358361

@@ -480,7 +483,7 @@ msgstr ""
480483
msgid "Couldn't load file"
481484
msgstr ""
482485

483-
msgid "Maximum file size is 25MB"
486+
msgid "Maximum file size is 10MB"
484487
msgstr ""
485488

486489
msgid "Guessing file type is:"

0 commit comments

Comments
 (0)