初めに
この記事はdiscord botからminecraft serverを動かすことが目標のアドベントカレンダー最終日です.
必要な環境は
- Python 3.8以降
- discord.py 2以上
- java 17以上
です.私の環境は
- WSL, Ubuntu22.04.1
- Python 3.10.6
- discord.py 2.1.0
となっています.
discord botを作成する
まず,botを作成するためにアカウントを取得します.
こちらの記事で説明しています.discord developer portalにてアカウントを作成しましょう.このとき,トークンをコピーしておいてください.
トークンを環境変数に設定
先程コピーしたトークンを環境変数に設定しておきましょう..env
ファイルに環境変数を設定して,dotenv
で読み込みましょう.こちらの方法はこの記事の中で説明しています.dotenv
を使わない方法はこちらの記事で説明しています.
discord.pyでプログラムを作る.
この記事の中で,discord.pyのインストールの方法と,最低限のプログラムを載せています.
minecraft serverを起動,停止させる
ここからアプリケーションコマンドを登録し,minecraft serverを起動,停止させます.それはこちらの記事で説明しています.コマンドの登録自体はこちらの記事で,それをオブジェクト指向っぽくクラス分けして保守しやすくしたい場合の方法はこっちの記事で説明しています.
また,minecraft serverはpythonのsubprocessで実行しています.これの説明をここの記事でしています.
ちなみにserver自体は複数立てることはできません,そのため複数回実行させないように制限した方が良いと思います.これにはデザインパターンのsingletonというものが有効だと思います.これについては,ここの記事で説明していますが,コメントの方が有用かもしれないです.
minecraftのコマンドをbotから入力する
minecraftではゲーム難易度の変更や時間変更,テレポートなどのコマンドを実行できます.それをbotで操作させることができます.これはここの記事で説明しています.ただ,誰でもコマンドが実行されてしまうと困るので,minecraft serverの権限をコマンド実行権限に対応させます.これはここの記事で説明しています.
また,他の制限については以下のことを説明しました.
discord botを常駐させる
minecraft serverを起動するためにbotを起動させるという状況は意味がないので,botを常駐させていつでも起動できるようにします.これは,準備編の記事と後編の記事に分かれていますが,この2つの記事で説明しています.
基本的なdiscord botでminecraft serverを操作するプログラムは以上で完成です.
柔軟にコマンドを作る
botによるコマンドは様々なものが作れます.例えばボタンを作ったり,メッセージを右クリックしてコマンドを実行させたりすることができます.色々と記事を投稿しましたので,必要そうなやつがあれば参考になればいいなと思います.
- discord pyのcontext menuとbutton
- discord botでドロップダウンメニューを作る
- discord.pyのTextInput
- discord botで定期的に処理をさせるためのLoop
- discord botにminecraftの座標を登録してtpコマンドを作ってもらう
- discord botでメッセージを転送する
- discord.pyのslash commandでhelp表示
以上となります.アドベントカレンダー自体も見ていただけると嬉しいです.
お疲れ様でした.