Minecraft Bedrock Server(統合版サーバー)のアップデートを自動検知してDiscordで自分に通知する

Minecraft Bedrock Server(統合版サーバー)は、Java版と違ってバージョンを選べず、定期的に最新バージョンに更新する必要があります。ただ、サーバーからアップデートしろと通知が来るわけでもなく、毎日遊ぶわけでもないホストからすると気付かず数週間が経過、その間他の人がバージョン違いで遊べない…と面倒なことになっていたので、コードを書かせる分には最強と名高いChatGPTの支援を得ながらDiscordで自動通知するようシステムを組んでみました。(ChatGPTは初期から使ってるけど久しぶりに使ったら超有能になっててびっくりした)

環境情報

  • Minecraft Bedrock Edition
  • macOS Sequoia 15.4
  • Homebrew導入済み
  • Discord 0.0.343(macOS版)

前提

  • Discordアカウントを持っている
    • Discordサーバーに所属、または自分でDiscordサーバーを作成している
    • ↑のサーバー内に自分が好き勝手できるチャンネルがある(Webhookの使用権限もある)
    • PCにDiscordアプリが入っている
  • macOS, Linuxなどターミナルが使える環境である

注意点

今回はDiscordのWebhookを使って通知を実現しますが、以下の画像のように通知は投稿で行われます。

設定するチャンネルや、アップデートをチェックする時刻などを考えないと、サーバーのメンバーに迷惑がかかる恐れがあるので、通知設定を行うチャンネルや自動チェックのタイミングはよく考えて下さい。

アップデート通知を自分しか見ない・自分しか必要としないのであれば、自分で1人サーバーを作ってそこに設定する手もあります。

また、作成したWebhook URLは自分以外に絶対に漏れないようにしましょう。漏れるとWebhookがスパムと化します。

最後に、ウェブフックの作成は監査ログに記録される行為です。謎の後ろめたさがある方は、サーバー管理者宛だったりWebhookを設定するチャンネル内で一言言っておくと良いかもしれません。

手順

プロジェクトフォルダの作成

cd
mkdir bedrock-check
cd bedrock-check

仮想環境作成(python)

Homebrew突っ込んでるとpipが使えないので、仮想環境でプログラムを動かします。

python3 -m venv venv
source venv/bin/activate

source venv/bin/activateを実行すると以後は仮想環境内での作業となります。

# [仮想環境内]

# モジュールがあるかどうか確認
pip show requests beautifulsoup4 lxml 

# 無いモジュールがあったら以下のコマンドでインストール
pip install requests
pip install beautifulsoup4
pip install lxml

# 仮想環境を抜ける
deactivate

DiscordでWebhook URL取得

Webhook URLはデスクトップ版またはウェブ版Discordでしか作成できないので、モバイル版では作業できません。

  1. Discordアプリを開き、サーバー内の通知したいチャンネルを右クリックして「チャンネルの編集」を開く
  2. 連携サービスを開き、「ウェブフック」内の「ウェブフックを作成」をクリック
  3. Webhookの「お名前」は好きに付ける
  4. 「ウェブフックURL」をクリックすることでWebhook URLがクリップボードにコピーされる

pythonスクリプト作成

cd
cd bedrock-check
nano check_bedrock_update.py

内容は以下の通り。7行目のWEBHOOK_URL = "~~部分だけ先ほど取得したWebhook URLに置き換えれば良いです。あと気になる方はヘッダーのUserAgentを最新のものに更新しておくと良いかもしれません。

import requests
from bs4 import BeautifulSoup
import os

BEDROCK_URL = "https://www.minecraft.net/en-us/download/server/bedrock"
VERSION_FILE = "last_bedrock_version.txt"
WEBHOOK_URL = "https://discord.com/api/webhooks/~~~~~~" # ここに取得したWebhookのURLを入れる

# ヘッダー追加(bot対策)
headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
    ,"Accept-Encoding": "identity"
    ,"Accept-Language": "en"
}

# ページ取得(エラーハンドリング付き)
try:
    response = requests.get(BEDROCK_URL, headers=headers, timeout=10)
    response.raise_for_status()
except requests.exceptions.RequestException as e:
    print(f"接続エラー: {e}")
    exit(1)

# HTML解析
soup = BeautifulSoup(response.text, 'html.parser')

# Linux用のZIPリンクを探す
download_link = soup.find("a", href=lambda href: href and "bin-linux/bedrock-server" in href and href.endswith(".zip"))
if not download_link:
    print("Linux版Bedrock Serverのダウンロードリンクが見つかりませんでした。")
    exit(1)

# ファイル名と絶対URLを取得
raw_href = download_link["href"]
if raw_href.startswith("http"):
    download_url = raw_href
else:
    download_url = "https://www.minecraft.net" + raw_href
filename = os.path.basename(download_link["href"])

# バージョン比較
last_version = None
if os.path.exists(VERSION_FILE):
    with open(VERSION_FILE, "r") as f:
        last_version = f.read().strip()

if filename != last_version:
    print("新しいBedrock Serverが見つかりました!")

    # Discord通知
    message = {
        "content": f"**新しい Bedrock Server がリリースされました!**\nファイル名: `{filename}`\nURL: {download_url}"
    }
    try:
        requests.post(WEBHOOK_URL, json=message)
    except Exception as e:
        print(f"Discord通知エラー: {e}")

    # バージョンファイル更新
    with open(VERSION_FILE, "w") as f:
        f.write(filename)
else:
    print("Bedrock Server に更新はありません。")

内容をペーストしたらControl+X -> Y -> returnで保存します。

シェルスクリプト作成

引き続きCronの登録のためにシェルスクリプトを作成します。作業ディレクトリはそのまま~/bedrock-checkです。

nano run_check.sh

内容は以下の通り。

#!/bin/bash

# カレントディレクトリ変更
cd ~/bedrock-check

# 仮想環境を有効化
source ~/bedrock-check/venv/bin/activate

# スクリプトを実行
python ~/bedrock-check/check_bedrock_update.py

保存したら実行権限を付与します。

chmod run_check.sh

テスト

Cronに登録する前に一回実行してみます。

./run_check.sh

上のように現在のバージョンとURLが正しく表示されれば成功です。エラーが出たり正しく表示されなかったりした場合はPythonスクリプトを修正して下さい。

また、もう一度実行すると、更新を確認したが更新がなかった際の挙動を確認することができます。更新がなかった場合はWebhookでの通知は行われません。

強制的にWebhookで通知させる方法

コードを修正したりして更新の有無に関わらず強制的にWebhookを動作させたい場合は、~/bedrock-check/last_bedrock_version.txtを削除してからシェルスクリプトを実行して下さい。

Cronに登録して自動チェック

crontab -e

毎日20時実行の場合、一番最後の部分に以下を追記します。

0 20 * * * /bin/bash ~/bedrock-check/run_check.sh >> ~/bedrock-check/cron.log 2>&1

あとは保存すれば、自動で実行されるようになります。

コメントを残す

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

CAPTCHA


This site uses Akismet to reduce spam. Learn how your comment data is processed.

Proudly powered by WordPress | テーマ: Baskerville 2 by Anders Noren

ページ先頭へ ↑