Presence API
웹사이트 연동에서 Discord Rich Presence를 업데이트하려면 Nowly Presence API를 사용하세요.
프레즌스 생성하기
Presence는 Nowly 런타임에서 주입하는 전역 객체이므로 가져올 필요가 없습니다.
모든 프레즌스는 Presence 인스턴스로 시작합니다.
const presence = new Presence()UpdateData 이벤트
활동을 새로 고치려면 UpdateData를 사용하세요.
presence.on("UpdateData", async () => {
await presence.setActivity({
details: "Watching a video",
})
})setActivity
setActivity는 현재 Discord 활동을 전송합니다. 일반적인 필드는 다음과 같습니다.
| 필드 | 유형 | 설명 | 기본값 |
|---|---|---|---|
detailsUrl | string | details의 선택적 공개 HTTPS 링크(SDK 1.7.0+). | - |
stateUrl | string | state의 선택적 공개 HTTPS 링크(SDK 1.7.0+). | - |
name | string | 선택적 활동 이름. 생략하면 프레즌스 이름을 사용합니다. | - |
statusDisplayType | 0 | 1 | 2 | Discord의 간략한 상태에 표시할 필드: 0 = name(기본값), 1 = state, 2 = details. | - |
details | string | Discord에 표시되는 주요 활동 줄. | - |
state | string | details 아래에 표시되는 보조 활동 줄. | - |
startTimestamp | number | 경과된 활동 진행 상황을 나타내는 Unix 타임스탬프. | - |
endTimestamp | number | 남은 활동 진행 상황을 나타내는 Unix 타임스탬프. | - |
largeImageKey | string | 주 이미지 에셋 키, 일반적으로 Assets.Logo 또는 Assets.Thumbnail(런타임이 제공하는 전역 변수). | - |
largeImageText | string | 큰 이미지의 툴팁. | - |
smallImageKey | string | 선택적인 작은 이미지 에셋 키. | - |
smallImageText | string | 작은 이미지의 툴팁. | - |
type | number | PresenceType에서 가져온 Discord 활동 유형. | - |
buttons | array | 선택적인 Discord 활동 버튼. | - |
Discord는 largeImageText 또는 smallImageText가 2자 미만인 Rich Presence 페이로드를 거부합니다. Nowly는 이러한 선택적 툴팁을 정리하고 결과가 2자 미만이면 생략합니다. 이미지는 계속 사용할 수 있습니다.
detailsUrl / stateUrl
SDK 1.7.0+의 선택적 문자열 필드 detailsUrl과 stateUrl은 버튼과 별개로 해당 활동 줄에 링크를 추가합니다. 확장 프로그램과 네이티브 호스트가 모두 지원해야 하며 이전 버전은 이 필드를 무시합니다. 활동 이름은 바뀌지 않습니다.
인증 정보가 없고 2048자 이하인 검증된 공개 HTTPS URL을 사용하세요. 대응하는 텍스트가 없거나 URL이 잘못된 링크는 생략됩니다. YouTube의 v 같은 콘텐츠 식별자는 유지하되 액세스 토큰, 비공개 대화, 비밀 링크 또는 개인정보 설정으로 숨긴 정보는 공유하지 마세요. 대상을 모르면 링크를 생략하세요.
await presence.setActivity({
details: "동영상 제목",
detailsUrl: "https://www.youtube.com/watch?v=VIDEO_ID",
state: "채널 이름",
stateUrl: "https://www.youtube.com/@channel",
})statusDisplayType
statusDisplayType은 Discord의 간략한 상태에 표시할 텍스트를 선택합니다. 활동 카드의 이름, 세부 정보, 상태는 변경하지 않습니다.
0(기본값):name1:state2:details
예를 들어 활동 이름과 채널 이름은 카드에 유지하면서 간략한 상태에 동영상 제목을 표시할 수 있습니다.
await presence.setActivity({
name: "동영상 서비스",
details: "동영상 제목",
state: "채널 이름",
statusDisplayType: 2,
})이 필드가 포함된 SDK를 사용하고 Nowly 확장 프로그램과 네이티브 호스트를 모두 업데이트하세요. 이전 런타임 버전은 이 필드를 무시하고 기본 상태 표시를 유지합니다.
clearActivity
표시할 만한 것이 없을 때는 clearActivity를 호출하세요.
presence.clearActivity()PresenceType
PresenceType은 @nowly/sdk의 이름 있는 내보내기입니다.
import { PresenceType } from "@nowly/sdk"이는 Playing, Streaming, Listening, Watching, Competing과 같은 Discord 활동 유형에 매핑됩니다.
getSetting
Presence.Settings 이후 타입이 지정된 프레즌스별 설정을 읽습니다. 값은 사용자가 저장한 설정이거나 정의의 기본값입니다.
const showButtons = await presence.getSetting<boolean>("showButtons")UpdateData도 동일한 맵을 가진 ctx.settings를 받습니다. 사용자가 사이드 패널에서 설정을 변경하면 둘 다 업데이트됩니다.
로깅
개발 중 디버그 메시지에는 presence.info와 presence.error를 사용하세요.