この記事はMinecraft Command Advent Calendar 2023の10日目の2シリーズ記事です。
- 10日目 1シリーズ記事: Minecraftバニラサーバでも外部アプリから操作する
- 10日目 2シリーズ記事: YoutubeのコメントをMinecraftに送信する
- 10日目 3シリーズ記事: バニラのMinecraftでChatGPTに質問したりてコマンド実行する
はじめに
シーズン1では、外部アプリケーションからMinecraftへのコマンド送信について紹介しました。
今回は、外部サイトの情報をMinecraftに送信する方法に焦点を当てます。
準備
この記事では、YouTubeのライブ放送コメントをMinecraftに送信する方法を紹介します。
使用する言語はPython 3.8から3.11です。
使用するライブラリ:
- mcrcon:
- pytchat:
(〆切り直前の手直しでデグレした)
requirements.txt
をプロジェクト内に作成し、以下を記載します。
mcrcon==0.7.0
pytchat@git+https://github.com/waxsd100/pytchat.git@v0.6.2#egg=pytchat
その後、pip install -r requirements.txt
でライブラリをインストールします。
PythonからRcon接続
from mcrcon import MCRcon
# サーバーのアドレス、パスワード、ポート番号を定義
server_address = "127.0.0.1"
server_pass = "my_password"
server_port = 25575
# メイン関数を定義
if __name__ == '__main__':
# with文を使用してリソースの自動解放を保証
with MCRcon(server_address, server_pass, server_port) as rcon:
# サーバーにコマンドを送信し、ログを取得
rcon.command("say HELLO WORLD MINECRAFT WORLD")
プログラムを実行して、Minecraft内での動作を確認します。
YouTubeコメントの取得と流し込み
次に、YouTubeのライブ放送チャットからコメントをリアルタイムで取得します。
ビデオIDはYouTubeのURLから取得できます。
from mcrcon import MCRcon
import pytchat
server_address = "127.0.0.1"
server_pass = "my_password"
server_port = 25575
video_id = "########" # YouTubeのビデオID
if __name__ == '__main__':
with MCRcon(server_address, server_pass, server_port) as rcon:
try:
chat = pytchat.create(video_id=video_id) # YouTubeのライブチャットを取得
print(f"Start: https://www.youtube.com/watch?v={video_id}")
while chat.is_alive(): # ライブチャットがアクティブな間
for c in chat.get().sync_items(): # チャットの各メッセージに対して
rcon.command(f"say {c.message}") # Minecraftサーバーにメッセージを送信
except pytchat.ChatDataFinished:
print("Chat data finished.") # チャットデータが終了した場合
except Exception as ex:
print(ex) # その他の例外が発生した場合
finally:
# 終了処理
chat.terminate()
この方法で、YouTubeチャットのメッセージを約5~10秒の遅延でMinecraftに送信されます。
リアルタイムで取得したい場合はLiveChatAsync
などの非同期処理で取得してください。
(何故かブラウザにコメント反映されるより前に取得できる。)
絵文字処理
Emojiのテキストフォーマットは:EmojiName:
で表示されるので、
などで絵文字変換するのがおすすめです。
テキストメッセージ以外にスーパーチャットだけ取りたいなどを判定したい場合は
c.typeでType判定できます。
match c.type:
case "superChat":
# スーパチャット受信時の処理
print(f"{c.type} [{c.author.name}]- {c.message}")
case "textMessage":
# 通常のテキストメッセージ受信時の処理
print(f"{c.type} [{c.author.name}]- {c.message}")
case "superSticker":
# スーパースティッカー受信時の処理
print(f"{c.type} [{c.author.name}]- {c.message}")
case "newSponsor":
# チャンネルメンバーシップ新規登録受信の処理
print(f"{c.type} [{c.author.name}]- {c.message}")
case "giftRedemption":
# メンバーシップギフト送信時の処理
print(f"{c.type} [{c.author.name}]- {c.message}")
case "giftPurchase":
# メンバーシップギフト受信時の処理
print(f"{c.type} [{c.author.name}]- {c.message}")
これによりスーパーチャットされたら特殊な演出するなどができます。
スーパーチャットでの処理はMinecraftのEULAを確認してから実装してください。
Pay2Winになる行為は禁止されています。
使用例
この連携により、視聴者がリアルタイムで参加できる視聴者参加型のMinecraftが可能になります
クイズ大会などや視聴者コメントをそのまま乗せたりと。。。
様々な使いところがあるかと思います。
どちらも上記で紹介したライブラリを元にしたソフトとデータパックの組み合わせで動いています。
ソフト(YoutubeConnect)
これらは、上記で紹介したライブラリを使用したソフトとデータパックを組み合わせています。
さいごに
主にライブラリと自作ソフトの紹介となりましたが、Modを使用せずに他のプラットフォームと連携できました。
次回はChatGPTとの連携について紹介します。
面白かったらぜひいいねやシェアをお願いします。
それでは、次回お会いしましょう。
次回: