5028 Commits
Author SHA1 Message Date
MliKiowa 72912f2939 docs: ending
Signed-off-by: MliKiowa <nanaeonn@outlook.com>
v4.9.43
2026-11-10 09:06:40 +08:00
MliKiowa 98d781d198 docs: 修改要求
Updated bug report template to include new guidelines for submissions.

Signed-off-by: MliKiowa <nanaeonn@outlook.com>
2026-10-30 15:06:17 +08:00
手瓜一十雪 9335843246 fix: #2106 2026-10-30 14:59:39 +08:00
手瓜一十雪 e8fbda4be6 feat: new wrapper 2026-10-30 14:31:01 +08:00
手瓜一十雪 4056f04b20 fix: 不要测试了,测试它干嘛 2026-10-30 14:19:34 +08:00
手瓜一十雪 093b3bf4aa feat: #2135 2026-10-30 14:17:03 +08:00
手瓜一十雪 162c6db1ac feat: 支持新版本 2026-10-30 14:12:43 +08:00
手瓜一十雪 b2b7ed87c6 fix: #2118 2026-10-30 14:02:44 +08:00
手瓜一十雪 f7ab795e19 fix: #2133 #2114 2026-10-30 13:50:43 +08:00
手瓜一十雪 c15f149881 fix: #2136 移除废弃接口
This commit removes deprecated QQ quick-login and user-list API calls from the frontend and updates the login page to use the newer quick-login response format. It also fixes the initial loading state by ensuring the spinner is cleared in a finally block and moves QQ list refresh to its own effect so the list loads reliably on first render.
2026-10-30 13:42:00 +08:00
Qiao 49ecfe0f56 feat(qzone): 完善空间 API 并兼容 SnowLuma API 格式 (#2124)
* feat(qzone): 接入内置空间动态、说说和赞评接口

新增好友动态、个人说说、详情及点赞、取消赞、评论和回复动作。
纯文本发表接入QQ内置空间接口,保留原有图片发表和删除路径。
保留完整动态身份和原始数据,约束游标、权限转换及请求错误处理。

验证:全工作区类型检查,367项测试通过、1项既有条件测试跳过,
变更文件ESLint及WebUI、Shell、Framework、OpenAPI构建通过。

* feat(qzone): 补齐空间管理、评论分页及 SnowLuma 兼容

* fix(qzone): 兼容真实 FormSender 回执与评论字段

* fix(qzone): 兼容黑名单回执中的空间名称

* docs(qzone): remove redundant API readme
2026-10-30 00:17:49 +08:00
Qiao ba0a53dd37 feat(qzone): 添加空友爱看推荐与互动接口 (#2125)
* feat(qzone): 添加空友爱看推荐与互动接口

* fix(qzone): accept nullable public feed identities and preserve error codes

* docs(qzone): remove redundant public API readme
2026-10-27 10:08:36 +08:00
手瓜一十雪 3420f0b76d remove: test file 2026-10-22 16:03:11 +08:00
手瓜一十雪 859eb530c5 fix(ci): avoid resolving dev dependencies in release artifacts 2026-10-21 16:36:48 +08:00
手瓜一十雪 89e8efc57e fix: #2100 2026-10-21 16:16:27 +08:00
Ekko 450fb0429a Remove ghproxy.imciel.com from proxy URLs (#2108)
Removed deprecated proxy URL from the list.

Signed-off-by: Ekko <beijiu572@gmail.com>
2026-10-19 12:15:20 +08:00
cherry-xw 810052c605 fix(onebot): preserve profile regions in user and member responses (#2107) 2026-10-15 15:31:19 +08:00
手瓜一十雪 3f66b36901 fix(album): restore comments and support batch targets
Initialize comment like data required by QQNT and allow comments on upload batches while preserving single-image targets. Add action and native argument conversion regression tests.

Fixes #1979. Closes #2028.
2026-10-12 12:46:50 +08:00
手瓜一十雪 bbd0d2aca3 fix(message): 修复合并转发中动画表情吞掉后续消息段 (#2097) 2026-10-12 12:26:58 +08:00
H3CoF6 7471e3ecd6 feat: 支持 macOS 设备 GUID 管理与修正 Linux global 路径 (#2099)
* feat(webui): 支持 macOS 设备 GUID 管理与修正 Linux global 路径

    Linux 的 global 目录直接位于数据根目录下(不再经过 nt_qq), 与 macOS 对齐;
    新增 getGlobalDataPath 统一推导, 修正 Registry20/machine-info 在 Linux 下指向错误目录。

    macOS 设备 GUID 实现(逆向自 wrapper.node, 对齐 qq_guid_tool):
    - guid = MD5(machine_id[8] || sn)
    - machineid-info 使用 QQ 私有 TEA 容器(16 轮, 大端), 密钥为 IOPlatformUUID 前 16 字节
    - machine_id 优先读 machineid-info, 失败回退主网卡 MAC + 0000
    - sn 优先 /dev/disk0 序列号, 回退 IOPlatformSerialNumber
    - 新增 GetMacGUIDInfo / GetMacHardwareInfo / SetMacMachineId /
      GetMacInfoBackups / CreateMacInfoBackup / RestoreMacInfoBackup / ResetMacDeviceID
    - 前端 GUID 面板支持 macOS: 显示硬件信息, 编辑 machine_id 并实时预览 GUID, 备份/恢复/删除

* fix(webui): 加固 GUID 管理并补充 Linux global 路径迁移

按评审意见处理:

- Linux 迁移: 仅当 <dataPath>/global 不存在且 <dataPath>/nt_qq/global 存在时
  搬运旧目录, 新目录已存在则保持原样; 逻辑抽到 global-migrate.ts 便于测试
- macOS 主网卡 MAC: 优先 en0, 再回退父级 IOEthernetController 上的
  IOMACAddress, 整条链路判空容错
- 恢复接口防目录穿越: 备份名必须命中白名单且匹配 .bak.<时间戳> 格式,
  写入前校验内容合法性 (Registry20 / machine-info / TEA 容器)
- SN 留空语义统一为"沿用当前生效值", 前后端预览与落库一致
- 前端保存按钮 dirty 判定纳入 SN
- 备份命名加毫秒时间戳与随机后缀, COPYFILE_EXCL 落盘, 杜绝同秒覆盖
- 硬件查询改为异步 execFile 并加进程内缓存, 不再阻塞事件循环

测试: 新增 Linux 迁移 5 例与备份命名/穿越/内容校验用例,
全量 27 文件 256 例通过; tsc --noEmit 与 eslint 通过。
2026-10-11 12:22:47 +08:00
手瓜一十雪 6797143b04 chore(ci): remove one-off compatibility validation 2026-10-10 12:50:35 +08:00
手瓜一十雪 ff37736a4a docs(release): remove obsolete release note templates 2026-10-10 12:27:51 +08:00
手瓜一十雪 26ad589367 fix(release): generate notes from verified tag history 2026-10-10 12:27:51 +08:00
手瓜一十雪 ff9a829e29 fix(shell): preserve Windows launcher paths and elevation arguments 2026-10-10 11:17:31 +08:00
手瓜一十雪 f8786c65de test(macos): read XML entitlements and cache verified QQ image 2026-10-10 10:41:55 +08:00
手瓜一十雪 038dd558da test(macos): exercise signed QQ with native modules without login 2026-10-10 10:29:52 +08:00
手瓜一十雪 abda6a96de fix(native): complete cross-platform media and packet integration 2026-10-10 09:53:28 +08:00
H3CoF6 4e2c48624a fix(onebot): 修复 create_flash_task 触发的 QQ 内核崩溃,并新增时效字段 (#2098) 2026-10-10 05:37:09 +08:00
手瓜一十雪 1c0f7cce4f fix(macos): support verified QQ builds on arm64 and x64 2026-10-10 01:05:09 +08:00
手瓜一十雪 b31e1c0f0c fix(packet): extend QQ build coverage from 40768 to 53644 2026-10-09 22:15:24 +08:00
手瓜一十雪 83c1d1d596 fix(packet): support QQ 53644 and missing recent builds 2026-10-09 20:19:36 +08:00
Shxiao 05feca9a2c fix(onebot): get_group_files_by_folder 不再丢弃子文件夹 (#2095)
该接口的 returnSchema 声明了 folders(文件夹列表),actionDescription
也写着「获取指定群文件夹下的文件及子文件夹列表」,但 _handle 把 folders
硬编码成空数组。

它调用的 MsgApi.getGroupFileList 与 get_group_root_files 相同,返回项
既可能带 fileInfo 也可能带 folderInfo;兄弟实现 GetGroupRootFiles 把
两类都映射了出来。后果是进入某个子目录后无法继续往下遍历,调用方永远
只能拿到空的 folders。

改为按兄弟接口的方式映射 folderInfo。
2026-10-07 22:05:51 +08:00
Shxiao f750d95545 fix(onebot): 恢复 set_group_leave 的 is_dismiss 解散群聊支持 (#2094)
payloadSchema 声明了 is_dismiss(是否解散),该字段也会出现在 build:openapi
生成的接口文档中,但 _handle 始终只调用 quitGroup:群主传 is_dismiss=true
期望解散群聊时,实际只把账号退出群聊——群没解散,账号却已经不在群里。

同一问题曾在 #1694(deae7fd4)修复过。该 PR 随后被 #1701(e6f646837,
2026-03-13)整包回滚,54 个文件全部撤销;触发原因记录在 #1700(v4.17.48
无法正常发送 JSON 卡片消息),回滚后 v4.17.49 确认修复。回滚一并删掉了
destroyGroup 与 is_dismiss 分支,本次只恢复这一条分支。

本补丁不触碰任何 schema、描述与示例字段。
2026-10-07 22:05:16 +08:00
手瓜一十雪 ec6aadaeea fix(shell): support QQ 9.9.36 Windows file query aliases 2026-10-07 00:07:42 +08:00
手瓜一十雪 463d3ea5b1 fix(test): use typed spawn options for Windows batch regression 2026-10-06 18:08:08 +08:00
手瓜一十雪 0d6ce7f509 fix(ci): sync typescript dependency in workspace lockfile 2026-10-06 18:07:06 +08:00
手瓜一十雪 4f1401da78 fix(types): preserve complete nested types during post-processing
Use the TypeScript parser instead of a regex that truncates nested generics and function types. Validate generated syntax and add a regression test. Include workspace aliases and PTY ambient declarations. The full type package build still reports six errors in third-party node-pty source; this commit does not claim to resolve that remaining issue.
2026-10-06 17:51:21 +08:00
手瓜一十雪 9109b8cfe2 fix: repair Windows release dependencies and loader paths
Bundle required crypto and SSL DLLs and gate releases on a Windows native-load smoke test. Resolve loader paths independently of the working directory and encode file URLs correctly. Include the quick-login launcher built from Windows-Boot 0ff70ce10e34ac26411f9e6bcedaedfacc1e74f0. Validated builds, five path regressions, and live Shell and Windows Node startup to QR login.
2026-10-06 17:51:21 +08:00
手瓜一十雪 297133a1b1 fix(shell): update Windows hook for native file information queries
Include the x64 Release hook built from NapCat-Windows-Boot commit 789e6cce00be40d02659e1aca992f8cd928b790a. SHA256: 7C48E7D10D77E2C3936E5D190AEB0DDEE353D55FD06DE81C714F2740112B94B1.

Related to #2091. The replacement passes 10 independent Win32 checks; the reported QQ crash remains to be verified in the reporter's environment.
2026-10-06 16:54:12 +08:00
sj817 454cc0eda2 ci(release): 下游 AppImage 用的 QQ 换成 3.2.32-52194
原来的 3.2.30-50969 链接已经 404,v4.18.29 发版时 AppImage、NodeLoader 的构建都因此失败。
2026-10-05 13:50:01 +08:00
sj817 435cb7cf52 fix(core): Windows Server 缺少媒体基础组件时给出明确提示
QQNT.dll 静态依赖 mf.dll / mfplat.dll / mfreadwrite.dll,Windows Server 默认不安装
「媒体基础」,加载 wrapper.node 时系统只报 The specified module could not be found(#2069)。
现在 Windows 下加载失败且找不到 mfplat.dll 时,直接提示安装媒体基础的方法。
2026-10-05 13:37:07 +08:00
sj817 8005afebd2 fix: 静默离线等 60 秒再重启 Worker,被踢下线不受影响
静默离线(#2080)原来和被踢下线一样 3.5 秒后就重启 Worker。网络短暂断开时 QQ
也可能报离线,这样一次网络抖动就会把整个 Worker 重启掉。现在静默离线先等 60 秒,
期间恢复在线就不重启;等待期间收到被踢通知则不再等,按原来的 3.5 秒重启。

Shell 和 Framework 里重复的下线处理抽成 createOfflineRecovery,并补上测试。
2026-10-05 13:23:32 +08:00
xboHodx a8f6a57311 feat: 群相册支持多图同批次上传与视频上传,分片上传改为并发 (#2081)
- 新增 upload_images_to_qun_album:多张图片共用一个批次,相册里显示为同一条
- 新增 upload_video_to_qun_album:上传视频并自动抽取首帧作为封面
- 分片大小改用服务端返回的 slice_size,分片并发上传,最后一片等其它分片传完再发
- 摘要改为流式计算,分片按需读取,不再把整个文件读进内存
- 批次号同一秒内递增,避免两次上传被并成一条
2026-10-05 13:21:38 +08:00
sj817 c0fd089539 chore(release): 发布说明换成仍可下载的 QQ 官方 CDN 链接
原来的 9.9.26-44343 / 3.2.23-44343 / Mac 40990 链接已经全部 404。
换成 Windows 9.9.33-52230 和 Linux 3.2.32-52194 的官方 CDN 链接并标注,
附上 GitHub 镜像作为备用,MacOS 写明暂不支持。
2026-10-05 12:45:34 +08:00
sj817 88643854a0 fix(core): 新入群拉不到成员列表时群消息不再整条丢失
- getGroupMember 在群成员缓存刷新失败时 members 为 undefined,
  直接 members!.values() 抛 TypeError,整条群消息上报失败;
  现在返回 undefined,拉取失败的结果也不再写进缓存
- 未缓存的群刚刷新过就不再重复强制拉取,群消息处理里也去掉重复查询
- 临时会话按来源群号查成员,之前误把对方 QQ 号当群号去拉成员列表
- uin 转 uid 在 NT 接口都查不到时,先从已缓存的群成员里找

Refs #2070
2026-10-05 12:39:05 +08:00
Shxiao 9a06abbbbd fix: 静默离线(无 KickedOffLine 通知)后自动恢复登录 (#2080)
服务端静默断开会话时不会下发 KickedOffLine,onSelfStatusChanged 仅把
selfInfo.online 置为 false 并打一行日志,没有任何消费者:进程与 WS 连接
继续存活,下游 OneBot 客户端长时间收不到任何事件。

- core 在 在线 -> 离线 的跳变上广播新的 SelfOffline 事件(重复的 status=20
  不重复触发,未登录时不触发)
- framework/shell 复用 #2030 已建立的下线恢复链路:同步 WebUI -> 重启 Worker
  -> 快速登录
- 静默离线可能是临时状态,重启前重新确认仍未恢复,避免误重启 Worker

Closes #2071
2026-10-05 12:06:22 +08:00
sj817 8371359677 fix(webui): Firefox 下关闭卡片倾斜效果,修复登录页内容不显示
Firefox 里 backdrop-filter 和 3D transform 作用在同一个元素上时,卡片里
带层叠上下文的元素(标题、输入框、按钮)不会被绘制,登录页只剩一行提示文字。
报告者在 macOS 的 Firefox 157 上确认:去掉 transform 或 backdrop-filter
任意一个都能恢复,只去掉 transform 时鼠标移上去重新倾斜又会消失。

倾斜只是装饰,保留毛玻璃效果,Firefox 下不再设置 transform 和 will-change,
鼠标光晕照常显示。其他浏览器行为不变。

Closes #2083
2026-10-05 11:46:26 +08:00
sj817 651c15aa61 fix(native): 更新 MoeHoo,修复收到空包时 QQ 进程段错误
QQ 在网络未就绪、连接异常等情况下会以空包调用收发函数,MoeHoo 的
recv_hook/send_hook 不判空直接解引用,导致 QQ 进程 SIGSEGV(#2060、#1668,
崩溃点为 recv_hook+34)。Docker 部署启动后几秒内崩溃就是这个原因。

MoeHoo-NapCat new-test@ff1e937:空包直接交给原函数,不再解引用。
二进制来自该提交的 CI(run 37260275360),更新 linux.x64、linux.arm64、win32.x64。
darwin.arm64 现有二进制与 CI 产物不是同一套实现(54 KB / 1.1 MB),且无法在 Mac 上验证,
本次不更新。

验证:用伪造的 wrapper.node 在 Linux x64 上让 MoeHoo 挂钩同签名函数,
旧二进制在空包、空 src、空指针参数、发送空包时都会段错误,新二进制都正常返回,
正常包的回调内容(uin、cmd、seq、数据)与旧版一致。
2026-10-05 11:44:48 +08:00
sj817 00729e4807 feat(onebot): 群文件夹返回最后修改时间与修改者
get_group_root_files 返回的文件夹新增 modify_time、modifier、modifier_name,
取自 NT 原始数据 folderInfo 的 modifyTime / modifyUin / modifyName,
命名与群文件已有的 modify_time 保持一致。

Closes #1964
2026-10-05 11:07:59 +08:00
sj817 5ef4f6cb7c fix(webui): Passkey 检查不再阻塞 Token 登录
在电脑端注册 Passkey 后用手机打开 WebUI,本机没有对应 Passkey 时
navigator.credentials.get 可能一直不返回,而检查期间 Token 输入框和回车登录
都被禁用,页面就卡在「正在检查Passkey」。

- 检查 Passkey 期间不再禁用 Token 输入框和回车登录
- credentials.get 加 30 秒超时和 AbortController
- 提交 Token 或离开页面时取消仍在等待的 Passkey 验证

Closes #2076
2026-10-05 11:07:59 +08:00