Presence API
Utilisez l'API Presence de Nowly pour mettre à jour Discord Rich Presence depuis une intégration web.
Créer une présence
Presence est une globale injectée par le runtime Nowly - vous n'avez pas besoin de l'importer.
Chaque présence commence par une instance de Presence :
const presence = new Presence()Événement UpdateData
Utilisez UpdateData pour actualiser l'activité :
presence.on("UpdateData", async () => {
await presence.setActivity({
details: "Regarde une vidéo",
})
})setActivity
setActivity envoie l'activité Discord actuelle. Les champs courants incluent :
| Champ | Type | Description | Par défaut |
|---|---|---|---|
detailsUrl | string | Lien HTTPS public facultatif pour details (SDK 1.7.0+). | - |
stateUrl | string | Lien HTTPS public facultatif pour state (SDK 1.7.0+). | - |
name | string | Nom d'activité facultatif. Utilise le nom de la présence par défaut. | - |
statusDisplayType | 0 | 1 | 2 | Champ affiché dans le statut compact de Discord : 0 = name (par défaut), 1 = state, 2 = details. | - |
details | string | Ligne d'activité principale affichée dans Discord. | - |
state | string | Ligne d'activité secondaire affichée sous les détails. | - |
startTimestamp | number | Horodatage Unix pour la progression de l'activité écoulée. | - |
endTimestamp | number | Horodatage Unix pour la progression de l'activité restante. | - |
largeImageKey | string | Clé d'image principale, généralement Assets.Logo ou Assets.Thumbnail (globales fournies par le runtime). | - |
largeImageText | string | Infobulle de la grande image. | - |
smallImageKey | string | Clé d'image petite facultative. | - |
smallImageText | string | Infobulle de la petite image. | - |
type | number | Type d'activité Discord depuis PresenceType. | - |
buttons | array | Boutons d'activité Discord facultatifs. | - |
Discord refuse les activités Rich Presence lorsque largeImageText ou smallImageText contient moins de deux caractères. Nowly nettoie ces infobulles facultatives et les omet si le résultat contient moins de deux caractères ; l'image reste disponible.
detailsUrl / stateUrl
Le SDK 1.7.0+ ajoute les champs texte facultatifs detailsUrl et stateUrl pour rendre chaque ligne correspondante cliquable, indépendamment des boutons. L’extension et l’hôte natif doivent les prendre en charge ; les anciennes versions les ignorent. Le nom de l’activité reste inchangé.
Utilisez des URL HTTPS publiques vérifiées, sans identifiants de connexion et de 2048 caractères maximum. Les liens sans texte correspondant ou avec une URL invalide sont omis. Conservez les identifiants de contenu comme le paramètre v de YouTube, mais ne partagez jamais de jetons d’accès, de conversations privées, de liens secrets ou d’informations masquées par les réglages de confidentialité. Omettez le lien si sa destination est inconnue.
await presence.setActivity({
details: "Titre de la vidéo",
detailsUrl: "https://www.youtube.com/watch?v=VIDEO_ID",
state: "Nom de la chaîne",
stateUrl: "https://www.youtube.com/@channel",
})statusDisplayType
statusDisplayType choisit le texte affiché dans le statut compact de Discord. Il ne modifie ni le nom, ni les détails, ni l'état de la carte d'activité.
0(par défaut) :name1:state2:details
Par exemple, afficher le titre de la vidéo dans le statut compact tout en conservant le nom de l'activité et la chaîne dans la carte :
await presence.setActivity({
name: "Service vidéo",
details: "Titre de la vidéo",
state: "Nom de la chaîne",
statusDisplayType: 2,
})Utilisez une version du SDK qui inclut ce champ et mettez à jour l'extension Nowly ainsi que l'hôte natif. Les anciennes versions du runtime ignorent ce champ et conservent l'affichage du statut par défaut.
clearActivity
Appelez clearActivity lorsqu'il n'y a plus rien à afficher :
presence.clearActivity()PresenceType
PresenceType est un export nommé de @nowly/sdk :
import { PresenceType } from "@nowly/sdk"Il correspond aux types d'activité Discord : Playing, Streaming, Listening, Watching et Competing.
getSetting
Lisez un paramètre typé après Presence.Settings. La valeur est le réglage enregistré de l'utilisateur, ou la valeur par défaut de la définition :
const showButtons = await presence.getSetting<boolean>("showButtons")UpdateData reçoit aussi ctx.settings avec la même correspondance. Les deux se mettent à jour lorsque l'utilisateur change les réglages dans le panneau.
Journalisation
Utilisez presence.info et presence.error pour les messages de débogage pendant le développement.