在Minecraft中发布YouTube的评论

这篇文章是2023年Minecraft命令日历的第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:

 

目前,我们已确认到YouTube评论的更新有所延迟,或者之前的评论会被重复发送的BUG存在。

在最后期限前进行修正时出现了恶化。

请在项目内创建一个 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中的操作。

Minecraftのスクリーンショット

获取和嵌入YouTube评论

然后,我们将实时获取YouTube直播聊天中的评论。
可以从YouTube的URL中获取视频ID。

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チャットをMinecraftに流し込む様子
image.png

通过这种方法,YouTube聊天消息将以大约5~10秒的延迟被发送到Minecraft。

如果您想实时获取,请使用LiveChatAsync等异步处理进行获取。
(可以在浏览器上的评论反映之前获取。)

表情符号处理

只需要一个选项:Emoji的文本格式显示为: EmojiName:。

 

在手机或电脑上使用表情符号转换是推荐的。

如果想要仅判断除了文本消息以外的超级聊天,可以使用c.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}")

只要使用Super Chat,就可以实现特殊的演出效果。

请参考Minecraft的EULA以了解有关Super Chat的处理方式。
禁止进行Pay2Win行为。

使用示例

通过这种合作,观众可以实时参与的观众参与型Minecraft 成为了可能。

 

我认为这可以应用在各种场合,比如智力竞赛上或直接使用观众的评论。

 

它运行于以上介绍的库所构建的软件及数据包的组合之上。

软件(YouTube连接)

 

这些是通过结合上述介绍的库使用的软件和数据包。

最后

主要介绍了图书馆和自制软件,但也能与其他平台进行协作,而无需使用Mod。

下次我们将介绍与ChatGPT的合作事项。
如果你喜欢的话,请务必点赞和分享。

那我们下次见面吧。

下一次

 

广告
将在 10 秒后关闭
bannerAds