Discord Rich Presence support for Beat Saber, now with 100% more configurability!
Displays information about the current song (including ranked status), modifiers (as emojis), play/pause state, multi/singleplayer, current score, combo and accuracy by default. Time left is also displayed while playing (speed modifiers are also accounted for).
Important
Please wait around 30-60s after launching the game for the Rich Presence to appear, it can take some time after starting the game.
While the mod has a few basic configuration options exposed on the UI via the Mod Settings menu, currently most config options can be edited via the JSON file primarily, as I have no idea how to create an interface for some of these options. If you happen to be well-versed in creating in-game configuration UIs any help would be greatly appreciated.
Can be used to provide a custom Discord App ID in case you want to define your own image files, or change the first line of the Rich Presence, as that's controlled by the App's name.
The default is an App ID created by the mod's author that works with the default configuration of the mod.
If you want to create your own App, you will need to upload image assets with specific names to match the ones defined in the mod. See the RichPresenceResources.cs file for exact names.
When true
the mod will detect when you are in the built-in Multiplayer menu. It will also change the "lobby type" displayed in later steps.
When true
and MultiplayerDetection
is also enabled, the mod will display the size of the lobby as well as the number of people in it inside the rich presence.
When true
the mod sets the song cover image as the large image, if it's available. It only works for songs available on BeatSaver, and can be set to false
to show the image of the current envorment instead, which is also used as a fallback in case no cover art is available.
When true
the amount of time spent in the Main Menu or Multiplayer Lobby is displayed. The timer resets after starting a map or going in and out of a lobby.
When true
the map type (standard, one-saber, 360, etc.) will be displayed as the small image for the rich presence. The SmallTextFormat
tooltip configured later will not be readable if this is set to false
.
This can be used to change the text displayed when using the mapType
variable. Set the value to the text you want to see displayed, or an empty string to prevent that value from being displayed. Fallback
can be set if you want a specific text to be displayed in case the map type being reported by the DataPuller mod does not have a readable name mapping. By default this is null
and it will display the value sent by DataPuller.
There are several options which accept "format lists":
DetailsFormat
- the 2nd line of the rich presence (below the app name) while playing a songStateFormat
- the 3rd line of the rich presence while playing a songLargeTextFormat
- tooltip displayed when hovering over the large imageSmallTextFormat
- tooltip displayed when hovering over the small image
Each string in the list will only be appended to the final output in case it has a "valid" value (valid is subjective and it is defined by the mod). Each value in the list takes the form of "prefix{{variable}}suffix"
where prefix
and suffix
can be an arbitrary number of characters before and after the variable, respectively, and variable
is the name of the variable from the table below.
The strings also have configurable separators that go between each valid item. By default this is a space for DetailsFormat
and StateFormat
, and a slash surrounded by spaces (/
) for LargeTextFormat
and SmallTextFormat
. You can also disable displaying the individual lines by setting them to null
instead of the list.
Variable | Description | Example | Additional formatting | Validity criteria |
---|---|---|---|---|
songName | Title of the song | Country Roads | Not empty | |
songSubName | Sub-name of the song | Squeepo Remix | Not empty | |
songAuthor | Author of the song | Jaroslav Beck, Kings & Folk | Not empty | |
mapper | Mapper name (custom songs ) | Mawntee | Not empty | |
difficulty | Human-readable difficulty | Expert | "ExpertPlus" replaced by "Expert+" | Not empty |
customDifficulty | Custom difficulty name | Lawless | Not empty | |
stars | ScoreSaber ranked stars | 4,22 | Up to two decimals | Greater than 0 |
pp | ScoreSaber perofrmance points | 167,89 | Up to two decimals | Greater than 0 |
playState | Emoji indicating play state | Based on configuration | Not empty | |
modifiersState | Emojis indicating modifiers | 🧘 | Based on configuration | Not empty |
lobbyType | Single/multiplayer or practice | 👤 | Based on configuration | Not empty |
mapType | Type of the current map | One Saber | Based on configuration | Not empty |
score | Total score | 123,456 | Greater than 0 | |
topScore | Top score for mode and difficulty | 156,789 | Greater than 0 | |
combo | Consecutive hits without misses | 234 | No decimals | Greater than 0 |
misses | Totall misses & bad cuts | 12 | No decimals | Greater than 0 |
energy | Player health | 90 | 0-100, no % sign | |
bpm | Song beats per minute | 180 | No decimals | Greater than 0 |
njs | Song note jump speed | 14,21 | Up to two decimals | Greater than 0 |
accuracy | Current accuracy | 86,24 | Two decimals, excluding % sign | |
rank | Accuracy ranking letter | SS | Not empty | |
bsr | BSR key of custom maps | 97f6 | Not empty | |
fc | Full combo text | ✅FC | No misses & not empty | |
gameVersion | Version of the game | 1.29.1 | Not empty | |
pluginVersion | Version of the mod | 1.1.2 | Not empty |
This can be used to change the text displayed when using the fullCombo
variable. Set the value to the text you want to see displayed, or an empty string to prevent that value from being displayed.
This controls the 2nd line of the rich presence while in the main menu. Set the value to the text you want to see displayed, or an empty string to prevent that value from being displayed.
This controls the 2nd line of the rich presence while in a multiplayer lobby. Set the value to the text you want to see displayed, or an empty string to prevent that value from being displayed.
The PlayStateEmoji
, ModifierEmoji
and LobbyTypeEmoji
options allow you to remap the emoji displayed in the playState
, modifiersState
and lobbyType
variables. Set the value to the emoji (or any arbitrary text) you want to see displayed, or an empty string to prevent that value from being displayed.
- BSIPA v4.2.2 (ModAssistant)
- BeatSaberMarkupLanguage 1.6.10 (ModAssistant)
- DiscordCore v3.0.1 (https://github.com/DJDavid98/DiscordCore/releases/tag/v3.0.1)
- DataPuller v2.1.4 (https://github.com/DJDavid98/BSDataPuller/releases/tag/2.1.4)