Game Update Notifier: ゲームのアップデートを監視して Discord で通知する(Steam / Epic Games / Microsoft Store 対応)

概要

あるゲームのアップデートの配信をいちはやく検知したい要件が発生したので、そういうツールを作りました。

現時点で、SteamEpic GamesMicrosoft 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.ymlsample.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_IDSDiscord での通知時にメンションするロールの ID を指定します。カンマ区切りで複数指定できます。
DISCORD_MENTION_USER_IDSDiscord での通知時にメンションするユーザの ID を指定します。カンマ区切りで複数指定できます。
WATCH_STEAMSteam のゲームを監視する場合は true、監視しない場合は false を指定します。
STEAM_APP_IDS前述の手順で調べた Steam のゲームの ID(KEY 列の値)を指定します。カンマ区切りで複数指定できます。
WATCH_MSSTOREMicrosoft Store のゲームを監視する場合は true、監視しない場合は false を指定します。
MSSTORE_APP_IDS前述の手順で調べた Microsoft Store のゲームの ID(KEY 列の値)を指定します。カンマ区切りで複数指定できます。
MSSTORE_MARKET情報を取得する Microsoft Store のマーケットを指定します。日本の場合は JP です。
WATCH_EPICGAMESEpic 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 起票なども歓迎です。

@kurokobo

くろいです。ギターアンサンブルやら音響やらがフィールドの IT やさんなアルトギター弾き。たまこう 48 期ぎたさん、SFC '07 おんぞう、新日本ギターアンサンブル、Rubinetto。今は野良気味。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です