Minecraftのハードコアサーバーは、ワールドを作り直す場面がどうしても多くなります。
しかし、サーバーの作成やリセットのたびに管理者がVMへログインして操作するのは、手間も時間もかかります。そこで、Discordから必要な操作を行える「Discord Hardcore Admin BOT」を作りました。
参加者が普段使っているDiscord上で、ハードコアサーバーの作成、状態確認、ワールドリセット、削除まで完結できるBOTです。
このBOTでできること
主な機能は次のとおりです。
- ハードコアMinecraftサーバーの作成
- サーバーの起動状態・接続先の確認
- ワールドのリセット
- 不要になったサーバーの削除
- 一定期間使われていないサーバーの自動削除
- リセット前ワールドのバックアップ
- 管理者向けの複数サーバー管理
Discordのスラッシュコマンドを使うため、複雑な操作を覚える必要はありません。
サーバーを作成する
サーバーを作るときは、Discordで以下のコマンドを実行します。
/create
最初にMinecraftのEULA(エンドユーザーライセンス契約)への同意を確認し、その後、近接ボイスチャットを使うかどうかを選択できます。
近接ボイスチャットを有効にした場合は、対応するPaperバージョンを選び、Simple Voice Chatを導入した状態でサーバーを作成します。使わない場合は、プラグインなしのPaperサーバーとして作成されます。
通常ユーザーは1人1台まで作成できます。管理者はサーバー名を指定することで、複数のサーバーを管理できます。
サーバーの状態を確認する
現在の状態は、以下のコマンドで確認できます。
/status
ここでは、サーバーが起動中か停止中か、接続先、Minecraftのバージョン、自動削除予定日などを確認できます。
接続先は、内部ポート番号ではなく専用のホスト名で表示されるため、利用者はそのままMinecraftから参加できます。
ワールドをリセットする
ハードコアサーバーでは、「全滅したから最初からやり直したい」「新しい企画を始めたい」といった理由で、ワールドをリセットしたくなることがあります。
自分のサーバーをリセットする場合は、以下を使います。
/reset
確認画面で「はい」を選択すると、対象サーバーのワールドがリセットされます。リセット前のワールドはバックアップとして退避されるため、万が一の場合にも備えられます。
リセットコードを共有して、ほかの人に対応を任せられる
このBOTの特徴のひとつが、リセットコードによる対応代行です。
/statusでは、各サーバーのリセットコードを確認できます。このコードを信頼できる運営メンバーやフレンドに共有すれば、サーバー所有者本人が操作できないときでも、その人がリセットを実行できます。
共有された側は、以下のようにコードを指定します。
/reset code:リセットコード
たとえば、急にサーバーのリセットが必要になったときでも、所有者がログインするまで待つ必要はありません。Discord上でコードを共有するだけで、対応を引き継げます。
ただし、コードを知っている人はリセットを実行できるため、共有先は信頼できる相手に限定してください。
使われなくなったサーバーを自動で整理
サーバーを作ったまま放置されると、VMのリソースや管理枠を消費してしまいます。
このBOTでは、最後のリセットから一定期間が経過したサーバーを自動で削除できます。期限は運用に合わせて設定可能です。
不要になったサーバーは、手動でも以下のコマンドから削除できます。
/delete
削除時には確認画面が表示されるため、誤操作を減らせます。
管理者の作業を減らし、遊ぶことに集中できる環境へ
このBOTを作った目的は、Minecraftサーバーの運用作業をできるだけDiscordへ集約することです。
サーバー作成、確認、リセット、削除といった定型作業をBOTに任せることで、管理者が毎回サーバーへ接続してコマンドを実行する必要がなくなります。
ハードコアという遊び方に合わせて、「リセットしやすいこと」「必要ならほかの人に対応を任せられること」「放置サーバーを整理できること」を重視しました。
これからも、実際の運用で使いやすいMinecraft・Discord連携の仕組みを整えていきます。
ソースコード
このBOTのソースコードはGitHubで公開しています。
Discord Hardcore Admin BOT(GitHub)
導入方法や設定方法、利用できるコマンドの詳細は、GitHubリポジトリ内のREADMEをご確認ください。
※ここまでの記事はcodexにより生成しました。
実際に使用してみる
/create

/reset

/status

/delete
