Command Palette

Search for a command to run...

Presence API

Nowly Presence APIを使って、ウェブサイト連携からDiscord Rich Presenceを更新します。

プレゼンスの作成

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"

これはDiscordのアクティビティタイプ(Playing、Streaming、Listening、Watching、Competing)に対応します。

getSetting

Presence.Settings に基づいた、型付けされたプレゼンス個別の設定を読み取ります。値はユーザーが保存した設定、または定義のデフォルト値です。

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

UpdateData も同じマップを持つ ctx.settings を受け取ります。ユーザーがサイドパネルで設定を変更すると、両方とも更新されます。

ロギング

開発中のデバッグメッセージには presence.info と presence.error を使用してください。