在Discord的文本聊天中,向Minecraft服务器插入管理员命令
将管理命令插入屏幕上正在运行的程序中
想要做的事情
-
- マイクラプレイヤーの方であれば、「一緒に遊んでいた人が寝落ちてしまって、ゲーム内で夜を明かせない」というとき、その人をマルチサーバから一時退出させたいといった場面が稀によくあるかと思います。
-
- マイクラはサーバコンソールから直接コマンドを入力すれば、operator権限の処理を実行できます。
或いは、サーバコンソールから、 op HOGE とすればユーザHOGEにop権限を付与し、HOGEがゲーム内チャットでop権限の処理を実行することも可能です。
op権限を持つとkickコマンドが扱えるようになります。
しかし、大人数がアクセスするワールドで参加者全員にop権限を与えるのは無謀の極み…。
そこで、特定のopコマンドのみを別インタフェースから誰でも実行できるような手段を用意したい
正在使用的Minecraft服务器的情况
-
- 1つのサーバで4つのワールドを同時に建てています。
-
- それぞれのワールドをscreen内で実行し、別々のポートを開放して割り当てることで容易に並列動作が可能です。(そこそこサーバスペックが必要ですが)
-
- 僕が建てているサーバで遊んでいる人は例外なく、 とあるDiscordサーバにも参加している
- ということで…
唯一需要一种选择的中文改述如下:
ソリューション
-
- Discord botにお願いしよう!(Discord botについてはこちら)
以下のようなshellscriptの実行で、screenに文字列を差し込めます。
(今回は”minecraft”という名前でscreenを起動)
screen -S minecraft -X stuff "kick $1\n"
- discord botに追加するメソッドがこちら。
# send kick signal to Minecraft
# メソッドへの入力(text) = discordチャンネルからのテキストメッセージ
def send_signal_to_minecraft(text):
response_string = ''
if text.find("minecraft kick") > -1:
index_st = text.find('kick ') + 5
#index_ed = text.find('')
user_name = text[index_st:]
response_string = "了解いたしました。"+ user_name + "さんをキックします。"
try:
subprocess.call(["sh", "minecraft_scripts/kick.sh", user_name])
except Exception as e:
response_string = '構文エラーです>< :cold_sweat:\n' + e.message + '\n' + str(e)
else:
response_string = "構文エラーです>< :cold_sweat:\n 正しく入力してね!"
return response_string
用法
-
- Discordのチャットチャンネルで雲さん minecraft kick マイクラID名と入力すると、botがマイクラの管理コンソールから指定ユーザをキックしてくれます!
-
- 今回はキック機能のみ実装しましたが、管理コンソールから実行できるコマンドであればどんな内容でもbot経由で実行することができます。
- 勢いでダダダっと書いてしまいましたが、皆さんの快適マイクラライフの参考になれば幸いです?