Command Palette

Search for a command to run...

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 :

ChampTypeDescriptionPar défaut
detailsUrlstringLien HTTPS public facultatif pour details (SDK 1.7.0+).-
stateUrlstringLien HTTPS public facultatif pour state (SDK 1.7.0+).-
namestringNom d'activité facultatif. Utilise le nom de la présence par défaut.-
statusDisplayType0 | 1 | 2Champ affiché dans le statut compact de Discord : 0 = name (par défaut), 1 = state, 2 = details.-
detailsstringLigne d'activité principale affichée dans Discord.-
statestringLigne d'activité secondaire affichée sous les détails.-
startTimestampnumberHorodatage Unix pour la progression de l'activité écoulée.-
endTimestampnumberHorodatage Unix pour la progression de l'activité restante.-
largeImageKeystringClé d'image principale, généralement Assets.Logo ou Assets.Thumbnail (globales fournies par le runtime).-
largeImageTextstringInfobulle de la grande image.-
smallImageKeystringClé d'image petite facultative.-
smallImageTextstringInfobulle de la petite image.-
typenumberType d'activité Discord depuis PresenceType.-
buttonsarrayBoutons 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) : name
  • 1 : state
  • 2 : 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.