[{"data":1,"prerenderedAt":406},["ShallowReactive",2],{"plugin-HuHoBot\u002FPenguinAgent--server-nukkit":3},{"api_version":4,"authors":5,"categories":18,"created_at":19,"dependencies":20,"description":21,"detection_confidence":22,"downloads":23,"gallery":24,"icon_url":25,"id":26,"license":27,"links":31,"manifest_path":32,"name":33,"primary_target":34,"server_version":35,"source":36,"stars":37,"summary":38,"targets":39,"updated_at":41,"versions":42},"1.0.5",[6,10,14],{"avatar_url":7,"name":8,"url":9},"https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F170844915?v=4","Shabby-666","https:\u002F\u002Fgithub.com\u002FShabby-666",{"avatar_url":11,"name":12,"url":13},"https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F124135025?v=4","Close245","https:\u002F\u002Fgithub.com\u002FClose245",{"avatar_url":15,"name":16,"url":17},"https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F317583983?v=4","RiegaLee","https:\u002F\u002Fgithub.com\u002FRiegaLee",[],1786788694,[],"# HuHoBotPenguin\n\n将 QQ 群机器人接入 Minecraft 服务器：游戏聊天与 QQ 群双向转发、白名单管理、在线查询、命令执行、敏感词审核、**AI Agent 智能管理**与 **WebUI 图形化配置**。\n\n[HuHoBot-Penguin](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinClient)的更新最激进与快速，功能最齐全的分支\n\n基于 [qqpd-bot-java](https:\u002F\u002Fgithub.com\u002FKloping\u002Fqqpd-bot-java)（HuHoBot fork，以 git submodule 引入）。\n\n[![License: AGPL v3](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-AGPL%20v3-blue.svg)](LICENSE)\n\n![HuHoBot](https:\u002F\u002Fcount.moeyy.cn\u002F@huhobot?name=huhobot&theme=booru-lewd&padding=7&offset=0&align=top&scale=1&pixelated=1&darkmode=auto)\n\n---\n\n## 功能概览\n\n| 功能 | 说明 |\n|------|------|\n| 双向聊天转发 | 游戏 ↔ QQ 群消息实时互通，支持格式模板与前缀过滤 |\n| QQ 群指令系统 | 30+ 条内置命令，支持权限分级、命令开关与动态帮助 |\n| 白名单管理 | 映射到服务器原生命令，支持自定义模板 |\n| 敏感词审核 | 本地正则词库 + 可选 OpenAI 兼容接口 AI 二审 |\n| MOTD 服务器状态 | `\u002Fmotd` 查询服务器状态，返回图片 + Markdown 卡片 |\n| 自定义命令 | 占位符替换，支持权限分级（普通\u002F管理员） |\n| 多群支持 | 每群独立的管理员名单与配置 |\n| **AI Agent** | `@机器人 \u002Fagent 任务描述` —— AI 自动执行服务器管理任务 |\n| **WebUI 图形化配置** | 浏览器访问 `http:\u002F\u002F127.0.0.1:\u003Cport>` 管理所有配置项（端口可配置） |\n| **群服互通 @提及** | 游戏内 `\u002Fat` 命令发送 QQ @消息，QQ→游戏蓝色高亮+叮音效 |\n| **QQ 群管理** | AI Agent 集成禁言、入群审批、自动审批策略等群管理工具 |\n| **指令面板自动同步** | 启动时自动同步命令面板到 QQ 群（上限 20 条） |\n| **背包与末影箱查看** | `\u002F我的背包`、`\u002F我的末影箱` 查询唯一绑定账户；管理员可用 `\u002F背包查看 \u003C在线玩家名>`、`\u002F末影箱查看 \u003C在线玩家名>` |\n| **脚本扩展** | `addons\u002F\u003C名字>\u002F` 目录插件，入口 `main.js` \u002F `main.lua` \u002F `main.py`，用 `Bird` 桥 |\n\n---\n\n## 支持的平台\n\n| 平台 | 状态 | JDK 要求 | 产物 |\n|------|------|----------|------|\n| **Spigot \u002F Paper**（api-version 1.18+） | 活跃开发 | JDK 8+ | `HuHoBot-Penguin_Spigot-\u003C版本>.jar` |\n| Nukkit \u002F PMMP | 社区适配版（非本仓库维护） | — | [PenguinAgent-NukkitPlatform](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent-NukkitPlatform) |\n| Velocity \u002F BungeeCord | 待适配 | — | — |\n| Allay | 待适配 | — | — |\n\n> Nukkit-MOT 适配版本维护在独立仓库 [PenguinAgent-NukkitPlatform](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent-NukkitPlatform)，不由本仓库维护，功能与 issue 请前往该仓库反馈。\n\n---\n\n## 快速开始\n\n### 1. 准备\n\n1. 到 [q.qq.com](https:\u002F\u002Fq.qq.com\u002F) 申请机器人，获得 **AppID** 和 **Secret**\n2. 准备运行环境：**JDK 8+**（推荐 JDK 17+）\n3. 准备 Minecraft 服务器：**Paper 1.20.5+** 或兼容 Spigot 的服务端\n\n### 2. 构建\n\n```bash\ngit clone --recurse-submodules git@github.com:HuHoBot\u002FPenguinAgent.git\ncd PenguinAgent\n.\u002Fgradlew build\n```\n\n> **注意**：项目依赖 `deps\u002Fqqpd-bot-java` 子模块。克隆时若未使用 `--recurse-submodules`，需运行：\n> ```bash\n> git submodule update --init --recursive\n> ```\n\n构建产物位于 `build\u002Fgather-jar\u002F` 目录。\n\n### 3. 安装\n\n将 `HuHoBot-Penguin_Spigot-\u003C版本>.jar` 放入服务器 `plugins\u002F` 目录，重启服务器。\n\n### 4. 配置\n\n首次启动后会在插件数据目录生成 `config.yml`，也可通过 **WebUI** 进行图形化配置。\n\n#### 核心配置项\n\n```yaml\n# QQ 机器人凭据\nbot:\n  app-id: \"你的AppID\"\n  secret: \"你的Secret\"\n  name: \"机器人昵称\"\n  groups: []                    # 群 OpenID 列表，留空则不限制\n\n# 聊天格式\nchat-format:\n  from-game: \"[游戏] {message}\"       # 游戏→群 格式\n  from-group: \"[QQ] {name}: {message}\" # 群→游戏 格式\n  post-chat: true                       # 是否转发游戏聊天\n  start-with: \"\"                        # 触发前缀（留空转发全部）\n\n# AI Agent\nagent:\n  enabled: false\n  base-url: \"\"        # OpenAI 兼容接口地址\n  api-key: \"\"         # AI 接口密钥\n  model: \"gpt-4o-mini\"\n  command-mode: \"manual\"  # manual=手动审批 \u002F auto=自动执行\n```\n\n完整配置说明请参考 WebUI 或 `config.yml` 中的注释。\n\n---\n\n## AI Agent\n\n### 使用方式\n\n在 QQ 群中 `@机器人 \u002Fagent \u003C任务描述>`，AI 会自动执行服务器管理任务。\n\n**示例：**\n```\n@HuHoBot \u002Fagent 查看服务器插件列表\n@HuHoBot \u002Fagent 给玩家 Steve 添加白名单\n@HuHoBot \u002Fagent 禁言玩家 BadBoy 10分钟\n```\n\n### 工作原理\n\n1. 用户发送 `\u002Fagent` 命令\n2. AI 根据任务描述选择合适的工具执行\n3. 每次执行最多 **15 步**，上下文窗口 **40 条消息**\n4. 危险操作（执行命令、禁言等）需管理员通过按钮审批\n\n### 可用工具（17 个）\n\n**服务器管理（5 个）：**\n\n| 工具 | 说明 |\n|------|------|\n| `get_server_plugin_list` | 获取已安装插件列表 |\n| `get_command_help` | 获取命令帮助信息 |\n| `run_command` | 执行服务器控制台命令（需审批） |\n| `read_server_logs` | 读取服务端日志（支持关键词过滤） |\n| `load_skill` | 加载 MC 命令语法文档（components\u002Fgive\u002Fitem\u002Fsummon\u002Fdata\u002Floot\u002Fclear） |\n\n**QQ 群管理（12 个）：**\n\n| 工具 | 说明 |\n|------|------|\n| `get_group_info` | 获取群基本信息 |\n| `get_bot_state` | 获取机器人在群内的状态 |\n| `get_join_requests` | 列出待审批的入群申请 |\n| `approve_join_request` | 审批入群申请 |\n| `get_mute_status` | 查询群禁言状态 |\n| `set_member_mute` | 设置\u002F解除成员禁言（最长 30 天，需审批） |\n| `list_auto_approve_policies` | 列出自动审批策略 |\n| `create_auto_approve_policy` | 创建自动审批策略（需审批） |\n| `update_auto_approve_policy` | 更新自动审批策略（需审批） |\n| `delete_auto_approve_policy` | 删除自动审批策略（需审批） |\n| `execute_auto_approve_policy` | 执行自动审批策略（需审批） |\n| `update_whitelist_users` | 更新自动审批白名单 QQ 号（需审批） |\n\n### 命令执行模式\n\n| 模式 | 说明 |\n|------|------|\n| **手动审批（manual）** | AI 执行危险操作时发送审批卡片，管理员\u002F群主点击同意\u002F拒绝 |\n| **自动执行（auto）** | AI 直接执行所有操作，无需审批 |\n\n**不建议开auto！不建议开auto！不建议开auto！**\n\n**有用户反馈使用auto后AI幻觉问题导致误刷神装给玩家！！！**\n\n**数据无价，谨慎操作 --DiskGenius**\n\n### SKILL 系统\n\nAI 支持按需加载 Minecraft 命令语法文档：\n\n| SKILL | 内容 |\n|-------|------|\n| `components` | 物品组件语法（1.20.5+） |\n| `give` | `\u002Fgive` 命令语法 |\n| `item` | 物品格式与 NBT |\n| `summon` | `\u002Fsummon` 实体命令 |\n| `data` | `\u002Fdata` 数据操作命令 |\n| `loot` | `\u002Floot` 掉落物命令 |\n| `clear` | `\u002Fclear` 清除物品命令 |\n\n### 相关命令\n\n| QQ 群命令 | 说明 |\n|-----------|------|\n| `agent \u003C任务描述>` | 触发 AI Agent 执行任务 |\n| `newsession` | 清除当前用户的 AI 会话上下文 |\n| `stop` | 紧急停止所有 AI 任务 |\n\n---\n\n## WebUI 图形化配置\n\n### 访问方式\n\n启动后在服务器控制台查看密码，然后浏览器访问（默认端口 5678，可在 config.yml 中修改 `webui-port`）：\n\n```\nhttp:\u002F\u002F127.0.0.1:5678\n```\n\n### 功能\n\n- **暗色简约风格**，响应式布局\n- **14 个配置分组**，覆盖所有配置项\n- 修改后**实时保存**，自动重载配置\n- 首次启动自动生成 **24 位随机密码**\n\n### 配置分组\n\n| 分组 | 说明 |\n|------|------|\n| QQ 机器人 | AppID、Secret、机器人名称、群列表 |\n| 服务器 | 服务器名称、命令执行器类型 |\n| 聊天格式 | 双向转发格式模板、触发前缀 |\n| 玩家事件 | 进服\u002F退服通知开关与格式 |\n| Markdown | 在线查询 Markdown 模板 |\n| MOTD | 服务器状态查询配置 |\n| 白名单命令 | 添加\u002F删除白名单的命令模板 |\n| 正则过滤 | 敏感词正则表达式列表 |\n| 管理员 | 管理员模式与 OpenID 列表 |\n| 功能 | 全量转发等开关 |\n| 内容审核 | AI 敏感词审核接口配置 |\n| AI Agent | Agent 启用、接口、模型、审批模式 |\n| 命令开关 | 逐个开关 20+ 条内置命令 |\n| 自定义命令 | 自定义命令模板与权限 |\n\n### 控制台命令\n\n| 命令 | 说明 |\n|------|------|\n| `\u002Fhb reload` | 重载配置文件 |\n| `\u002Fhb info` | 查看适配器信息 |\n| `\u002Fhb webui` | 查看 WebUI 地址 |\n| `\u002Fhb password \u003C新密码>` | 修改 WebUI 登录密码 |\n\n---\n\n## 群服互通 @提及\n\n### 游戏 → QQ\n\n在 Minecraft 聊天中输入 `@玩家名 消息`，消息会以 QQ @消息格式发送到群，触发被 @ 玩家的通知。\n\n支持格式：`@张三 你好`、`@张三@李四 一起玩`\n\n### QQ → 游戏\n\nQQ 群中的 @消息会自动解析为 `§9@玩家名§r`（蓝色高亮），被 @ 的在线玩家会收到**叮**音效提醒。\n\n### \u002Fat 命令（Minecraft 游戏内）\n\n```\n\u002Fat \u003C群成员昵称> \u003C消息内容>\n```\n\n向 QQ 群发送 @消息，触发被 @ 玩家的通知。支持 Tab 补全昵称。\n\n### 昵称缓存\n\n- 从收到的 QQ 消息中自动缓存昵称 ↔ openid 映射\n- 持久化到 `nicknames.dat` 文件，重启不丢失\n- 自动过滤 openid 作为昵称的脏数据\n\n---\n\n## QQ 群指令系统\n\n### 公开命令（所有群成员可用）\n\n| 命令 | 说明 |\n|------|------|\n| `查信息` `[OpenId]` | 查询自己的或指定用户的 OpenId 和认证状态 |\n| `发信息` `\u003C内容>` | 将消息转发到游戏内聊天 |\n| `查在线` | 查询在线玩家列表（支持图片\u002FMarkdown 渲染） |\n| `在线服务器` | 查看已连接的服务器名称 |\n| `帮助` | 查看所有可用命令 |\n| `执行` `\u003C命令>` | 执行自定义命令（普通权限） |\n\n### 管理员命令（需要管理员权限）\n\n| 命令 | 说明 |\n|------|------|\n| `查管理` `\u003COpenId>` | 查询某用户是否为管理员 |\n| `加管理` `\u003COpenId>` | 添加管理员 |\n| `删管理` `\u003COpenId>` | 删除管理员 |\n| `管理方式` `[QQ\u002F手动\u002F双重]` | 查看\u002F设置管理员判定方式 |\n| `添加白名单` `\u003C玩家名>` | 添加玩家白名单 |\n| `删除白名单` `\u003C玩家名>` | 删除玩家白名单 |\n| `查白名单` | 查看白名单列表 |\n| `执行命令` `\u003C命令>` | 执行服务器原生命令 |\n| `管理员执行` `\u003C命令>` | 以管理员权限执行自定义命令 |\n| `全量` | 切换全量聊天转发开关 |\n| `blockMotd` | 屏蔽本群 MOTD 查询 |\n| `unblockMotd` | 解除本群 MOTD 屏蔽 |\n| `我的背包` | 查看唯一绑定账户的背包（账户需在线） |\n| `我的末影箱` | 查看唯一绑定账户的末影箱（账户需在线） |\n| `背包查看` `\u003C在线玩家名>` | 查看指定在线玩家背包（仅管理员） |\n| `末影箱查看` `\u003C在线玩家名>` | 查看指定在线玩家末影箱（仅管理员） |\n\n背包和末影箱默认使用内置底图。若要更换壁纸，将 PNG 放到\n`plugins\u002FHuHoBotPenguin\u002Finventory\u002Fbackgrounds\u002F`，再在 `config.yml` 中启用\n`inventory.render.custom-background.enabled`。格子和人物区域的圆角遮罩会始终保留。\n\n### 认证命令\n\n| 命令 | 说明 |\n|------|------|\n| `认证` `[OpenId]` | 查看\u002F设置用户认证状态 |\n| `解除认证` `\u003COpenId>` | 解除用户认证（仅管理员） |\n\n### MOTD 命令\n\n| 命令 | 说明 |\n|------|------|\n| `motd \u003C服务器地址>` | 查询 MC 服务器状态（图片 + Markdown 卡片） |\n\n### AI Agent 命令\n\n| 命令 | 说明 |\n|------|------|\n| `agent \u003C任务描述>` | 触发 AI Agent 执行任务 |\n| `newsession` | 清除 AI 会话上下文 |\n| `stop` | 紧急停止所有 AI 任务 |\n\n### 命令面板\n\n启动时自动将命令同步到 QQ 群命令面板（上限 20 条，超出部分仅在 `\u002F帮助` 中显示）。\n\n---\n\n## 配置详解\n\n### 管理员判定模式\n\n| 模式 | 说明 |\n|------|------|\n| `qq` | 使用 QQ 群主\u002F管理员身份 |\n| `config` | 仅使用配置文件中的 `admin.openids` 列表 |\n| `both` | 两者皆可（默认） |\n\n### 聊天格式占位符\n\n**游戏→群（from-game）：**\n- `{name}` —— 玩家名\n- `{message}` \u002F `{msg}` —— 消息内容\n\n**群→游戏（from-group）：**\n- `{name}` \u002F `{nick}` —— 发送者昵称\n- `{message}` \u002F `{msg}` —— 消息内容\n\n### 敏感词审核\n\n支持两级过滤：\n\n1. **本地正则过滤**：`filter-regex` 列表中的正则匹配内容会被替换为 `*`\n2. **AI 二审**（可选）：配置 `audit.base-url` 后，本地未命中的内容会发送到 OpenAI 兼容接口进行二次审核\n\n内置默认敏感词：傻逼、操你、色情、反动、赌博\n\n### 自定义命令\n\n```yaml\ncustom-commands:\n  - key: \"触发词\"\n    command: \"huhobot run 命令模板\"\n    permission: 0    # 0=普通, 1=管理员\n```\n\n占位符：\n- `{params}` —— 命令参数\n- `{group}` —— 群 OpenID\n- `{user}` —— 用户 OpenID\n- `{0}`, `{1}` ... —— 按空格分割的参数\n\n---\n\n## 项目结构\n\n```\nPenguinAgent\u002F\n├── build.gradle.kts              # 根构建文件\n├── settings.gradle.kts           # 模块配置\n├── deps\u002Fqqpd-bot-java\u002F           # QQ Bot SDK（git submodule）\n├── common\u002FBot\u002F                   # 平台无关核心模块\n│   └── src\u002Fmain\u002Fkotlin\u002Fcn\u002Fhuohuas001\u002Fbot\u002F\n│       ├── HuHoBot.kt            # 核心接口（各平台实现）\n│       ├── QClient.kt            # QQ 客户端单例\n│       ├── NicknameManager.kt    # 昵称 ↔ openid 映射\n│       ├── MenuManager.kt        # 命令面板自动同步\n│       ├── agent\u002F                # AI Agent 系统\n│       │   ├── AgentManager.kt       # Agent 调度器\n│       │   ├── AgentTools.kt         # 工具定义与执行\n│       │   ├── AgentApiClient.kt     # OpenAI 兼容 HTTP 客户端\n│       │   ├── AgentCommands.kt      # agent\u002Fnewsession\u002Fstop 命令\n│       │   └── GroupManagementApi.kt # QQ 群管理 API 封装\n│       ├── events\u002F               # 事件处理\n│       │   ├── GroupMessageHandler.kt    # 群消息入口\n│       │   └── commands\u002F                 # 命令系统\n│       │       ├── BaseCommand.kt            # 命令基类（反射分发）\n│       │       ├── PublicCommands.kt         # 公开命令\n│       │       ├── AdministrationCommands.kt # 管理员命令\n│       │       ├── AuthenticationCommands.kt # 认证命令\n│       │       ├── MotdCommands.kt           # MOTD 命令\n│       │       ├── CustomCommandRegistry.kt  # 自定义命令注册\n│       │       └── SensitiveFilter.kt        # 敏感词过滤\n│       ├── provider\u002F             # 提供者接口\n│       │   ├── ConfigProvider.kt    # 配置提供者\n│       │   ├── MessageProvider.kt   # 消息提供者\n│       │   └── CommandProvider.kt   # 命令提供者\n│       ├── state\u002F                # 持久化状态\n│       ├── web\u002F                  # WebUI\n│       │   ├── WebUiServer.kt      # HTTP 服务器\n│       │   ├── WebUiSchema.kt      # 配置表单 Schema\n│       │   └── WebUiPassword.kt    # 密码管理\n│       └── tools\u002F                # 工具类\n├── server\u002FSpigot\u002F                # Spigot\u002FPaper 平台适配\n│   └── src\u002Fmain\u002Fkotlin\u002Fcn\u002Fhuohuas001\u002FhuhobotPenguin\u002Fspigot\u002F\n│       ├── HuHoBotSpigot.kt      # 插件主类\n│       └── commands\u002F\n│           ├── AtCommand.kt      # \u002Fat 命令\n│           ├── HuHoBotCommand.kt # \u002Fhuhobot 命令\n│           └── ...\n└── server\u002FAdapterCommon\u002F         # 适配器公共层\n```\n\n---\n\n## 构建与开发\n\n### 环境要求\n\n- **JDK 24**（构建时）\u002F **JDK 8+**（运行时，Spigot 模块）\n- **Gradle 9.6.1**（使用项目自带的 `gradlew`）\n- **Git**（子模块管理）\n\n### 构建命令\n\n```bash\n# 完整构建\n.\u002Fgradlew clean build\n\n# 仅构建 Spigot 产物\n.\u002Fgradlew :server-Spigot:shadowJar\n\n# 构建产物位置\nls build\u002Fgather-jar\u002F\n```\n\n### 模块说明\n\n| 模块 | 说明 |\n|------|------|\n| `common-Bot` | 平台无关核心：QQ 客户端、群消息分发、指令、AI Agent、WebUI |\n| `server-AdapterCommon` | 服务端适配公共层 |\n| `server-Spigot` | Spigot\u002FPaper 平台适配（活跃），含 JS \u002F Python \u002F Lua 脚本扩展 |\n| `addon-GraalJs` | 可选引擎包：Spigot 的 GraalJS。不进主插件产物，放到 `plugins\u002FHuHoBotPenguin\u002Fengines\u002F` |\n| `addon-GraalPy` | 可选引擎包：Spigot 的 GraalPy。不进主插件产物，放到 `plugins\u002FHuHoBotPenguin\u002Fengines\u002F` |\n| `server-Nukkit` | Nukkit\u002FPMMP 平台适配（待适配） |\n| `server-Proxy` | Velocity\u002FBungeeCord 代理适配（待适配） |\n| `server-Allay` | Allay 平台适配（待适配） |\n\n---\n\n## Spigot 脚本扩展（JS \u002F Python \u002F Lua）\n\n一个插件是 `addons\u002F` 下的一个目录，不是单个文件。根上直接放的 `.js` \u002F `.lua` \u002F `.py` 不加载。\nLua 打在主 jar 里；GraalJS（约 34 MB）与 GraalPy（约 125 MB）拆成两个引擎包，不放也能启动：\n\n| 入口 | 引擎 | 放在哪 |\n|------|------|--------|\n| `main.lua` | LuaJ | 主 jar 内 |\n| `main.js` | GraalJS | `engines\u002FHuHoBot-Engine-GraalJs-\u003C版本>.jar` |\n| `main.py` | GraalPy（Python 3） | `engines\u002FHuHoBot-Engine-GraalPy-\u003C版本>.jar` |\n\n```bash\n.\u002Fgradlew :addon-GraalJs:shadowJar :addon-GraalPy:shadowJar\n# 放到 plugins\u002FHuHoBotPenguin\u002Fengines\u002F\n```\n\n```\nplugins\u002FHuHoBotPenguin\u002Faddons\u002Fhello\u002F\n├── metadata.yaml          name \u002F version \u002F author \u002F description \u002F entry\n├── _conf_schema.json      配置声明，实际值写到 addons\u002Fconfig\u002Fhello.json\n└── main.js                或 main.lua \u002F main.py\n```\n\n```\n\u002Fhuhobot scripts reload\n\u002Fhuhobot scripts reload hello\n```\n\n三种语言都注入 `Bird`、`Bukkit`、`server`、`plugin`、`config`、`kv`、`DATA_DIR`。\n加载失败会撤掉已经登记的 addon 和它注册过的命令、监听器、定时任务。\n两个目录写成同一个 `name` 会被拒绝。`\"_enabled\": false` 跳过该插件（算「跳过」不算「失败」）。\n\n两个容易踩的点：\n\n- **Lua 侧列表下标从 1 开始。** 命令参数和 `Bird` 返回的 `List` \u002F `Map` 都会转成真正的 Lua table，\n  所以是 `args[1]`、`#Bird:getDataKeys()`、`pairs(...)`，不是 0 起。JS 和 Python 保持各自的 0 起。\n- **引擎 jar 的文件名带版本。** 和主插件版本不一致时启动会告警，脚本可能以难懂的方式失败，\n  换同一次构建产出的 jar 即可。\n\n详细说明见 [`docs\u002Fspigot-script-addons.md`](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Fblob\u002Fmaster\u002Fdocs\u002Fspigot-script-addons.md)，\n其中「[引擎桥 API](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Fblob\u002Fmaster\u002Fdocs\u002Fspigot-script-addons.md#11-引擎桥-api)」一节记录了主插件与引擎 jar 之间的反射契约\n（改 `GraalJsBridge` \u002F `GraalPyBridge` 的方法签名时必须同步改 `ScriptAddonLoader`）。\n\n脚本系统借鉴自 [birdlibraryapi](https:\u002F\u002Fgithub.com\u002Fprach1121\u002Fbirdlibraryapi)（Apache-2.0），详见[许可证](#许可证)一节。\n\n\n## 版本历史\n\n> 更早的版本见 [CHANGELOG.md](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Fblob\u002Fmaster\u002FCHANGELOG.md) 与 [Releases](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases)。\n\n### v1.18.1（最新）\n\n**Bug 修复：**\n- fix: 末地烛等 5 个物品在背包图片里形状变形 — 这些物品的原版图标本来就是 3D 方块模型渲染，之前被当成平面贴图铺平画了出来（末地烛被掰弯、脚手架显示为问号方块）\n- fix: 末地烛、雪、传送植物、传送花、脚手架改用按原版方块模型烘焙的图标\n\n### v1.18.0\n\n**新功能：**\n- feat: 免验证名单 — 名单内的玩家无需 QQ 绑定即可进入服务器，适用于受限于设备或环境无法使用 QQ 的人员（`binding.verify-exempt`）\n- feat: 新增管理员命令 `\u002F添加免验证 \u003C玩家名>` 与 `\u002F取消免验证 \u003C玩家名>`，即时生效无需重启\n- feat: WebUI「绑定」页可编辑免验证名单\n\n**优化：**\n- opt: 免验证玩家解绑后不再被踢出（他们本来就能免绑定进服）\n- opt: 配置项补充说明改为按位置替换，说明文字更新后旧行会被覆盖\n\n**Bug 修复：**\n- fix: 「强制绑定开启时游戏内验证配置无效」的说法有误 — 免验证玩家主动绑定仍走普通流程，仍由 `binding.require-game-verification` 决定\n\n### v1.17.0\n\n**新功能：**\n- feat: 强制绑定 — 未绑定的玩家进服务器立刻被踢出并拿到 5 位验证码，在 QQ 群执行 `\u002F绑定 \u003C验证码>` 完成绑定后重新进入即可游玩（`binding.force-bind` \u002F `binding.force-bind-groups`）\n- feat: 解绑后立即断开在线会话，不必等到下次进服才被拦下\n- feat: 配置文件文本级自动升级 — 新增配置项连同注释补进旧 `config.yml`，配置版本号升到 9\n\n**优化：**\n- opt: 绑定时的游戏内验证改为默认开启（已显式配置 `false` 的服务器不受影响）\n- opt: 强制绑定开启时跳过绑定\u002F解绑的白名单同步\n- opt: WebUI 每个分节改用手写介绍文案，不再把字段说明拼成一长串\n- opt: 踢出提示改为带颜色的完整信息，不再额外发送标题\n\n**Bug 修复：**\n- fix: 旧配置文件补不上新配置项 — `config.contains()` 会回落到 jar 模板默认值，导致模板新增的键永远补不进去\n- fix: 补注释时产生重复注释\n- fix: 强制绑定提示里的服务器名称不再带中括号\n\n### v1.16.0\n\n**新功能：**\n- feat: 玩家死亡播报转发到 QQ 群（`player-events.death.*`），死亡原因自动生成中文描述，覆盖 14 种死法\n- feat: WebUI「QQ 机器人」页面新增扫码连接入口，手机 QQ 扫码自动写入 AppID \u002F Secret 并连接\n- feat: 新增管理员命令 `\u002F强制解绑` — 支持 MC 玩家名、`@某人`、openid、QQ 昵称\n- feat: `\u002F解除绑定` 增加二次确认（内联键盘，30 秒未选择视为取消）\n\n**优化：**\n- opt: 绑定改为按 openid 全局共享 — 一个群绑定后所有群通用，MC 玩家名全局唯一\n- opt: 换绑角色时保留已切换的显示名称偏好\n- opt: WebUI 先于 QQ 连接启动，未配置凭据时也能打开管理页面\n\n**Bug 修复：**\n- fix: QQ 扫码登录改为后台会话制，不再在主线程 `while(true)` 阻塞\n- fix: 内联键盘不渲染（漏调 `RowBuilder.build()` 导致 `rows` 为空）\n- fix: 按钮点击无响应、客户端提示「请求第三方失败 \u002F 请求超时」（未按官方要求回应互动事件）\n- fix: 绑定数据自动从旧的按群分组格式迁移为按 openid 索引\n\n### v1.15.1\n\n**Bug 修复：**\n- fix: QQ 指令面板同步报 30019「面板版本冲突」— 原位更新按官方文档补传 `panel.version`，冲突时重读版本重试\n- fix: 面板同步并发自撞与撞限频 — 同步入口串行化，两次同步最小间隔 6 秒（官方写接口 10 QPM）\n- improve: 面板同步错误提示区分 30013 \u002F 30019 \u002F 40030009 并给出排查建议\n\n### v1.15.0\n\n**新功能：**\n- feat: 脚本扩展系统（仅 Spigot）— 用 JavaScript \u002F Lua \u002F Python 写脚本插件，无需编译\n- feat: 目录式脚本插件 — `addons\u002F\u003C名字>\u002F` 下放 `main.js` \u002F `main.lua` \u002F `main.py` 加 `metadata.yaml`\n- feat: `Bird` 桥 — 脚本可注册 Bukkit 事件、游戏内命令（含 Tab 补全）、定时任务、HTTP 回调、QQ 群命令\n- feat: `\u002Fhuhobot scripts reload [目录名]`\n- feat: 脚本配置与数据 — `_conf_schema.json` 声明默认值，`config` \u002F `kv` 键值空间，`setData` 持久化\n- feat: 跨脚本事件总线 — `Bird.on` \u002F `Bird.emit`\n- feat: 引擎按需安装 — LuaJ 打进主 jar；GraalJS、GraalPy 拆成独立包从 `engines\u002F` 加载\n\n**Bug 修复：**\n- fix: LuaJ 重载解析、容器转 userdata、宿主对象回调解包等一批绑定层问题\n- fix: 脚本重载时同分重载选择不确定，改为按参数类型具体程度择优\n- fix: 脚本加载失败时未回滚已登记内容，重载不再留下幽灵命令\n\n### v1.14.0\n\n**新功能：**\n- feat: WebUI 附属插件中心 — 从附属插件中心 API 拉取列表、搜索、看详情、一键下载安装、删除已下载插件\n- feat: 群列表为空或未收录时，收到任意消息即自动把群 OpenID 写入 `bot.groups`\n\n**优化：**\n- opt: WebUI 体验优化 — Toast 改为顶部飘窗、面板错峰淡入、点击涟漪反馈、群名称加载态\n- opt: 群服互通默认格式恢复为 `[游戏] {name}: {message}` \u002F `[QQ] {name}: {message}`\n- opt: 绑定后不再自动把 QQ→游戏显示名切成 MC 名，需要时用 `\u002FMC显示名称 MC` 切换\n- opt: PlaceholderAPI 解析改用在线玩家实例，玩家类占位符可正常返回\n\n### v1.13.0\n\n**新功能：**\n- feat(#7): QQ 群接入简化 — WebUI 群列表显示群名称与 OpenID 尾号、可点击复制，名称缓存 30 分钟并持久化\n- feat(#8): 版本更新提醒 — 启动与 `\u002F版本` 检查 GitHub 正式 Release，走 gh-proxy 代理国内可用\n- feat(#9): 接入 PlaceholderAPI — 纯反射接入无编译期依赖，覆盖双向转发与各类模板\n- feat(#10): Agent 获取类工具结果不再刷屏 — 新增 `agent.hide-fetch-results`（默认开启）\n\n### v1.12.0\n\n**新功能：**\n- feat: 集成 bStats 统计（插件 ID `34268`），库重定位到 `cn.huohuas001.bstats`，不与其他插件冲突\n\n### v1.11.0\n\n**新功能：**\n- feat: 所有带键盘的消息发送后 30 秒自动撤回，点击按钮后可立即撤回对应卡片\n- feat: AI Agent 手动审批 30 秒未处理自动拒绝并撤回卡片，超时后继续执行后续流程并说明操作已被拒绝\n\n**Bug 修复：**\n- fix: qqpd-bot-java 消息撤回接口始终返回失败（`RestApi` 依赖未绑定导致 DELETE 请求被跳过）\n- fix: 撤回失败时输出 HTTP 状态码与响应体\n\n### v1.10.0\n\n**新功能：**\n- feat(inventory): 背包与末影箱渲染整合（6 项）— 3D 玩家模型渲染、离线背包快照、默认皮肤库解析、护甲材质与附魔光泽资源\n- feat(bot): QQ 命令面板与命令体验整合（#6）— 面板分页、重复面板清理、20 条上限截断、命令按权限分组、`pushMenu` \u002F `priority` 支持\n\n**Bug 修复：**\n- fix: 背包查询名字大小写不匹配时正确解析在线玩家\n- fix: 末影箱渲染失败与无离线快照的错误提示区分\n- fix: `onServerThread` 增加 10s 超时，背包快照序列化移出主线程\n- fix: 瘦手臂（slim）胸甲 UV 宽度修正\n- fix: `registerBotCommand` \u002F `unregisterBotCommand` 面板同步改为异步\n\n### v1.9.0\n\n**新功能：**\n- feat: 首次启动自动扫码登录 — 控制台打印二维码，手机 QQ 扫码后自动写入 AppID\u002FSecret 到 config.yml\n\n**优化：**\n- opt: jar 文件名统一为 `PenguinAgent.jar`\n- opt: Gradle 配置缓存清理，确保 plugin.yml 版本号正确替换\n\n### v1.8.0\n\n**新功能：**\n- feat: `\u002Fsend \u003C消息>` — 游戏内向 QQ 群发送消息，所有人可用\n- feat: `\u002Fhb reload` 完整重启 — 注销所有命令 → 重新加载配置 → 重启 QQ 客户端\n\n**Bug 修复：**\n- fix: plugin.yml 重复 permissions 段导致 `\u002Fqqbind` 权限丢失\n- fix: 禁用的命令不再注册到 QQ 指令面板\n- fix: 命令面板同步日志增强，便于排查问题\n\n### v1.6.0\n\n**新功能：**\n- feat: WebUI 端口可通过 `config.yml` 中的 `webui-port` 配置（默认 5678）\n- feat: 配置文件版本升级到 v7，旧版自动迁移添加 `webui-port` 默认值\n\n### v1.5.0\n- feat: `MsgPack` \u002F `MsgPackFactory` — MsgPack 消息序列化\n- feat: `OnBotRecvMsg` \u002F `OnBotCommand` 事件 — 第三方插件可监听 QQ 消息与命令事件\n- feat: `AddonManager` 扩展注册中心 — 管理已安装扩展及其命令\n- feat: `registerAddon(name, version, description, author)` — 注册扩展元数据\n- feat: `registerBotCommand(addonName, key, command, permission, pushMenu)` — 注册扩展命令并关联归属\n- feat: `\u002Faddons` 命令 — 查看已安装扩展列表\n- feat: `\u002F帮助` 三段式显示（内置命令、自定义命令、扩展命令），按 command key 全局去重\n- feat: `MessageProvider.onBotReceivedGroupMessage()` \u002F `onBotCommand()` 回调\n\n**Bug 修复：**\n- fix: `\u002F帮助` 命令重复显示问题（旧 API 注册的命令不再重复归类）\n- fix: QQ markdown 转义玩家名中 `_text_` 被识别为斜体\n\n### v1.4.0\n\n**新功能：**\n- feat: `\u002F背包查看 \u003C玩家名>` — 查看指定在线玩家背包内容（PNG 图片渲染，仅管理员）\n- feat: Faithful 32x 贴图包集成 — 物品图标与方块预览使用 Faithful 32x 纹理\n- feat: 玩家皮肤预览 — 背包图片中显示玩家正面皮肤\n- feat: 等距3D方块预览 — 有面贴图的方块自动合成等距3D效果\n- feat: `\u002Fqqbind` 权限改为所有玩家可用（默认 true）\n\n**变更：**\n- change: `\u002F背包查看` 仅管理员可用\n\n**Bug 修复：**\n- fix: 命令方块等动画贴图渲染异常（自动裁剪为第一帧）\n- fix: 铁砧等无面贴图方块使用基础贴图做2D图标\n- fix: 箱子贴图从 overrides 目录正确加载\n- fix: QQ markdown 转义玩家名中 `_` 字符\n\n### v1.3.0\n\n**新功能：**\n- feat: 命令黑名单（`command-blacklist`）— 禁止通过 `\u002F执行` 或 Agent `run_command` 运行指定服务器命令\n- feat: `\u002F版本` 命令输出中显示文档链接\n- feat: WebUI 新增「绑定」和「命令黑名单」配置分区\n- feat: `ConfigUpgrader.upgradeValues()` 支持版本化升级已有配置字段\n- feat: `BaseCommand.handleMessage()` 实际执行 `onlyAdmin` 拦截\n\n**变更：**\n- change: motd `post-img` 和 `use-markdown` 默认值改为 `true`\n- change: AI Agent 命令（`\u002Fagent`、`\u002Fnewsession`、`\u002Fstop`）标记为仅管理员\n- change: 配置文件版本升级到 v6，旧版自动迁移 motd 默认值\n\n**Bug 修复：**\n- fix: 自定义命令执行时不再转发到游戏\n- fix: 文档许可证从 GPL v3 更正为 AGPL v3\n- fix: 文档网址从 `huhobot.txssb.cn` 更正为 GitHub Pages\n\n### v1.3.0-beta.2\n\n**Bug 修复：**\n- fix: 游戏命令执行结果以纯文本发送，不再被 QQ 渲染为 Markdown 格式\n- fix: SDK `InterAction.getEnvType()` NPE 修复 — `chat_type` 空值检查\n\n**新功能：**\n- feat: QQ→游戏消息支持 `&` 颜色符号转换（如 `&a绿色` → 绿色文字）\n\n**文档：**\n- docs: 文档全面改版适配 HuHoBotPenguin 分支\n\n### v1.3.0-beta.1\n\n**上游同步（PenguinClient 功能合入）：**\n- feat: `FaceEmojiParser` —— QQ 表情标签转可读文本\n- feat: `MessageAttachmentParser` —— 语音\u002F图片\u002F视频\u002F文件标签转可读文本\n- feat: `@Commands` 注解重构 —— `command`\u002F`describe`\u002F`onlyAdmin` 字段 + `RegisteredCommand` 数据类\n- feat: `BaseCommand.DispatchResult` 枚举（HANDLED\u002FNOT_HANDLED\u002FCUSTOM_COMMAND）\n- feat: `CustomCommandRegistry` 运行时注册\u002F注销 + 面板自动同步\n- feat: `MenuManager` 改为 HTTP API 动态面板（启动时同步，上限 20 条命令）\n- feat: `ConfigProvider` 新增 `isAuthenticationEnabled()`、`commandMenuList()`、motd.md 模板\n- feat: `QClient.syncGroupPanels()` 启动时一次性同步面板，运行时注册不再重复同步\n- feat: `motd.md` Markdown 模板内置，首次启动自动解压\n- feat: 动态 `\u002F帮助` 命令 —— 自动列出所有已注册命令（含自定义命令）\n- feat: `blockMotd` \u002F `unblockMotd` —— 按群屏蔽 MOTD 查询\n- feat: `GroupSettingsRepository` 新增 `motdBlocked` 群级设置\n- feat: `BaseCommand.allCommands()` 全局命令注册表\n\n**Bug 修复：**\n- fix: 绑定游戏账号后自动添加白名单（QQ 直接绑定 + 游戏验证两条路径均已修复）\n- fix: `HuHoBotSpigot.companion` 静态实例，支持 `getInstance()` 调用\n- fix: 命令面板超出上限时日志提示，仅同步前 20 条命令\n\n**已知限制：**\n- 本地 QQ Bot SDK 版本不含 `MsgPack`\u002F`OnBotRecvMsg`\u002F`OnBotCommand` 事件，暂不支持第三方插件监听 QQ 消息事件\n\n**群服互通 @提及：**\n- feat: `\u002Fat` 命令 —— 游戏内发送 QQ @消息，支持 Tab 补全昵称\n- feat: QQ→游戏 @提及蓝色高亮（`§9@玩家名`）+ 叮音效提醒\n- feat: `NicknameManager` 昵称 ↔ openid 双向映射，持久化到 `nicknames.dat`\n- feat: `resolveAtMentions` 自动将 `@昵称` 转为 QQ `\u003C@openid>` 格式\n- feat: `escapeMarkdown` 转义玩家名中 `_` 等特殊字符，防止被识别为斜体\n\n**WebUI：**\n- feat: 暗色简约风格 WebUI，14 个配置分组，覆盖所有配置项\n- feat: 启动时自动生成 24 位随机密码\n- fix: 侧边栏空 bug（renderNav 移到 schema 加载后调用）\n- fix: 保存后值丢失 bug（保存后重新读取配置刷新 UI）\n\n**AI Agent 群管理：**\n- feat: 禁言到期时间服务端计算，不依赖 AI\n- feat: @提及识别 —— AI 可直接使用 @成员的用户名进行操作\n- feat: 用户名显示 —— Agent 操作结果显示管理员\u002F成员真实用户名\n- feat: 审批\u002F拒绝通知显示操作管理员用户名\n- fix: `get_group_members` API 移除（无权限）\n- fix: 禁言、审批等工具 `group_openid` 标注\"可选，已自动绑定当前群\"\n\n**Bug 修复：**\n- fix: openid 被当作昵称存储导致 Tab 补全显示 openid\n- fix: QQ→游戏转发时 openid 被当作发送者显示名\n- fix: NicknameManager.load() 自动跳过昵称是 openid 的脏数据\n- fix: plugin.yml `\u002Fat` 命令描述修正\n\n### v1.2.0-alpha.1\n\n- 初版 WebUI 图形化配置\n- AI Agent 群管理功能（禁言、入群审批、自动审批策略）\n- @提及识别与用户名显示\n\n### v1.1.0-alpha.3\n\n- AI Agent 系统初版\n- SKILL 按需加载系统\n- `\u002Fmotd` 服务器状态查询\n- `\u002Fstop` 紧急停止命令\n- 指令面板自动同步\n\n---\n\n## 许可证\n\n本项目采用 [GNU Affero General Public License v3.0](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Fblob\u002Fmaster\u002FLICENSE) 许可证。\n\n### 第三方资源\n\n**脚本扩展系统**（`addons\u002F\u003C名字>\u002Fmain.js` \u002F `main.lua` \u002F `main.py` 与 `Bird` 桥）借鉴并移植自\n[birdlibraryapi](https:\u002F\u002Fgithub.com\u002Fprach1121\u002Fbirdlibraryapi)（Apache-2.0），原作者 prach1121。\n`BirdScriptApi` 由该项目的 `BirdAPI` 移植而来，并按 Spigot 1.16+（不用 Adventure API）与\nHuHoBot 附属插件注册做了适配；`ScriptAddonLoader`、`ScriptPackage`、`AddonManifest`、\n`ScriptLoadResult`、`LoadedScript` 等类同样参考了它的加载与脚本生命周期设计。\n源码文件头部保留了原始出处与许可证声明。\n\n背包查看功能使用 [Faithful 32x](https:\u002F\u002Ffaithfulpack.net\u002F) 贴图包（[Faithful License v3](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Fblob\u002Fmaster\u002Fserver\u002FSpigot\u002Fsrc\u002Fmain\u002Fresources\u002Finventory\u002Ffaithful32x\u002FLICENSE.txt)）。\n\n这意味着你可以自由使用、修改和分发本软件，但：\n- 修改后的版本必须以相同许可证发布\n- 如果通过网络提供服务，必须向用户提供源代码\n- 包含来自贡献者的专利授权\n\n---\n\n[![bStats](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdynamic\u002Fjson?url=https%3A%2F%2Fbstats.org%2Fapi%2Fv1%2Fplugins%2F34268%2Fcharts%2Fservers%2Fdata%3FmaxElements%3D1&query=%24%5B0%5D%5B1%5D&label=servers&color=blue)](https:\u002F\u002Fbstats.org\u002Fplugin\u002Fbukkit\u002F34268)\n[![players](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdynamic\u002Fjson?url=https%3A%2F%2Fbstats.org%2Fapi%2Fv1%2Fplugins%2F34268%2Fcharts%2Fplayers%2Fdata%3FmaxElements%3D1&query=%24%5B0%5D%5B1%5D&label=players&color=blue)](https:\u002F\u002Fbstats.org\u002Fplugin\u002Fbukkit\u002F34268)\n","medium",0,[],"https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F197658304?v=4","HuHoBot\u002FPenguinAgent--server-nukkit",{"id":28,"name":29,"url":30},"AGPL-3.0","GNU Affero General Public License v3.0","https:\u002F\u002Fspdx.org\u002Flicenses\u002FAGPL-3.0.html",null,"server\u002FNukkit\u002Fsrc\u002Fmain\u002Fresources\u002Fplugin.yml","HuHoBotPenguin","nkx","","https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent",9,"HuHoBot-Penguin的超级牛逼的功能宇宙超级无敌非常特别齐全的分支",[34,40],"nkmot",1791120931,[43,65,82,99,116,133,150,160,170,180,191,202,212,221,232,242,253,263,274,285,296,307,318,329,340,351,362,373,384,395],{"changelog":44,"downloads":23,"files":45,"name":62,"prerelease":63,"published_at":41,"version":64},"## 修复背包图片里 5 个物品的图标变形\n\n查看背包时，末地烛被画成了「一根米色竖条 + 中间一个灰方块」的怪形状，脚手架则显示为问号方块。\n\n### 原因\n\n这 5 个物品在原版 `models\u002Fitem\u002F\u003Cid>.json` 里的 parent 是 `block\u002F\u003Cmodel>`，也就是**它们的物品图标本来就是 3D 方块模型渲染**，而不是一张平面贴图：\n\n```\nassets\u002Fminecraft\u002Fmodels\u002Fitem\u002Fend_rod.json  →  { \"parent\": \"minecraft:block\u002Fend_rod\" }\n```\n\n而背包图片渲染器只有两条路——「等距完整方块」和「平面贴图」。这些物品的 `Material.isSolid()` 为 `false`，于是走了平面分支，把**方块贴图图集**（末地烛那张图左边窄条是烛杆侧面、中间小方块是顶面）直接铺平画了出来。脚手架更糟，它根本没有对应的物品贴图，只能落到 unknown 问号方块。\n\n### 修复\n\n按原版方块模型的 elements \u002F uv \u002F 纹理引用离线烘焙成 64×64 图标，投影与明暗（顶 1.0 \u002F 左 0.80 \u002F 右 0.68）与现有等距方块完全一致：\n\n| 物品 | 修复前 | 修复后 |\n| --- | --- | --- |\n| 末地烛 | 被掰弯的图集 | 细烛杆 + 底座 |\n| 雪 | 白色噪点方块 | 薄白雪层 |\n| 传送植物 | 紫色噪点方块 | 立体植株 |\n| 传送花 | 紫色噪点方块 | 立体植株 |\n| 脚手架 | unknown 问号方块 | 完整框架 |\n\n判定方式不是肉眼猜测：按原版物品模型的 parent 字段扫描了全部 84 个「非完整方块」材质，只有这 5 个属于三维模型渲染。其余 79 个（虞美人、火把、轨道、珊瑚、蘑菇等）虽然贴图同样取自 `block\u002F`，但原版物品模型本就是 `layer0: block\u002Fxxx` 平面贴图，图标正确，**未做改动**。\n\n### 升级提示\n\n- 只新增 5 张图标，**无代码改动、无配置变化**，配置版本仍为 10\n- 直接替换 jar 即可\n\n## 附件\n\n| 文件 | 说明 |\n| --- | --- |\n| `HuHoBot-Penguin_Spigot-1.18.1.jar` | 主插件（Spigot \u002F Paper） |\n| `HuHoBot-Engine-GraalJs-1.18.1.jar` | GraalJs 扩展 |\n| `HuHoBot-Engine-GraalPy-1.18.1.jar` | GraalPy 扩展 |\n\nCloses #24\n",[46,52,57],{"filename":47,"primary":48,"sha256":49,"size":50,"url":51},"HuHoBot-Engine-GraalJs-1.18.1.jar",true,"bd0ac04090c5562c4049c43df80e4c77cea4534165e2f6dd053d2049858d3293",35706110,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.18.1\u002FHuHoBot-Engine-GraalJs-1.18.1.jar",{"filename":53,"primary":48,"sha256":54,"size":55,"url":56},"HuHoBot-Engine-GraalPy-1.18.1.jar","e801d0cc718a2cb44d0819d53e05a057dc03e6fb1af59a7a84f938f567949220",130672978,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.18.1\u002FHuHoBot-Engine-GraalPy-1.18.1.jar",{"filename":58,"primary":48,"sha256":59,"size":60,"url":61},"HuHoBot-Penguin_Spigot-1.18.1.jar","995307217d210fb43314eb63c5e8498d10aad287c32732c1550486b04634ad8b",23795596,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.18.1\u002FHuHoBot-Penguin_Spigot-1.18.1.jar","v1.18.1 - 修复背包图片里 5 个物品的图标变形",false,"v1.18.1",{"changelog":66,"downloads":23,"files":67,"name":79,"prerelease":63,"published_at":80,"version":81},"## 免验证名单：无需 QQ 也能进服\n\n部分人员受限于自身设备或环境，无法使用或安装 QQ，强制绑定会让他们进不了服务器。管理员人工审查后把他们加入**免验证名单**，这些人无需绑定即可正常游玩。\n\n- 新增配置 `binding.verify-exempt`\n- 新增管理员命令 `\u002F添加免验证 \u003C玩家名>`、`\u002F取消免验证 \u003C玩家名>`，改动即时写入配置，无需重启\n- WebUI「绑定」页可直接编辑该列表\n\n```\n管理员：\u002F添加免验证 Steve\nHuHoBot：已添加免验证：Steve\n        该玩家无需 QQ 绑定即可进入服务器\n```\n\n## 免验证玩家解绑不再被踢出\n\n他们本来就能免绑定进服，解绑后踢出没有意义。非免验证玩家维持原样：强制绑定开启时解绑即踢出。\n\n## 更正：游戏内验证在强制绑定下仍然有效\n\n此前文档与配置注释里写的「强制绑定开启时 `binding.require-game-verification` 无效」不准确：\n\n- 被踢出的玩家用 5 位验证码 `\u002F绑定 \u003C验证码>` **直接完成绑定**，确实不经过游戏内验证；\n- 但**免验证玩家主动 `\u002F绑定 \u003C游戏ID>` 走的仍是普通流程**，需不需要游戏内 `\u002Fqqbind` 验证由 `binding.require-game-verification` 决定。\n\nconfig.yml、WebUI 说明与文档站均已更正；配置项的补充说明改为按位置替换，你旧配置里那句错误的注释会在下次启动时被自动覆盖。\n\n## 升级提示\n\n- 配置版本升到 **10**，启动时自动补 `binding.verify-exempt` 与两条命令开关\n- 免验证名单默认留空，升级后行为与 1.17.0 一致\n- 建议停服替换 jar 后启动一次\n\n## 附件\n\n| 文件 | 说明 |\n| --- | --- |\n| `HuHoBot-Penguin_Spigot-1.18.0.jar` | 主插件（Spigot \u002F Paper） |\n| `HuHoBot-Engine-GraalJs-1.18.0.jar` | GraalJs 扩展 |\n| `HuHoBot-Engine-GraalPy-1.18.0.jar` | GraalPy 扩展 |\n\nCloses #21\n",[68,71,74],{"filename":69,"primary":48,"sha256":49,"size":50,"url":70},"HuHoBot-Engine-GraalJs-1.18.0.jar","https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.18.0\u002FHuHoBot-Engine-GraalJs-1.18.0.jar",{"filename":72,"primary":48,"sha256":54,"size":55,"url":73},"HuHoBot-Engine-GraalPy-1.18.0.jar","https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.18.0\u002FHuHoBot-Engine-GraalPy-1.18.0.jar",{"filename":75,"primary":48,"sha256":76,"size":77,"url":78},"HuHoBot-Penguin_Spigot-1.18.0.jar","8c0b6d770809829976815aa3eb419ed515f309546a5b107477f391b55bbdd99a",23789084,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.18.0\u002FHuHoBot-Penguin_Spigot-1.18.0.jar","v1.18.0 - 免验证名单，无需 QQ 绑定也可进服",1791115691,"v1.18.0",{"changelog":83,"downloads":23,"files":84,"name":96,"prerelease":63,"published_at":97,"version":98},"## HuHoBot-Penguin_Spigot v1.17.0\n\n强制绑定、配置文件自动升级，以及 WebUI 分节介绍改写。\n\n### 下载\n\n| 文件 | 用途 | 大小 |\n|---|---|---|\n| `HuHoBot-Penguin_Spigot-1.17.0.jar` | **主插件，必需**。放在 `plugins\u002F` | 22.7 MB |\n| `HuHoBot-Engine-GraalJs-1.17.0.jar` | 可选。仅当你要写 `.js` 脚本时需要，放进 `plugins\u002FHuHoBotPenguin\u002Fengines\u002F` | 34.1 MB |\n| `HuHoBot-Engine-GraalPy-1.17.0.jar` | 可选。仅当你要写 `.py` 脚本时需要，放进 `plugins\u002FHuHoBotPenguin\u002Fengines\u002F` | 124.6 MB |\n\n只想用现成附属插件的话，**只下载主插件**即可，两个引擎包不必装。\n`.lua` 脚本不需要任何引擎——LuaJ 已经打进主 jar，不放引擎包插件照常启动，只是对应语言的脚本加载失败，其它语言不受影响。\n引擎包需与主插件**同一次构建**产出（文件名版本号要一致，对不上时启动会给出告警）。\n\n### 强制绑定\n\n开启后，没绑定的玩家一进服务器就会被踢出，并拿到一个 5 位验证码。在 QQ 群执行 `\u002F绑定 \u003C验证码>` 完成绑定，重新进服即可游玩。解绑的瞬间，其在线连接也会被立即断开。\n\n```yaml\nbinding:\n  force-bind: true\n  force-bind-groups:\n    - \"123456789\"\n```\n\n踢出画面里带全部信息：服务器名、说明、验证码、群号与命令、重新进入会刷新验证码的提示。\n\n**开启前请注意**\n\n- **不要叠加任何白名单插件，也不要开启 Minecraft 自带白名单**。否则未绑定玩家会在白名单阶段先被拦下，拿到不了验证码。\n- 强制绑定依赖 QQ 机器人可用。QQ 未连接时插件会自动把 `binding.force-bind` 改回 `false` 并在日志说明，避免把人挡在门外却绑不了。\n- 强制绑定开启时，绑定与解绑不再执行白名单同步命令。\n\n绑定时的游戏内验证（`binding.require-game-verification`）在强制绑定下不生效。\n\n### 配置文件自动升级\n\n以前升级插件时，旧 `config.yml` 里经常缺一堆新配置项（比如 `update-check`、`placeholder-api`），因为 `config.contains()` 会回落到 jar 模板的默认值，误判成\"已存在\"就跳过了。\n\n现在改成文本级增量升级：\n\n- 缺失的配置项连同注释补进对应段落，缺失的中间层级自动创建\n- 旧配置里被清掉的注释每次启动自动补回\n- 只增不删，你改过的值原样保留\n\n配置版本号升到 **9**。\n\n### WebUI\n\n每个分节的介绍改为手写文案，说明这一页是干什么的、有什么坑，而不是把各字段说明拼成一长串。\n\n### 升级提示\n\n从 1.16.x 升级无需改配置，启动时会自动补齐新增配置项。建议停服替换 jar 后启动一次，让配置升级逻辑跑完。\n\n需要注意：此前没有配置过 `binding.require-game-verification` 的服务器，升级后该项会补为 `true`，即绑定需要游戏内 `\u002Fqqbind` 验证。不希望改变的服务器请手动填 `false`。",[85,88,91],{"filename":86,"primary":48,"sha256":49,"size":50,"url":87},"HuHoBot-Engine-GraalJs-1.17.0.jar","https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.17.0\u002FHuHoBot-Engine-GraalJs-1.17.0.jar",{"filename":89,"primary":48,"sha256":54,"size":55,"url":90},"HuHoBot-Engine-GraalPy-1.17.0.jar","https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.17.0\u002FHuHoBot-Engine-GraalPy-1.17.0.jar",{"filename":92,"primary":48,"sha256":93,"size":94,"url":95},"HuHoBot-Penguin_Spigot-1.17.0.jar","974a8b9fbae6e558bd13d444648a423df5842dc2013085afefae713059cf6ec3",23785412,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.17.0\u002FHuHoBot-Penguin_Spigot-1.17.0.jar","HuHoBot-Penguin_Spigot v1.17.0",1791091513,"v1.17.0",{"changelog":100,"downloads":23,"files":101,"name":113,"prerelease":63,"published_at":114,"version":115},"## HuHoBot-Penguin_Spigot v1.16.0\n\n死亡播报、WebUI 扫码连接、绑定跨群共享，以及内联键盘的三个修复。\n\n对应 Issues：[#14](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Fissues\u002F14) 死亡播报互通 · [#15](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Fissues\u002F15) WebUI 扫码连接入口 · [#16](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Fissues\u002F16) 绑定信息跨群互通\n\n### 下载\n\n| 文件 | 用途 | 大小 |\n|---|---|---|\n| `HuHoBot-Penguin_Spigot-1.16.0.jar` | **主插件，必需**。放在 `plugins\u002F` | 22.7 MB |\n| `HuHoBot-Engine-GraalJs-1.16.0.jar` | 可选。仅当你要写 `.js` 脚本时需要，放进 `plugins\u002FHuHoBotPenguin\u002Fengines\u002F` | 34.1 MB |\n| `HuHoBot-Engine-GraalPy-1.16.0.jar` | 可选。仅当你要写 `.py` 脚本时需要，放进 `plugins\u002FHuHoBotPenguin\u002Fengines\u002F` | 124.6 MB |\n\n只想用现成附属插件的话，**只下载主插件**即可，两个引擎包不必装。\n`.lua` 脚本不需要任何引擎——LuaJ 已经打进主 jar，不放引擎包插件照常启动，只是对应语言的脚本加载失败，其它语言不受影响。\n引擎包需与主插件**同一次构建**产出（文件名版本号要一致，对不上时启动会给出告警）。\n\n### 死亡播报\n\n玩家死亡后自动播报到 QQ 群，可在 WebUI「玩家事件」页开关。\n\n```\nplayer-events.death.enabled = true\nplayer-events.death.format  = \"[游戏] {message}\"\n```\n\n`{message}` 是自动生成的中文死亡描述（不是原版英文），例如「Steve 被苦力怕杀死了」「Steve 从高处摔落而死」，覆盖玩家\u002F生物\u002F投射物击杀与摔落、岩浆、火烧、溺水和窒息、虚空、闪电、爆炸、中毒、饿死等 14 种死法。`{killer}` 是击杀者名。\n\n### WebUI 扫码连接\n\n首次使用不必再调终端窗口大小。启动后打开 WebUI「QQ 机器人」页点「打开扫码连接」，手机 QQ 扫码即自动写入 AppID \u002F Secret 并连接。\n\n- 未配置凭据时 WebUI 照常启动，服务器不再卡在启动阶段等扫码\n- 控制台二维码与网页扫码**共用同一次授权任务**，任一端扫码成功或取消，另一端状态同步\n- 二维码过期会自动刷新，30 秒未选择视为取消\n\n### 绑定跨群共享\n\n绑定改为以 **openid** 为唯一标识：在一个群绑定成功后，该服务器的所有群都视为已绑定，查背包\u002F末影箱不用再绑一次。MC 玩家名同时改为全局唯一，避免冒名顶替。\n\n`command-state.ini` 会自动从旧的按群分组格式迁移为按 openid 索引，跨群重复记录会合并并保留原有显示名称设置，无需手动改文件。\n\n新增管理员命令：\n\n```\n\u002F强制解绑 \u003CMC玩家名 | @某人 | openid | QQ昵称>\n```\n\n用于撤销冒名顶替的绑定，会同步移出白名单。`\u002F解除绑定` 现在会先发「确定 \u002F 取消」确认键盘，防止误操作。\n\n### 键盘修复\n\n- 内联键盘按钮不渲染（漏调 `RowBuilder.build()`，导致 `rows` 为空）\n- 解绑确认点击无反应\n- 点击后客户端提示「请求第三方失败 \u002F 请求超时」（未按官方要求回应互动事件，AI 审批按钮同样受影响）\n- 消息载荷按官方文档修正：传 `markdown` 时 `content` 置空\n\n### 升级提示\n\n从 1.15.x 升级无需改配置。建议在停服状态下替换 jar，绑定数据会在下次启动时自动迁移。\n---\n\nFixes #14\nFixes #15\nFixes #16\r\n",[102,105,108],{"filename":103,"primary":48,"sha256":49,"size":50,"url":104},"HuHoBot-Engine-GraalJs-1.16.0.jar","https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.16.0\u002FHuHoBot-Engine-GraalJs-1.16.0.jar",{"filename":106,"primary":48,"sha256":54,"size":55,"url":107},"HuHoBot-Engine-GraalPy-1.16.0.jar","https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.16.0\u002FHuHoBot-Engine-GraalPy-1.16.0.jar",{"filename":109,"primary":48,"sha256":110,"size":111,"url":112},"HuHoBot-Penguin_Spigot-1.16.0.jar","843fe6c9490096642dfa05635dd41268f2015dc19422402975bc6a08733072f9",23763838,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.16.0\u002FHuHoBot-Penguin_Spigot-1.16.0.jar","HuHoBot-Penguin_Spigot v1.16.0",1791071209,"v1.16.0",{"changelog":117,"downloads":23,"files":118,"name":130,"prerelease":63,"published_at":131,"version":132},"## HuHoBot-Penguin_Spigot v1.15.1\n\n修复版本：QQ 指令面板同步 30019「面板版本冲突」。直接替换 `plugins\u002F` 下的主插件 jar 重启即可。\n\n### 下载\n\n| 文件 | 用途 | 大小 |\n|---|---|---|\n| `HuHoBot-Penguin_Spigot-1.15.1.jar` | **主插件，必需**。放在 `plugins\u002F` | 22.6 MB |\n| `HuHoBot-Engine-GraalJs-1.15.1.jar` | 可选。仅当你要写 `.js` 脚本时需要，放进 `plugins\u002FHuHoBotPenguin\u002Fengines\u002F` | 34.1 MB |\n| `HuHoBot-Engine-GraalPy-1.15.1.jar` | 可选。仅当你要写 `.py` 脚本时需要，放进 `plugins\u002FHuHoBotPenguin\u002Fengines\u002F` | 124.6 MB |\n\n只想用现成附属插件的话，**只下载主插件**即可，两个引擎包不必装。\n`.lua` 脚本不需要任何引擎——LuaJ 已经打进主 jar，不放引擎包插件照常启动，只是对应语言的脚本加载失败，其它语言不受影响。\n引擎包需与主插件**同一次构建**产出（文件名版本号要一致，对不上时启动会给出告警）。\n\n### 修复内容\n\n- **fix: QQ 指令面板同步报 30019「面板版本冲突」** —— 原位更新按官方文档补传 `panel.version`（详情接口顶层与 `panel` 内两个位置都读取）；冲突时重读一次版本再重试一次\n- **fix: 面板同步并发自撞与撞限频（40030009「面板操作进行中」）** —— 同步入口串行化，同一时刻只跑一次，期间的请求收敛为一次补跑；两次同步最小间隔 6 秒，对应官方写接口 10 QPM 限频\n- **improve:** 面板同步错误提示区分 30013 \u002F 30019 \u002F 40030009 并给出排查建议\n\n### 原因说明\n\n`PUT \u002Fv2\u002Fpanels\u002F{panel_id}` 属于乐观并发接口：请求体的 `panel.version` 必须等于服务端当前版本，否则返回 30019。旧实现从查询详情里取回了面板却丢掉了 `version`，只提交 `remark` + `items`，因此原位更新必然触发版本冲突；多个命令注册并发触发同步时还会互相覆盖，进一步触发 40030009。本版本在请求中带上版本号、冲突时重读重试，并对同步入口做串行化与节流。\n",[119,122,125],{"filename":120,"primary":48,"sha256":49,"size":50,"url":121},"HuHoBot-Engine-GraalJs-1.15.1.jar","https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.15.1\u002FHuHoBot-Engine-GraalJs-1.15.1.jar",{"filename":123,"primary":48,"sha256":54,"size":55,"url":124},"HuHoBot-Engine-GraalPy-1.15.1.jar","https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.15.1\u002FHuHoBot-Engine-GraalPy-1.15.1.jar",{"filename":126,"primary":48,"sha256":127,"size":128,"url":129},"HuHoBot-Penguin_Spigot-1.15.1.jar","1e74bcef597d67b6a25c6494082dcd3f96df53acd31210df78cef1c5524e660d",23732857,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.15.1\u002FHuHoBot-Penguin_Spigot-1.15.1.jar","HuHoBot-Penguin_Spigot v1.15.1",1791020703,"v1.15.1",{"changelog":134,"downloads":23,"files":135,"name":147,"prerelease":63,"published_at":148,"version":149},"## HuHoBot-Penguin_Spigot v1.15.0\n\n### 下载\n\n| 文件 | 用途 | 大小 |\n|---|---|---|\n| `HuHoBot-Penguin_Spigot-1.15.0.jar` | **主插件，必需**。放进 `plugins\u002F` | 22.6 MB |\n| `HuHoBot-Engine-GraalJs-1.15.0.jar` | 可选。仅当你要写 `.js` 脚本时需要，放进 `plugins\u002FHuHoBotPenguin\u002Fengines\u002F` | 34.1 MB |\n| `HuHoBot-Engine-GraalPy-1.15.0.jar` | 可选。仅当你要写 `.py` 脚本时需要，放进 `plugins\u002FHuHoBotPenguin\u002Fengines\u002F` | 124.6 MB |\n\n只想用现成附属插件的话，**只下载主插件**即可，两个引擎包不必装。\n\n`.lua` 脚本不需要任何引擎——LuaJ 已经打进主 jar。**不放引擎包插件照常启动**，只是对应语言的脚本加载失败，其它语言不受影响。\n\n引擎包需与主插件**同一次构建**产出（文件名版本号要一致，对不上时启动会给出告警）。\n\n### 脚本扩展系统（新增，仅 Spigot \u002F Paper）\n\n不用编译就能扩展插件，用 **JavaScript \u002F Lua \u002F Python** 写脚本即可。\n\n**目录式脚本插件**——`plugins\u002FHuHoBotPenguin\u002Faddons\u002F\u003C名字>\u002F` 下放一个目录就是一个插件：\n\n```\nplugins\u002FHuHoBotPenguin\u002Faddons\u002Fhello\u002F\n├── metadata.yaml          name \u002F version \u002F author \u002F description \u002F entry\n├── _conf_schema.json      配置声明（可选），默认值写回 addons\u002Fconfig\u002Fhello.json\n├── requirements.txt       Python 依赖声明（可选，仅预检提示）\n└── main.js                或 main.lua \u002F main.py\n```\n\n根目录上直接放 `.js` \u002F `.lua` \u002F `.py` **不再加载**（会有一条提示告诉你挪到哪）。\n\n**`Bird` 桥**——三种语言注入同一组对象，能力完全对等：\n\n| 能力 | 说明 |\n|------|------|\n| `Bird.onEvent` | 监听任意 Bukkit 事件，可指定优先级 |\n| `Bird.onCommand` | 注册游戏内命令，**不需要改 `plugin.yml`**，支持 Tab 补全 |\n| `Bird.runTask*` | 同步 \u002F 异步定时任务，重载时自动取消 |\n| `Bird.fetch` | 异步 HTTP，回调切回主线程 |\n| `Bird.on` \u002F `Bird.emit` | 跨脚本事件总线 |\n| `Bird.registerBotCommand` | 往 QQ 群里加自定义命令 |\n| `config` \u002F `kv` \u002F `setData` | 用户可改配置、键值存储、脚本私有持久化 |\n| 玩家 \u002F 世界 \u002F 方块 \u002F 物品 \u002F 音效 \u002F 粒子 | 常用 Bukkit 操作的封装 |\n\n**引擎按需安装**：\n\n| 入口 | 引擎 | 放在哪 | 体积 |\n|------|------|--------|------|\n| `main.lua` | LuaJ 3.0.1 | 已在主 jar 内 | — |\n| `main.js` | GraalJS 24.1.2 | `plugins\u002FHuHoBotPenguin\u002Fengines\u002FHuHoBot-Engine-GraalJs-\u003C版本>.jar` | 约 34 MB |\n| `main.py` | GraalPy 24.1.2（Python 3） | `plugins\u002FHuHoBotPenguin\u002Fengines\u002FHuHoBot-Engine-GraalPy-\u003C版本>.jar` | 约 125 MB |\n\n### 重载\n\n```\n\u002Fhuhobot scripts reload              卸载全部再加载全部\n\u002Fhuhobot scripts reload hello        只重载 addons\u002Fhello\u002F，目录名大小写不敏感\n```\n\n重载和**加载失败**都会撤销该脚本登记的全部内容——Bukkit 事件、动态命令、定时任务、QQ 群命令、addon 元数据，不会留下幽灵条目。`_enabled: false` 记为「跳过」而不是「失败」。\n\n### 兼容性\n\n- **仅 Spigot \u002F Paper 平台**（其它平台未适配）\n- 主插件保持 **Java 8 字节码**，可运行在 **1.16.5 及以上**服务端\n- 引擎包由 Java 17 构建，但只是被加载的库，不影响服务端自身的 Java 要求\n\n### 三语言写法差异\n\n同一种返回值，三种语言拿到的形态不同，这是最容易踩的地方：\n\n|  | 命令参数 | 列表 | 字典 |\n|---|---|---|---|\n| JavaScript | `args[0]` | `.length`、`arr[0]` | `obj.key` |\n| Lua | `args[1]` | `#t`、`t[1]`、`ipairs(t)` | `t.key`、`pairs(t)` |\n| Python | `args[0]` | `len(x)`、`for v in x` | `x[\"key\"]` |\n\n**Lua 侧是 1 起**。LuaJ 会把 Java 的 `List` \u002F `Map` 变成 userdata，在 Lua 里既不能取长度也不能 `pairs`，所以插件的 Lua 绑定层会把容器返回值转成真正的 table。另外 Lua 调用 `Bird` 的方法**必须用冒号**（`Bird:broadcast(...)`），点号会丢掉 `self` 导致参数错位。\n\n`Bird.tell` 支持玩家、任意 `CommandSender` 和玩家名三种重载，所以从控制台执行脚本命令也能正常回应；`giveItem` \u002F `sendActionBar` 这些只接受 `Player`，从控制台调用前先 `Bird.getPlayer(...)` 并判空。\n\n### 已知边界\n\n- `Bird.fetch` 走 JVM 默认信任库。目标站点证书链不被信任时会失败（例如本机装了流量代理时 GitHub 会被拦截），需要访问这类站点时把根证书导入服务端 JVM 的 `cacerts`。\n- Python 的 `requirements.txt` 只做 `import` 预检并打警告，**不会自动安装**任何第三方库。\n- `.py` 首次加载需要解压 GraalPy 标准库，约 10 秒，之后有缓存会快很多。\n- 脚本回调在主线程执行，回调里不要做长时间阻塞操作。\n\n### 文档\n\n完整说明见仓库 [`docs\u002Fspigot-script-addons.md`](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Fblob\u002Fmaster\u002Fdocs\u002Fspigot-script-addons.md)，含全部 `Bird` API 清单、三语言完整示例和常见报错速查。\n\n### 致谢\n\n脚本扩展系统（`Bird` 桥与脚本加载、生命周期设计）借鉴并移植自 [birdlibraryapi](https:\u002F\u002Fgithub.com\u002Fprach1121\u002Fbirdlibraryapi)（Apache-2.0，原作者 prach1121），并按 Spigot 1.16+ 与 HuHoBot 附属插件注册做了适配。\n",[136,139,142],{"filename":137,"primary":48,"sha256":49,"size":50,"url":138},"HuHoBot-Engine-GraalJs-1.15.0.jar","https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.15.0\u002FHuHoBot-Engine-GraalJs-1.15.0.jar",{"filename":140,"primary":48,"sha256":54,"size":55,"url":141},"HuHoBot-Engine-GraalPy-1.15.0.jar","https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.15.0\u002FHuHoBot-Engine-GraalPy-1.15.0.jar",{"filename":143,"primary":48,"sha256":144,"size":145,"url":146},"HuHoBot-Penguin_Spigot-1.15.0.jar","2faaadf47c5fcae15fabdc187ba70643419f67a5d037761db85641b62d218326",23730922,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.15.0\u002FHuHoBot-Penguin_Spigot-1.15.0.jar","HuHoBot-Penguin_Spigot v1.15.0",1790778344,"v1.15.0",{"changelog":151,"downloads":23,"files":152,"name":158,"prerelease":63,"published_at":159,"version":158},"## HuHoBot-Penguin_Spigot v1.14.0\n\n### WebUI 附属插件中心（新增）\n- 侧边栏新增「附属插件中心」分区，从附属插件中心 API 拉取插件列表\n- **只显示 Spigot \u002F Paper 平台的插件**，其他平台自动过滤\n- 支持按名称\u002F简介搜索，可展开查看插件详情（readme）\n- 一键下载安装：下载到服务端 `plugins\u002F` 目录，**不做热加载**，飘窗提示「重启服务器后生效」\n- 下载记录持久化到 `installed-addons.json`，刷新页面不会退回「未安装」\n- 支持删除已下载的插件（文件不存在时直接清理记录），同样提示重启后生效\n\n### WebUI 体验优化\n- Toast 从底部改为顶部中上方飘窗，带淡入缩放动画\n- 面板切换、配置字段、状态卡片逐条错峰淡入\n- 导航项与按钮点击涟漪反馈，按下回弹，聚焦光圈\n- 「保存全部」按钮保存中显示 loading 并禁用\n- 分区图标补齐：绑定 🔗 \u002F 命令黑名单 🚫 \u002F 版本更新 🆕 \u002F PlaceholderAPI 🔤\n- 群名称在获取完成前显示「正在获取…」，失败后才显示「名称暂不可用」\n\n### 群接入\n- 群列表为空或未收录该群时，**收到任意消息**即自动把群 OpenID 写入 `bot.groups`（不再要求先发「查信息」）\n\n### 群服互通与占位符\n- 群服互通默认格式恢复为 `[游戏] {name}: {message}` \u002F `[QQ] {name}: {message}`\n- 绑定后不再自动把 QQ→游戏 显示名切成 MC 名，默认仍用 QQ 用户名，需要时用 `\u002FMC显示名称 MC` 切换\n- PlaceholderAPI 解析改用在线玩家实例，玩家类占位符可正常返回\n\n### 其它\n- 群名获取失败日志改为按数据源汇总，便于定位\n- 群名刷新失败 30 秒内不重复请求，控制台不再刷屏\n- 版本检查失败日志区分数据源（gh-proxy \u002F github）\n",[153],{"filename":154,"primary":48,"sha256":155,"size":156,"url":157},"HuHoBot-Penguin_Spigot-1.14.0.jar","022aa2487c68711e0c4579f0389a76a606229b32bd854e0edafcf05d7c97b54d",24921611,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.14.0\u002FHuHoBot-Penguin_Spigot-1.14.0.jar","v1.14.0",1790404575,{"changelog":161,"downloads":23,"files":162,"name":168,"prerelease":63,"published_at":169,"version":168},"## HuHoBot-Penguin_Spigot v1.13.0\n\n本次实现并关闭以下 Issue：\n\n### #10 Agent 获取类工具结果不再刷屏\n- 获取插件列表 \u002F 命令帮助 \u002F 服务器日志的结果只交给 AI，不再在群里发卡片\n- 新增开关 `agent.hide-fetch-results`（默认开启），需要回显可在 WebUI 或配置文件关闭\n\n### #9 接入 PlaceholderAPI\n- 安装 PlaceholderAPI 后，配置里的 `%占位符%` 交由 PAPI 解析（纯反射接入，不引入编译期依赖，未安装时原样保留）\n- 覆盖场景：游戏↔QQ 双向转发、进服\u002F退服通知、白名单命令、自定义命令、在线列表与 MOTD 模板\n- 玩家类占位符使用在线玩家实例解析；新增开关 `placeholder-api.enabled`（默认开启）\n- 默认配置文本未改动，也不内置任何占位符\n\n### #8 版本更新提醒\n- 启动时后台检查一次，`\u002F版本` 命令再检查一次（10 分钟内复用结果）\n- `\u002F版本` 现在显示：当前版本、最新版本、官网 huhobot.dpdns.org、GitHub、文档 docs.huhobot.dpdns.org\n- 只认 GitHub 正式 Release，忽略 Pre-Release；发现新版提示前往官网下载\n- 数据源走 gh-proxy 代理的 GitHub API，国内网络可用；失败时降级为「暂时无法检查」，不影响启动\n- 新增 `update-check.enabled`、`update-check.url`（自定义数据源）\n\n### #7 QQ 群接入简化\n- WebUI「群列表」显示群名称（附 OpenID 尾号），点击可复制完整 OpenID；名称缓存 30 分钟并持久化\n- 状态页列出已绑定群名称\n- 陌生群发来消息时自动把群 OpenID 写入 `bot.groups`，无需手动查询复制；开关 `bot.auto-add-groups`（默认开启）\n\n### 其它\n- 群服互通默认格式恢复为 `[游戏] {name}: {message}` \u002F `[QQ] {name}: {message}`\n- 绑定后不再自动把 QQ→游戏 显示名切成 MC 名，默认仍用 QQ 用户名，需要时用 `\u002FMC显示名称 MC` 切换\n- 清理群管理 API 的调试输出，控制台更干净\n\n---\n\nCloses #7\nCloses #8\nCloses #9\nCloses #10\n",[163],{"filename":164,"primary":48,"sha256":165,"size":166,"url":167},"HuHoBot-Penguin_Spigot-1.13.0.jar","01becbc1776be3f9500b2f7f6bcde624f5f35569ebd8cf3de02086c99be25d0b",24894986,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.13.0\u002FHuHoBot-Penguin_Spigot-1.13.0.jar","v1.13.0",1790308825,{"changelog":171,"downloads":23,"files":172,"name":178,"prerelease":63,"published_at":179,"version":178},"## HuHoBot-Penguin_Spigot v1.12.0\n\n### 新功能\n- 集成 [bStats](https:\u002F\u002Fbstats.org\u002F) 统计（插件 ID `34268`），bStats 库已重定位到 `cn.huohuas001.bstats`，不会与其他插件冲突\n- README 新增项目计数器\n\n### 构建\n- 产物：`HuHoBot-Penguin_Spigot-1.12.0.jar`\n",[173],{"filename":174,"primary":48,"sha256":175,"size":176,"url":177},"HuHoBot-Penguin_Spigot-1.12.0.jar","a3a0f432b7da9b5cd10a9e6fde7512a7fa9a2ef1193687045192b31c8428c0f3",24862317,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.12.0\u002FHuHoBot-Penguin_Spigot-1.12.0.jar","v1.12.0",1790255536,{"changelog":181,"downloads":23,"files":182,"name":188,"prerelease":63,"published_at":189,"version":190},"## HuHoBot-Penguin_Spigot v1.11.0\n\n### 消息键盘自动撤回\n- 所有带键盘的消息发送后 **30 秒自动撤回**，不再长期刷屏\n- 点击键盘按钮后可立即撤回对应卡片\n\n### AI Agent 审批超时\n- 手动审批模式下，审批卡片 **30 秒未处理自动拒绝**，并撤回卡片\n- 超时后 Agent 会继续执行后续流程，并向群内说明操作已被自动拒绝\n- 任务被紧急停止时，待审批卡片同样会被撤回\n\n### 修复\n- 修复 qqpd-bot-java 消息撤回接口始终返回失败的问题（`RestApi` 依赖未绑定导致 DELETE 请求被跳过），撤回现已正常工作\n- 撤回失败时输出 HTTP 状态码与响应体，便于排查\n\n### 依赖\n- qqpd-bot-java 更新至 `0287d4e`（撤回接口修复）\n",[183],{"filename":184,"primary":48,"sha256":185,"size":186,"url":187},"HuHoBot-Penguin_Spigot-1.11.0.jar","79b4cd0316c8efd576efd896e4d3c09d6f0f4aeefcff85e45f8bb05c15aa3760",24766959,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.11.0\u002FHuHoBot-Penguin_Spigot-1.11.0.jar","HuHoBot v1.11.0",1790253011,"v1.11.0",{"changelog":192,"downloads":23,"files":193,"name":199,"prerelease":63,"published_at":200,"version":201},"## v1.10.0\n\n### 新功能\n- feat(inventory): 背包与末影箱渲染整合（#6）\n  - 3D 玩家模型渲染（`PlayerModelRenderer`），支持护甲、鞘翅、副手\n  - 离线背包快照（`OfflineInventorySnapshots`）——玩家离线后仍可查看最近一次背包\n  - 默认皮肤库与皮肤配置解析（`DefaultPlayerSkinProvider` \u002F `ServerSkinProfile`）\n  - 护甲材质与附魔光泽资源（`armor-assets`）\n- feat(bot): QQ 命令面板与命令体验整合（#6）\n  - 面板分页、重复面板清理、20 条上限截断\n  - 命令按权限分组显示、`pushMenu` \u002F `priority` 支持\n  - WebUI 自定义命令编辑保留 `pushMenu` 字段\n\n### Bug 修复\n- fix: 恢复 Faithful 32x 许可水印（渲染 PNG 底部署名）\n- fix: 背包查询名字大小写不匹配时正确解析在线玩家，不再误标离线快照\n- fix: 末影箱渲染失败与无离线快照的错误提示区分\n- fix: `onServerThread` 增加 10s 超时与异常处理，避免线程永久阻塞\n- fix: 背包快照 YAML 序列化移出主线程，避免周期性卡顿\n- fix: 关服时快照写盘等待超时 15s → 3s\n- fix: 瘦手臂（slim）胸甲 UV 宽度修正\n- fix: 皮肤下载失败增加 60s 负缓存，避免反复超时重试\n- fix: 配置重复段合并对行尾注释\u002F空子段更健壮，防止内容丢失\n- fix: `registerBotCommand` \u002F `unregisterBotCommand` 面板同步改为异步，避免阻塞附属插件主线程\n\n### 变更\n- change: jar 命名恢复为 `HuHoBot-Penguin_Spigot-{version}.jar`\n- change: `showAdminCommandsInMenu` 接口默认值统一为 `true`\n- change: 版本号 1.10.0（semver minor，新增功能）\n",[194],{"filename":195,"primary":48,"sha256":196,"size":197,"url":198},"HuHoBot-Penguin_Spigot-1.10.0.jar","10fd6995dbb3d05222d460dfe10da7625d80114f9e8ef96ac933e5fff4c6ef93",24763440,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.10.0\u002FHuHoBot-Penguin_Spigot-1.10.0.jar","HuHoBot v1.10.0",1790239715,"v1.10.0",{"changelog":203,"downloads":23,"files":204,"name":210,"prerelease":63,"published_at":211,"version":210},"## v1.9.0\n\n### 新功能\n- feat: 首次启动自动扫码登录 — 控制台打印二维码，手机 QQ 扫码后自动写入 AppID\u002FSecret 到 config.yml\n- feat: `\u002Fhb reload` 改为完整重启（softClose 关闭旧 WebSocket，不杀共享线程池）\n\n### 优化\n- opt: jar 文件名统一为 `PenguinAgent.jar`\n- opt: Gradle 配置缓存清理，确保 plugin.yml 版本号正确替换\n",[205],{"filename":206,"primary":48,"sha256":207,"size":208,"url":209},"PenguinAgent.jar","de693f7689c116d7098191db31251b510a84c413060aa3894a11a114ff69ac06",22750899,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.9.0\u002FPenguinAgent.jar","v1.9.0",1789829272,{"changelog":213,"downloads":23,"files":214,"name":219,"prerelease":63,"published_at":220,"version":219},"## v1.8.0\n\n### 新功能\n- feat: `\u002Fsend \u003C消息>` — 游戏内向 QQ 群发送消息，所有人可用\n- feat: `\u002Fhb reload` 完整重启 — 注销所有命令 → 重新加载配置 → 重启 QQ 客户端\n\n### Bug 修复\n- fix: plugin.yml 重复 permissions 段导致 `\u002Fqqbind` 权限丢失\n- fix: 禁用的命令不再注册到 QQ 指令面板\n- fix: 命令面板同步日志增强，便于排查问题\n- fix: `\u002Fhb reload` 后消息重复发送问题（softClose 替代 shutdown）\n- fix: Gradle 配置缓存导致 plugin.yml 版本号未更新\n\n### 其他\n- jar 文件名统一为 `PenguinAgent.jar`\n",[215],{"filename":206,"primary":48,"sha256":216,"size":217,"url":218},"a5db0715d5e055dcc76907b1bbe140141fe276090d1e3664d840e4bed42ad2e2",21376052,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.8.0\u002FPenguinAgent.jar","v1.8.0",1789785955,{"changelog":222,"downloads":23,"files":223,"name":229,"prerelease":63,"published_at":230,"version":231},"v1.4.0（2026-08-29）\n\n#\n\n### 构建信息\n- 构建时间: 2026-09-13T05:44:51Z\n- 提交哈希: [c5b0f4f545dbd04c9ba5c10cf847bcef62737d5a](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Fcommit\u002Fc5b0f4f545dbd04c9ba5c10cf847bcef62737d5a)\n",[224],{"filename":225,"primary":48,"sha256":226,"size":227,"url":228},"HuHoBot-Penguin_Spigot-1.7.0.jar","f8f48b13be8d981b7d1ea0b7a9443918c9c290f498045559928b2e9e8a9ebb63",21369870,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.7.0\u002FHuHoBot-Penguin_Spigot-1.7.0.jar","HuHoBot v1.7.0",1789278123,"v1.7.0",{"changelog":233,"downloads":23,"files":234,"name":240,"prerelease":63,"published_at":241,"version":240},"## v1.6.1\n\n### Bug 修复\n- fix: plugin.yml 重复 permissions 段导致 `\u002Fqqbind` 权限丢失，所有玩家无法使用\n",[235],{"filename":236,"primary":48,"sha256":237,"size":238,"url":239},"HuHoBot-Penguin_Spigot-1.6.1.jar","bfbdd08a6fd84205614450065c1a579e966f1154b267ed9ed8dfe5cfaba09dd0",21370784,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.6.1\u002FHuHoBot-Penguin_Spigot-1.6.1.jar","v1.6.1",1788577240,{"changelog":243,"downloads":23,"files":244,"name":250,"prerelease":63,"published_at":251,"version":252},"v1.6.0（2026-08-29）\r\n\r\n#\r\n\r\n### 构建信息\r\n- 构建时间: 2026-08-30T13:20:05Z\r\n- 提交哈希: [c667ac0884fe096f938b40b0c5f6e4ba7351a4ea](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Fcommit\u002Fc667ac0884fe096f938b40b0c5f6e4ba7351a4ea)\r\n",[245],{"filename":246,"primary":48,"sha256":247,"size":248,"url":249},"HuHoBot-Penguin_Spigot-1.6.0.jar","85c329261eeb46559a480aa70c1d7a4da2b7a3120d16880585963d57cdc32e4b",21367936,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.6.0\u002FHuHoBot-Penguin_Spigot-1.6.0.jar","HuHoBot v1.6.0",1788095862,"v1.6.0",{"changelog":254,"downloads":23,"files":255,"name":261,"prerelease":63,"published_at":262,"version":261},"## v1.5.0\n\n### 上游同步（扩展API合入）\n- feat: MsgPack\u002FMsgPackFactory 消息序列化\n- feat: OnBotRecvMsg\u002FOnBotCommand 事件支持\n- feat: AddonManager 扩展注册中心\n- feat: registerAddon\u002FregisterBotCommand 扩展API\n- feat: \u002Faddons 查看已安装扩展\n- feat: \u002F帮助三段式显示+按key去重\n- feat: MessageProvider.onBotReceivedGroupMessage\u002FonBotCommand回调\n\n### Bug修复\n- fix: \u002F帮助命令重复显示问题\n- fix: QQ markdown转义_text_被识别为斜体\n",[256],{"filename":257,"primary":48,"sha256":258,"size":259,"url":260},"HuHoBot-Penguin_Spigot-1.5.0.jar","4f3114f21b744544519edea91f3d2038fec28d7061170e3dab8d2bbd1eeaa253",21370237,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.5.0\u002FHuHoBot-Penguin_Spigot-1.5.0.jar","v1.5.0",1788075918,{"changelog":264,"downloads":23,"files":265,"name":271,"prerelease":63,"published_at":272,"version":273},"v1.4.0（2026-08-29）\n\n#\n\n### 构建信息\n- 构建时间: 2026-08-29T06:11:26Z\n- 提交哈希: [bd59219a02d44f2c9242279a6e3adbe73205f44a](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Fcommit\u002Fbd59219a02d44f2c9242279a6e3adbe73205f44a)\n",[266],{"filename":267,"primary":48,"sha256":268,"size":269,"url":270},"HuHoBot-Penguin_Spigot-1.4.0.jar","4c9d94275bef02286644ae637b15c784e19dc2c9d1a9f049a65fdbe8bcb393be",20995168,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.4.0\u002FHuHoBot-Penguin_Spigot-1.4.0.jar","HuHoBot v1.4.0",1787983781,"v1.4.0",{"changelog":275,"downloads":23,"files":276,"name":282,"prerelease":63,"published_at":283,"version":284},"v1.3.0（2026-08-27）\n\n#\n\n### 构建信息\n- 构建时间: 2026-08-27T03:53:02Z\n- 提交哈希: [0893934b88ebdf13abe8d8ddae23649b4f81815e](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Fcommit\u002F0893934b88ebdf13abe8d8ddae23649b4f81815e)\n",[277],{"filename":278,"primary":48,"sha256":279,"size":280,"url":281},"HuHoBot-Penguin_Spigot-1.3.0.jar","cdca47ea66e7060134739f6cf65ea32963c252f53c8b347d4ef9d6fe47c8fa75",18814874,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.3.0\u002FHuHoBot-Penguin_Spigot-1.3.0.jar","HuHoBot v1.3.0",1787802667,"v1.3.0",{"changelog":286,"downloads":23,"files":287,"name":293,"prerelease":48,"published_at":294,"version":295},"# Changelog\n\n### 构建信息\n- 构建时间: 2026-08-26T14:46:22Z\n- 提交哈希: [6fb25cfb01acab999110709dc5b773395e0085e1](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Fcommit\u002F6fb25cfb01acab999110709dc5b773395e0085e1)\n",[288],{"filename":289,"primary":48,"sha256":290,"size":291,"url":292},"HuHoBot-Penguin_Spigot-1.3.0-beta.4.jar","125519b0779f940019c07802b0c6c96096d9340fd658a1421e63dbd6e17249fb",18805864,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.3.0-beta.4\u002FHuHoBot-Penguin_Spigot-1.3.0-beta.4.jar","HuHoBot v1.3.0-beta.4",1787755451,"v1.3.0-beta.4",{"changelog":297,"downloads":23,"files":298,"name":304,"prerelease":48,"published_at":305,"version":306},"# Changelog\n\n### 构建信息\n- 构建时间: 2026-08-24T13:14:17Z\n- 提交哈希: [3c398becc617dcf48fcd6fe1e454b5d9c71883f6](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Fcommit\u002F3c398becc617dcf48fcd6fe1e454b5d9c71883f6)\n",[299],{"filename":300,"primary":48,"sha256":301,"size":302,"url":303},"HuHoBot-Penguin_Spigot-1.3.0-beta.2.jar","c6fb3f2ba577c7d23ec926151267f645c7923706afd08bc3ba90818fdda2f669",18805833,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.3.0-beta.2\u002FHuHoBot-Penguin_Spigot-1.3.0-beta.2.jar","HuHoBot v1.3.0-beta.2",1787577111,"v1.3.0-beta.2",{"changelog":308,"downloads":23,"files":309,"name":315,"prerelease":48,"published_at":316,"version":317},"# HuHoBot Penguin v1.2.2\n\n### 构建信息\n- 构建时间: 2026-08-24T02:08:18Z\n- 提交哈希: [a5936ced7c87c17f3640b872c71a7fb9843ded14](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Fcommit\u002Fa5936ced7c87c17f3640b872c71a7fb9843ded14)\n",[310],{"filename":311,"primary":48,"sha256":312,"size":313,"url":314},"HuHoBot-Penguin_Spigot-1.3.0-beta.1.jar","f4ab6d52ace07c14e14f3d28330fa0bba9cb66bc108cf812ac2114159a579800",18803868,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.3.0-beta.1\u002FHuHoBot-Penguin_Spigot-1.3.0-beta.1.jar","HuHoBot v1.3.0-beta.1",1787537181,"v1.3.0-beta.1",{"changelog":319,"downloads":23,"files":320,"name":326,"prerelease":63,"published_at":327,"version":328},"# HuHoBot Penguin v1.2.2\n\n### 构建信息\n- 构建时间: 2026-08-18T10:52:24Z\n- 提交哈希: [b22132665da14a9442d75574925b967534907044](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Fcommit\u002Fb22132665da14a9442d75574925b967534907044)\n",[321],{"filename":322,"primary":48,"sha256":323,"size":324,"url":325},"HuHoBot-Penguin_Spigot-1.2.2.jar","a223f82552a8288146f531dadf2180c4a7e15a9382329838e6ff1c5a9af0f446",18759239,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.2.2\u002FHuHoBot-Penguin_Spigot-1.2.2.jar","HuHoBot v1.2.2",1787050212,"v1.2.2",{"changelog":330,"downloads":23,"files":331,"name":337,"prerelease":63,"published_at":338,"version":339},"# HuHoBot Penguin v1.2.0\n\n### 构建信息\n- 构建时间: 2026-08-17T11:46:00Z\n- 提交哈希: [3a36f7a197720807ecefc9d3b10cbd5901dbe2cf](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Fcommit\u002F3a36f7a197720807ecefc9d3b10cbd5901dbe2cf)\n",[332],{"filename":333,"primary":48,"sha256":334,"size":335,"url":336},"HuHoBot-Penguin_Spigot-1.2.1-hotfix.jar","ecdb1e545d3d74323fc9c941ca58877f20ad3101842d818fb1252f6be405814e",18758712,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.2.1-hotfix\u002FHuHoBot-Penguin_Spigot-1.2.1-hotfix.jar","HuHoBot v1.2.1-hotfix",1786967033,"v1.2.1-hotfix",{"changelog":341,"downloads":23,"files":342,"name":348,"prerelease":63,"published_at":349,"version":350},"# HuHoBot Penguin v1.2.0\n\n### 构建信息\n- 构建时间: 2026-08-17T11:26:38Z\n- 提交哈希: [2c115b23dee34862516796d09095b2b3312f088e](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Fcommit\u002F2c115b23dee34862516796d09095b2b3312f088e)\n",[343],{"filename":344,"primary":48,"sha256":345,"size":346,"url":347},"HuHoBot-Penguin_Spigot-1.2.0.jar","b58047b47ef7d9a3ab710739886b16cdd77252fef6c887dda93c3d1c1c1dd2a8",18758652,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.2.0\u002FHuHoBot-Penguin_Spigot-1.2.0.jar","HuHoBot v1.2.0",1786965829,"v1.2.0",{"changelog":352,"downloads":23,"files":353,"name":359,"prerelease":48,"published_at":360,"version":361},"# HuHoBot Penguin v1.2.0-alpha.2\n\n### 构建信息\n- 构建时间: 2026-08-16T15:00:46Z\n- 提交哈希: [06f552af6df5a936b7cba26c47fa39be3b143615](https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Fcommit\u002F06f552af6df5a936b7cba26c47fa39be3b143615)\n",[354],{"filename":355,"primary":48,"sha256":356,"size":357,"url":358},"HuHoBot-Penguin_Spigot-1.2.0-alpha.2.jar","1c9a59aca9789a06bd232ee1ee947aa1db31e50b11598ba50b5436a68d9119c7",18740220,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.2.0-alpha.2\u002FHuHoBot-Penguin_Spigot-1.2.0-alpha.2.jar","HuHoBot v1.2.0-alpha.2",1786892390,"v1.2.0-alpha.2",{"changelog":363,"downloads":23,"files":364,"name":370,"prerelease":48,"published_at":371,"version":372},"## v1.2.0-alpha.1\n\n### New Features\n- **WebUI 图形化配置界面** — 浏览器访问 127.0.0.1:5678 管理全部 config.yml，暗色简约风格，14 个配置分组\n- 启动自动生成 24 位随机强密码（仅日志打印一次），`\u002Fhb password \u003C密码>` 修改，`\u002Fhb webui` 查看地址\n- **Agent @提及识别** — AI 可直接使用 @成员 的用户名进行群管理操作，无需手动传 openid\n- **Agent 群管理工具审批** — 禁言、入群审批、策略修改需管理员按钮审批（manual 模式下）\n- **group_openid 自动绑定** — 所有群工具已自动绑定当前群的 group_openid，AI 无需也无法传入伪造值\n- 禁言到期时间由服务端计算，AI 只需传 minutes 参数（1-43200 分钟）\n- 审批\u002F拒绝通知显示管理员用户名而非 openid\n- `\u002Fhb password` 修改 WebUI 登录密码\n- `\u002Fhb webui` 查看 WebUI 地址\n\n### Fixes\n- 侧边栏导航未渲染（renderNav 在 schema 加载前调用导致空导航）\n- 保存配置后界面未刷新（state.values 未更新，重新读取配置文件）\n- WebUI 启动日志改为中文：网页配置UI已在127.0.0.1:5678启动\n\n### Changed\n- Agent 系统提示词新增群管理操作规范（自动绑定 group_openid、禁言前检查机器人权限）\n- QQ 群工具定义更新：group_openid 标注「可选，已自动绑定当前群」\n- 审批回调扩展：支持 QQ 群管理工具（PendingApproval 增加 toolName\u002Fquery\u002FisTool）\n- README 补充 WebUI 文档、群管理工具说明、服务器控制台指令\n\n### Dependencies\n- deps\u002Fqqpd-bot-java 子模块更新\n",[365],{"filename":366,"primary":48,"sha256":367,"size":368,"url":369},"HuHoBot-Penguin_Spigot-1.2.0-alpha.1.jar","8df93354805a55620a3c4ffa60d137a065080b4f95c284f7360bff7a821e0da8",18724613,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.2.0-alpha.1\u002FHuHoBot-Penguin_Spigot-1.2.0-alpha.1.jar","HuHoBot v1.2.0-alpha.1",1786851283,"v1.2.0-alpha.1",{"changelog":374,"downloads":23,"files":375,"name":381,"prerelease":48,"published_at":382,"version":383},"# HuHoBot Penguin v1.1.0-alpha.3\n\n## 新功能\n\n- feat(menu): 启动时自动同步指令面板到 QQ 群，包含全部 20 条命令\n- feat(motd): 新增 `\u002Fmotd \u003C服务器地址>` 命令，查询 MC 服务器状态（图片 + Markdown）\n- feat(stop): 新增 `\u002Fstop` 命令，紧急停止所有 AI 任务输出和处理\n- feat(message): 添加消息提及用户解析和格式化功能\n- feat(agent): 新增 AI Agent 系统，管理员通过 `@机器人 \u002Fagent 任务描述` 触发 AI 执行服务器管理任务\n- feat(agent): AI 通过 function call 获取插件列表、命令帮助、执行命令、读取日志\n- feat(agent): 命令执行支持手动审批模式（按钮卡片同意\u002F拒绝，仅管理员与群主可审批）\n- feat(agent): 新增 SKILL 按需加载系统（components\u002Fgive\u002Fitem\u002Fsummon\u002Fdata\u002Floot\u002Fclear）\n- feat(agent): 新增 `\u002Fnewsession` 命令手动清除 AI 会话上下文\n- feat(agent): AI 推理模型支持（reasoning_content 思考过程输出）\n- feat(command): 原版命令帮助通过反射 CraftServer commandMap 获取\n- feat(spigot): 新增 `read_server_logs` 工具读取服务端日志\n\n## 改进\n\n- refactor(agent): 会话上下文复用，同一用户连续对话保留历史\n- refactor(agent): 错误输出清理，只显示根本原因（Brigadier CommandSyntaxException）\n- refactor(agent): 消息无截断，超长内容分块发送\n- refactor(agent): 上下文窗口管理（MAX_CONTEXT_MESSAGES=40）\n- fix(agent): 命令输出剥离 Minecraft 格式化代码（§x），避免 QQ 群显示乱码\n- fix(agent): 修复 interaction 回调 405 错误日志噪音\n- fix(spigot): BukkitConsoleSender 改用真实 console sender 执行命令\n\n## 依赖\n\n- 基于 [qqpd-bot-java](https:\u002F\u002Fgithub.com\u002FKloping\u002Fqqpd-bot-java) (AGPL-3.0)\n",[376],{"filename":377,"primary":48,"sha256":378,"size":379,"url":380},"HuHoBot-Penguin_Spigot-1.1.0-alpha.3.jar","1f8ca62a49e2a5dce44c3c5e58521f46e937dddc3293f47807e708a5ab7015e3",18667890,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.1.0-alpha.3\u002FHuHoBot-Penguin_Spigot-1.1.0-alpha.3.jar","HuHoBot Penguin v1.1.0-alpha.3",1786807168,"v1.1.0-alpha.3",{"changelog":385,"downloads":23,"files":386,"name":392,"prerelease":48,"published_at":393,"version":394},"# HuHoBot Penguin v1.1.0-alpha.2\n\n## 新功能\n\n- feat(motd): 新增 `\u002Fmotd \u003C服务器地址>` 命令，查询 MC 服务器状态（图片 + Markdown）\n- feat(stop): 新增 `\u002Fstop` 命令，紧急停止所有 AI 任务输出和处理\n- feat(message): 添加消息提及用户解析和格式化功能\n- feat(agent): 新增 AI Agent 系统，管理员通过 `@机器人 \u002Fagent 任务描述` 触发 AI 执行服务器管理任务\n- feat(agent): AI 通过 function call 获取插件列表、命令帮助、执行命令、读取日志\n- feat(agent): 命令执行支持手动审批模式（按钮卡片同意\u002F拒绝，仅管理员与群主可审批）\n- feat(agent): 新增 SKILL 按需加载系统（components\u002Fgive\u002Fitem\u002Fsummon\u002Fdata\u002Floot\u002Fclear）\n- feat(agent): 新增 `\u002Fnewsession` 命令手动清除 AI 会话上下文\n- feat(agent): AI 推理模型支持（reasoning_content 思考过程输出）\n- feat(command): 原版命令帮助通过反射 CraftServer commandMap 获取\n- feat(spigot): 新增 `read_server_logs` 工具读取服务端日志\n\n## 改进\n\n- refactor(agent): 会话上下文复用，同一用户连续对话保留历史\n- refactor(agent): 错误输出清理，只显示根本原因（Brigadier CommandSyntaxException）\n- refactor(agent): 消息无截断，超长内容分块发送\n- refactor(agent): 上下文窗口管理（MAX_CONTEXT_MESSAGES=40）\n- fix(agent): 命令输出剥离 Minecraft 格式化代码（§x），避免 QQ 群显示乱码\n- fix(agent): 修复 interaction 回调 405 错误日志噪音\n- fix(spigot): BukkitConsoleSender 改用真实 console sender 执行命令\n\n## 依赖\n\n- 基于 [qqpd-bot-java](https:\u002F\u002Fgithub.com\u002FKloping\u002Fqqpd-bot-java) (AGPL-3.0)\n",[387],{"filename":388,"primary":48,"sha256":389,"size":390,"url":391},"HuHoBot-Penguin_Spigot-1.1.0-alpha.2.jar","eb206ca9e5578cf90bcaabf0f3513d28492f92160c85adc31db5f3ef36124187",18659070,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.1.0-alpha.2\u002FHuHoBot-Penguin_Spigot-1.1.0-alpha.2.jar","HuHoBot Penguin v1.1.0-alpha.2",1786804301,"v1.1.0-alpha.2",{"changelog":396,"downloads":23,"files":397,"name":403,"prerelease":48,"published_at":404,"version":405},"# HuHoBot Penguin v1.1.0-alpha.1\n\n## 新功能\n\n- feat(agent): 新增 AI Agent 系统，管理员通过 `@机器人 \u002Fagent 任务描述` 触发 AI 执行服务器管理任务\n- feat(agent): AI 通过 function call 获取插件列表、命令帮助、执行命令、读取日志\n- feat(agent): 命令执行支持手动审批模式（按钮卡片同意\u002F拒绝，仅管理员与群主可审批）\n- feat(agent): 新增 SKILL 按需加载系统（components\u002Fgive\u002Fitem\u002Fsummon\u002Fdata\u002Floot\u002Fclear）\n- feat(agent): 新增 `\u002Fnewsession` 命令手动清除 AI 会话上下文\n- feat(agent): AI 推理模型支持（reasoning_content 思考过程输出）\n- feat(command): 原版命令帮助通过反射 CraftServer commandMap 获取\n- feat(spigot): 新增 `read_server_logs` 工具读取服务端日志\n\n## 改进\n\n- refactor(agent): 会话上下文复用，同一用户连续对话保留历史\n- refactor(agent): 错误输出清理，只显示根本原因（Brigadier CommandSyntaxException）\n- refactor(agent): 消息无截断，超长内容分块发送\n- refactor(agent): 上下文窗口管理（MAX_CONTEXT_MESSAGES=40）\n- fix(agent): 命令输出剥离 Minecraft 格式化代码（§x），避免 QQ 群显示乱码\n- fix(agent): 修复 interaction 回调 405 错误日志噪音\n- fix(spigot): BukkitConsoleSender 改用真实 console sender 执行命令\n\n## 依赖\n\n- 基于 [qqpd-bot-java](https:\u002F\u002Fgithub.com\u002FKloping\u002Fqqpd-bot-java) (AGPL-3.0)\n",[398],{"filename":399,"primary":48,"sha256":400,"size":401,"url":402},"HuHoBot-Penguin_Spigot-1.1.0-alpha.1.jar","18fff661ff2f573696b174a553ccc5090ae068ede3c6205207245c29afe44ed2",18652443,"https:\u002F\u002Fgithub.com\u002FHuHoBot\u002FPenguinAgent\u002Freleases\u002Fdownload\u002Fv1.1.0-alpha.1\u002FHuHoBot-Penguin_Spigot-1.1.0-alpha.1.jar","HuHoBot Penguin v1.1.0-alpha.1",1786788807,"v1.1.0-alpha.1",1793217806110]