Make it yours

Presence text

Write the messages players show on their Discord profile.

Two presence profiles

Edit Config.Presence in config.lua. Players use one of two profiles:

ProfileShownLarge image
SelectionDuring the loading screen and the character menuYour logo
PlayingOnce a character is loadedThe character's photo
config.lua
Config.Presence = {
    ShowLocation = false,
    RefreshInterval = 15,
    RotationInterval = 10,

    Selection = {
        LargeImageText = '{server_name}',
        Messages = {
            'In character selection',
            '{player_count}/{max_players} players online',
        },
    },

    Playing = {
        LargeImageText = '{char_name}',
        Messages = {
            '{char_name} | {job} - {job_grade}',
            'Near {street}, {zone}',
            '{player_count}/{max_players} players | ID {player_id}',
        },
    },

LargeImageText is shown when someone hovers over the large image.

Placeholders

Use these in messages, LargeImageText, SmallImage.Text and button labels:

PlaceholderShows
{server_name}Config.ServerName
{player_count}Players currently online
{max_players}Your sv_maxclients value
{player_id}The player's server ID
{char_name}Character first and last name
{job}Job label
{job_grade}Job grade label
{street}Current street, only with ShowLocation = true
{zone}Current area, such as Vinewood or Sandy Shores, only with ShowLocation = true

Showing where players are

Location is off by default, because it tells everyone who sees a player's Discord profile where that character is in the city.

config.lua
Config.Presence = {
    ShowLocation = false,

While it is off, street and zone are never sent to Discord, and any message using {street} or {zone} is skipped, so the default Near {street}, {zone} message simply does not appear. Set it to true to show location.

Rotation and refresh

  • When a profile has more than one message, they rotate every RotationInterval seconds. Set it to 0 to always show the first message.
  • The presence refreshes every RefreshInterval seconds (15 by default), so job, player count and, when it is on, location stay current. Character loads, job changes and new photos appear immediately.
  • Both intervals have a minimum of 5 seconds.
  • Text longer than 128 characters is shortened, which is Discord's limit.

Fallback text

When a value is not available, the matching fallback is shown instead:

config.lua
Fallbacks = {
    char_name = 'Unknown',
    job = 'Unemployed',
    job_grade = 'None',
    street = 'Unknown street',
    zone = 'San Andreas',
},

Rename jobs

Use JobLabels to show a different name for a job, using the job's internal name as the key:

config.lua
JobLabels = {
    unemployed = 'Civilian',
    police = 'LSPD',
},

Server name

Config.ServerName fills {server_name} and is used as the title of player notifications. The name next to "Playing" on Discord comes from your Discord application name instead.

Temporary messages

Other resources can show a temporary message, such as during a heist or a race, with the SetPresenceOverride export. See Exports & integrations.

Was this page helpful?
Made with care, by Wolfden.
© 2026 Wolfden StudiosBuilt for the stories you create.