概要
閲覧ありがとうございます!
DiscordからPalworld鯖を操作するアプリは見かけたのですが、チャットを連携させるアプリを作っている人はいなかったので今回作ってみました。
(マインクラフトとかだとよく使われているイメージ)
仕組み
Palworld自体にはもともとシステムログを保存する機能がありません。
そのため、journaldを叩いて最新のログを書き出しログファイルを生成→内容をフィルタリングしてDiscordへ送信 という流れで処理しています。
DiscordからのメッセージはRestAPIでワールドへ転送しています。
準備
1. 専用サーバの構築とSystemdへの登録
大前提として、Palworldのサーバをデーモン化する必要があります。
こちらの記事を元に専用サーバを構築すると、後で設定が楽になります。
2. ログの出力先設定と権限付与
ログの保存先設定
journaldのログはデフォルトでは揮発性領域へ保存するため、リブートすると破棄されます。
/var/log/journal
にディレクトリを作成することで、自動的に保存先が変更されます。
mkdir -p /var/log/journal
journaldに関する詳しい記事
journaldの詳しい説明
権限付与
このままだとアプリケーション側からログファイルへアクセスできないのでアクセス権限を設定します。
また、journalctlを実行するためにユーザへjournalの実行権限を与えます。
仮想環境だとsudo pythonができないための処置です。
もし仮想環境を使わないのであれば、以下の設定は必要ありません。
# 権限付与
sudo chmod 777 /var/log/<palworld service name>.log
# ユーザへjournalctlの許可
sudo usermod -aG systemd-journal <username>
3. RestAPIの許可
Steam/palworld/Pal/Saved/Config/LinuxServer
にある PalWorldSettings.ini
からRestAPIを許可することでAPIを叩く事ができるようになります。
RESTAPIEnabled=True
にしてください。
4. Pal2Discord のインストール
こちらからダウンロードしてください。
環境に合わせてrequirementsを使ってください。
pip install -r requirements.txt
5. Settings.iniの設定
次にSettings.ini
の設定を行ってください。
未入力があるとエラーになります。
[default]
; discord botのtoken
token =
; palworldと交信する専用チャンネルのID
channel_id =
; logファイルのディレクトリ
logs_path = /var/log/
; palworldサーバのサービス名
service_name = palworld-dedicated
[restapi]
restapi_port = 8212
restapi_user = admin
restapi_passwd = ; adminpasswd
6. 実行
python run.py
機能
設定したチャンネルでチャットができる以外に以下の機能が使えます。
鯖の起動に関する機能は追加しなかったのですが、時間があったらパーミッション設定の追加とともに鯖の再起動などもできるようにしようと考えています。
コマンド一覧:
!list ログインプレイヤー一覧
!info サーバ情報
!metrics サーバ状態
!settings サーバ設定
!phelp ヘルプ
おわりに
意外と外でゲーム内の人とやりとりできるのって便利なんですよね。
〇時からレイドいこーとか、昨日○○集めておいたよーとか。
少しでもパルワールドが盛り上がる一因になったら嬉しいなと思っています。
閲覧ありがとうございました!