(由于本项目尚未发展健全,因此无法投稿到发现频道,望读者谅解!)
「ctBridgeBot」能够将中国大陆装机量最高的即时聊天工具——微信上的大部分消息桥接到另一款拥有很多优点的IM——Telegram,并对于日常使用的场景添加了很多方便操作的细节。通过本软件,您将能在不放弃wx上好友的同时享受到tg的大部分优点!
应用平台:Windows / macOS / Linux (All platform with Node.js)
推荐类型:【开发者自荐】
本人暂无发布软件的经验,因此会有诸多不足,感谢各位的阅读,同时欢迎各位提出意见。
(长文警告 TL;DR 约6k字)
应用简介
(用wx代替微信,tg代替Telegram,下同)
微信,作为所谓的“国民APP”,坐拥超高的装机率,其开发团队却频频无视用户意见、十分高傲,似乎很享受处于垄断地位的快感……情况想必大家都了解,而本人为了尽量远离这款绿色APP,既不能“赛博失联”,又要对微信上的消息及时地处理,因此诞生了本项目。
话不多说,请先来看一组wx和tg在相同场景下的对比:
场景 | 微信 | tg |
---|---|---|
聊天记录存储与导出 | 无法导出,只能迁移或备份到电脑,且仍有很大可能随机丢失媒体文件(已过期或已被清理) | 聊天记录无限期云储存,本地可随意清理缓存而不会丢失任何聊天记录;可以随意导出为HTML/JSON格式,可选择时间范围及是否导出媒体文件 |
提示音 | 消息音:手机上只能六选一,且算不上好听;Windows版更是不可修改,只能使用默认铃声;外拨通话时强制以大音量播放对方彩铃且无法关闭 | 全平台允许自行上传声音文件(例如可使用自己喜欢的音效)且多端同步。 |
多设备在线 | 最多一电脑+一平板+一手机,且切换账号很复杂,新设备登录更是要命…… | 无限制客户端同时在线,且能同时收到消息(最近操作过的设备会先收到消息,如果未处理则10s左右后才会发送到其他设备);新设备登录很方便,可选择旧手机扫码或接收短信验证码 |
桌面小部件&与系统关联度(iOS) | 无任何桌面小部件,也无法快捷进入某一个聊天界面(甚至点击通知进入对话这一基础功能也有bug,必须等到新消息加载完毕才可以) | 可以在桌面放置4x2的小部件,点击即可快速跳转到最多8个对话 |
聊天界面 | 信息密度低,因为每条消息都重复显示了头像和昵称(群) | 同一来源、同一时间的消息会自动紧凑排版 |
Windows端体验 | 设置项少得可怜,常有不兼容现象发生;且强制捆绑小程序版块,持续占用用户电脑CPU内存和硬盘资源(尤其是低端电脑) | 资源占用不高;此外可以采用系统自带的通知体系在屏幕右下方弹出消息内容及快速回复弹窗;可以在托盘图标右键菜单一键屏蔽当前设备所有消息防止打扰。 |
此外还有一些tg特色功能:
-
富文本支持性
支持加粗、斜体、删除线、等宽体(适合显示代码)、还能创建遮罩(spoiler)即点即显(适合隐藏敏感信息,保护隐私) -
静音消息与定时消息
可以静音给对方发送消息,例如熬夜发消息不会吵到已入睡的对方;可以设置定时信息,在指定时间或对方上线时发送 -
未读消息记忆进度
当用户点开一个有未读消息的聊天时,大部分其他的聊天软件会从底部开始,并提供向上跳转的按钮(e.g.退出聊天界面再重新进入后,qq的跳转按钮就会消失);而tg是从上次阅读的消息开始,在右下角显示这段时间内的消息数以及“回到底部”按钮,且“上次阅读到哪里”这一变量是全平台同步的 -
草稿箱全平台同步
-
消息可编辑或随时删除/撤回
由于本项目起初是我个人所用,因此在使用过程中各处都添加了方便使用的技巧和功能。例如:
-
增强版通话提醒 :为了解决iOS端微信通话消息时有延迟且操作不便的问题,本项目可以额外利用Bark往iOS手机上推送个性化的来电提醒,可设置为Time Sensitive(忽略iOS专注模式,强制提醒),并可采用更舒缓的Bark预设铃声(也是多选一)。
-
定时消息 :可向微信好友定时发送消息,预定时间范围不限,精确到分钟。
-
防撤回+云存档: 由于“撤回”的效果取决于客户端,因此我们将“撤回消息”这一事件以文本形式递送,以让您知晓,而不是删除已经发送的消息。此外,依托tg的导出功能,您可以随时下载并备份所有聊天记录,包含图片文件视频;
-
合并较短的消息 :为了解决某些群聊若开启提醒则打扰频率太高,若关闭提醒则会错过信息的问题,本项目可以将较长时间范围内(默认值:群聊60s,私聊15s)的所有消息合并成一条,这样可避免频繁的通知气泡或铃声打扰您正在进行的工作。(也适用于喜欢发短消息或消息轰炸的朋友)
-
表情包统一管理 :可将所有的wx侧贴纸(即“表情包”,下同)发送到tg上专门的一处,再通过链接来回跳转,这样就可以避免聊天界面充斥着大量的重复贴纸。比如在原聊天界面放置了一个链接(包含[Sticker]文字与贴纸的部分md5值),点击即可跳转到Sticker专区查看此表情,若不点击则不会在原聊天界面显示图片,而只是一段链接,配合上述合并功能可以更加无感。
-
网络失败重传 :为了保证您的微信账号的安全(不被封号),推荐将本项目部署到国内的机器上(云服务器/ 您本地的任何不关机设备/ 带有Docker的路由器),这时为了能访问到tg Bot API,您必须为其提供代理服务器(可通过本地搭建clash实现)。并且,大多数节点提供商的服务时常出现不稳定现象,因此本项目在防止漏收发消息上也做了很多努力,例如在向tg服务器拉取Bot新消息时,若一段时间内频繁出现网络问题则会通过Bark发送通知到您的手机提醒您出现了网络中断;若在从wx转发消息到tg的过程中断网,则会一共尝试三次,若均失败再发送通知到手机。因此经过这些策略的加成,本项目的可靠率已能达到99%了。
-
日志和发送回执 :本项目会在运行目录下创建两份日志,每天一轮换,一份包含程序运行中的一些调试日志(例如对您在tg上发送的指令的处理部分)并会选择性输出到控制台,另一份包含从wechaty接收到的所有微信消息的原文(其中包含冗长的xml格式公众号推送消息)。将来您将可以选择是否把敏感信息(如联系人昵称和聊天内容)输出到控制台,方便在更公共的场合部署运行本项目;
为了让您方便验证自己在tg上发送的消息是否已送达wx,我们采用了tg提供的“输入状态”API为您提供回执功能。当您欲发送文字消息时系统会在窗口上方提示Bot正在“choosing sticker”,若您发送媒体则会通过三种不同的输入状态展示(分别为上传媒体、录制媒体和选择贴纸),处理指令时则是“正在输入中”。具体请参阅代码随附的使用说明/技术文档。 -
语音消息自动转文字: 每条语音消息发送到您tg之前,都会经过腾讯云的一句话识别功能自动转换为文字,并附着在语音消息的下方以便您一瞥便可得知内容梗概。我们采用的模型介绍说支持多种方言识别,但未经我们测试;识别的准确性取决于腾讯云模型的识别结果,经测试与微信自带语音转文字差异不大。此过程另需腾讯云API Key,若您没有则可使用本人提供的。
-
公众号消息集中查看: 您可在tg中单独新建一个群用来接收所有的公众号推送消息、微信支付扣费提醒以及微信运动被赞提醒,再去本项目设置中打开此功能即可。我们会将推送卡片(也就是您在微信客户端看到的一个大卡片配数个小卡片的形式),转换成极简的标题+网址+简介的形式,静音发送到您指定的tg目标。如图所示:(点击顶部订阅号名称可查找它推送的所有消息)
由于本项目采用Bot+Group的方式递送消息到tg,因此若您准备使用本项目,则需在tg上新建一个机器人(Bot),再创建若干“群”(私密模式,仅拉入刚刚创建的Bot即可),其中一部分用于和微信上的联系人“一一对应”(例如好友吹水群,消息较多,且不希望与其他人的消息混杂起来) (称之为“C2C”),一部分用于接收“同类型的联系人” (例如都是同学或都是工作上的),另外最后一个群用来接收和发送所有不符合匹配规则的联系人的消息(称之为“Fallback”)。这样操作后,您就可以为常聊天的人/群保持分开(并且可以单独设置提醒策略和铃声),同时在“Fallback”群中处理不常聊天的会话。 对于“C2C”模式的聊天而言,您可以自定义其名称和头像,并且tg向您的设备发送消息通知时也会套用此头像(据本人观察,微信推送消息并不会包含头像),再也不怕改群备注错改成群名称了。
接下来请了解一下本项目 / tg的不足之处。
-
在tg,贴纸较难制作(对格式和尺寸有较严格要求),因此您很难从wx搬运您喜欢的贴纸到tg,需要很多额外步骤;本项目只初步实现了贴纸从tg到wx,也就是只能将您发送的tg贴纸的缩略图以图片形式发送到wx。至于能否发送wx内收藏的贴纸,此问题我们尚在研究。
-
tg不支持合并转发,只能“逐条转发”,且转发后的每条消息上方都带有其出处的链接。(本项目可正确处理wx中逐条转发的消息,上述缺点仅适用于tg上的转发会话)
-
同时,数种类型的消息无法被本项目处理,列表如下:
类型 | 处理办法 |
---|---|
合并转发的聊天记录或 小程序卡片 | 显示为文本信息:[不支持的消息类型] |
红包/转账 | 显示为英文或中文提示文字(例. [收到一条微信转账消息,请在手机上查看]) |
商城表情(成套且非用户自行制作,也就是打字自动推荐的这种) | 显示为[收到了一个表情,请在手机上查看]或[发送了一个表情,请在手机上查看] 本项目会将消息内容替换为单个emoji (均可自定义) |
音视频通话 | 显示为[收到一条视频/语音聊天消息,请在手机上查看] (程序会自动采取对应措施,详见前述Bark部分) |
发送的位置卡片 | 无任何行为 |
实时位置共享:开始/结束 | 显示为中英文提示文字(例. Real-time Location session ended.) |
朋友圈相关 | 无法查看(我们有打造朋友圈自动接收并存档的想法,但是由于上层wechaty未提供此API而搁置,未来可能加入) |
* 由于本程序基于wechaty、wechaty-puppet-wechat和UOS版微信,因此导致上述不兼容情况,但绝大多数是腾讯公司忽视UOS使用者和懒于实现这些附加功能所致,这目前并非我所能解决的问题。
但是这也带来一个优点,由于本项目没有任何处理资金的能力(包括但不限于收发红包转账、查看余额等),且该UOS微信客户端运行于您本地,因此您的数据与财产安全将不会受到威胁,同时我们也在此承诺,不会将您的任何个人信息/聊天记录发往我们的服务器(除了后续可能会增加的统计&在线监测功能,仅会收集您的昵称/微信号),这一点请您放心。
(其实使用第三方提供的/由iPad版微信逆向而来的进阶版puppet可以实现更多的功能,甚至可以收发红包,但是代价是付出高额授权费并将自己的微信登录到他们的服务器上。我们认为这种方案存在泄露自己个人信息的风险且是对他人隐私的不尊重,因此并没有采用这种方案)
(插播一篇知乎回答,读者可以进入,看看腾讯的“十宗罪”:https://www.zhihu.com/question/436855461 摘录网友原话:“腾讯公司是Linux桌面操作系统在中国难以流行的最大阻力。”)
-
由于puppet/UOS微信的问题,本项目必须通过手机扫码的方式登录且最好每0.5~1周重启一次,同时,本项目无法读取扫码登陆前的历史聊天记录,无法保持登录状态(扫码时微信客户端也不会询问您是否同步最近的消息或自动登录,因为此客户端并不具备这些能力)
我们正在考虑添加一个功能,也就是前述的“统计&在线监测”,为的是防止程序出现未处理的异常导致其直接停止运行,可能造成消息漏收发(虽然我们已在两个月的使用中解决了大部分,但是难保没有漏网之鱼) 。加入此功能后您的实例将会每隔一段时间向我们的服务器发送保活信息,如果我们服务器很长时间没有收到您实例的信息,则会向您的手机发送通知以引起您的注意。 -
效率问题:对于语音视频文档等媒体文件,由于微信服务器下发的链接需要鉴权(也就是携带包含您登录信息的cookie),因此无法直接传递给tg服务器(并且让位于境外的tg服务器去下载你账号上的资源也容易带来封号的风险)。所以本项目采用中转法,也就是先从源端(无论是wx还是tg)把媒体下载到本地downloaded文件夹中,再上传到目的端,这种模式兼容性好,但是在效率上存在缺陷,例如您在wx上发送的视频或文件,一般要数十秒才能送达(经测试及日志显示,主要受制于科学上网的速度);此外由于UOS微信通信设计以及其他问题,一般的文字消息也将延迟3~5s才能送达。
优缺点均已展示完毕,相信在阅读后读者都已有了自己的想法,我个人认为虽不能说tg是最好的聊天软件,但在用户体验上绝对优于wx。
如果您日常使用iOS手机+Windows电脑,并且跟本人一样,觉得微信这款软件很难用且拥有tg基础,那么本项目将很适合您:您可以在任意服务器上搭建好项目,然后再在手机设置中关闭微信APP的消息声音和红点、在微信内关闭 推送消息–>新消息提醒,即可抛弃难用的Wechat For Windows,拥抱tg;
如果您手机是Android/HarmonyOS,则不建议完全依赖本项目 (因为非iOS系统的手机微信无法保证手机端消息记录的完整性),但可以将本项目部署于您工作PC上,充当微信APP的平替(例如难用的Windows版 / 各Linux发行版 / 没有办法安装官方微信的其他设备)。
加入方式
本人是大学生兼个人开发者,最近手头不甚宽裕,希望感兴趣的读者可以理解并移步至“爱发电”平台,花费一杯咖啡的代价即可获得:(注:目前已开源,请移步33楼)
-
本项目将近三千行的源码压缩包 (若您在使用npm install的过程中遇到网络问题,还可以选择下载包含node_modules的各平台打包版,如win和linux的amd64版本)
【Node程序无需编译就可直接运行,并且本项目出于可自定义化的考量不会混淆源代码并会尽可能多的添加注释,因此很难以激活码形式验证有效性,只能与购买者达成“君子协定” lol 不过小范围内的分享是完全允许的】 -
加入tg通知频道(可接收新版本的更新内容)以及“售后”答疑群(将由本人依次回复以及提供简单的技术指导)
-
技术文档,包含本项目所有功能的详细介绍、代码锚点(方便搜索到对应代码)以及部署指南,包含了下载源码后所需要执行的安装依赖、建立目录结构、修改配置文件和在Docker上部署的额外步骤等。
如果您对本项目可以实现的功能上有疑问,也可在tg上联系我(咨询群 邀请链接)或在本论坛直接私信我,我将尽快回复;
由于本人没有开发大型项目以及付费代码的经验,更是尚未探索出如何把自用软件修改得更适合他人使用,所以如果您有:
-
对技术文档的修改意见,或帮助录制操作示范视频,或帮助测试功能健全性
-
对本项目代码结构上的建设性意见(比如本人正在尝试的分离式模块架构和独立配置解析器)
-
对项目新功能开发方向的建议
-
为本项目设计Logo或建议新名字
请不吝向我提出,我在此表示感谢!
同时,如果有读者愿意前往“爱发电”平台给予我一点小小的打赏的话,我将会十分的感激,诸位的支持就是我继续开发这类软件的最大动力!(本人同时也期望将QQ的消息也桥接到tg,虽然整体结构与本项目一致但在具体接入过程中仍存在着不小的困难,例如QQ的消息机制本身就比wx更复杂等等,这也导致其开发进度逊于本项目)
此外,无论您准备使用本项目与否,都欢迎您在本帖子评论区发布对本项目、本文章的相关意见,在此谢谢各位能够阅读到这里!
结语自述
我在生活中已经基本抛弃微信了。首先Windows客户端太难用,设置项太少且小程序组件无法关闭,再加上tx公司曾经做过“扫盘”这种流氓行径,因此我直接弃用;iOS端体验也很差,点击通知经常无法跳转到对应聊天、无法自定义铃声(六选一不在我考虑范围内)、每次进入软件都需要等很久……(因为经常被杀后台且加载太慢,反观tg无加载界面且速度快得多)等等,我也准备弃用;支付我也首选支付宝,其一是能用小部件快速跳转扫码界面,而不是像wx只能长按图标选择扫码,其二是微信支付收取千分之一的手续费且很难绕过让我火大,为什么要给tx这种公司送钱……(补充:最近上架的1k额度提现免费券还算好用)。除去这些,还有一点重要原因就是我不甘心接受tx公司在聊天界的垄断,正如一句话所说,wx明明是一款商业软件,以赚钱为导向,根本不适合当所谓的“国民软件”,也丝毫不在意用户的诉求,语音进度条多少年了仍未加上,被误封号永远找不到客服……我想要迈出切换聊天软件的第一步,但是处于我们社交圈内的朋友/家人一般不会跟随我们,因此才使用桥接这个稍逊的方案。我相信,越多的意识觉醒就越会让tx坐不住垄断的宝座,直到其愿意听从用户的诉求或有另外数款聊天软件的崛起,但从现在看来这条路还有很远要走。