Minecraftの入退室をWebhookで通知する
概要
ゲームサーバーのログをポーリングして入退室等々の通知を行います。 追加インストール不要(OS同梱のもの)で設定します。
環境
- Ubuntu 14.x or later
- ディストリビューションによっては
curl
が同梱されていない場合があるようなのでsudo apt install -y curl
でインストールしましょう。
- ディストリビューションによっては
設定手順
sudo su -
等々で root
に昇格した上で、下記コマンドをコピー&ペーストで実行します。
cat << 'EOF' > /opt/minecraft/notify_log.sh #!/bin/bash HOST_NAME=$(hostname) CHANNEL=#minecraft-notice USERNAME=Minecraft ICON_EMOJI=:minecraft: # NOTE: DiscordはWebhook URL末尾に /slack とつけるとSlack互換のpayloadを扱えます # See: https://discordapp.com/developers/docs/resources/webhook#execute-slackcompatible-webhook WEBHOOK_URL=https://hooks.slack.com/services/****/****/******** post_webhook() { while read i do echo $i | grep -iq -e "joined the game" -e "left the game" if [ $? = "0" ];then echo $i curl -X POST --data-urlencode "payload=\ {\ \"channel\": \"$CHANNEL\", \ \"username\": \"$USERNAME\", \ \"icon_emoji\": \"$ICON_EMOJI\", \ \"text\": \"[HOST_NAME: $HOST_NAME]$i\" \ }" \ $WEBHOOK_URL fi done } tail -n 0 -F $1 | post_webhook EOF chmod +x /opt/minecraft/notify_log.sh chown ubuntu /opt/minecraft/notify_log.sh
cat << EOF > /etc/systemd/system/minecraft_notifier.service # /etc/systemd/system/minecraft_notifier.service [Unit] Description=Server daemon for Minecraft notifier [Service] Type=forking User=ubuntu KillMode=none Restart=on-failure ExecStart=/usr/bin/screen -dmS minecraft_notifier /bin/bash -c "/opt/minecraft/notify_log.sh /opt/minecraft/logs/latest.log" ExecStop=/usr/bin/screen -S minecraft_notifier -X quit [Install] WantedBy=multi-user.target EOF systemctl enable minecraft_notifier systemctl start minecraft_notifier
ポイント
HOST_NAME
HOST_NAME=$(hostname)
の部分は、愛称やドメイン・アドレス等々を直書きしても良いと思います。特に複数サーバーの運用をしている方などは。
HOST_NAME=example.com
といった感じに。
WEBHOOK_URL
スクリプト中にもコメントを挿しましたが、なんと Discord は Slack の Incoming Webhook に互換があります!
Discord に通知したい場合は Webhook URL の末尾に /slack
を付加すると Slack 互換になります。(イケてますよね、さすが Discord)
なお、本スクリプトでは payload
で送っているので channel
icon_emoji
等は指定しても Discord では効きません。
echo $i | grep -iq -e "joined the game" -e "left the game"
ここで joined / left のログを検知して通知処理に飛ばしています。 サーバーの警告等も合わせて通知したい場合は、ここで追加で grep すると良いと思います。
操作方法
状態確認
sudo systemctl status minecraft_notifier
停止
sudo systemctl stop minecraft_notifier
起動/再起動
sudo systemctl start minecraft_notifier
sudo systemctl restart minecraft_notifier
自動起動設定(OS起動時に自動で起動させる/させない)
sudo systemctl enable minecraft_notifier
sudo systemctl disable minecraft_notifier
ご一緒にサーバーはいかがでしょうか←
「ご一緒にポテトは」的な()
さくらインターネット からも Minecraftサーバ の スタートアップスクリプト が出ましたね。 vps-news.sakura.ad.jp
私は早速移行し、ここで個人のサーバーを運用しています。
さくらから提供されているスクリプトで鯖立てしつつ、↑で紹介したような通知設定を行っています。快適です。
同様に screen + systemd でスッキリ収まっていて良い感じです。
おまけ
Minecraft とタイトルに入れましたが、ポーリングするログファイルと grep パターン、通知テキストを少し修正すれば、他のゲームやツール等々でも普通に使えますよね。 直近でいうと Factorio でも使えそうですね。はい。
以上、良いゲームライフを :wave: