Repository navigation
Releases: hutuyee/ShitBot
Release list
ShitBot v1.2.0
What's Changed
Fixed Bug
- 修复缺失配置、语言文本和图片主题默认值只在内存中生效的问题:启动或重载时会补齐缺失键、
null值及空文件,并写回磁盘,保留已有配置、自定义键和注释。 - 修复空配置与旧版语言迁移的执行顺序,避免补全默认配置后遗漏旧语言文本。
- 修复内置高级图片模板不完整时无法恢复的问题:自动补全缺失的草稿、素材目录和默认字段;发布指针丢失时可从有效的历史版本恢复,已有图层与历史快照会保留。
- 修复 OneBot 调试日志、连接地址和异常信息可能泄露 Access Token 的问题;收紧回环地址识别,并在 WebSocket 解码阶段限制超大入站消息。
- 修复远程 MySQL TLS 参数检查可能被重复参数、大小写或参数优先级绕过的问题,按实际连接参数严格判断是否启用 TLS。
- 加强远程模板图片下载:固定已验证的公网连接地址、逐次检查重定向并保留域名证书校验,防止 DNS 重绑定绕过地址限制;同时限制下载队列、缓存、图片解码和网络读取耗时。
- 修复模板 YAML 循环引用、过深或过量展开造成的资源消耗问题,并加强素材上传及源码读取的符号链接与临时文件保护。
Feat
- 新增内置玩家个人资料图:QQ 群发送
个人资料/个人信息,可查询自己绑定角色的皮肤、在线状态、权限组、点券和累计在线时长;可选 PlaceholderAPI 字段不可用时自动隐藏。关联 #2。 - 新增可编辑的
player-profile与inventory高级图片模板及数据提供器,支持个人信息卡片、装备、副手、主背包、快捷栏、物品数量和耐久展示;自定义个人信息、自定义背包群命令入口可在commands.yml中启用,默认关闭。 - 扩展公共图片 API:开放在线状态、个人资料和背包图片渲染,提供 PNG 字节、流式读取、按需 Base64 / data URI,以及有界队列的异步本地文件保存;原生个人资料与背包图片接口无需开启高级模板。
- 新增自动配置备份:版本变化、自动补全或迁移配置,以及新版本更新器替换 JAR 前,保存原始配置到
config-backups/;代理联动更新的后端各自备份,备份失败时停止对应写入或替换。 - 补齐英文 README 和使用手册,完善个人资料、外置模板、图片 API、配置恢复及安全边界说明。
- 完善发布流程,增加 Java 8 / 17 / 21 与 Linux / Windows CI 矩阵、测试报告汇总、发布文件内容与 Java 字节码目标检查。
升级说明: 无需删除或重新生成完整配置,首次启动会备份现有配置并补齐新增字段。数据库自动升级至 schema 7,新增 shitbot_player_stats 保存在线时长;数据库、image-templates/ 和自定义图片资源仍需自行备份。代理与后端建议同步升级至 1.2.0,并正常重启。Java 最低要求保持不变:Spigot / BungeeCord 为 8,Nukkit-MOT 为 17,Velocity 为 21。高级模板使用同版本 ShitBotRenderer,启用后按需下载;个人资料皮肤地址可通过 profile.skin-url-template 配置。
Full Changelog: 1.1.5...1.2.0
ShitBot v1.1.5
What's Changed
- 新增高级图片模板与可视化编辑器,支持图层、条件/循环、PAPI、玩家头像及模板发布、回滚。
- 重绘在线状态图、背包图和编辑器界面,优化单服玩家列表、代理子服分组与文字对比度。
- 完善编辑器快捷键、撤销/重做和会话自动续期,支持在游戏内打开、复制编辑器链接。
- 新增独立公共 API 和无 QQ 白名单管理,补全 PlaceholderAPI 变量。
- 修复玩家名大小写造成的权限、背包查询和解绑串号问题,绑定验证码改为代理认证完成后发放。
- 增加调试日志与本地渲染器加载,修复重载时启动通知状态丢失,优化图片渲染缓存。
高级图片模板为可选功能,启用后自动下载对应版本的 ShitBotRenderer;默认图片模式无需额外安装。
Full Changelog: 1.1.0...1.1.5
ShitBot v1.1.0
What's Changed
ShitBot 1.1.0 是一次较大的跨平台、配置与可维护性更新。本版新增 Nukkit-MOT 支持、服务器启动群通知、可扩展语言文件和现有在线图/背包图的 YAML 主题配置,并继续加强数据库、OneBot、代理—后端通信和自动更新流程。
新平台与部署
- 新增 Nukkit-MOT 平台支持,提供独立的
ShitBotNukkit-1.1.0.jar。 - 保留 Spigot/Paper/Folia、BungeeCord 和 Velocity 支持;Release 继续按平台分别提供安装包。
- 新增可选的服务器启动 QQ 群通知,可配置目标后端和检查间隔。
- 修正跨平台边界、关闭流程和重连竞态,降低重载、断线和服务器关闭期间出现状态错乱的概率。
图片与语言自定义
- 在线状态图和背包图新增
templates/*.yml主题文件,可自定义布局、字号、圆角和颜色。 - 支持分别为在线图和背包图选择模板;自定义模板缺少字段时回退到内置
default.yml。 - 新增独立的
lang/*.yml语言文件,内置zh_CN和en_US,管理员可以复制后扩展其他语言。 - 从旧配置升级时,会把旧
config.yml中的语言文本、通知文本、指令别名和图片标题迁移到lang/zh_CN.yml;旧配置文件不会被自动删除或重写。
bStats
- Spigot、BungeeCord 和 Velocity 接入 bStats 统计。
- 可通过配置关闭统计,统计开关会在重载后生效。
数据库与运行稳定性
- 重构 JDBC 驱动加载,使核心可以复用服务端已有驱动并按需补齐缺失驱动。
- 改进 MySQL 连接池、连接回收、超时和异常恢复。
- 使用服务端提供的 Gson 处理 JSON,减少重复依赖。
- 仅内嵌并隔离必要的 WebSocket 依赖,修复重复打包以及 Velocity SLF4J 类型冲突。
- 修复回退 JDBC 驱动加载异常。
文档与工程维护
- 重写快速上手,并拆分安装、配置、命令、数据库、代理后端、安全、故障排查、更新和开发文档。
- 明确不同平台 JAR、Java 版本、代理/后端部署方式和升级要求。
- PictureBridge 子模块更新到较新版本,并增加自动同步流程。
- 增加问题反馈模板和四个平台 Release 产物检查。
后续计划
- 已在
TODO.md记录无代码自定义图片模板系统:版本化 YAML 场景、可视化编辑器、插件渲染 API、PAPI 数据源、草稿/发布/回滚和安全限制。 - 上述高级图片模板和编辑器仅为后续规划,不包含在 1.1.0 中;本版提供的是现有在线图与背包图的 YAML 主题自定义。
升级注意事项
- 本版配置结构已经升级。首次启动后请检查新生成或迁移的
lang/、templates/和配置项。 - 代理—后端部署应同时升级代理端与全部 Spigot 后端,并继续共用 MySQL。
- Nukkit-MOT 使用独立安装包,不能与其他平台 JAR 混用。
- Release 自动化会为四个平台上传 JAR、SHA-256 校验文件和 RSA 独立签名文件。
- 更新完成后请正常重启服务器或代理,不建议使用插件管理器热加载。
完整变更记录:1.0.9...1.1.0
ShitBot v1.0.9
What's Changed
本次更新主要完善 QQ 快捷命令的控制台日志捕获与隐私过滤,同时强化插件更新、代理—后端通信、OneBot 和数据库连接的安全性。
Warning
记得新加载config
控制台命令日志捕获
- 快捷命令现在直接以只读方式监听服务器的
logs/latest.log:- 执行命令前记录日志位置;
- 等待
capture-seconds指定的时间; - 回传这段时间内所有插件追加的新日志;
- 支持捕获 LuckPerms 等插件异步线程产生的输出;
- 不再依赖插件名称或命令注册来源判断是否抓取日志。
- 日志读取不会修改、清空或重写服务器原有的
latest.log。 - 自动移除 ANSI 颜色与格式控制符,修复 LuckPerms 编辑器链接等日志中可能出现的乱码。
- 如果命令成功但没有产生新日志,会返回明确提示,而不是发送空消息。
- 单次回传最多保留 100 行、4000 个字符,避免大量日志刷屏。
日志隐私保护
回传给 QQ 的日志副本现在会自动进行隐私过滤:
- 丢弃玩家聊天消息;
- 丢弃玩家加入、退出、连接和断开日志;
- 丢弃玩家执行命令的日志;
- 丢弃类似
[玩家: Set own game mode to Creative Mode]的命令反馈日志; - 将请求绑定玩家及当前在线玩家的名称替换为
<player>; - 将玩家 UUID 替换为
<uuid>; - 将 IPv4 和 IPv6 地址替换为
<ip>; - 脱敏 Bearer Token、Authorization、password、secret、token 和数据库连接地址等敏感内容。
这些过滤只作用于回传内容,不会修改服务器中的原始日志文件。
插件更新安全
/shitbot update现在除了 SHA-256 和 JAR 内容检查,还必须验证独立 RSA 签名。- 更新验证公钥已经内置到 ShitBotCore,并会被打包进 Spigot、BungeeCord 和 Velocity 插件。
- 服主不需要下载或配置公钥。
- Release 缺少
.sig文件、签名不匹配、JAR 平台不匹配或版本信息异常时,更新器会拒绝替换现有插件。 - GitHub Release 构建流程会为三个平台的 JAR 自动生成:
.sha256校验文件;.sig独立签名文件。
- BungeeCord 向后端分发更新时,会同时传递 JAR、SHA-256 和签名元数据,由各子服独立验证后再执行替换。
代理与后端通信安全
- Console Socket 协议升级到版本 2。
- 每个连接都会使用服务端随机 challenge 参与 HMAC 签名,阻止旧请求在服务器重启后被重放。
- 新增 TLS 和可选双向 TLS 支持:
- 支持 PKCS12 key store;
- 支持自定义 trust store;
- 支持要求客户端证书。
- 非回环地址的明文代理—后端连接现在默认拒绝。
- 只有在 WireGuard、Tailscale 等外部加密隧道中并明确接受风险时,才应开启
allow-insecure-remote-plaintext。 - 新增固定大小的连接池、等待队列、请求截止时间和连接失败熔断,避免大量请求拖垮代理或后端。
- 加强请求 ID、nonce、消息长度和重复请求检查。
OneBot 连接安全与稳定性
- 远程
ws://OneBot 连接现在默认拒绝,跨主机部署应使用wss://。 - 如已通过可信加密隧道传输,可显式开启
onebot.allow-insecure-remote-websocket。 - 优化插件关闭时的 WebSocket 处理,不再无限等待 OneBot 关闭连接。
- OneBot 关闭流程增加超时与强制终止兜底,降低服务器关闭卡住的概率。
- 隔离控制台任务和 OneBot 任务,避免日志抓取或网络任务相互阻塞。
数据库与绑定安全
-
远程 MySQL 连接现在默认要求 TLS,推荐使用:
sslMode=VERIFY_IDENTITY -
如确实需要远程明文 MySQL,必须显式开启 allow-insecure-remote-mysql。
-
默认关闭 allowPublicKeyRetrieval,降低认证信息暴露风险。
-
MySQL 数据库迁移新增 GET_LOCK 数据库级锁,避免代理和多个后端同时启动时并发执行 DDL。
-
数据库迁移锁等待时间受 JDBC 超时限制,不会无限阻塞启动。
-
只有数据库列定义确实不符合目标结构时才执行修复性 ALTER TABLE。
-
加强数据库初始化、事务处理和异常恢复。
-
调整绑定验证码防爆破机制:
- 总尝试次数默认提高到 30;
- 达到总上限后进入短暂冷却,不再立即销毁验证码;
- 新增 binding.total-attempt-cooldown-seconds;
- 实际总尝试上限至少为单 QQ 尝试上限的 4 倍,减少恶意用户提前耗尽他人验证码的可能。
PictureBridge
- ShitBot 仓库中的 PictureBridge 子模块已更新到最新版本。
- 子模块明确跟踪 PictureBridge 的 main 分支。
- 新增自动同步 workflow:PictureBridge 出现新提交后,ShitBot 会定期更新子模块引用。
- PictureBridge 仍然是独立的纯客户端模组,不会被合并进服务端插件 JAR。
升级注意事项
- Console Socket 协议已经升级,使用代理—后端模式时,请同时升级代理端和所有 Spigot 后端。
- 跨机器使用明文 Console Socket、远程 ws:// OneBot 或未启用 TLS 的远程 MySQL,在本版本中会默认拒绝连接。
- 同机 127.0.0.1 / ::1 通信不受远程明文限制影响。
- 新版本更新器要求 Release 同时包含对应 JAR 的 .sha256 和 .sig 文件。
- 更新完成后仍需手动重启服务器或代理,不建议使用插件热重载。
完整变更记录: 1.0.8...1.0.9
ShitBot v1.0.8
What's Changed
自动更新
- 插件加载后异步检查 GitHub Release,网络访问不会阻塞服务器主线程;仅在版本信息变化时更新本地缓存。
- 管理员上线时提示可用的新版本及 Release 链接。
/shitbot update支持下载对应平台 JAR、校验 SHA-256 与 JAR 内容、备份现有文件并安全替换,完成后提示手动重启,不执行热重载。- BungeeCord 更新时会通过已认证的 Console Socket 同步更新配置的 Bukkit 子服,并分别返回更新结果。
- Release 现在同时发布各平台 JAR 和独立的
.jar.sha256校验文件。
QQ 快捷命令
lp/luckperms快捷命令会先核对命令确实归 LuckPerms 注册,再抓取五秒内的控制台日志,因此可以返回异步生成的编辑器链接。- 代理到子服的日志捕获设置会随已认证请求传递;旧版
commands.yml中的lp editor无需新增字段也能自动识别。
稳定性与安全性
- 强化代理与子服之间的认证、回包来源校验、超时取消和命令输出隔离。
- 限制数据库、背包快照、头像处理和远程命令相关队列及缓存,避免异常流量造成无界资源占用。
- 改进运行时重载和 Console Listener 重载的失败回退,旧运行实例会在新实例初始化成功前继续保留。
代理与 Bukkit 子服部署需要一起更新到 1.0.8,并在文件替换完成后手动重启各端。