Overview
A unified friends list combines both Discord and game-specific relationships in one view. This guide will show you how to:- Fetch all relationship data
- Filter and organize relationships
- Display online status
- Handle different relationship types
Prerequisites
Before you begin, make sure you have:- Set up the Discord Social SDK with Getting Started Guide
- Authenticated your users with Development Guide: Account Linking
- Understanding of relationship types with Development Guide: Managing Relationships in Your Game
Implementing a Unified Friends List
The Discord friend list is ultimately constructed from two entities: Relationships, and Users. You can query Relationships API to find everyone a user is a friend with, and the Users API to find the necessary extra information for rendering the list, such as whether they are online or not.Relationships
Relationships are how Discord models friends, friend requests, and more. All relationships for the current user are loaded when the Client connects. Each relationship has a target user id, and a type, such asFriend, PendingOutgoing, or Blocked.
To allow users to manage their relationships in your game, you should provide a way to accept or reject friend
requests, block users, and manage pending requests. See Development Guide: Managing Relationships in Your Game for implementation details.
Users
Users are the Discord users that are part of the relationships. The SDK provides a way to fetch a user by their ID, and the user object contains information such as their username, display name, avatar, and more.User Status & Rich Presence
Presence is how Discord stores whether a user is currently online or not, as well as what activities they are currently doing (such as playing a game). The SDK gives you access to two types of status:- Online Status: Online, Offline, Idle, etc.
- Rich Presence: Any activities associated with the current game (or application in Discord parlance).
The SDK will only display activities associated with the current game, meaning you will not be able to see other game activities in Rich Presence, even if you can see them in the Discord client.
- Using the SDK Unified Friends List helper functions, which automatically group and sort relationships and users for you.
- Directly retrieving relationships and users from the SDK, and sorting manually.
Approach 1: Using SDK Unified Friends List Helper Functions
This approach is recommended as it significantly reduces the amount of code you need to write and maintain compared to
manually fetching and organizing relationships, while ensuring your friends list follows Discord’s best practices.
RelationshipGroupType:
- OnlinePlayingGame: Friends who are online and currently playing your game
- OnlineElsewhere: Friends who are online but not playing your game
- Offline: Friends who are offline
Step 1: Display the Unified Friends List
TheClient::GetRelationshipsByGroup method returns a pre-sorted list of relationships for a specific group type.
This eliminates the need to manually filter, categorize, and sort friends yourself. The SDK handles all the logic
for determining which group each friend belongs to based on their online status and game activity, and
automatically sorts users within each group (for example, users who have played your game are moved to the top of
the OnlineElsewhere group).
Let’s create a function that uses the SDK helper functions to display a properly organized friends list:
Step 2: Set Up Automatic Updates
To keep your friends list up-to-date automatically, use theClient::SetRelationshipGroupsUpdatedCallback. This
callback is triggered whenever any change occurs that might affect the friends list grouping, such as a friend going
online or offline, or when a relationship changes, such as when you accept a friend request, or block a user.
Approach 2: Manually Fetching Relationships and Users
In this section we’ll show a more manual method which gives you more control over how the friends list is displayed in your game.Step 1: Fetch Relationships
First, let’s create a function that utilisesClient::GetRelationships to query all the relationships and
user information we for our account:
The 
relationship.User() function returns a UserHandle object that represents a user that the Discord Social SDK
knows about.
Handle objects maintain references to both the underlying data and the SDK instance, which means that when their
data changes, existing handle objects automatically reflect these changes without needing to be recreated.Step 2: Organize Relationships
Based on our design guidelines for a Unified Friends List, you should separate the player’s friends list into three sections:Online - GameTitle, Online - Elsewhere, and Offline.
Because we are building a text console application, we will use emojis to represent the status of each friend but you can use your own design elements to convey status and presence in your game.
Let’s update our DisplayFriendsList function to reflect our three sections and categorize friends based on their status:
- We will create three vectors to store the friends in each category.
- We will filter out pending friends and blocked users.
- We will add indicators for Discord friends, game friends, and provisional users.
- We will categorize friends based on their game and presence status.
- We will sort each category alphabetically.
- We will display each category separately.
This example is for reference only. Please make sure you use efficient data structures and cache data when appropriate to avoid performance issues in your game.
Online - GameTitle, Online - Elsewhere, and Offline.
Step 3: Monitor Changes to Users
To monitor for user changes, we’re going using theClient::SetUserUpdatedCallback function.
This callback will be triggered whenever a user’s info is updated, such as name or presence changes (when they go online, offline, or start playing your game).
The automatic updates of the 
UserHandle object to the latest the user information should be sufficient for
retrieving the most up-to-date user information.
Client::SetUserUpdatedCallback may be more useful to identify times when you wish to re-sort your
user list, or similar operations.Step 4: Monitor Changes in Relationships
Let us setup two callbacks to handle relationship updates.These examples rebuild the friends list from scratch every time a relationship changes. For performance reasons, we
recommend maintaining a collection of 
UserHandle objects and adding and removing them appropriately.Relationship Created Callback
This can happen when a user sends or accepts a friend invite, or blocks a user.Relationship Deleted Callback
This can happen when a user rejects a friend request or removes a friend.Next Steps
Now that you have a unified friends list, you can build on your social features by allowing players to manage relationships, send game invites, and more. Check out our other guides for more information:Designing a Unified Friends List
Best practices for designing your Unified Friends List.
Managing Relationships
Allow players to manage their friends, friend requests, and blocked users.
Managing Game Invites
Allow players to invite friends to join their game session or party.
#social-sdk-dev-help channel for support from the community.
If you encounter a bug while working with the Social SDK, please report it here:  https://dis.gd/social-sdk-bug-report
Change Log
| Date | Changes | 
|---|---|
| March 17, 2025 | Initial release | 
| July 17, 2025 | Add UFL helper methods |