Skip to content

Releases: hutuyee/ShitBot

ShitBot v1.2.0

Choose a tag to compare

@hutuyee hutuyee released this 17 Oct 09:34
cd37de1

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

Choose a tag to compare

@hutuyee hutuyee released this 26 Sep 10:12
acc320d

What's Changed

  • 新增高级图片模板与可视化编辑器,支持图层、条件/循环、PAPI、玩家头像及模板发布、回滚。
  • 重绘在线状态图、背包图和编辑器界面,优化单服玩家列表、代理子服分组与文字对比度。
  • 完善编辑器快捷键、撤销/重做和会话自动续期,支持在游戏内打开、复制编辑器链接。
  • 新增独立公共 API 和无 QQ 白名单管理,补全 PlaceholderAPI 变量。
  • 修复玩家名大小写造成的权限、背包查询和解绑串号问题,绑定验证码改为代理认证完成后发放。
  • 增加调试日志与本地渲染器加载,修复重载时启动通知状态丢失,优化图片渲染缓存。

高级图片模板为可选功能,启用后自动下载对应版本的 ShitBotRenderer;默认图片模式无需额外安装。

Full Changelog: 1.1.0...1.1.5

ShitBot v1.1.0

Choose a tag to compare

@hutuyee hutuyee released this 05 Sep 11:43
32c9dbc

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

Choose a tag to compare

@hutuyee hutuyee released this 27 Aug 11:38

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

Choose a tag to compare

@hutuyee hutuyee released this 26 Aug 04:06
ce06218

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,并在文件替换完成后手动重启各端。

ShitBot v1.0.7

Choose a tag to compare

@hutuyee hutuyee released this 16 Aug 07:09
504ae5d
up version

ShitBot v1.0.6

Choose a tag to compare

@hutuyee hutuyee released this 14 Aug 05:00
3993728
feat: 玩家在游戏时被解绑会被踢出游戏

ShitBot v1.0.5

Choose a tag to compare

@hutuyee hutuyee released this 06 Aug 06:06
2b72da9

ShitBot v1.0.4

Choose a tag to compare

@hutuyee hutuyee released this 02 Aug 05:33
1eb8650

ShitBot 1.0.3

Choose a tag to compare

@hutuyee hutuyee released this 29 Jul 04:55
fccc43f