【WEB&Discord】ゲームサーバー管理ツール 任意コマンド追加機能搭載してみた

こんにちはRcatです。今回は最近バルワールドで盛り上がっている下記記事の追加機能のお話です。
下記のツールは簡単に言うと、Linuxを使って建てるゲームサーバーをWebサーバーの機能として組み込み、特定のURLにアクセスすることで、起動や停止が行えるシステムです。
そして、このURLにアクセスするDiscordのbotと連携することで、Discordから誰でも起動や停止ができるというのがうりです。

そして今回は、起動や停止の基本的なコマンド以外に、各タイトルごとのユニークなコマンドを自分で定義できる機能を追加したので、そちらの説明になります。


どんな機能なの?

冒頭で簡単に説明しましたが、本ツールは登録されたコマンド以外使用できないのが現状でした。
本記事に作成時点で固定されているコマンドは以下の通りです。

本ツールは汎用性を重視して作られているため、各タイトルごとに異なる動作をするような機能の実装は行われていませんでした。
しかし、パルワールドをきっかけに本ツールを使っていただける方が増えてきており、1つの要望としてプレイヤーリストの取得をしたいというのがありました。
タイトルによりプレイヤーリストを取得するコマンドなどは存在しますが、どんなゲームでも全く同じ方法で取得できるわけではありません
そこで、タイトルごとに個別の定義を作成することで、タイトル別に自由なコマンドを定義することができる機能を追加しました

例えば、今回作成したパルワールドでのプレイヤーリスト取得コマンドを使用をした例です。
このようにデフォルトでは対応していない新しいコマンドを定義することができるようになりました。

こちらのコマンド定義ファイルは以下から配布しています。

具体的なやり方

ここから先は下記の記事を読んで使用方法を理解している、またはすでに使用されている方向けの内容となります。

サーバー定義フォルダにユニークコマンドスクリプト作成する

オリジナルコマンドを登録するにはサーバー定義フォルダ内に"unique.py"というファイルを作成する必要があります。
このファイルの中で新しいコマンドを作っていくわけです。
uniqueで参照する他のデータがある場合、それらも一緒に入れてください。

オリジナルコマンドを作成する

先ほど作成したスクリプト内にコマンドとなる関数を定義します。
例えば、最初に紹介したプレイヤー一覧を表示する関数は以下の通りです。
バルワールドではRCONを使ってプレイヤー一覧を取得することができますので、一覧を取得した後プレイヤー名を切り出しています。

コマンド定義関数を作成する

ポイントとしては、この関数は文字列型の引き数を受け取り、最後に決まった辞書型を返すという決まりがあります。
なお、引数についてはない場合もあると思いますので、受け取るだけ受け取って内部で使用しなくても大丈夫です。
結果の返却には必ずこれから説明する形式の辞書を使ってください。これはサーバーのプログラムの方でこの形式の辞書を受け取る前提で作っているからです。辞書の形式は以下の通りです。

{"status": True/False,"text":"任意の結果"}

まず最初に"status"はこの関数が正常に動作したのがどうかを返すステータスです。真偽型で読めるような形で返してください。
次に"text"です。Discordのボットがここに入力されているテキストをそのままチャットに投稿します。そのため、このコマンドの中で形式を整えるまで処理を行ってください。

コマンドを認識できるようにする

上記の関数を作っただけでは、コマンドとしては認識されません
認識するために、後半部分のコマンドと関数の紐付けを行う必要があります。

まず上の"COMMANDS"は辞書型でコマンド名とその際に実行される関数を紐付けます。Pythonの構文上、この紐付けよりも上で関数を定義するようにしてください。
次に"CMDHELPS"です。
こちらも辞書型でコマンド名とそれのヘルプを入力します。
コマンドを追加したのは、いいが何を追加したのか忘れてしまったり、使い方がわからない場合のヘルプです。

ここまででオリジナルコマンドの追加は完了です。

追加したコマンドの使い方

正常に認識されたか、まずはヘルプを確認してみましょう。
ヘルプを確認するコマンドはuniqueです。新しいコマンドが追加されました。

このコマンドをサーバー名を引数に実行してみるとヘルプが表示されます。

そして、冒頭で行ったように、ユニークコマンドの後ろにサーバー名をつけて実行することで追加コマンドの実行ができます。
これでオリジナルコマンドの追加は完了です

配布情報

下記より配布しています

まとめ

今回は汎用性を維持しつつも、タイトルごとにより詳細な操作を行える機能を追加しました。
Rcatが使っていればその定義は配布内容に含まれますが、基本的にコマンド定義はご自身で作成頂くのが基本となります。あらかじめご了承ください。
なお、Discordのサーバーにてサーバー管理ツール専用のフォーラムを用意しておりますので、ご自身で作成した定義を共有したり、他の方が作った定義を使用してみたりするのもいいかもしれません。
参加は下記から行うことができます。是非ご検討ください。


情報が役に立ったと思えば、僅かでも投げ銭していただけるとありがたいです。