目次
概要
あるゲームのアップデートの配信をいちはやく検知したい要件が発生したので、そういうツールを作りました。
現時点で、Steam と Epic Games と Microsoft Store に対応しています。事前に指定したゲームのアップデート有無を一定の間隔で監視し、アップデートがあった場合に Discord でメンションを飛ばして通知してくれます。
このツールは、詳細なパッケージやバージョンの生の情報を取得して監視 するため、既存のツールと違って、リリースノートの更新などを伴わない小さなアップデートでも検知できる のが大きな特徴です。
サポートしているプラットフォーム
監視できるプラットフォームと通知先は次の通りです。
- 監視対象
- Steam
- Microsoft Store
- Epic Games(要アカウント、保有しているゲームのみ)
- 通知先
- Discord(ユーザ宛、ロール宛のメンション)
Steam と Microsoft Store は、アカウントがなくても(自身の所有有無に関わらず)監視できます。Epic Games はアカウントが必須で、監視対象にできるのは自身が保有しているゲームのみです。
使い方
詳細は GitHub 上の README に書いたのでそちらを参照してもらえればよいですが、簡単に紹介します。
環境要件とツールの準備
現状、Docker(または Podman)と Docker Compose を前提にしています。実装は Python です。
Game Update Notifier の準備 (1)
Game Update Notifier のリポジトリをクローンするか、リポジトリ内の docker-compose.yml
と sample.env
をダウンロードして、sample.env
を .env
としてコピー(またはリネーム)します。
Discord の準備
通知を投稿したいチャネルの Webhook URL を取得します。
併せて、通知にメンションを含めたい場合は、対象ユーザの ID や 対象ロールの ID を取得します。
メンションは必須ではないのでなくてもよく、また、それぞれ複数指定も可能です。ロールの ID は、上記リンク先に従って Developer Mode を有効化したあと、ロールの一覧画面で右クリックして Copy Id
を選択すれば取得できます。
監視したいゲームの ID の準備
監視したいゲームの ID を、監視したいプラットフォームごとに取得します。プラットフォームごとに手順が異なります。
Steam のゲームの ID
Steam のストアページ で、目的のゲームを開きます。URL に含まれる数字が ID です。例えば、Outer Wilds の URL は https://store.steampowered.com/app/753640/Outer_Wilds/
で、ID は 753640
です。
なお、バンドル版の場合は、バンドルパッケージの ID ではなく、バンドルされている単体版の ID を取得します。例えば、Among Us Starter Pack の ID (16867) ではなく、単体版の Among Us の ID (945360) を取得します。
ID が用意できたら、本ツールに含まれるヘルパスクリプトを使って、ゲームごとのリリースブランチ名を確認します。-i
で調べた ID を与えます。
$ docker-compose run --rm notifier helper/app_finder.py -p steam -i 753640
KEY App Id Name Branch Updated Time
-------------- -------- ----------- -------- --------------
753640:public 753640 Outer Wilds public 1595281461
753640:neowise 753640 Outer Wilds neowise 1603749868
753640:staging 753640 Outer Wilds staging 1594088316
通常は public
ですが、ベータ版を監視したい場合などはそれっぽいヤツを選びます(ブランチ名はゲームによって異なるので、一概にコレとは言いにくいようです)。
監視したいブランチの KEY
列の値を控えておきます。この値は後で利用します。
Epic Games のゲームの ID
Epic Games の監視には、自分のアカウントでログインする必要があります。まずはヘルパスクリプトを使って、認証します。
$ docker-compose run --rm notifier helper/epicgames_auth.py
[cli] INFO: Testing existing login data if present...
Please login via the epic web login!
If web page did not open automatically, please manually open the following URL: https://www.epicgames.com/id/login?redirectUrl=https://www.epicgames.com/id/api/redirect
Please enter the "sid" value from the JSON response: 14b8c***********************8fb5
[cli] INFO: Successfully logged in as "<Your Account>"
実行後、出力される URL にアクセスして自分のアカウントで認証し、表示された sid
をツールの入力欄に戻します。
ログインが成功したら、所有しているゲームの一覧を取得します。
$ docker-compose run --rm notifier helper/app_finder.py -p epicgames
[Core] INFO: Trying to re-use existing login session...
KEY App Id Name Build Version
-------------------------------- -------------------------------- --------------------------- ------------------
963137e4c29d4c79a81323b8fab03a40 963137e4c29d4c79a81323b8fab03a40 Among Us 2021.5.25.2
bcbc03d8812a44c18f41cf7d5f849265 bcbc03d8812a44c18f41cf7d5f849265 Cities: Skylines 1.13.3-f9
Kinglet Kinglet Sid Meier's Civilization VI 1.0.12.564030h_rtm
監視したいゲームの KEY
列の値を控えておきます。この値は後で利用します。
Microsoft Store のゲームの ID
Microsoft Store のストアページ で、目的のゲームを開きます。URL に含まれるランダム文字列が ID です。例えば、Minecraft for Windows 10 の URL は https://www.microsoft.com/en-us/p/minecraft-for-windows-10/9nblggh2jhxj
で、ID は nblggh2jhxj
です。
なお、バンドル版の場合は、バンドルパッケージの ID ではなく、バンドルされている単体版の ID を取得します。例えば、Minecraft for Windows 10 Starter Collection の ID (9n4km90ctzt6) ではなく、単体版の Minecraft for Windows 10 の ID (9nblggh2jhxj) を取得します。
ID が用意できたら、本ツールに含まれるヘルパスクリプトを使って、ゲームごとのプラットフォーム名を確認します。-i
で調べた ID を与えます。
$ docker-compose run --rm notifier helper/app_finder.py -p msstore -m JP -i 9nblggh2jhxj
KEY App Id Market Name Platform Package Name
------------------------------ ------------ -------- ------------------------ ----------------- -------------------------------------------------------
9nblggh2jhxj:Windows.Xbox 9nblggh2jhxj JP Minecraft for Windows 10 Windows.Xbox Microsoft.MinecraftUWP_1.16.22101.70_x86__8wekyb3d8bbwe
9nblggh2jhxj:Windows.Universal 9nblggh2jhxj JP Minecraft for Windows 10 Windows.Universal Microsoft.MinecraftUWP_1.16.22101.0_x86__8wekyb3d8bbwe
9nblggh2jhxj:Windows.Universal 9nblggh2jhxj JP Minecraft for Windows 10 Windows.Universal Microsoft.MinecraftUWP_1.16.22101.0_arm__8wekyb3d8bbwe
9nblggh2jhxj:Windows.Xbox 9nblggh2jhxj JP Minecraft for Windows 10 Windows.Xbox Microsoft.MinecraftUWP_1.16.22101.70_arm__8wekyb3d8bbwe
9nblggh2jhxj:Windows.Universal 9nblggh2jhxj JP Minecraft for Windows 10 Windows.Universal Microsoft.MinecraftUWP_1.16.22101.0_x64__8wekyb3d8bbwe
9nblggh2jhxj:Windows.Xbox 9nblggh2jhxj JP Minecraft for Windows 10 Windows.Xbox Microsoft.MinecraftUWP_1.16.22101.70_x64__8wekyb3d8bbwe
通常は Windows.Desktop
ですが、上記のように Windows.Universal
の場合もあるようです。
監視したいプラットフォームの KEY
列の値を控えておきます。この値は後で利用します。
Game Update Notifier の準備 (2)
前述の準備 (1) で用意した .env
に、値を追記します。代表的なモノだけ抜粋します。
項目 | 説明 |
GAME_UPDATE_NOTIFIER_TAG | リリースページ の最新のタグ(現時点だと 0.0.3 )を指定します |
IGNORE_FIRST_NOTIFICATION | 仕様上、初回起動時は必ず変更として扱われるため、この時の通知を無効化する場合は true 、無効化しない場合は false を指定します。初回起動時に通知のテストを兼ねたい場合は false がおすすめです。 |
CHECK_INTERVAL_SEC | 監視間隔を指定します。デフォルトの 300 秒(5 分)くらいがおすすめです。 |
DISCORD_WEBHOOK_URL | 通知を送る Discord の Webhook の URL を指定します。 |
DISCORD_MENTION_ROLE_IDS | Discord での通知時にメンションするロールの ID を指定します。カンマ区切りで複数指定できます。 |
DISCORD_MENTION_USER_IDS | Discord での通知時にメンションするユーザの ID を指定します。カンマ区切りで複数指定できます。 |
WATCH_STEAM | Steam のゲームを監視する場合は true 、監視しない場合は false を指定します。 |
STEAM_APP_IDS | 前述の手順で調べた Steam のゲームの ID(KEY 列の値)を指定します。カンマ区切りで複数指定できます。 |
WATCH_MSSTORE | Microsoft Store のゲームを監視する場合は true 、監視しない場合は false を指定します。 |
MSSTORE_APP_IDS | 前述の手順で調べた Microsoft Store のゲームの ID(KEY 列の値)を指定します。カンマ区切りで複数指定できます。 |
MSSTORE_MARKET | 情報を取得する Microsoft Store のマーケットを指定します。日本の場合は JP です。 |
WATCH_EPICGAMES | Epic Games のゲームを監視する場合は true 、監視しない場合は false を指定します。 |
EPICGAMES_APP_IDS | 前述の手順で調べた Epic Games のゲームの ID(KEY 列の値)を指定します。カンマ区切りで複数指定できます。 |
Game Update Notifier の起動
Epic Games のゲームを監視する場合は、前述のゲームの ID の準備の手順に従って認証をします(Epic Games のげ監視をしない場合は不要です)。
あとは docker-compose up -d
するだけです。
docker-compose up -d
動き
アップデートが検知されると、Discord に通知が投稿されます。
AmongUsCapture のオフセット更新のため、Among Us のアップデートの監視に使っていますが、便利です。
細かい動作仕様などは GitHub を覗いてください。バグがあれば Issue 起票なども歓迎です。