Presence API
Użyj Presence API Nowly, aby aktualizować Discord Rich Presence z integracji ze stroną internetową.
Tworzenie obecności
Presence jest obiektem globalnym wstrzykiwanym przez środowisko uruchomieniowe Nowly - nie musisz go importować.
Każda obecność zaczyna się od instancji Presence:
const presence = new Presence()Zdarzenie UpdateData
Użyj UpdateData, aby odświeżyć aktywność:
presence.on("UpdateData", async () => {
await presence.setActivity({
details: "Watching a video",
})
})setActivity
setActivity wysyła bieżącą aktywność Discorda. Typowe pola obejmują:
| Pole | Typ | Opis | Domyślny |
|---|---|---|---|
detailsUrl | string | Opcjonalny publiczny link HTTPS dla details (SDK 1.7.0+). | - |
stateUrl | string | Opcjonalny publiczny link HTTPS dla state (SDK 1.7.0+). | - |
name | string | Opcjonalna nazwa aktywności. Domyślnie używana jest nazwa obecności. | - |
statusDisplayType | 0 | 1 | 2 | Pole w skróconym statusie Discord: 0 = name (domyślnie), 1 = state, 2 = details. | - |
details | string | Główna linia aktywności wyświetlana w Discordzie. | - |
state | string | Druga linia aktywności wyświetlana pod details. | - |
startTimestamp | number | Znacznik czasu Unix dla upływu postępu aktywności. | - |
endTimestamp | number | Znacznik czasu Unix dla pozostałego postępu aktywności. | - |
largeImageKey | string | Klucz głównego zasobu obrazu, zwykle Assets.Logo lub Assets.Thumbnail (globalne dostarczane przez środowisko uruchomieniowe). | - |
largeImageText | string | Podpowiedź dla dużego obrazu. | - |
smallImageKey | string | Opcjonalny klucz małego zasobu obrazu. | - |
smallImageText | string | Podpowiedź dla małego obrazu. | - |
type | number | Typ aktywności Discorda z PresenceType. | - |
buttons | array | Opcjonalne przyciski aktywności Discorda. | - |
Discord odrzuca payload Rich Presence, gdy largeImageText lub smallImageText zawiera mniej niż dwa znaki. Nowly przycina te opcjonalne podpowiedzi i pomija je, gdy wynik ma mniej niż dwa znaki; obraz pozostaje dostępny.
detailsUrl / stateUrl
SDK 1.7.0+ dodaje opcjonalne pola tekstowe detailsUrl i stateUrl, które tworzą odnośniki dla odpowiednich wierszy aktywności, niezależnie od przycisków. Rozszerzenie i host natywny muszą je obsługiwać; starsze wersje je ignorują. Nazwa aktywności się nie zmienia.
Używaj sprawdzonych publicznych adresów HTTPS bez danych logowania, o długości do 2048 znaków. Linki bez odpowiadającego tekstu lub z nieprawidłowym adresem są pomijane. Zachowuj identyfikatory treści, np. parametr YouTube v, ale nigdy nie udostępniaj tokenów dostępu, prywatnych rozmów, tajnych linków ani informacji ukrytych przez ustawienia prywatności. Pomijaj nieznane cele.
await presence.setActivity({
details: "Tytuł filmu",
detailsUrl: "https://www.youtube.com/watch?v=VIDEO_ID",
state: "Nazwa kanału",
stateUrl: "https://www.youtube.com/@channel",
})statusDisplayType
statusDisplayType wybiera tekst skróconego statusu Discord. Nie zmienia nazwy, szczegółów ani stanu na karcie aktywności.
0(domyślnie):name1:state2:details
Na przykład można wyświetlić tytuł filmu w skróconym statusie, zachowując nazwę aktywności i kanał na karcie:
await presence.setActivity({
name: "Serwis wideo",
details: "Tytuł filmu",
state: "Nazwa kanału",
statusDisplayType: 2,
})Użyj wersji SDK zawierającej to pole i zaktualizuj rozszerzenie Nowly oraz host natywny. Starsze wersje środowiska uruchomieniowego ignorują to pole i zachowują domyślny widok statusu.
clearActivity
Wywołaj clearActivity, gdy nie ma nic wartego pokazania:
presence.clearActivity()PresenceType
PresenceType to nazwany eksport z @nowly/sdk:
import { PresenceType } from "@nowly/sdk"Mapuje się na typy aktywności Discorda: Playing, Streaming, Listening, Watching i Competing.
getSetting
Odczytaj typowane ustawienie danej obecności po Presence.Settings. Wartość to zapisane ustawienie użytkownika lub wartość domyślna z definicji:
const showButtons = await presence.getSetting<boolean>("showButtons")UpdateData również otrzymuje ctx.settings z tą samą mapą. Oba są aktualizowane, gdy użytkownik zmienia ustawienia w panelu bocznym.
Logowanie
Użyj presence.info i presence.error do komunikatów debugowania podczas developmentu.