MCMotd-MultiConnect 是一个为 Nonebot2 设计的功能强大的 Minecraft 服务器状态查询插件。它不仅可以查询单个 Minecraft 服务器(Java 版和基岩版)的状态,还独创性地支持多节点分布式查询。
通过其内置的 WebSocket 服务器和客户端,您可以将多个运行在不同网络环境下的机器人实例连接起来,实现从多个地理位置同时查询同一个服务器,并将结果聚合展示。这对于网络复杂的服务器或者需要多线路测试的场景非常有用。
- 多版本支持: 同时支持 Minecraft Java 版和基岩版(Bedrock/PE)服务器。
- 分布式查询: 支持设置一个主干节点(Server)和多个子节点(Client),实现多点同时查询和结果聚合。
- 详细信息展示: 显示服务器 MOTD、版本、在线玩家数、延迟、图标等丰富信息。
- 高度可配置: 所有功能均可通过
.env文件进行灵活配置,轻松启用或禁用不同模式。 - 管理命令: 内置命令,方便查询已连接的客户端列表和插件运行状态。
运行机器人:
uv run nb run-
/motd <服务器地址> 查询指定地址的 Java 版服务器状态。
- 示例:
/motd mc.hypixel.net
- 示例:
-
/motdpe <服务器地址> 查询指定地址的基岩版(Bedrock/PE)服务器状态。
- 示例:
/motdpe play.cubecraft.net
- 示例:
-
/mcmotd client list (仅在服务器模式下可用)查询所有已连接到主干节点的客户端列表。
-
/mcmotd server status 查询插件当前的运行状态,包括服务器/客户端模式的启用情况、连接状态等。
所有配置项都需要在您的 Nonebot 项目的 .env 文件中设置(如 .env.prod)。
当您希望一个实例作为接收命令和聚合结果的主干时,启用此模式。
-
MCMOTD_ENABLE_SERVER- 说明: 是否启用服务器模式。
- 类型:
bool - 默认值:
False - 示例:
MCMOTD_ENABLE_SERVER=true
-
MCMOTD_SERVER_IP- 说明: 服务器监听的 IP 地址。
- 类型:
str - 默认值:
"127.0.0.1" - 示例:
MCMOTD_SERVER_IP="0.0.0.0"
-
MCMOTD_SERVER_PORT- 说明: 服务器监听的端口。
- 类型:
int - 默认值:
60000 - 示例:
MCMOTD_SERVER_PORT=65432
-
MCMOTD_SERVER_ALLOW_NAMES- 说明: 允许连接的客户端名称列表(JSON 数组格式)。
- 类型:
List[str] - 默认值:
[] - 示例:
MCMOTD_SERVER_ALLOW_NAMES='["client-a", "client-b"]'
-
MCMOTD_SERVER_STATUS_TIMEOUT- 说明: 等待所有客户端返回查询结果的超时时间(秒)。
- 类型:
int - 默认值:
10 - 示例:
MCMOTD_SERVER_STATUS_TIMEOUT=15
当您希望一个实例作为执行查询任务的子节点时,启用此模式。
-
MCMOTD_ENABLE_CLIENT- 说明: 是否启用客户端模式。
- 类型:
bool - 默认值:
False - 示例:
MCMOTD_ENABLE_CLIENT=true
-
MCMOTD_CONNECT_SERVERS- 说明: 要连接的主干服务器地址列表(JSON 数组格式)。
- 类型:
List[str] - 默认值:
[] - 示例:
MCMOTD_CONNECT_SERVERS='["ws://127.0.0.1:60000"]'
-
MCMOTD_CLIENT_NAME- 说明: 客户端的唯一名称,必须与服务器
MCMOTD_SERVER_ALLOW_NAMES中的名称对应。 - 类型:
str - 默认值:
"" - 示例:
MCMOTD_CLIENT_NAME="client-a"
- 说明: 客户端的唯一名称,必须与服务器
-
MCMOTD_SERVER_TOKEN- 说明: WebSocket 连接的认证令牌(密码),服务器和客户端必须一致。
- 类型:
str - 默认值:
"" - 示例:
MCMOTD_SERVER_TOKEN="your_secret_token"
-
MCMOTD_SPECIAL_INFO_SHOW- 说明: 是否在结果中显示来自不同节点的特殊信息(如独立的 IP 地址)。
- 类型:
bool - 默认值:
False - 示例:
MCMOTD_SPECIAL_INFO_SHOW=true
假设您有三台服务器,分别位于电信、联通和移动网络,希望从三个点同时查询服务器状态。
1. 主干机器人配置 (.env.prod)
这台机器人负责接收用户的命令,并向其他两台机器人下发任务。
# 启用服务器模式
MCMOTD_ENABLE_SERVER=true
# 监听所有网络接口
MCMOTD_SERVER_IP="0.0.0.0"
# 设置一个端口
MCMOTD_SERVER_PORT=60000
# 允许连接的客户端名称
MCMOTD_SERVER_ALLOW_NAMES='["telecom-node", "mobile-node"]'
# 设置连接密码
MCMOTD_SERVER_TOKEN="a_very_secure_password"2. 子节点 A(电信)配置 (.env.prod)
# 启用客户端模式
MCMOTD_ENABLE_CLIENT=true
# 自己的名字,要和服务器配置里的一致
MCMOTD_CLIENT_NAME="telecom-node"
# 主干服务器的地址
MCMOTD_CONNECT_SERVERS='["ws://<主干服务器的IP>:60000"]'
# 连接密码,要和服务器一致
MCMOTD_SERVER_TOKEN="a_very_secure_password"3. 子节点 B(移动)配置 (.env.prod)
# 启用客户端模式
MCMOTD_ENABLE_CLIENT=true
# 自己的名字
MCMOTD_CLIENT_NAME="mobile-node"
# 主干服务器的地址
MCMOTD_CONNECT_SERVERS='["ws://<主干服务器的IP>:60000"]'
# 连接密码
MCMOTD_SERVER_TOKEN="a_very_secure_password"配置完成后,依次启动所有机器人实例。现在,当您向主干机器人发送 /motd 命令时,它会同时从本地、电信节点和移动节点三个位置查询服务器,并将结果一同展示给您。