Command Palette

Search for a command to run...

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 활동을 전송합니다. 일반적인 필드는 다음과 같습니다.

필드유형설명기본값
detailsUrlstringdetails의 선택적 공개 HTTPS 링크(SDK 1.7.0+).-
stateUrlstringstate의 선택적 공개 HTTPS 링크(SDK 1.7.0+).-
namestring선택적 활동 이름. 생략하면 프레즌스 이름을 사용합니다.-
statusDisplayType0 | 1 | 2Discord의 간략한 상태에 표시할 필드: 0 = name(기본값), 1 = state, 2 = details.-
detailsstringDiscord에 표시되는 주요 활동 줄.-
statestringdetails 아래에 표시되는 보조 활동 줄.-
startTimestampnumber경과된 활동 진행 상황을 나타내는 Unix 타임스탬프.-
endTimestampnumber남은 활동 진행 상황을 나타내는 Unix 타임스탬프.-
largeImageKeystring주 이미지 에셋 키, 일반적으로 Assets.Logo 또는 Assets.Thumbnail(런타임이 제공하는 전역 변수).-
largeImageTextstring큰 이미지의 툴팁.-
smallImageKeystring선택적인 작은 이미지 에셋 키.-
smallImageTextstring작은 이미지의 툴팁.-
typenumberPresenceType에서 가져온 Discord 활동 유형.-
buttonsarray선택적인 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(기본값): name
  • 1: state
  • 2: 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를 사용하세요.