Command Palette

Search for a command to run...

Presence API

Use a Presence API do Nowly para atualizar o Discord Rich Presence a partir de uma integração de site.

Criando uma Presença

Presence é uma global injetada pelo runtime do Nowly - você não precisa importá-la.

Toda presença começa com uma instância de Presence:

const presence = new Presence()

Evento UpdateData

Use UpdateData para atualizar a atividade:

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

setActivity

setActivity envia a atividade atual do Discord. Os campos comuns incluem:

CampoTipoDescriçãoPadrão
detailsUrlstringLink HTTPS público opcional para details (SDK 1.7.0+).-
stateUrlstringLink HTTPS público opcional para state (SDK 1.7.0+).-
namestringNome de atividade opcional. Usa o nome da presença por padrão.-
statusDisplayType0 | 1 | 2Campo do status compacto do Discord: 0 = name (padrão), 1 = state, 2 = details.-
detailsstringLinha principal da atividade exibida no Discord.-
statestringLinha secundária da atividade exibida abaixo de details.-
startTimestampnumberTimestamp Unix para o progresso decorrido da atividade.-
endTimestampnumberTimestamp Unix para o progresso restante da atividade.-
largeImageKeystringChave do recurso de imagem principal, geralmente Assets.Logo ou Assets.Thumbnail (globais fornecidos pelo runtime).-
largeImageTextstringDica exibida ao passar o mouse sobre a imagem grande.-
smallImageKeystringChave opcional do recurso de imagem pequena.-
smallImageTextstringDica exibida ao passar o mouse sobre a imagem pequena.-
typenumberTipo de atividade do Discord, vindo de PresenceType.-
buttonsarrayBotões opcionais da atividade do Discord.-

O Discord rejeita payloads de Rich Presence quando largeImageText ou smallImageText contém menos de dois caracteres. O Nowly limpa essas dicas opcionais e as omite quando o resultado tem menos de dois caracteres; a imagem continua disponível.

detailsUrl / stateUrl

O SDK 1.7.0+ adiciona os campos de texto opcionais detailsUrl e stateUrl para tornar cada linha correspondente clicável, independentemente dos botões. A extensão e o host nativo precisam oferecer suporte; versões anteriores ignoram esses campos. O nome da atividade não muda.

Use URLs HTTPS públicas verificadas, sem credenciais e com até 2048 caracteres. Links sem texto correspondente ou com URLs inválidas são omitidos. Preserve identificadores de conteúdo, como o parâmetro v do YouTube, mas nunca compartilhe tokens de acesso, conversas privadas, links secretos ou informações ocultadas pelas configurações de privacidade. Omita destinos desconhecidos.

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

statusDisplayType

statusDisplayType escolhe o texto do status compacto do Discord. Não altera o nome, os detalhes nem o estado no cartão de atividade.

  • 0 (padrão): name
  • 1: state
  • 2: details

Por exemplo, mostrar o título do vídeo no status compacto e manter o nome da atividade e o canal no cartão:

await presence.setActivity({
  name: "Serviço de vídeo",
  details: "Título do vídeo",
  state: "Nome do canal",
  statusDisplayType: 2,
})

Use uma versão do SDK que inclua esse campo e atualize a extensão Nowly e o host nativo. Versões anteriores do runtime ignoram o campo e mantêm a exibição padrão do status.

clearActivity

Chame clearActivity quando não houver nada que valha a pena exibir:

presence.clearActivity()

PresenceType

PresenceType é uma exportação nomeada de @nowly/sdk:

import { PresenceType } from "@nowly/sdk"

Ele mapeia para os tipos de atividade do Discord: Playing, Streaming, Listening, Watching e Competing.

getSetting

Leia uma configuração tipada por presença após Presence.Settings. O valor é a configuração salva do usuário ou o padrão da definição:

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

UpdateData também recebe ctx.settings com o mesmo mapa. Ambos são atualizados quando o usuário altera as configurações no painel lateral.

Registro (Logging)

Use presence.info e presence.error para mensagens de depuração durante o desenvolvimento.