diff -r e41969a43e42 -r a9bc19e23c36 protocols/ircv3/purpleircv3messagehandlers.c --- a/protocols/ircv3/purpleircv3messagehandlers.c Thu Apr 24 21:42:59 2025 -0500 +++ b/protocols/ircv3/purpleircv3messagehandlers.c Thu Apr 24 22:19:39 2025 -0500 @@ -430,13 +430,23 @@ purple_contact_manager_add(manager, contact); } - member = purple_conversation_members_add_member(new_members, - PURPLE_CONTACT_INFO(contact), - FALSE, NULL); + /* Check if the member is already in the existing members list. + * This can happen if the user sends a NAMES command and surely + * other ways are possible. */ + member = purple_conversation_members_find_member(existing_members, + PURPLE_CONTACT_INFO(contact)); + + /* If the member doesn't exist, add them. */ + if(!PURPLE_IS_CONVERSATION_MEMBER(member)) { + member = purple_conversation_members_add_member(new_members, + PURPLE_CONTACT_INFO(contact), + FALSE, NULL); + } purple_ircv3_add_badges_to_member(member, client, nick); g_free(stripped); + g_clear_object(&contact); } purple_conversation_members_extend(existing_members, new_members);