编制:2026-05-31
对标范围:A 类 58 条(秀秀现有)+ B 类 89 条(目标功能)= 147 条
调研方法:4 个仓库源码逐文件实测 + 官方文档交叉验证
上一份选型分析:/tmp/tailchat-ima/Top3对标分析.md
本次重点:把"模块小计"还原为"逐条证据 + 行号",覆盖全部 147 条
| 项 | 值 |
|---|---|
| 项目地址 | https://github.com/TangSengDaoDao/TangSengDaoDaoServer |
| 协议 | Apache License 2.0(LICENSE 实测) |
| 主语言 | Go(服务端)+ TypeScript/React(Web/Electron)+ Kotlin(Android)+ Objective-C(iOS) |
| 团队来源 | 国内"老工匠"团队,自述八年开发;与 WuKongIM 是同一班子 |
| 架构 | 二层:通讯层 WuKongIM + 业务层 TangSengDaoDao(gRPC Webhook + HTTP API 双向交互) |
| 项目 | Star | 最后 push | 协议 | 备注 |
|---|---|---|---|---|
| TangSengDaoDaoServer | 3493 ★ | 2026-05-15 | Apache 2.0 | 主仓,34 open issues |
| TangSengDaoDaoWeb | 176 ★ | 2026-03-19 | Apache 2.0 | Web/Electron/Tauri 三端 |
| TangSengDaoDaoAndroid | 138 ★ | 2026-05-20 | Apache 2.0 | Kotlin 原生 |
| TangSengDaoDaoiOS | 58 ★ | 2025-08-12 | Apache 2.0 | 超 9 个月没更新(B75 P0 门槛预警) |
| TangSengDaoDaoManager | 80 ★ | 2025-09-08 | Apache 2.0 | 独立 Admin 后台 |
| WuKongIM(通讯层) | 4838 ★ | 2026-05-29 | Apache 2.0 | 高频维护 |
B75 活跃维护门槛裁判:服务端 + Android + Web 全部 ≤ 90 天,iOS 超 90 天(影响 iOS 端二开和官方 bug 跟进,门槛部分通过)。
支持情况:✅ 原生 / 🟡 部分/插件 / ❌ 不支持 / ❓ 文档未明
证据:源码路径或文档章节
| 序号 | 秀秀现有功能 | 稳定性 | TSDD 支持 | 证据 | 备注 |
|---|---|---|---|---|---|
| A01 | 文字消息发送 | 稳定 | ✅ | modules/message/api.go:90+ 全套 send API + WuKongIM 长连接投递 |
直接继承 |
| A02 | 私信(DM/Converse) | 稳定 | ✅ | WuKongIM ChannelType=1(个人)+ modules/user/api_friend.go |
原生 |
| A03 | @提及(含修复版) | 较稳定 | 🟡 | modules/message/ 支持 @个人 + @all,无 @角色 |
守一 B2 修复可移植 |
| A04 | 消息回复/引用 | 稳定 | ✅ | message entities 支持 reply payload | 原生 |
| A05 | 消息右键菜单 | 稳定 | ✅ | Web packages/tsdaodaobase/src/Messages/Base 全套 menu |
原生 |
| A06 | 消息搜索 | 较稳定 | ✅ | modules/message/api.go:97 m.search + ZincSearch 全文索引(api.go:317 SearchOn 开关) |
TSDD 比秀秀强 |
| A07 | Markdown 渲染(GFM/表格/代码块) | 稳定 | ✅ | Web 端 Text Cell 支持 markdown,但弱于 Discord | 守一文档转 markdown 渲染需测试 |
| A08 | 消息多选 | 较稳定 | 🟡 | Web Mergeforward 已支持合并转发选择 UI,但"多选+复合操作"需扩展 | 守一 B3 patch 可移植 |
| A09 | 消息转发 | 稳定 | ✅ | Messages/Mergeforward/index.tsx 合并转发原生 |
原生 |
| A10 | 消息置顶 | 较稳定 | ✅ | modules/message/api_pinned.go 全套 + message_extra.is_pinned 字段 |
TSDD 原生比秀秀 patch 优 |
| A11 | 消息撤回 | 稳定 | ✅ | api.go:94 m.revoke + Messages/Revoke/ |
原生 |
| A12 | 消息字符限制扩展 | 稳定 | ✅ | TSDD 消息正文 TEXT 字段无 1k 限制 | 不存在该问题 |
| A13 | 时间显示 + typing | 较稳定 | ✅ | api.go:98 m.typing + Web Service/TypingManager.tsx |
原生 |
| A14 | 桌面通知 | 失效 | ✅ | Web Utils/NotificationUtil.ts Electron 桌面通知 + Web Notification API |
TSDD 原生开箱即用,B80 自动解决 |
| A15 | 移动端推送 | 失效 | ✅ | modules/webhook/ 6 路推送(APNs/Firebase/HMS-Huawei/MI/OPPO/VIVO) |
TSDD 国产推送是杀手锏 |
| A16 | 群组双层结构(群组→面板) | 稳定 | 🟡 | TSDD 是 group/channel 两层,没有第三层 Panel(B18 三层结构缺) | 守一群组 UI 需重新对齐 |
| A17 | 群主/管理员/普通成员 | 稳定 | ✅ | modules/group/const.go MemberRoleCreator/Manager/Common |
原生 |
| A18 | 频道分类/分组(拖拽) | 稳定 | 🟡 | Web 端有会话置顶但无频道拖拽分组 UI | 需开发 |
| A19 | 邀请系统(次数 + 美化) | 较稳定 | ✅ | modules/group/invite.go + h5confirm 美化页 |
原生 |
| A20 | 群公告(持久) | 失效 | ✅ | group/api.go:804 GroupAttrKeyNotice + group.Notice 字段持久 |
TSDD 解决秀秀 configs 失效 |
| A21 | 多人会话/Bot 建群 | 失效 | ✅ | group.create + robot 模块的 sendMessage API |
TSDD 解决秀秀 openapi 失效 |
| A22 | 好友系统 | 稳定 | ✅ | modules/user/api_friend.go + db_friend.go |
原生 |
| A23 | 联系人置顶 | 较稳定 | ✅ | user_setting.top 字段 |
原生 |
| A24 | Bot 原生(OpenAPI 创建) | 失效 | ✅ | modules/robot/api_manager.go 创建 robot 主流程 |
直接解决 |
| A25 | Bot 鉴权(appId+secret+JWT) | 失效 | ✅ | robot.token + app_id 字段(robot-20211105-01.sql)+ robotAuth middleware |
直接解决 |
| A26 | Bot Socket.IO 连接 | 失效 | 🟡 | TSDD 用 HTTP long-polling(/robot/events GET/POST + /ack),不是 Socket.IO |
需改造 OpenClaw 连接器 |
| A27 | Bot 加群授权(addBotUser) | 失效 | ✅ | group memberAdd 走 robot 用户即可(user.robot=1) |
直接解决 |
| A28 | Bot 响应策略四档 | 失效 | 🟡 | TSDD robot 仅支持菜单/inline_query,"@only/all/allowlist"策略需业务层补 | 守一 patch 可移植 |
| A29 | Bot 主人权限管理 | 失效 | 🟡 | robot 表无 owner_uid,需扩字段 | 简单 ALTER |
| A30 | Bot 个性化 SOUL.md | 失效 | 🟡 | TSDD robot.placeholder 仅一行;SOUL.md 需走应用层挂载 | OpenClaw 侧逻辑保留即可 |
| A31 | 批量创建 Bot(42 条) | 失效 | ✅ | manager API 批创建 + robot_id 唯一索引 |
直接解决 |
| A32 | Bot 自动建群执行会议 | 失效 | ✅ | robot.sendMessage + group.create 组合 | 直接解决 |
| A33 | 文转播客 Bot 音频发送 | 失效 | ✅ | 文件类型支持 voice/file,BBCode 等效用 entities | 直接解决 |
| A34 | 文件发送(MinIO) | 稳定 | ✅ | modules/file/service_minio.go 原生 MinIO 适配 + 同时支持 OSS/Qiniu/SeaweedFS |
TSDD 文件存储后端更广 |
| A35 | 图片发送 | 稳定 | ✅ | 同上 + Messages/Image/ |
原生 |
| A36 | 文档发布 | 较稳定 | ✅ | 文件通道,type=file | 直接继承 |
| A37 | MP3 音频文件 | 较稳定 | ✅ | Messages/Voice/ 语音 Cell |
原生 |
| A38 | 实时语音通话(LiveKit) | 失效 | 🟡 | Web Service/Const.ts:67-76 9989-9998 RTC 信令枚举齐全;iOS Pods LiMaoRTC.podspec 是私有 WebRTC framework;RTC 业务模块(WuKongRTC/WuKongMoment 同一商业模块包)开源版不含 |
需自研 LiveKit/Jitsi 接入 |
| A39 | 视频/屏幕共享 | 失效 | 🟡 | 同 A38,仅信令枚举占位 | 需自研 |
| A40 | Whisper 语音转文字 | 较稳定 | ❌ | TSDD 无 STT | 守一已有 Whisper 容器可外挂 |
| A41 | Web 端 | 稳定 | ✅ | apps/web/ 完整 React SPA |
原生 |
| A42 | 桌面端(Windows/Electron) | 较稳定 | ✅ | apps/web/src-election/ electron-builder 三平台脚本齐全 |
TSDD 原生 mac/win/linux/arm64 全打包 |
| A43 | 移动端(Android RN) | 较稳定 | ⚠ | TSDD 是 Kotlin 原生,不是 RN | 不能直接复用秀秀 RN 代码 |
| A44 | 手机端回车=换行 | 较稳定 | ❓ | Kotlin 原生需要在 InputView 改 IME action | 守一 patch 需在 Android 工程重做 |
| A45 | Windows 右键复制 | 较稳定 | ✅ | Electron 自带 contextmenu 标配 | 原生 |
| A46 | Windows 草稿不丢失 | 较稳定 | ✅ | 服务端 modules/message/db_conversation_extra.go 支持服务端草稿同步(草稿云端) |
TSDD 比秀秀强(云同步) |
| A47 | 对话宽度+界面优化 | 较稳定 | ❓ | Web 默认布局;自适应弱于 Discord | UI 调优需重做 |
| A48 | 暗色/亮色主题 | 稳定 | ✅ | Web Components/MessageInput/index.tsx startchat_dark.png 等暗色资源 |
原生 |
| A49 | PWA 添加到主屏幕 | 稳定 | ❓ | 未明确 PWA manifest;React build 默认支持 | 简单配置即可 |
| A50 | IAM RBAC | 失效 | 🟡 | TSDD user.role 字段(admin/superAdmin 二级)+ 群组三级角色;无细粒度 RBAC |
需扩展 |
| A51 | 注册首个用户自动管理员 | 稳定 | ✅ | user-20191106-01.sql 内置 superAdmin 账号机制 | 原生 |
| A52 | HTTPS + Let's Encrypt | 稳定 | ⚠ | TSDD 不含证书自动化,需 Nginx/Caddy 外挂 | 部署侧重做 |
| A53 | Nginx 反代 + WebSocket | 稳定 | ⚠ | WuKongIM 5200 WS 端口需透传 | 部署侧重做 |
| A54 | Docker Compose 一键 | 较稳定 | ✅ | docker/tsdd/docker-compose.yaml + testenv/docker-compose.yaml 双套环境 |
原生,比秀秀更干净 |
| A55 | 镜像同步机制 | 较稳定 | ⚠ | 守一 sync-xiuxiu.sh 需重写 | 自研 |
| A56 | OpenAPI OIDC Provider | 失效 | ✅ | modules/openapi/api.go access_token + authcode + userinfo OAuth2 标配 |
直接解决 |
| A57 | Admin 后台 UI | 失效 | ✅ | TangSengDaoDaoManager 独立项目(80 ★) | 直接解决(但 9 月没更新) |
| A58 | i18n(zh-CN + en-US) | 稳定 | ⚠ | Web 端没有 i18n 框架(实测 packages/tsdaodaobase/src 无 locales 目录,群组 tab 写死中文'群组') | 不如秀秀,B74 需自研 i18n |
| 类别 | 数量 | 占比 |
|---|---|---|
| ✅ 原生满足 | 39 | 67.2% |
| 🟡 部分/需小补 | 12 | 20.7% |
| ⚠ 需重做/外挂 | 5 | 8.6% |
| ❌ 不支持 | 1 | 1.7% |
| ❓ 文档未明 | 1 | 1.7% |
| A 类继承率(✅+🟡 算继承) | 51 / 58 = 87.9% | — |
A 类关键观察:秀秀 18 条"失效"功能中,有 15 条 TSDD 原生开箱即用(Bot/Admin/OpenAPI/桌面通知/移动推送/群公告全部解决),这是 TSDD 替代秀秀的最大价值。失效未解决的 3 条:A38/A39 实时音视频通话 + A40 Whisper。
二开难度:低(≤ 1 周)/ 中(1-2 周)/ 高(2-4 周)/ 极高(≥ 4 周)/ 无需
| 序号 | 目标功能 | 优先级 | TSDD 支持 | 证据 | 二开难度 | 工时 |
|---|---|---|---|---|---|---|
| B01 | 文字消息收发 | P0 | ✅ | modules/message/api.go:90+ |
无需 | 0 |
| B02 | @提及(含@角色/@everyone) | P0 | 🟡 | 仅 @个人 + @all;无 @角色 | 中 | 3 人天 |
| B03 | 消息回复/引用 | P0 | ✅ | message entities reply payload | 无需 | 0 |
| B04 | 消息转发(单/多) | P0 | ✅ | Messages/Mergeforward/index.tsx |
无需 | 0 |
| B05 | 消息多选 | P0 | 🟡 | Mergeforward 有选择 UI,复合操作需扩 | 低 | 3 人天 |
| B06 | 消息置顶 | P0 | ✅ | api_pinned.go + message_extra.is_pinned |
无需 | 0 |
| B07 | 消息撤回 | P0 | ✅ | api.go:94 m.revoke |
无需 | 0 |
| B08 | 消息编辑 | P1 | ✅ | api.go:103 m.messageEdit + message_extra.content_edit |
无需 | 0 |
| B09 | 群发(@everyone/@角色) | P0 | 🟡 | 仅 @all;@角色广播需扩 | 中 | 4 人天 |
小计:P0 8 条中 6 条 ✅、2 条 🟡(B02/B09 同源)。二开 10 人天。
| 序号 | 目标功能 | 优先级 | TSDD 支持 | 证据 | 二开难度 | 工时 |
|---|---|---|---|---|---|---|
| B10 | 消息搜索(强大稳定) | P0 | ✅ | modules/search/ + ZincSearch 全文索引(api.go:317 SearchOn) |
无需 | 0 |
| B11 | 表情反应(Reaction) | P1 | ✅ | db_message_reaction.go + reaction_users 表 |
无需 | 0 |
| B12 | typing 状态 | P1 | ✅ | api.go:98 m.typing + TypingManager.tsx |
无需 | 0 |
| B13 | 已读/未读 | P1 | ✅ | api.go:101 m.messageReaded + db_member_readed.go + messageReceiptList |
无需 | 0 |
| B14 | 草稿(本地+云端) | P0 | ✅ | db_conversation_extra.go 服务端草稿同步 |
无需 | 0 |
| B15 | 富文本/Markdown | P0 | ✅ | Text Cell + entities | 无需 | 0 |
| B16 | 代码块语法高亮 | P1 | 🟡 | Markdown 基础渲染有,syntax highlight 弱 | 低 | 2 人天 |
| B17 | 链接预览(OG) | P2 | ❌ | 无 OG 预览模块 | 中 | 5 人天 |
小计:P0 3 条全 ✅;P1 4 条中 3 条 ✅ 1 条 🟡;P2 1 条 ❌。二开 7 人天。
| 序号 | 目标功能 | 优先级 | TSDD 支持 | 证据 | 二开难度 | 工时 |
|---|---|---|---|---|---|---|
| B18 | 群组双层结构 | P0 | 🟡 | TSDD 仅 group/channel 两层,无 Panel | 中 | 8 人天 |
| B19 | 频道拖拽分组 | P1 | ❌ | 无频道分组 UI | 中 | 5 人天 |
| B20 | 成员管理 | P0 | ✅ | group/api.go:77-97 全套 |
无需 | 0 |
| B21 | RBAC(开箱不依赖插件) | P0 | 🟡 | 用户级 admin/superAdmin + 群三级角色;细粒度 RBAC 需扩 | 高 | 12 人天 |
| B22 | 群公告 | P0 | ✅ | group.Notice 字段持久 |
无需 | 0 |
| B23 | 邀请链接(次数+美化) | P0 | ✅ | invite.go + h5confirm |
无需 | 0 |
| B24 | 多人会话 | P0 | ✅ | group.create | 无需 | 0 |
小计:P0 6 条中 4 条 ✅、2 条 🟡(B18/B21)。二开 25 人天。
| 序号 | 目标功能 | 优先级 | TSDD 支持 | 证据 | 二开难度 | 工时 |
|---|---|---|---|---|---|---|
| B25 | 用户类型字段(真人/Bot 二态) | P0 | ✅ | user-20191106-01.sql:robot smallint + 独立 robot 表(robot-20210926-01.sql) |
无需 | 0 |
| B26 | 真人只能在真人区发布 | P0 | 🟡 | user.robot=0 判断已有;分区规则需应用层 | 低 | 2 人天 |
| B27 | Bot 只能在 Bot 区发布 | P0 | 🟡 | 同上 | 低 | 2 人天 |
| B28 | 真人秀/Bot 秀双流切换 | P0 | ❌ | 需依赖朋友圈模块(B31)+ 双 tab UI | 高 | 8 人天 |
| B29 | Bot 朋友圈不混入真人秀 | P0 | ❌ | 同 B28 | 含 B28 | 0 |
| B30 | 用户类型 API 过滤 | P0 | ✅ | group/db.go:347 group_member.robot 字段在查询中可直接 WHERE 过滤 |
无需 | 0 |
小计:P0 6 条中 3 条 ✅、2 条 🟡、2 条 ❌(B28/B29 与朋友圈耦合)。二开 12 人天。守一最核心需求 TSDD 数据层支撑度最优(比 Mattermost is_bot 单字段还多一层 robot 元数据表)。
| 序号 | 目标功能 | 优先级 | TSDD 支持 | 证据 | 二开难度 | 工时 |
|---|---|---|---|---|---|---|
| B31 | 朋友圈发布(图文/视频/链接) | P0 | ❌ | modules/ 无 moment 目录;仅 common-20230203-01.sql:29 'moment','朋友圈模块' SQL 注册 + base/event/api.go:44-46 EventUserPublishMoment/Delete 事件常量 + file/const.go:10 TypeMoment 文件类型;业务代码=0 |
极高 | 18 人天 |
| B32 | 朋友圈点赞/评论 | P0 | ❌ | 同上 | 极高 | 含 B31 |
| B33 | 双信息流过滤(真人/Bot) | P0 | ❌ | 同上 + 双 tab | 高 | 5 人天 |
| B34 | 内容审核(敏感词+图片) | P1 | 🟡 | message/api.go:106 syncSensitiveWords 敏感词已有;图片审核需外挂 |
中 | 4 人天 |
| B35 | 跨实例朋友圈可见性 | P1 | ❌ | 依赖 B49 联邦 | 高 | 含 B49 |
小计:P0 3 条全 ❌(朋友圈整块需从零开发)。二开 27 人天。iOS WuKongBase/Classes/WKAppConfig.m:651 sid=="moment"→WuKongMoment 映射证实是商业模块,开源版的 SQL 钩子是为商业版预留接口。
| 序号 | 目标功能 | 优先级 | TSDD 支持 | 证据 | 二开难度 | 工时 |
|---|---|---|---|---|---|---|
| B36 | Bot 原生(不依赖额外容器) | P0 | ✅ | modules/robot/ 与主服务同一进程,不需要 service-openapi 单独容器 |
无需 | 0 |
| B37 | OpenAPI 完整文档 | P0 | ✅ | 每个 module 含 swagger/ 目录;modules/openapi/swagger/ |
无需 | 0 |
| B38 | Bot 鉴权(appId+secret/Token) | P0 | ✅ | robot.token + app_id(robot-20211105-01.sql) |
无需 | 0 |
| B39 | Webhook(callbackUrl) | P0 | 🟡 | TSDD robot 表无 webhook_url 字段;走 long-polling /robot/events 拉取;如要 webhook 需扩展 |
中 | 5 人天 |
| B40 | WebSocket/Socket.IO 长连接 | P0 | 🟡 | TSDD Bot 是 long-polling;用户走 WuKongIM 5200 WS;Bot 接入 WS 需对接 WuKongIM SDK 而不是 robot 模块 | 中 | 5 人天 |
| B41 | Bot 多账号并发 20+ | P1 | ✅ | 无显式上限 | 无需 | 0 |
| B42 | Bot 加群授权 | P0 | ✅ | 用 user.robot=1 的账号 memberAdd | 无需 | 0 |
| B43 | Bot 自动建群+执行流程 | P1 | ✅ | sendMessage + group.create 组合 | 无需 | 0 |
| B44 | Bot 个性化 SOUL/Prompt 注入 | P1 | 🟡 | placeholder 一行;SOUL.md 走应用层 | 低 | 2 人天 |
小计:P0 6 条中 4 条 ✅、2 条 🟡(B39/B40 长连接方式不同)。二开 12 人天。streamStart/End 真实存在(robot/api.go:77-78 + 85-115),是 LLM bot 集成的天然接口。
| 序号 | 目标功能 | 优先级 | TSDD 支持 | 证据 | 二开难度 | 工时 |
|---|---|---|---|---|---|---|
| B45 | 一键独立部署 | P0 | ✅ | docker/tsdd/docker-compose.yaml(生产)+ testenv/docker-compose.yaml(测试)双套 |
无需 | 0 |
| B46 | 完整启停(无失效容器) | P0 | ✅ | 容器清单:mysql/redis/wukongim/tangsengdaodaoserver/minio 全部必需 | 无需 | 0 |
| B47 | 数据私有化 | P0 | ✅ | wukongimdata + miniodata 本地 volume | 无需 | 0 |
| B48 | 多实例部署 | P0 | ✅ | image registry.cn-shanghai.aliyuncs.com/wukongim/* 可换 namespace 多副本 | 无需 | 0 |
| B49 | 跨实例联邦/中继 | P0 | 🟡 | WuKongIM 通讯层支持集群(githubim.com 文档);业务层 TSDD 需走 webhook+API 桥接 | 高 | 12 人天 |
| B50 | 乙方自主授权 Bot 接入公网 | P0 | ✅ | modules/openapi/api.go OAuth2 三件套 access_token/authcode/userinfo |
无需 | 0 |
| B51 | HTTPS + 证书自动化 | P0 | ⚠ | 不含;需 Nginx/Caddy 外挂 | 低 | 1 人天 |
| B52 | 资源占用 < 4C8G | P1 | ✅ | Go 服务 + WuKongIM 静态二进制,2C4G 实测可跑(githubim 文档) | 无需 | 0 |
小计:P0 7 条中 5 条 ✅、1 条 🟡(B49 联邦)、1 条 ⚠(B51 部署侧)。二开 13 人天。
| 序号 | 目标功能 | 优先级 | TSDD 支持 | 证据 | 二开难度 | 工时 |
|---|---|---|---|---|---|---|
| B53 | Web 端 | P0 | ✅ | apps/web/src/ React |
无需 | 0 |
| B54 | Windows 桌面端 | P0 | ✅ | apps/web/src-election/ + electron-builder*.js |
无需 | 0 |
| B55 | macOS 桌面端 | P0 | ✅ | electron-builder mac-x64/arm64/universal 三套 | 无需 | 0 |
| B56 | Android 移动端 | P0 | ✅ | 独立仓库 TangSengDaoDaoAndroid(Kotlin) | 无需 | 0 |
| B57 | iOS 移动端 | P0 | ⚠ | 独立仓库(Obj-C/Swift);iOS 仓库 9 月没更新(B75 风险) | 需关注 | 0 |
| B58 | 手机端体验 ≥ Discord | P0 | 🟡 | Kotlin/Swift 原生手感优于 RN,但 UI 细节需优化 | 中 | 8 人天 |
小计:P0 6 条中 5 条 ✅、1 条 🟡(B58 UI 优化)。二开 8 人天。Tauri 也在 apps/web/src-tauri/ 是额外加分。
| 序号 | 目标功能 | 优先级 | TSDD 支持 | 证据 | 二开难度 | 工时 |
|---|---|---|---|---|---|---|
| B59 | 手机端回车=换行 | P1 | ❓ | Android Kotlin 输入框默认 IME;需测试是否守一标准 | 低 | 2 人天 |
| B60 | Windows 右键完整支持 | P0 | ✅ | Electron 自带 | 无需 | 0 |
| B61 | 草稿刷新不丢失 | P0 | ✅ | db_conversation_extra.go 云草稿 |
无需 | 0 |
| B62 | 对话宽度自适应 | P1 | 🟡 | Web 默认布局,需对齐 | 中 | 5 人天 |
| B63 | 联系人置顶 | P1 | ✅ | user_setting.top |
无需 | 0 |
小计:P0 2 条全 ✅;P1 3 条中 1 条 ✅ 2 条 🟡。二开 7 人天。
| 序号 | 目标功能 | 优先级 | TSDD 支持 | 证据 | 二开难度 | 工时 |
|---|---|---|---|---|---|---|
| B64 | 文件发送 ≥ 50MB | P0 | ✅ | 4 种存储后端均支持大文件 | 无需 | 0 |
| B65 | 图片发送(含缩略) | P0 | ✅ | Messages/Image/ + thumbnail entities |
无需 | 0 |
| B66 | 在线打开文档 | P0 | 🟡 | 文件可下载查看,但内联预览(office/pdf)需第三方 | 中 | 5 人天 |
| B67 | MP3 音频文件 | P0 | ✅ | Messages/Voice/ |
无需 | 0 |
| B68 | 语音消息(短语音) | P0 | ✅ | Messages/Voice/index.tsx VoiceCell |
无需 | 0 |
| B69 | 实时语音通话 | P1 | ❌ | RTC 信令枚举有,业务模块无(同 A38) | 极高 | 15 人天 |
| B70 | 视频/屏幕共享 | P1 | ❌ | 同 B69 | 极高 | 含 B69 |
小计:P0 5 条中 4 条 ✅、1 条 🟡;P1 2 条 ❌(RTC)。二开 20 人天。这是 TSDD 最大短板(与秀秀等同)。
| 序号 | 目标功能 | 优先级 | TSDD 支持 | 证据 | 二开难度 | 工时 |
|---|---|---|---|---|---|---|
| B71 | 完整品牌定制 | P0 | ✅ | Apache 2.0 无品牌锁;apps/web/public/assets 全可换 | 无需 | 0 |
| B72 | 安装包重新打包(五端) | P0 | ✅ | Electron mac/win/linux + Android gradle + iOS xcode 全自主 | 无需 | 0 |
| B73 | 运行时配置 | P1 | 🟡 | configs/tsdd.yaml 服务端配置;客户端运行时配置需扩 | 低 | 3 人天 |
| B74 | 多语言扩展 | P1 | ❌ | Web 端无 i18n 框架,硬编码中文 | 高 | 10 人天 |
小计:P0 2 条全 ✅;P1 2 条中 1 条 🟡 1 条 ❌(i18n 这是 TSDD 比秀秀差的地方)。二开 13 人天。
| 序号 | 目标功能 | 优先级 | TSDD 支持 | 证据 | 二开难度 | 工时 |
|---|---|---|---|---|---|---|
| B75 | 近 3 个月活跃 commit | P0 | 🟡 | Server/Web/Android ≤ 90d;iOS 2025-08 → 已 9 月+ | 无需 | 0 |
| B76 | 完整文档+社区+bug 少 | P0 | ✅ | tsdaodao.com + githubim.com 中文文档完整;3493 ★ + 34 issues | 无需 | 0 |
| B77 | 开源协议宽松 | P0 | ✅ | Apache 2.0 | 无需 | 0 |
| B78 | 商用允许 | P0 | ✅ | 无商业授权限制 | 无需 | 0 |
小计:P0 4 条中 3 条 ✅、1 条 🟡(B75 iOS)。二开 0 人天。
| 序号 | 目标功能 | 优先级 | TSDD 支持 | 证据 | 二开难度 | 工时 |
|---|---|---|---|---|---|---|
| B79 | 桌面快捷方式(点击进对话窗) | P1 | 🟡 | Electron 支持 deep link + Android intent;需做集成 | 低 | 3 人天 |
| 序号 | 目标功能 | 优先级 | TSDD 支持 | 证据 | 二开难度 | 工时 |
|---|---|---|---|---|---|---|
| B80 | 桌面通知 | P0 | ✅ | Utils/NotificationUtil.ts Electron + Web Notification |
无需 | 0 |
| B81 | 移动端推送(APNs/FCM/小米/华为) | P0 | ✅ | modules/webhook/ 六路推送原生:apns/firebase/hms/mi/oppo/vivo |
无需 | 0 |
| B82 | 离线消息/漫游/历史 | P0 | ✅ | WuKongIM 消息永久存储;api.go:99 syncChannelMessage/100 syncMessageExtra |
无需 | 0 |
| B83 | 好友请求/通讯录/在线状态 | P0 | ✅ | api_friend.go + api_online.go + service_online.go |
无需 | 0 |
| B84 | 个人资料编辑 | P0 | ✅ | api.go:126 uploadAvatar + userUpdateWithField |
无需 | 0 |
| B85 | 多端登录同步 | P0 | ✅ | db_device_offset.go 设备偏移 + WuKongIM 多端同步内建 |
无需 | 0 |
| B86 | 暗色/亮色主题 | P1 | ✅ | 见 A48 | 无需 | 0 |
| B87 | PWA | P2 | ❓ | React 默认;未测 | 低 | 1 人天 |
| B88 | Admin 后台 UI | P0 | ✅ | TangSengDaoDaoManager 独立项目 | 无需 | 0 |
| B89 | 语音转文字 | P2 | ❌ | 无;外挂 Whisper | 中 | 5 人天 |
小计:P0 6 条全 ✅;P1 1 条 ✅;P2 2 条(1 ❓ 1 ❌)。二开 6 人天。B81 推送原生 6 路是 TSDD 杀手锏。
| 模块 | B 类条数 | ✅ | 🟡 | ❌/⚠/❓ | 二开总工时(人天) |
|---|---|---|---|---|---|
| 1. 消息基础 | 9 | 6 | 3 | 0 | 10 |
| 2. 消息扩展 | 8 | 6 | 1 | 1 | 7 |
| 3. 群组权限 | 7 | 4 | 2 | 1 | 25 |
| 4. 真人/Bot 分区 | 6 | 2 | 2 | 2 | 12 |
| 5. 朋友圈 | 5 | 0 | 1 | 4 | 27 |
| 6. Bot/OpenAPI | 9 | 6 | 3 | 0 | 12 |
| 7. 部署架构 | 8 | 6 | 1 | 1 | 13 |
| 8. 多端客户端 | 6 | 5 | 1 | 0 | 8 |
| 9. 客户端体验 | 5 | 2 | 2 | 1 | 7 |
| 10. 文件/媒体 | 7 | 4 | 1 | 2 | 20 |
| 11. 品牌改造 | 4 | 2 | 1 | 1 | 13 |
| 12. 稳定性硬指标 | 4 | 3 | 1 | 0 | 0 |
| 13. 待开发 | 1 | 0 | 1 | 0 | 3 |
| 14. 二次审核补漏 | 10 | 8 | 0 | 2 | 6 |
| 合计 | 89 | 54 | 19 | 15 | 163 人天 |
人月换算:163 人天 ÷ 22 = 约 7.4 人月(按一人全职 22 工作日)。
| 序号 | 功能名 | 当前情况 | 二开方案概要 | 工时 |
|---|---|---|---|---|
| B02 | @角色提及 | 仅 @个人+@all | 在 message entities 加 mention_role 类型,群组层维护 role→uid 列表 |
3d |
| B05 | 消息多选 | Mergeforward 有选择 UI | 复用选择层 + 批量操作 menu | 3d |
| B09 | @角色广播/群发 | 仅 @all | 含 B02;扩展为 multi-recipient 投递 | 4d |
| B18 | 群组三层结构 | 仅 group/channel | 增加 panel 层,DB 加 panel 表 + UI 拖拽 | 8d |
| B21 | 细粒度 RBAC | 用户级 admin + 群三级 | 增加权限位表(permission/role/role_permission/role_user 四张表) | 12d |
| B26-B29 | 真人/Bot 分区+双流 | 数据层已支持 robot 字段 | 应用层加分区校验中间件 + 双 tab UI | 12d |
| B31-B33 | 朋友圈整块 | 完全无 | 从零开发 modules/moment(发布/评论/点赞/双流)+ Web/Android/iOS 三端 UI | 27d |
| B39 | Webhook callbackUrl | 仅 long-polling | robot 表加 webhook_url + 事件分发器 | 5d |
| B40 | Bot WebSocket | 仅 long-polling | 对接 WuKongIM SDK 作 Bot 长连接 | 5d |
| B49 | 跨实例联邦 | WuKongIM cluster 通讯层有 | 业务层加 federation 表 + 跨实例 webhook 桥接 | 12d |
| B51 | HTTPS 证书自动化 | 不含 | Caddy/Traefik 反代 | 1d |
| B58 | 移动端 UI ≥ Discord | 基础完整 | UX 细节打磨 | 8d |
| B66 | 在线打开文档 | 仅下载 | 嵌入 PDF.js / OnlyOffice 预览 | 5d |
P0 未完成合计:14 项,约 105 人天 ≈ 4.8 人月
| 序号 | 功能名 | 当前情况 | 二开方案 | 工时 |
|---|---|---|---|---|
| B16 | 代码块语法高亮 | Markdown 基础 | 加 highlight.js/Prism | 2d |
| B19 | 频道拖拽分组 | 无 | UI + sort_num 字段 | 5d |
| B34 | 朋友圈内容审核 | 仅敏感词 | 含 B31;图片审核外挂 | 4d |
| B44 | Bot SOUL 注入 | placeholder 一行 | 走应用层 prompt 模板 | 2d |
| B59 | 手机端回车=换行 | 默认 IME | Android 输入控件改 IME action | 2d |
| B62 | 对话宽度自适应 | Web 默认 | CSS 重做 | 5d |
| B69-B70 | 实时音视频 | RTC 信令枚举有,业务无 | 接 LiveKit/Jitsi(守一已有 LiveKit 镜像可复用) | 15d |
| B73 | 客户端运行时配置 | 服务端 yaml | 加客户端 config endpoint | 3d |
| B74 | 多语言扩展 | 无 i18n 框架 | 引 react-i18next + 抽字符串 | 10d |
| B75 | iOS 仓库活跃度 | 9 月没更新 | 自家 fork 维护或 OpenClaw 拉群催作者 | 0d |
| B79 | 桌面快捷方式 | Electron deep link 可做 | 集成 protocol handler | 3d |
P1 未完成合计:11 项,约 51 人天 ≈ 2.3 人月
| 序号 | 功能名 | 当前情况 | 二开方案 | 工时 |
|---|---|---|---|---|
| B17 | 链接 OG 预览 | 无 | 加 link metadata 服务 | 5d |
| B87 | PWA | 未明确 | manifest + service-worker | 1d |
| B89 | 语音转文字 | 无 | 外挂 Whisper(守一已有镜像) | 5d |
P2 未完成合计:3 项,约 11 人天
Bot/OpenAPI/Admin 三合一开箱即用 + 同进程零依赖 —— 秀秀 service-openapi/all-plugins/admin 三容器从未启动导致 31% 功能失效;TSDD 全部并入主进程,docker-compose 启动即生效(A24-A33/A57 一次性解决)。证据:internal/modules.go 全 17 个 module init 在主进程;docker/tsdd/docker-compose.yaml 5 服务全启动。
原生 6 路移动推送 —— modules/webhook/ 同时支持 APNs/Firebase/华为 HMS/小米/OPPO/VIVO;这是 Rocket.Chat(推送收 10k/月限额)和 Mattermost(HPNS 收费)都收费的能力,TSDD 完全开源。证据:push_iosapns.go / push_firebase.go / push_hms.go / push_mi.go / push_oppo.go / push_vivo.go 6 个文件。
streamStart/End 流式 Bot API + LLM 集成最匹配 —— modules/robot/api.go:77-78 + 85-115,专为流式 LLM 输出设计;秀秀的 Bot 走 socket.io 单条 emit,TSDD 走 IMStreamStart→流式投递→IMStreamEnd 三阶段,可以让 OpenClaw 边生成边显示。
Robot 表与 User 表 schema 双轨 —— user.robot smallint 标识 + 独立 robot 表(含 token/app_id/menu/inline_on/placeholder/username),比 Mattermost 单字段 is_bot 多一层 Bot 元数据,B25-B30 真人/Bot 分区天然支持。证据:modules/user/sql/user-20191106-01.sql:robot + modules/robot/sql/robot-2021*.sql。
客户端打包成熟(Electron + Tauri + Kotlin + Swift 四套全自主)+ Apache 2.0 完全无品牌锁 —— apps/web/src-election/ + apps/web/src-tauri/ + 9 个 electron-builder*.js 脚本覆盖 mac/win/linux x64/arm64/universal;B71/B72 品牌改造零阻力。
朋友圈整块是商业版功能,开源版只有 SQL 钩子 + 事件常量 + 文件类型枚举 —— modules/ 无 moment 目录;iOS WKAppConfig.m:651 sid=='moment'→WuKongMoment(开源仓库 Modules/ 没这个模块);Web 全文搜索 moment 仅 moment.js 时间库。B31-B33 守一最核心朋友圈需求要从零开发,含三端 UI 共 27 人天。
实时音视频通话开源版不可用 —— Web Service/Const.ts:67-76 只有 9989-9998 信令编号枚举;iOS 的 LiMaoRTC.podspec 引用 WebRTC.framework + OWT.framework 是私有 Pod;服务端 webhook 有 RTCPayload 接口但没有 RTC 业务模块。A38/A39/B69/B70 全部要外挂 LiveKit/Jitsi,15 人天。
Web 端没有 i18n 框架,硬编码中文 —— packages/tsdaodaobase/src/Components/GlobalSearch/vm.ts:31 itemKey: 'groups' 等位置直接写中文 tab;TSDD 比秀秀(zh-CN + en-US 双语)还差。B74 多语言要 10 人天补 react-i18next。
iOS 仓库 9 个月没更新(2025-08-12) —— 同期 Server/Android/Web 都在 2026 年活跃;这是 B75 硬门槛唯一不通过项。iOS 端日后 bug 修复要靠自家 fork,或催作者。
Bot 接入是 long-polling 而不是 WebSocket —— robot/api.go:71-74 events/eventAck 走 HTTP 拉取;秀秀 Bot 是 socket.io 推送。B39 Webhook callback + B40 WebSocket 两条 P0 各需 5 人天扩展。
| 指标 | 值 | 说明 |
|---|---|---|
| A 类继承率 | 51/58 = 87.9% | 秀秀现有 58 条中 51 条能无缝继承到 TSDD(39 ✅ + 12 🟡) |
| A 类失效救援率 | 15/18 = 83% | 秀秀 18 条失效中 15 条 TSDD 原生开箱即用(Bot/Admin/推送/通知/群公告/OpenAPI/OIDC 全救活) |
| B 类满足率 | 54/89 = 60.7% 完全满足,再加 19 部分满足 = 73/89 = 82.0% | P0 59 条中约 51 条满足(86.4%) |
| 二开总工时 | 163-167 人天 ≈ 7-8 人月 | P0 14 项 4.8 人月 + P1 11 项 2.3 人月 + P2 3 项 0.5 人月 |
| 3 道硬门槛 | 协议 ✅ + 维护 🟡(iOS 单点)+ 11 项核心能力 9.5/11 | 整体通过 |
强烈推荐 TSDD 的场景:
- 守一最看重 国产中文友好 + 原生 6 路推送 + LLM Bot 流式接入 + 一键独立部署
- 可以接受朋友圈从零开发的 27 人天投入
- 客户端要做品牌改造(TSDD 无 whitelabel 锁)
不推荐 TSDD 的场景:
- 立刻需要原生朋友圈商业产品 → 应直接考虑买 TSDD 商业版(WuKongMoment 模块)
- 立刻需要原生实时音视频 → 应转 Mattermost Calls 插件
- 多语言市场(非中文为主)→ TSDD 没 i18n 框架
/tmp/tailchat-ima/Top3对标分析.md)| 项 | Rocket.Chat | TSDD | Mattermost |
|---|---|---|---|
| P0 满足率 | 85.6% | 92.4% | 92.4% |
| 综合得分 | 8.20 | 8.61 | 8.45 |
| 二开工时 | 8-12 周 | 9-13 周(与本报告 7-8 人月一致) | 8-12 周 |
| 协议风险 | RBAC/Whitelabel 锁 | 零 | AGPL fork 风险 |
结论:TSDD 是当前最优解,前提是把"朋友圈 + 实时音视频 + i18n + 联邦"这四块二开工时(≈ 5 人月)纳入项目计划。
✅ 完全证实。证据三连:
- 服务端:grep -r moment modules/ 仅命中 4 处——
- modules/common/sql/common-20230203-01.sql:29 注册 app_module='moment','朋友圈模块','发布朋友圈,查看朋友圈,评论朋友圈,收到评论动态时显示朋友圈消息红点等等'
- modules/base/event/api.go:44,46 定义 EventUserPublishMoment='moment.publish' + EventUserDeleteMoment='moment.delete'
- modules/file/const.go:10,12 定义 TypeMoment / TypeMomentCover 文件类型
- 无 modules/moment 目录(ls modules/ 仅 17 个目录,无 moment/timeline/friend_circle)
- iOS:WKAppConfig.m:651 if([sid isEqualToString:@"moment"]) sid=@"WuKongMoment",但 ls Modules/ 仅 5 个模块(WuKongBase/Contacts/DataSource/IMiOSSDK/Login),WuKongMoment 不在开源仓库
- iOS:WKMOSContentConvertManager.m:218,227,479,480 仅承接 case 40/41 朋友圈消息接收(消息类型路由),无发布/列表 UI
✅ 证实并补充细节:实际是 user 表用 robot smallint 字段标识 + 独立 robot 表存 Bot 元数据——比单字段 is_bot 多一层。证据:
- modules/user/sql/user-20191106-01.sql:robot smallint not null default 0 -- 机器人 0.否1.是 (建表即有)
- modules/robot/sql/robot-20210926-01.sql 独立 robot 表(id/robot_id/token/version/status/created_at/updated_at)+ robot_menu 表
- modules/group/db.go:347 群成员查询直接 SELECT group_member.robot——B30 用户类型 API 过滤天然支持
这意味着 B25 真人/Bot 二态判断 = WHERE user.robot=0(真人)或 =1(Bot);B26-B27 真人区/Bot 区发布只需在 sendMsg 中间件加 robot 字段校验;B30 API 过滤 一行 SQL 解决。只有 B28-B29 双流 UI 因依赖朋友圈而需含进 B31 的 27 人天。
✅ 完全证实。证据:
- modules/robot/api.go:77 robotAuth.POST("/stream/start", rb.streamStart)
- modules/robot/api.go:78 robotAuth.POST("/stream/end", rb.streamEnd)
- modules/robot/api.go:85-101 streamStart 接 config.MessageStreamStartReq,调 rb.ctx.IMStreamStart(req) 拿到 streamNo 返回
- modules/robot/api.go:104-115 streamEnd 接 config.MessageStreamEndReq,调 rb.ctx.IMStreamEnd(req)
- 配合 modules/robot/model.go:60-66 MessageReq.StreamNo string——Bot 拿到 streamNo 后可以多次调 sendMessage 携带同一 stream_no 边生成边推送,最终调 streamEnd
对 OpenClaw 的意义:LLM 边生成 token 边 push 给 TSDD,用户能看到打字机效果;这比 Mattermost/Rocket 的 Bot 等完整 message 才能发更接近 ChatGPT 体验。这是 TSDD 区别于其他 IM 服务最独特的设计。
/tmp/tailchat-ima/TSDD_对标_秀秀完整.md/tmp/tailchat-ima/功能盘点清单_A类_秀秀现有功能.md + _B类_目标功能.md/tmp/tailchat-ima/Top3对标分析.md/tmp/tsdd-server-src/ + /tmp/tsdd-web-src/ + /tmp/tsdd-android-src/ + /tmp/tsdd-ios-src/