ゲームのプレイ時間を計りたい!
先日、1年間に遊んだゲームを振り返るエントリを書いた。日常的にめちゃくちゃゲームで遊んでいるので、ゲームのプレイ時間を正確にレコードしておきたい需要は強い。というわけで、個人で作っているゲームプレイ時間トラッカーについて紹介したい。

DiscordのActivityを監視する
種明かしをすると、DiscordのActivity機能を利用している。DiscordはPCのみならず、PlayStation Network、Xbox Liveのアカウントとも連携することができてプレイ状態を表示できる。

Discordサーバーにbotを常駐させておき、Activityが切り替わる度にデータを保存し続けているだけ。
このシステムは、実は2023年末ぐらいから2年以上稼働している。当初はPythonで実装していたが、1年ぐらいしてから機能追加のついでにKotlin製にフルリプレースした。PaaSはHerokuで動かしている。

ネイティブアプリは標準的なiOSアプリとして実装した。標準的な構成で特に言う事はない。
Platform情報の取得
Discord botの実装には、Python版はdiscord.py、Kotlin版はKordを利用している。しかし、どちらのライブラリもActivity上のPlatform情報をサポートしていなかった。
それもそのはずで、Platformの値はundocumentedだったので、実際にpayloadを取得してみるしかなかった。2年以上経ったが、未だにドキュメントには掲載されていないようだ。
というわけで、どちらのライブラリも自分で直している。
Nintendo Onlineのサポート
この仕組みでPS5、Xbox、PC(Steamなど)で遊んだゲームは記録できるようになったが、Nintendo Switch(2)は公式のDiscordサポートがない。調べたところ、勝手にNintendo Onlineの非公開APIに接続して、DiscordのActivityを更新するツールがあるようだ。iOSアプリのUAを偽造して繋いでいて面白い。
これを使えばSwitchのプレイログも取得できそうだが、BANのリスクも恐いので利用していない。正式対応が来るのが望ましいが、Switch 2でボイスチャットサポートが入ってしまったので、望み薄な気がする。
ゲームのプレイログを取ろう!
というわけで、せっかくなので記事を書いてみたが、非公開の個人プロダクトの紹介だとこれぐらいの中身になってしまう。Vibe Codingが流行る前の時期に作ったので、結構お手製感があったが、今だとAIでシュッと作れるので特に感慨も薄いが便利に使っている。
DiscordのSubscriptionの仕組みで利用権を販売したり、誰でも使えるような形で公開するのも考えたが、追加の対応があまりにも大変そうだったのでやめた*1。公開することはなさそうだ。
*1:タイムゾーンの考慮とか