3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

itohalAdvent Calendar 2022

Day 25

discord botでminecraft serverを操作する【総集編】

Posted at

初めに

この記事は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によるコマンドは様々なものが作れます.例えばボタンを作ったり,メッセージを右クリックしてコマンドを実行させたりすることができます.色々と記事を投稿しましたので,必要そうなやつがあれば参考になればいいなと思います.

以上となります.アドベントカレンダー自体も見ていただけると嬉しいです.
お疲れ様でした.

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?