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

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

概要

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

現時点で、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 起票なども歓迎です。

Reactions and comments

Built with Hugo
Theme Stack designed by Jimmy