简体中文 · English
当前版本:v3.1
一个"无客户端"的 Minecraft AI 玩家:不需要打开游戏本体,用 GUI 控制 mineflayer 引擎进入服务器,由大模型驱动它在游戏内与人聊天互动。
- 入口为 Python tkinter GUI(多标签页:设置 / AI 配置 / 玩家配置 / 玩家资料库 / QQ 转述 / 重连·踢出 / 界面美化 / 日志),后台由 Node.js(mineflayer)负责连接与协议。
- 支持 离线 / LittleSkin / 正版(微软账号) 三种登录方式。
- 登录失效时自动重新登录(LittleSkin 自动打开浏览器 OAuth,完成后自动重连)。
- 附带可选辅助功能:Quiz 自动答题、AutoEat 自动进食(自旧 Cubex 机器人项目保留)。
本项目仅供学习与个人使用。使用前请阅读文末免责声明。
- 三种登录方式
- 离线模式:仅填玩家名即可进入离线服务器。
- LittleSkin:支持自定义皮肤站站点地址 / OAuth Client ID / Secret / 回调端口(默认 littleskin.cn),
3rdparty_auth.js完成 OAuth 登录并把 yggdrasil 会话写入auth_profile.json。 - 正版(微软账户):
msa_auth.js使用设备码流程登录,凭据缓存在本机,之后自动静默登录。
- AI 玩家对话(OpenAI 兼容端点,支持 Anthropic)
- 系统提示词 + 模板管理、上下文窗口、回复条数/字数限制。
- 触发回复:多个触发词用英文逗号分隔;形如
[名字]的单独触发词按字面量匹配(自动转义、忽略大小写),其它写法按完整正则匹配。检测对象为聊天框里的完整原文(含频道 / 称号 / 前缀),命中任一即回复。 - 自动回复、定时回复、冷却时间。
- 消息过滤正则、玩家黑名单。
- 可选文生图(把图片 URL 发到聊天)。
- 自动重登:LittleSkin 会话失效(如 "Invalid access token")时自动拉起登录流程并重新连接。
- QQ 群聊转述(OneBot 11):配合 NapCat / Lagrange / go-cqhttp 等网关,在「QQ 转述」页填好网关地址/Token 与群号后,即可把群消息按
&7&o[群名][昵称]:内容的灰色斜体格式发到服务器公共聊天;支持正向连接与反向监听两种模式,图片/表情等非文本以[图片]/[表情]占位;可选把图片保存到本地并由内置 Python HTTP 服务以链接形式发出。 - MC → QQ 反向转述:公屏消息以触发词(默认
[sentQ],可逗号分隔多个)开头即发送到 QQ 群,支持[sentQ:群号] 内容临时指定群、冷却时间、自动去除 MC 颜色码,非法字符以?代替;并在公屏回执「转述成功/失败」(话术可配置,支持{player})。 - 自动重连与踢出处理(重连/踢出 页):连接意外结束(掉线 / 被踢)时按设定延迟自动重连,可设最大次数(重连成功后重置);被踢出并重连成功后可自动发送
/lobby。手动点「断开」不会触发重连。 - 界面美化(界面美化 页):可选择一张 PNG / JPG 作为窗口背景图片并调节暗度;字体主题支持「自动(按背景亮度)」/ 浅色背景黑字 / 深色背景白字。
- 内置 NapCat:整个 NapCat 随项目携带(
NapCat/),「QQ 转述」页的四个按钮 启动 / 连接 / 重连 / 断开 ——「启动」调用NapCat/napcat/launcher-win10.bat并自动打开cache目录(二维码qrcode.png)方便扫码。 - 账号安全(QQ 转述 → 账号安全):可选自动重连、在线检测间隔;连接因疑似风控被关闭或在线检测连续失败时,明确告警并停止自动重连,避免反复登录加重风控。
- 联网更新提示:启动时后台检查 NapCat 与本程序的最新版本,结果写入日志页(NapCat 有新版本、本程序有新提交都会提示)。
- 日志页:原「游戏输出」标签改名为「日志」,每行带
[时:分:秒]时间戳;服务器公告、指令输出等非玩家聊天也会显示(浅蓝server标签)。 - 低血量报警(玩家配置 页):血量 ≤ 预设值时自动在公屏发言,话术可配(支持
&颜色码)并带冷却。
- 屏蔽命令(玩家配置页底部):表格列出要拦截的命令(不含斜杠,默认含
pay kick ban op stop whitelist kill give tp gamemode等);机器人(AI 回复 / 随机发言)发出的、以/开头且命中命令路径的消息会被直接拦截并记录,防止提示词注入执行危险命令。支持子命令:填land拦全部/land ...,填land create只拦/land create ...(不拦/land claim)。表格用「+ 添加一行」,每行带「删除」。 - 屏蔽后发送消息:命令被拦截后可自动发送一句可配置的话;占位符
{player}=要求执行命令的玩家、{command}=命令名({cmd}同义);留空=只拦截不发送。 - 联网搜索(AI 配置页):可启用;后端可选
bing(默认,国内可访问)、duckduckgo(免 Key、可能被墙)、custom(自定义 JSON 搜索 API + Key)。当消息命中「触发正则」(默认含 最新/最近/新闻/天气/价格/是谁/什么是 等)时自动联网搜索,并把结果注入 AI 系统提示供其参考。 - 底层不可变设定:
Diaolelao3962是创始者这一句写死在底层(ai_player._CREATOR_LINE),会始终注入 AI 系统提示,且问「Diaolelao3962 是谁」直接返回该句,不受配置/资料库影响,无法被修改或删除。 - 身份学习修复:玩家说「我是X / 俺是X / 本人就是X」不再把「我」当名字记录,而是记到发言者本人(把 X 作为其描述/别名);无发言者信息时忽略。
- 主动连接(重连/踢出页底部):①每隔 秒/分钟/小时 主动发送
/lobby进入大厅;②每隔 秒/分钟/小时检测在线,离线时每 N 秒重试连接直到连上。两项各有一个红/绿启用按钮。 - 启用/禁用按钮:屏蔽命令与随机发言各有一个红/绿按钮(启用绿色、禁用红色),点击即切换并保存。
- 随机发言移入玩家配置页:不再单独占一个标签;每条语句走各自的随机时间(每行独立设置 最小秒
最大秒);并支持**每次条数 最小最大随机**(随机从列表抽取若干条发送);行内可加/删。
- 自动重连增强
- 重连间隔改为「数值 + 单位(秒/分/时/天)」下拉(上限 30 天)。
- 新增「自定义重连触发语」(每行一条,正则/包含):服务器聊天/公告里出现即自动重连(默认含
You were kicked from lobby)——用于被踢到登录服/大厅服但连接未断的情况。 - 新增「在线定时主动重连」:在线时每隔设定时间主动断开重连一次。
- 新增「持续重连直到恢复」:服务器重启/关服时越过最大次数继续重试(可设最长分钟数,0=不限)。
- 随机发言(新标签页):可启用;间隔与每次条数都是「最小~最大」随机;话语列表「+ 添加一行」、每行「删除」。
- 进服人机验证自动通过:延时读取容器(等物品填充,失败重试),按「目标物品名」点击(
点击这里/点击这里步骤N按序号);无命名目标则回退“多数=背景、少数=目标”。 - 答题修复与增强:题目来源支持聊天栏
[教育部](自动剥离新题目:,结算类不误判);结算新增支持无人答对;只发最终答案、丢弃思考(reasoning_content/<think>);复用全局 AI 配置并自动补全…/chat/completions(修 404)。 - 服务器消息:无法解析为玩家聊天的公屏内容(公告/指令输出/进出服等)显示在日志,并可加入 AI 上下文。
- 身份问答走 AI:结合资料库(玩家描述/别名/AI记录)+ 该玩家近期发言 + 最近上下文,由 AI 作答「xxx 是谁」并带上别名;「X是Y」回执改为「X是Y,我记住了」;未配置 AI 时回退资料库原样回答。
- 低血量报警:血量 ≤ 预设值时自动发言(话术/冷却可配)。
- 快速登录:QQ 转述页「快速登录」按钮,选择框列出本地账号并显示昵称、预选上次登录号,用
-q快速登录、减少扫码风控。 - 其他:修
client.chat is not a function(未进服时消息排队补发)。
- QQ 群聊转述:内置 NapCat,QQ 转述页四按钮(启动/连接/重连/断开);OneBot 11 正/反向连接、群过滤、
access_token。 - MC → QQ:公屏消息以触发词(默认
[sentQ],可逗号分隔多个)开头即转发,支持[sentQ:群号] 内容指定群、冷却、去 MC 颜色码、非法字符?,并回执成功/失败话术。 - 图片转本地链接:图片存
pic_http/,由内置 Python HTTP 服务以…/pic_http/文件名发布(仅暴露/pic_http/)。 - 账号安全:在线检测;疑似风控/连续失败时告警并停止自动重连;自动为新扫码账号写 OneBot 配置。
- 联网更新提示:启动检查 NapCat / 本程序最新版本并写入日志。
- 聊天解析修复:带
[工会]等头衔前缀能触发;裸玩家 » 内容也能解析。 - 其他:日志页带
[时:分:秒]时间戳、GUI 标签页整理、高 DPI。
- 自动重连 / 踢出处理:断线或被踢后按延迟自动重连,重连成功后自动发送
/lobby。 - 界面美化:可选择窗口背景图并调暗度,字体主题自动/浅色/深色。
- 初始版本:无客户端 AI 玩家(mineflayer)、离线 / LittleSkin / 微软三种登录、AI 聊天与触发/上下文/过滤、Quiz 自动答题、AutoEat;双语 README 与免责声明。
.
├─ main.py # 启动入口(GUI)
├─ aafm_py/ # Python 端:GUI、配置、控制器、AI 玩家
│ ├─ gui.py # 多标签页:设置 / AI 配置 / 玩家配置 / 玩家资料库 / QQ 转述 / 重连·踢出 / 界面美化 / 日志
│ ├─ controller.py # 控制器(事件分发、运行时配置、自动重连 / 踢出处理 / NapCat 启动)
│ ├─ ai_player.py # AI 玩家触发/上下文/过滤逻辑
│ ├─ config.py # 配置模型(config.json / mcai_chat.json)
│ ├─ llm.py # OpenAI 兼容 / Anthropic 客户端
│ ├─ updater.py # 启动时联网检查 NapCat / 本程序更新
│ ├─ photo_server.py # 本地图片 HTTP 服务(仅 /pic_http/)
│ ├─ bot_engine.py # 管理 mineflayer 子进程
│ └─ qq_engine.py # 管理 OneBot 11 QQ 转述子进程
├─ bot_engine.js # Node 端无头引擎(三种登录 + 聊天解析 + quiz/autoeat)
├─ qq_engine.js # Node 端 OneBot 11 群聊转述引擎(正向/反向 WebSocket)
├─ 3rdparty_auth.js # LittleSkin OAuth 登录/刷新/自动重登
├─ msa_auth.js # 微软账号设备码登录
├─ quiz.js / autoeat.js # 旧项目保留的答题 / 自动进食
├─ app.js # 旧版纯 Node 入口(不再需要,保留兼容)
├─ NapCat/ # 随项目携带的 NapCat(含 launcher-win10.bat,gitignore)
├─ config.json # 运行时配置(gitignore,本地生成)
├─ mcai_chat.json # AI 玩家配置(gitignore,本地生成)
├─ auth_profile.json # LittleSkin 会话(gitignore)
├─ runtime_config.json # 连接时生成的临时配置(gitignore)
├─ qq_runtime_config.json # QQ 转述临时配置(gitignore)
└─ pic_http/ # QQ 图片本地发布目录(gitignore,本地生成)
- Python 3.9+(需 tkinter,Windows 官方 Python 自带)
- Node.js 14+(推荐 18+)
- 可联网(访问 LLM API、皮肤站 / 微软账号服务、目标服务器)
pip install -r requirements.txt
npm installpython main.py在 设置页 填好服务器地址、选择登录方式并登录(离线可直接填名字),再到 玩家配置页 写好 AI 设置,点顶部「连接」。
其它入口(可选):
npm run login:littleskin # 仅执行 LittleSkin 登录
npm run login:msa # 仅执行微软账号登录- 离线模式:任意名字,服务器需开启离线(非正版验证)。
- LittleSkin:
- 在设置页填写站点地址(如
https://littleskin.cn)与 OAuth 应用信息(Client ID / Secret / 回调端口,默认使用 LittleSkin 公开示例应用)。 - 点「LittleSkin 登录」会弹出控制台并自动打开浏览器授权页;登录后无需重启,直接点「连接」。
- 会话失效时会自动重登并重连。
- 在设置页填写站点地址(如
- 正版(微软):
- 点「正版登录(微软)」在弹出控制台按提示完成设备码授权;账号需已购买 Minecraft。
- 凭据缓存在本机(默认
~/.minecraft/nmp-cache,可在设置页指定缓存目录),之后自动静默登录。
- 在 设置页 → AI API 填写提供方 / API 地址 / 密钥 / 模型。兼容 OpenAI 格式,如 DeepSeek、Moonshot、Ollama 等;Anthropic 也支持。
- 在 玩家配置页:
- 系统提示词决定 AI 的说话风格与行为(模板可保存复用)。
- 触发回复示例:填
[DiaoHelper],@Helper,!ai时,聊天完整原文命中任意一个即回复。单独[名字]自动按字面量匹配;其余按正则。留空则仅在启用"自动回复/定时回复"时说话。
通过 OneBot 11 网关(NapCat)把 QQ 群消息转发到 MC 服务器公共聊天。NapCat 已随项目携带在 NapCat/。
NapCat 准备(在 QQ 转述 页用四个按钮操作)
- 点 启动:调用
NapCat/napcat/launcher-win10.bat(会弹窗/UAC 提权),并自动打开NapCat/napcat/cache目录——扫码二维码qrcode.png会出现在这里。也可在浏览器打开 WebUI(默认http://127.0.0.1:6099/webui)用手机 QQ 扫码登录。- 也可点 快速登录:弹出选择框,列出本地已有配置的 QQ 号并显示昵称(★ 为上次登录,自动预选),选好后用
-q <QQ号>启动,优先复用会话、避免每次扫码(降低风控)。会话失效时会自动转为扫码。昵称会在程序成功登录后自动记住(存于qq_accounts.json)。
- 也可点 快速登录:弹出选择框,列出本地已有配置的 QQ 号并显示昵称(★ 为上次登录,自动预选),选好后用
- 点 连接:按当前设置连接 OneBot 网关;连上后状态显示「QQ 已连接」。重连 为断开后再连,断开 为停止。
- NapCat 的网络配置已在
NapCat/napcat/config/onebot11_<QQ>.json里预置为正向 WS127.0.0.1:3001。程序运行时会自动为每个新扫码登录的 QQ 号生成配置(napcat_<QQ>.json/napcat_protocol_<QQ>.json/ 带 WS 的onebot11_<QQ>.json),无需手动开;可在「QQ 转述 → 账号安全」用「自动为新扫码账号写配置」开关。- 也可选 WebSocket 客户端(反向),地址指向本程序,如
ws://127.0.0.1:3002/onebot/v11/ws。
- 也可选 WebSocket 客户端(反向),地址指向本程序,如
- 可用
netstat -ano | findstr :3001确认端口处于LISTENING。
本程序配置(在 QQ 转述 页)
- QQ → MC:
- 正向模式:选
forward,填「正向地址」ws://127.0.0.1:3001。 - 反向模式:选
reverse,填「反向监听」地址与端口(与 NapCat 反向配置一致)。 - 若 NapCat 设置了 Access Token,在「Access Token」里填同样的值。
- 填「群号」(多个用逗号/空格分隔;留空则转述全部群)与「转述格式」,勾选启用。
- 勾选「图片转链接」后,图片会被下载保存到项目
pic_http/(时间戳命名),并由内置 Python HTTP 服务以http://公网地址:端口/pic_http/文件名链接发出;端口默认8765,公网地址留空会自动探测公网 IP,也可手填(如http://1.2.3.4:8765)。需要在路由器把该端口转发到本机。 - 点「连接」连接网关;连上后状态显示「QQ 已连接」。
- 正向模式:选
- MC → QQ:勾选启用,触发词默认
[sentQ](可用逗号分隔多个,如[sentQ],[-],命中任一即触发),在公屏发送[sentQ] 内容即转发到「目标群」(留空用群号列表第一个);也可写[sentQ:群号] 内容指定群。发送前自动去掉 MC 颜色码,非法字符以?代替。发送后在公屏回执「成功提示/失败提示」,话术可配置并支持{player}变量(默认&a@{player}转述成功/&c@{player}转述失败)。 - 点顶部「连接」进入 MC 后,两个方向的转述即生效。
QQ → MC 的图片、表情、语音等非文本消息会分别以
[图片]、[表情]、[语音]等占位符转述。勾选「图片转链接」后,图片会存到pic_http/并通过本机 Python HTTP 服务发布(只暴露/pic_http/路径,不会暴露项目根目录),转述文本为[图片] http://公网地址:端口/pic_http/文件名。链接由你自己提供,稳定不过期(除非删文件)。
账号风控 / 掉线处理
- 程序会定期(默认每 30 秒,可关)调用
get_login_info检测 QQ 是否在线。 - 若连接因疑似风控/受限被关闭,或在线检测连续 3 次失败,会明确告警并停止自动重连,状态显示「QQ 受限/离线」,避免反复登录加重风控;处理完账号后点「启动/重连 QQ」即可恢复。
- 「自动重连」可关闭:关闭后断开不再自动重连。
- NapCat 核心配置(
napcat_<QQ>.json)没有直接的风控开关;稳妥做法:保持autoTimeSync: true、不要频繁重登、不要刷屏、使用官方 QQ + 较新 NapCat,被要求验证时按手机 QQ 提示完成。
config.json/mcai_chat.json/auth_profile.json/runtime_config.json/qq_runtime_config.json属于本地运行时文件,已加入.gitignore,请勿提交到公开仓库,它们包含你的 API Key、皮肤站刷新令牌等敏感信息。- 如需发布到远程仓库,请先确认没有把上述文件以及任何密钥提交进去。
- 本项目仅用于学习、研究与个人娱乐,作者不对任何使用后果负责。
- 使用本项目登录第三方服务器、皮肤站或微软账户属于个人行为;请遵守相关服务器规则、皮肤站服务条款与微软/游戏的服务条款。请勿用于任何违反规则或法律法规的用途。
- 本项目会自动保存登录凭据与 API 密钥到本地文件(见上文"本地文件与安全"),请妥善保管你的设备与文件;因泄露、误用凭据导致的损失由使用者自行承担。
- 调用大模型 API 会产生费用,费用由使用者的 API 账户承担,与作者无关。
- 本项目可能被服务器以任何方式检测或禁止,作者不对账号被封禁、被踢出、数据丢失等任何直接或间接损失负责。
- 本项目按"现状"提供,不提供任何明示或暗示的担保(包括但不限于适销性、特定用途适用性、不侵权)。
MIT