[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-94481":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":10,"languages":10,"totalLinesOfCode":10,"stars":11,"forks":12,"watchers":13,"openIssues":12,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":15,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":16,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":17,"fork":17,"defaultBranch":18,"hasWiki":19,"hasPages":17,"topics":20,"createdAt":10,"pushedAt":10,"updatedAt":21,"readmeContent":22,"aiSummary":23,"trendingCount":14,"starSnapshotCount":14,"syncStatus":12,"lastSyncTime":24,"discoverSource":25},94481,"EMT-QQ","pinedarodd877-cmyk\u002FEMT-QQ","pinedarodd877-cmyk","EMT·QQ · 仿 Telegram 极简 QQ 客户端  界面简洁美观","",null,119,2,3,0,8,39.23,false,"main",true,[],"2026-08-24 04:01:22","\u003Cp align=\"center\">\r\n  \u003Cimg src=\"docs\u002Flogo.jpg\" width=\"220\" alt=\"EMT·QQ Logo\">\r\n\u003C\u002Fp>\r\n\r\n\u003Ch1 align=\"center\">EMT·QQ\u003C\u002Fh1>\r\n\r\n\u003Cp align=\"center\">\r\n  \u003Cb>仿 Telegram 极简风格的 QQ 网页客户端 —— 聊天，本该如此优雅。\u003C\u002Fb>\r\n\u003C\u002Fp>\r\n\r\n---\r\n\r\n## 📢 重要声明（必读）\r\n\r\n最近在 B 站发布视频后，收到很多私信和评论，有不少人提醒\"腾讯会告你侵权\"\"小心收到律师函\"之类。这里统一回应一下：\r\n\r\n经过思考，我最终决定：\r\n\r\n**1. 本项目不会公开全部源代码，也不会提供成品发布。**\r\n\r\n原因很简单：为了规避不必要的版权与合规风险，**本仓库不直接公开完整源码，不提供任何成品下载**。\r\n\r\n**2. 本仓库仅用于技术交流。**\r\n\r\n不提供成品、不引导侵权、不鼓励对腾讯 QQ 的逆向滥用。做这个项目纯粹是为了学习和探索前端技术。\r\n\r\n**3. 后续会发布技术性内容（教学向）。**\r\n\r\n包括但不限于：\r\n- 如何实现\"秒切 QQ 号 · 双重身份\"这类效果（技术思路讲解）\r\n- 如何将 TGS 动态表情（含直接 gzip 压缩嵌入方案）流畅运行在 Web 网页端\r\n- 第三方客户端的分层架构与性能优化思路\r\n\r\n技术无罪，边界在心。感谢每一位理性交流的朋友，也接受合理的批评与建议。\r\n\r\n---\r\n\r\n## ✨ 特性一览\r\n\r\n| | |\r\n|---|---|\r\n| 🎨 **仿 Telegram 极简设计** | 毛玻璃质感、圆角气泡、纯净配色，中心面板通透无遮挡，壁纸之美自然透出 |\r\n| ⚡ **丝滑流畅** | 动态表情、贴纸、消息动画轻量优化，滚动跟手、切换零等待 |\r\n| 😀 **超 1000 款动态 Emoji** | 收录 1600+ Telegram 同款 TGS 动态表情，全矢量动画 |\r\n| 🎭 **四大系列动态贴纸** | 经典角色、小鸭子、死神笔记、小火人，发送即动态 |\r\n| 🎨 **个性定制** | 8 套主题配色、多张精选壁纸、浅色\u002F深色\u002F夜间三模式 |\r\n| 🔥 **进阶功能** | 阅后即撤、消息模糊、AI 润色、定时发送、表格投票 |\r\n| 🪪 **双重身份** | 双账号同时在线，一键秒切发送身份（详见下方技术文档） |\r\n\r\n---\r\n\r\n## 📸 界面展示\r\n\r\n![demo](docs\u002F1.jpg)\r\n\r\n![demo](docs\u002F2.jpg)\r\n\r\n![demo](docs\u002F3.jpg)\r\n\r\n![demo](docs\u002F4.jpg)\r\n\r\n---\r\n\r\n## 📚 技术文档（可视化）\r\n\r\n### 🔄 双重身份 · 秒切 QQ 号实现原理\r\n\r\n> 完整文档：[docs\u002F双重身份技术文档.html](docs\u002F双重身份技术文档.html)\r\n>\r\n> 注：本文档由 AI 整理生成，可能存在不准确之处，仅供学习参考。\r\n\r\n#### 架构总览\r\n\r\n```\r\n┌─────────────┐        ┌──────────────┐        ┌─────────────┐\r\n│  NapCat A   │◄──────►│              │◄──────►│  NapCat B   │\r\n│  (8084 WS)  │  wsA   │   EMT·QQ     │  wsB   │  (3001 WS)  │\r\n│  老号 QQ1   │        │   客户端     │        │  新号 QQ2   │\r\n└─────────────┘        └──────────────┘        └─────────────┘\r\n                              │\r\n                              │ http 8899\r\n                              ▼\r\n                     ┌────────────────┐\r\n                     │ server-proxy   │\r\n                     │ 本地代理(可选)  │\r\n                     └────────────────┘\r\n```\r\n\r\n#### 核心原理：双连接 + 身份路由\r\n\r\n| 环节 | 机制 |\r\n|---|---|\r\n| **双 WS 连接** | 同时挂载两个 NapCat 的 WebSocket（8084 + 3001），各自独立收发 |\r\n| **身份标记 acc** | 每条消息 \u002F 每次 API 调用都携带 `acc`（0=老号，1=新号） |\r\n| **发送路由** | `sa2()` 按 acc 选择对应 WS 发出，切换身份 = 换发送出口 |\r\n| **身份存储** | `siA\u002FsnA`、`siB\u002FsnB` 双份变量 + `curAcc` 记录当前身份 |\r\n| **界面联动** | 头像、昵称、标题随 curAcc 实时切换，毫秒级 |\r\n\r\n#### 双连接核心代码\r\n\r\n```javascript\r\n\u002F\u002F 账号 A（老号）：WS 8084\r\nws = new WebSocket('ws:\u002F\u002F127.0.0.1:8084?access_token=...');\r\nws.onmessage = function(ev){ hm(JSON.parse(ev.data), 0); };  \u002F\u002F acc = 0\r\n\r\n\u002F\u002F 账号 B（新号）：WS 3001\r\nw2 = new WebSocket('ws:\u002F\u002F127.0.0.1:3001?access_token=...');\r\nw2.onmessage = function(ev){ hm(JSON.parse(ev.data), 1); };  \u002F\u002F acc = 1\r\n```\r\n\r\n#### 发送路由核心代码\r\n\r\n```javascript\r\nfunction sa2(a, p, e, acc){\r\n  var sock = acc === 1 ? (w2 || ws2 || null) : (ws || ws1 || null);\r\n  if (!sock || sock.readyState !== 1) return;\r\n  sock.send(JSON.stringify({ action: a, params: p || {}, echo: e || (a + '_' + Date.now()) }));\r\n}\r\n```\r\n\r\n#### 身份切换核心代码\r\n\r\n```javascript\r\nfunction accSwitch(){\r\n  var na = curAcc === 0 ? 1 : 0;          \u002F\u002F 取反 = 切换\r\n  if (na === 1 && cc && cc.type === 'g' && !isSharedGroup(cc.id)) {\r\n    to('该群只有账号1在，无法切换');        \u002F\u002F 共同群限制\r\n    return;\r\n  }\r\n  curAcc = na;                             \u002F\u002F 换身份\r\n  si = na === 1 ? siB : siA;               \u002F\u002F 换自己的QQ号\r\n  accSyncUi();                             \u002F\u002F 换头像\u002F昵称\u002F标题\r\n}\r\n```\r\n\r\n#### 三个关键技术点\r\n\r\n1. **消息去重**：群消息会被两个 NapCat 各推一次，用\"内容签名 + 时间戳\"去重；自己消息的回显用 `_selfMerge` 合并，不重复显示\r\n2. **共同群限制**：`isSharedGroup()` 取两个账号群列表交集，只有共同群才能切换身份发送\r\n3. **账号标识**：每条自己发出的消息打上 `acc` 标签，渲染时显示对应账号昵称（主题色），一眼分清谁发的\r\n\r\n---\r\n\r\n## ⭐ 支持项目\r\n\r\n项目仍在开发中，当前仓库仅作宣传展示。如果觉得有意思，欢迎点个 ⭐ Star 支持一下！\r\n\r\n---\r\n\r\n## 📄 免责声明\r\n\r\n本项目仅供学习交流使用，所有动态表情、贴纸、壁纸等素材版权归原作者所有。如涉及侵权，请联系删除。\r\n\r\n请遵守腾讯 QQ 用户协议。本项目与腾讯公司无任何关联，非官方出品。\r\n","EMT·QQ 是一款仿 Telegram 极简风格的 QQ 网页客户端，基于 NapCat 协议实现双账号 WebSocket 并行连接与身份路由，支持秒切账号、动态 TGS 表情、多主题\u002F壁纸、阅后即撤、AI 润色等进阶功能。技术上采用轻量前端架构，对消息动画、滚动性能和资源加载做了针对性优化，所有功能均通过本地代理与 WebSocket 接口与 NapCat 通信。适用于希望在网页端获得更简洁、美观、多身份管理体验的 QQ 用户，尤其适合技术爱好者学习第三方客户端架构与 Web 实时通信实践。","2026-08-10 02:30:05","CREATED_QUERY"]