Discord のアクティビティに Nintendo Switch のプレイ状況を表示する

## はじめに
Discord のアクティビティステータスに Nintendo Switch にて、現在プレイ中のゲームを表示する方法についてまとめてみました。以下のような感じで表示してくれます。流れとしては、Nintendo Switch Online からフレンドが現在プレイしているゲーム情報を取得し、表示しています。
![スクリーンショット2023-04-23 16.04.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1115291/7fe2afcd-965a-0d00-50a1-8ea95d7b2ef6.png)

## 注意事項
**2023/09/22 追記**
デスクトップ版の Discord でしか、`nxapi` は利用できません。
また、`nxapi` の仕様なのかバグなのか、正常にどのゲームをプレイしているか表示されないことがあります。例えば、`Nintendo Switchをプレイ中`などです。バグ報告をしたので、経過観察中です。

## 導入

### アカウント作成
ニンテンドースイッチオンラインからフレンドの情報を取得する都合上、自分自身の情報は取得できません。そのため、サブ垢を作成し、サブ垢から本垢の情報を取得する必要があります。サブ垢を持っていない方は、[Nintendo Switch Online](https://www.nintendo.co.jp/hardware/switch/onlineservice/) の右上から[アカウントを作成する]を選択して下さい。本垢にログインしている場合はログアウトして下さい。サブ垢が作成できたら下記手順を参考に本垢とサブ垢をフレンド状態にして下さい。この際、注意点としてサブ垢から本垢のオンライン状況を確認できるように設定して下さい。Nintendo Switch の[マイページ]→[ユーザー設定]→[フレンド機能の設定]→[オンライン状況の公開]を選択して下さい。

https://www.nintendo.co.jp/support/switch/friends/index.html

![2023042313375144.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1115291/5213c190-ae4d-753a-0adf-3aa65aa2ae87.png)

### nxapi のインストール
フレンド設定ができたら、自分のOSに合った [nxapi](https://github.com/samuelthomas2774/nxapi/releases) をインストールして下さい。

https://github.com/samuelthomas2774/nxapi/releases

インストール実行時、以下のようなエラーが出るかもしれませんが、無視して[詳細情報]を選択し実行して下さい。
![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1115291/05f4565f-2ebf-6318-dd09-08a88ea4ab11.png)
インストールが完了すると、以下のようなウィンドウが表示されると思います（表示されない場合はスタートメニューから "Nintendo Switch Online" を実行して下さい）。
![スクリーンショット2023-04-22 21.28.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1115291/134980a6-6929-05c5-fade-e0ed6c69e29e.png)

### 設定方法
"nxapi Nintendo Switch Online" から、[Add user] を選択し [Add Nintendo Switch Online account] を選択して下さい。ログインが要求されるので**サブ垢**でログインして下さい。ログインできたら[この人にする]を選択して下さい。この時、Third-party API usage というデータ収集するよというウィンドウが表示されるので、OKを選択して下さい。
<img width=300 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1115291/3d45f8de-3314-0855-b907-a47f80d45970.png"><img width=300 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1115291/6879f5d5-199a-c8f4-0544-0fbd1532394e.png">
![スクリーンショット2023-04-23 14.14.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1115291/09fdf8dd-ff00-892c-0e31-f7880d5a04e3.png)
アカウントの追加ができたら、以下のような画面になっていると思います。
![スクリーンショット2023-04-23 14.20.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1115291/1696d924-5e35-ae8e-381c-83f838900ea6.png)
続いて、nxapi と Discord を連携していきます。[Set up Discord Rich Presence] を選択し、以下のように設定して下さい。
* Select mode：Select a user that is friends with the user you want to share
* Select user：サブ垢
* Select friend：本垢
![スクリーンショット2023-04-23 14.28.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1115291/66d5b9f1-529d-1eff-2234-1f02410a2281.png)
設定ができたら保存して下さい。以下のように Discord と連携することができました。
![スクリーンショット2023-04-23 14.35.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1115291/31d83cef-3bcc-8fd4-9afa-3421eb2f78a3.png)
続いて、Nintendo Switch Online の設定周りを弄っていきます。[Discord Rich Presence] を選択し、[Preferences] を選択して下さい。以下のような画面が出てくると思います。
![スクリーンショット2023-04-23 14.43.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1115291/4e6146fa-f107-a2bb-9f65-4349a6aaf640.png)
設定の詳細について説明していきます。
* **Startup**
    * Open at login
        * PC 起動時に "Nintendo Switch Online" を起動するかです。チェックでいいと思います。
    * Open in background
        * PC 起動時にタスクトレイに格納するかです（お好みで）。
* **Discord Rich Presence**
    * Discord Rich Presence is enabled. 
        * さっき設定しました。
    * Discord user
        * デフォルトだと "First discovered" になっています。Discord のサブ垢などを持っていない方は、このままでもいいと思いますが、サブ垢を持っている場合、明示的に指定してあげたほうがいいでしょう。
    * Friend code
        * フレンドコードを Discord 上で表示できるみたいですが、設定しても表示されませんでした。
    * Show inactive presence
        * ゲームをプレイしていないが、Nintendo Switch を起動しているかどうかを表示してくれます（お好みで）。
    * Play time
        * Never show play time
            * プレイ時間を表示しません。
        * show play time as it appears on a Nintendo Switch console
            * Nintendo Switch のプロフィールから見れるプレイ時間を表示します（100時間以上プレイとか）
        * show approximate play time (nearest 5 hours)
            * 5時間単位でのプレイ時間を表示します。
        * show approximate play time (nearest 5 hours) with first played date
            * 5時間単位でのプレイ時間と初めてゲームをプレイした日付を表示します。
        * show approximate play time (nearest hours)
            * 1時間単位でのプレイ時間を表示します。
        * show approximate play time (nearest hours) with first played date
            * 1時間単位でのプレイ時間と初めてゲームをプレイした日付を表示します。
        * show exact play time
            * 分単位までのプレイ時間を表示します。
        * show exact play time with first played date
            * 分単位までのプレイ時間と初めてゲームをプレイした日付を表示します。
* **SplatNet3**
    * Splatnet（アプリから戦績とかが見れるやつ） から情報を取得し、プレイ情報を詳細に表示することが可能になります。但し、Splatnet から情報を取得するためには、Nintendo Switch Online のメンバーシップが必要になります。サブ垢までメンバーシップに登録する余裕があればしてもいいと思います（ファミリープランとか）。
![discord-activity-splatoon3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1115291/7d194155-0a99-f755-270f-33b1cc52599a.png)
最後に、フレンドがゲームをプレイしたら通知する機能があります。タスクトレイの nxapi を右クリックし、通知させたいアカウントを選択し、"Enable notifications for friends of this user's presence" をチェックします。
![スクリーンショット2023-04-23 15.51.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1115291/163e0f6c-92bd-fc59-b9c1-972ddb446bae.png)
フレンドがゲームを開始すると以下のように通知が表示されます。
![スクリーンショット2023-04-23 16.00.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1115291/17d6687e-21f1-2642-a1ee-b341cbd53b69.png)

## 最後に
Discord のアクティビティに Nintendo Switch のプレイ状況を表示することができました。PS4 や PS5 では Discord と連携すればアクティビティに表示されますが、Nintendo Switch も公式で Discord 連携があってもいいんじゃないかなと思いました（Twitter 連携はあるのに…）。

## 参考
[samuelthomas2774/nxapi - GitHub](https://github.com/samuelthomas2774/nxapi)