Command Palette

Search for a command to run...

Presence API

Usa la API de Presence de Nowly para actualizar Discord Rich Presence desde una integración web.

Crear una presencia

Presence es un global inyectado por el runtime de Nowly - no necesitas importarlo.

Toda presencia empieza con una instancia de Presence:

const presence = new Presence()

Evento UpdateData

Usa UpdateData para actualizar la actividad:

presence.on("UpdateData", async () => {
  await presence.setActivity({
    details: "Viendo un video",
  })
})

setActivity

setActivity envía la actividad actual de Discord. Los campos comunes incluyen:

CampoTipoDescripciónPredeterminado
detailsUrlstringEnlace HTTPS público opcional para details (SDK 1.7.0+).-
stateUrlstringEnlace HTTPS público opcional para state (SDK 1.7.0+).-
namestringNombre de actividad opcional. Por defecto, usa el nombre de la presencia.-
statusDisplayType0 | 1 | 2Campo del estado compacto de Discord: 0 = name (predeterminado), 1 = state, 2 = details.-
detailsstringLínea de actividad principal mostrada en Discord.-
statestringLínea de actividad secundaria mostrada debajo de details.-
startTimestampnumberMarca de tiempo Unix para el progreso de actividad transcurrido.-
endTimestampnumberMarca de tiempo Unix para el progreso de actividad restante.-
largeImageKeystringClave de imagen principal, normalmente Assets.Logo o Assets.Thumbnail (globales que proporciona el runtime).-
largeImageTextstringDescripción emergente de la imagen grande.-
smallImageKeystringClave de imagen pequeña opcional.-
smallImageTextstringDescripción emergente de la imagen pequeña.-
typenumberTipo de actividad de Discord desde PresenceType.-
buttonsarrayBotones de actividad de Discord opcionales.-

Discord rechaza los payloads de Rich Presence cuando largeImageText o smallImageText contiene menos de dos caracteres. Nowly limpia estos tooltips opcionales y los omite cuando el resultado tiene menos de dos caracteres; la imagen sigue disponible.

detailsUrl / stateUrl

El SDK 1.7.0+ añade los campos de texto opcionales detailsUrl y stateUrl para enlazar sus líneas correspondientes, independientemente de los botones. La extensión y el host nativo deben admitirlos; las versiones anteriores los ignoran. El nombre de la actividad no cambia.

Usa URL HTTPS públicas verificadas, sin credenciales y de hasta 2048 caracteres. Se omiten los enlaces sin texto correspondiente o con URL no válidas. Conserva los identificadores de contenido, como el parámetro v de YouTube, pero nunca compartas tokens de acceso, conversaciones privadas, enlaces secretos ni información oculta por los ajustes de privacidad. Omite los destinos desconocidos.

await presence.setActivity({
  details: "Título del vídeo",
  detailsUrl: "https://www.youtube.com/watch?v=VIDEO_ID",
  state: "Nombre del canal",
  stateUrl: "https://www.youtube.com/@channel",
})

statusDisplayType

statusDisplayType elige el texto del estado compacto de Discord. No cambia el nombre, los detalles ni el estado de la tarjeta de actividad.

  • 0 (predeterminado): name
  • 1: state
  • 2: details

Por ejemplo, mostrar el título del vídeo en el estado compacto y conservar el nombre de la actividad y el canal en la tarjeta:

await presence.setActivity({
  name: "Servicio de vídeo",
  details: "Título del vídeo",
  state: "Nombre del canal",
  statusDisplayType: 2,
})

Usa una versión del SDK que incluya este campo y actualiza la extensión Nowly y el host nativo. Las versiones anteriores del runtime ignoran el campo y mantienen el estado predeterminado.

clearActivity

Llama a clearActivity cuando no haya nada que mostrar:

presence.clearActivity()

PresenceType

PresenceType es una exportación con nombre de @nowly/sdk:

import { PresenceType } from "@nowly/sdk"

Se corresponde con los tipos de actividad de Discord: Playing, Streaming, Listening, Watching y Competing.

getSetting

Lee un ajuste tipado después de Presence.Settings. El valor es el ajuste guardado del usuario, o el valor por defecto de la definición:

const showButtons = await presence.getSetting<boolean>("showButtons")

UpdateData también recibe ctx.settings con el mismo mapa. Ambos se actualizan cuando el usuario cambia ajustes en el panel.

Registro

Usa presence.info y presence.error para mensajes de depuración durante el desarrollo.