通过LLM智能管理Minecraft服务器的AstrBot插件。支持Fabric、Forge、NeoForge等所有使用标准RCON协议的服务器。
- 🤖 自然语言交互:无需命令前缀,直接与LLM对话即可管理服务器
- 🎮 全面管理:支持玩家管理、游戏操作、服务器管理、世界操作等功能
- 🔒 权限控制:支持管理员白名单,确保服务器安全
- 🌐 跨平台兼容:基于RCON协议,支持Fabric、Forge、NeoForge等各种服务端
- 打开AstrBot管理面板
- 进入「插件管理」
- 搜索
mc_manager - 点击安装
- 下载本插件到 AstrBot 的
data/plugins/目录 - 重启 AstrBot
在您的MC服务器 server.properties 文件中启用RCON:
enable-rcon=true
rcon.port=25575
rcon.password=your_secure_password
broadcast-rcon-to-ops=true重要:修改后需要重启MC服务器。
在AstrBot管理面板中配置本插件:
| 配置项 | 说明 | 默认值 |
|---|---|---|
rcon_host |
MC服务器地址 | localhost |
rcon_port |
RCON端口 | 25575 |
rcon_password |
RCON密码 | - |
admin_ids |
管理员ID列表(QQ号或MC玩家名) | [](空表示所有人可用) |
enable_dangerous_commands |
启用危险命令(如stop) | false |
enable_log_monitor |
启用MC日志监控 | false |
log_server_host |
日志服务器地址 | 127.0.0.1 |
log_server_port |
日志服务器端口 | 25576 |
enable_chat_response |
将LLM响应发送回MC聊天框 | true |
bot_nickname |
在MC中显示的机器人昵称 | "Bot" |
enable_unified_context |
启用MC和QQ群的统一上下文 | false |
unified_group_umo |
统一上下文目标群UMO | "" |
mc_message_prefix |
MC消息在统一上下文中的前缀 | "[MC]" |
配置示例:
{
"rcon_host": "127.0.0.1",
"rcon_port": 25575,
"rcon_password": "your_password",
"admin_ids": ["123456789", "Steve", "Alex"],
"enable_dangerous_commands": false,
"enable_log_monitor": true,
"log_server_host": "127.0.0.1",
"log_server_port": 25576,
"enable_chat_response": true,
"bot_nickname": "MC助手",
"enable_unified_context": false,
"unified_group_umo": "",
"mc_message_prefix": "[MC]"
}如果启用 enable_log_monitor,可以在MC游戏内直接与机器人对话:
-
在MC服务器机器上运行日志服务器:
python log_server.py(注意,请自行修改代码文件配置参数)
-
配置权限:
admin_ids中添加MC玩家名即可授予权限(你游戏名是啥就填啥)- 例如:
"admin_ids": ["Steve", "Alex"]允许这两个MC玩家执行管理命令 - 格式:MC玩家的user_id为
mc_player_{玩家名}
-
在MC中使用:
- 所有MC聊天消息都会提交到AstrBot,LLM会看到完整的聊天上下文
- 唤醒词在AstrBot的
wake_prefix配置中统一管理(如"wake_prefix": ["小面包"]) - 只有包含唤醒词的消息才会触发LLM回复
- 示例:发送
小面包 查看在线玩家,机器人会自动回复到MC聊天框
权限校验说明:
- QQ消息:使用QQ号校验(如
"123456789") - MC消息:使用玩家名校验(如
"Steve") - 系统会自动识别消息来源并应用对应的权限规则
启用后,MC游戏内聊天和指定QQ群可以共享同一个对话上下文,实现跨平台无缝交流。
功能特性:
- 🔗 统一上下文:MC玩家和QQ群成员在同一对话中交流
- 🤖 双向感知:LLM能同时看到MC和QQ的消息历史
- 🎯 定向推送:支持将MC事件推送到指定QQ群
- 🛠️ 工具支持:提供
send_to_qq_group工具,让LLM主动向QQ群发送消息
配置步骤:
-
获取QQ群UMO:
- 在目标QQ群中发送任意消息
- 在AstrBot后台日志中查找类似
aiocqhttp_default:GroupMessage:123456789的UMO字符串 - 格式说明:
平台ID:消息类型:群号
-
启用统一上下文:
{ "enable_log_monitor": true, "enable_unified_context": true, "unified_group_umo": "aiocqhttp_default:GroupMessage:123456789", "mc_message_prefix": "[MC]" } -
工作原理:
- 所有MC聊天消息会自动提交到AstrBot的指定QQ群会话
- MC消息会带有发送者昵称(如
Steve(MC)) - LLM能看到完整的MC和QQ混合对话历史
- MC系统事件(登入、登出、成就、死亡)也会记录到会话上下文
- LLM可使用
send_to_qq_group工具主动向QQ群发送消息
使用示例:
[QQ群] 用户A: @Bot 服务器现在有多少人在线?
[MC] Steve: 有3个人,但是Alex好像挂机了
[QQ群] Bot: 当前在线3人:Steve、Alex、Notch。根据Steve的反馈,Alex可能在挂机。
[MC] Alex: 我没挂机!我在挖矿呢
[QQ群] Bot: 好的,Alex说他在挖矿,并没有挂机。
注意事项:
- 统一上下文需要先启用日志监控(
enable_log_monitor: true) unified_group_umo必须填写正确的UMO格式- MC消息前缀可自定义,用于在QQ群中区分消息来源
- 所有MC消息都会提交到指定QQ群的会话上下文,由AstrBot的
wake_prefix控制是否唤醒LLM
无需命令前缀! 直接与AstrBot对话即可管理服务器。
用户: 查看在线玩家
Bot: 在线玩家: There are 3 of a max of 20 players online: Steve, Alex, Notch
用户: 把Steve踢出服务器,原因是挂机太久
Bot: 踢出玩家 Steve: Kicked Steve: 挂机太久
用户: 给Alex 64个钻石
Bot: 给予 Alex 64个 minecraft:diamond: Given [Diamond] x 64 to Alex
用户: 把时间调成白天
Bot: 设置时间为 day: Set the time to 1000
用户: 把天气变成晴天
Bot: 设置天气为 clear: Changed the weather to clear
用户: 封禁Hacker这个玩家
Bot: 封禁玩家 Hacker: Banned Hacker: 违反服务器规则
用户: 把难度调成困难
Bot: 设置难度为 hard: Set game difficulty to Hard
用户: 开启死亡不掉落
Bot: 设置游戏规则 keepInventory = true: Gamerule keepInventory is now set to: true
- ✅ 踢出玩家(kick)🔒
- ✅ 封禁/解封玩家(ban/pardon)🔒
- ✅ 管理OP权限(op/deop)🔒
- ✅ 白名单管理(whitelist add/remove)🔒
- ✅ 给予物品(give)🔒
- ✅ 传送玩家(tp)🔒
- ✅ 设置游戏模式(gamemode)🔒
- ✅ 杀死实体(kill)🔒
- ✅ 清空背包(clear)🔒
- ✅ 设置经验(xp)🔒
- ✅ 查看在线玩家(list)🆓
- ✅ 服务器广播(say)🔒
- ✅ 格式化消息(tellraw)🔒
- ✅ 屏幕标题(title)🔒
- ✅ 保存世界(save-all)🔒
- ✅ 查看白名单(whitelist list)🆓
- ✅ 查看封禁列表(banlist)🆓
- ✅ 执行自定义命令(execute_command)🔒
⚠️ 停止服务器(stop)🔒 - 需启用危险命令
- ✅ 设置天气(weather)🔒
- ✅ 设置时间(time)🔒
- ✅ 设置难度(difficulty)🔒
- ✅ 设置游戏规则(gamerule)🔒
- ✅ 生成实体(summon)🔒
- ✅ 执行Python脚本(execute_script)🔒
- ✅ 列出可用工具(list_script_tools)🆓
- ✅ 发送消息到QQ群(send_to_qq_group)🔒
- 需要启用统一上下文功能
- 允许LLM主动向配置的QQ群发送消息
- 可用于向QQ群推送MC服务器事件或状态
图标说明:
- 🔒 需要管理员权限
- 🆓 无需权限,所有人可用
插件内置了强大的脚本执行器,允许LLM编写Python脚本来完成复杂的自动化任务。
- ✅ 异步执行:支持 async/await 语法
- ✅ 工具集成:可调用所有40+个MC管理工具
- ✅ 超时控制:默认60秒超时,可自定义
- ✅ 错误处理:完善的异常捕获和错误报告
- ✅ 输出捕获:自动捕获print输出
插件的所有工具按照危险程度分为不同等级:
以下工具仅查询信息,不会修改服务器状态,任何用户都可以使用:
list_players- 查看在线玩家whitelist_list- 查看白名单banlist- 查看封禁列表list_script_tools- 查看可用工具列表
所有其他工具都需要管理员权限,包括:
- 玩家管理:kick、ban、op等
- 游戏操作:give、tp、gamemode等
- 服务器管理:save、say、tellraw等
- 世界管理:weather、time、difficulty等
- 脚本执行:execute_script
{
"admin_ids": ["123456789", "Steve", "Alex"]
}- 留空
[]:所有人都有权限(仅用于测试) - 添加QQ号:QQ用户权限控制
- 添加玩家名:MC玩家权限控制
- 设置强密码:RCON密码应该使用强密码
- 限制管理员:在
admin_ids中明确指定可以使用的用户 - 生产环境必须配置管理员列表:不要留空
admin_ids - 禁用危险命令:保持
enable_dangerous_commands为false,除非确实需要 - 防火墙配置:如果MC服务器和AstrBot不在同一台机器,确保RCON端口的安全
- 谨慎使用脚本执行器:
execute_script可以调用任何已注册工具,请仅授予信任用户
如何开启RCON:
- 找到服务器配置文件:在MC服务器根目录找到
server.properties文件 - 编辑配置文件:使用文本编辑器打开,添加或修改以下配置:
enable-rcon=true rcon.port=25575 rcon.password=your_secure_password broadcast-rcon-to-ops=true
- 设置安全密码:将
your_secure_password替换为强密码 - 重启服务器:保存文件后,必须重启MC服务器才能生效
- 验证配置:服务器启动后,查看日志确认 "RCON running on..." 字样
故障排查步骤:
- 确认MC服务器已启动
- 确认
server.properties中已启用RCON(enable-rcon=true) - 确认端口号和密码正确
- 确认防火墙允许RCON端口
- 如果MC和AstrBot在不同机器,确认
rcon_host设置为MC服务器的IP地址而非localhost
- 检查AstrBot是否正确配置了LLM提供者
- 检查插件配置是否正确
- 查看AstrBot日志获取详细错误信息
- ✨ 新增统一会话上下文功能
- 支持MC游戏内聊天和QQ群共享对话上下文
- LLM可同时感知MC和QQ的消息历史
- 新增
send_to_qq_group工具,LLM可主动向QQ群发送消息 - MC系统事件(登入、登出、成就、死亡)自动记录到上下文
- 🔧 优化消息处理
- 改进MC消息提交机制,支持与AstrBot唤醒词无缝集成
- 过滤Agent多轮调用的中间响应,避免发送无效内容到MC
- 📚 文档完善
- 添加统一会话上下文配置和使用说明
- 完善UMO获取和配置步骤
- ✨ 新增脚本执行器功能
- 允许LLM编写Python脚本执行复杂任务
- 支持异步执行和超时控制
- 完善的错误处理和输出捕获
- 🔓 权限优化
- 4个只读工具无需权限:list_players、whitelist_list、banlist、list_script_tools
- 所有管理操作工具保留权限控制
- 📚 文档完善
- 添加脚本执行器详细文档
- 添加权限分级说明
- 初始版本
- 支持玩家管理、游戏操作、服务器管理、世界操作
- 支持LLM智能理解自然语言(无需命令前缀)
- 支持管理员权限控制
MIT License
欢迎提交Issue和Pull Request!
如有问题,请在GitHub仓库提交Issue。