# Discord Rich Presence **Plugin made by Mathew Simon.** Affiche le jeu dans le statut Discord quand on le lance. Aucune DLL ni SDK externe : le plugin parle directement au named pipe local de Discord (`\\.\pipe\discord-ipc-N`). Windows uniquement (`PlatformAllowList: Win64`). ## 1. Cote Discord 1. https://discord.com/developers/applications > **New Application** 2. Le **nom de l'application** = ce que Discord affichera comme nom du jeu ("joue a XXX"). 3. Copier l'**Application ID** (= Client ID) sur la page *General Information*. 4. Optionnel, pour les images : *Rich Presence > Art Assets* > uploader une image et lui donner un nom. Ce nom est la valeur a mettre dans `LargeImageKey` / `SmallImageKey`. (Les uploads mettent quelques minutes a se propager.) ## 2. Cote Unreal **Edit > Project Settings > Plugins > Discord Rich Presence** | Reglage | Role | |---|---| | `Enabled` | Active/desactive tout le plugin | | `Client Id` | L'Application ID copie a l'etape 1 | | `Enable In Editor` | Presence active aussi en PIE (pratique pour tester) | | `Default Activity` | Ce qui est affiche des le lancement | | `Min Update Interval Seconds` | Throttle des envois (Discord limite a 5 / 20 s, ne pas descendre sous 4) | | `Reconnect Interval Seconds` | Frequence des tentatives quand Discord n'est pas lance | C'est tout : le sous-systeme demarre avec la GameInstance, se connecte, envoie `Default Activity`, et se reconnecte tout seul si Discord est ferme puis relance. ## 3. Changer la presence en cours de jeu En Blueprint, noeud **Get Discord Rich Presence**, puis : - `Set Details And State` — les deux lignes de texte sous le nom du jeu - `Set Activity` — remplace tout (textes + images + party) - `Set Party` — le compteur "(2 sur 4)" - `Reset Elapsed Time` — repart de zero sur le chrono de temps de jeu - `Clear Activity` — retire le jeu du statut - `Is Connected To Discord` — etat de la connexion En C++ : ```cpp #include "DiscordRichPresenceSubsystem.h" if (UDiscordRichPresenceSubsystem* Discord = UDiscordRichPresenceSubsystem::Get(this)) { Discord->SetDetailsAndState(TEXT("Foret du Nord"), TEXT("Jour 12 - En vie")); } ``` ## Notes - Discord ignore les textes de **moins de 2 caracteres**, ils sont donc omis a l'envoi. - Le chrono de temps de jeu demarre a l'`Initialize` du sous-systeme. - Les changements sont accumules et envoyes au plus une fois par `Min Update Interval Seconds` : appeler `SetDetailsAndState` a chaque frame ne spamme pas Discord. - Si Discord n'est pas lance, il ne se passe rien (pas d'erreur, pas de blocage) et le plugin retente periodiquement.