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:
| Campo | Tipo | Descrição | Padrão |
|---|---|---|---|
detailsUrl | string | Link HTTPS público opcional para details (SDK 1.7.0+). | - |
stateUrl | string | Link HTTPS público opcional para state (SDK 1.7.0+). | - |
name | string | Nome de atividade opcional. Usa o nome da presença por padrão. | - |
statusDisplayType | 0 | 1 | 2 | Campo do status compacto do Discord: 0 = name (padrão), 1 = state, 2 = details. | - |
details | string | Linha principal da atividade exibida no Discord. | - |
state | string | Linha secundária da atividade exibida abaixo de details. | - |
startTimestamp | number | Timestamp Unix para o progresso decorrido da atividade. | - |
endTimestamp | number | Timestamp Unix para o progresso restante da atividade. | - |
largeImageKey | string | Chave do recurso de imagem principal, geralmente Assets.Logo ou Assets.Thumbnail (globais fornecidos pelo runtime). | - |
largeImageText | string | Dica exibida ao passar o mouse sobre a imagem grande. | - |
smallImageKey | string | Chave opcional do recurso de imagem pequena. | - |
smallImageText | string | Dica exibida ao passar o mouse sobre a imagem pequena. | - |
type | number | Tipo de atividade do Discord, vindo de PresenceType. | - |
buttons | array | Botõ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):name1:state2: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.