手把手教你魔改 Telegram 客户端:让 @ 提醒自动置顶,再也不漏看重要消息
还在为几百个 Telegram 群组的消息轰炸感到头疼吗?尤其是那种平时静音、偶尔才有人 @ 你一下的群组,一不注意就淹没在消息列表里,半天才发现有人找你。
最近发现了一个非常有意思的源码魔改思路,通过修改 Telegram 的客户端源码(支持 TDesktop 和 Forkgram),可以实现一个非常实用的功能:只要有人在群里 @ 你,这个群聊就会自动获得“置顶”效果,重要程度直接拉满。
今天就来把这个硬核的折腾过程转化为保姆级教程,带大家如何自己动手给客户端“开挂”。
为什么需要这个功能?
原生的 Telegram 虽然也有 @ 提醒,但在很多 Fork 版本(如 64gram)或官方版中,大量群组开启“只接收 @ 提醒”后,如果没有未读红点,它们很容易滑到列表深处。等想起来看的时候,黄花菜都凉了。
我们希望的效果是:
- 平时群组安静如鸡,不主打扰。
- 一旦有人 @ 我的账号,这个群聊立刻像收到未读私聊一样,强势置顶在列表最上方(类似
PrimaryUnmutedMessages的排序逻辑)。 - 这样即使我忙着刷别的群,置顶区也能一眼看到“有人在艾特我”。
准备工作:编译环境搭建
这可不是修改个配置文件就能解决的小事,我们需要重新编译客户端。别被吓跑,其实步骤很清晰。
你需要准备:
- 一台电脑:Windows、macOS 或 Linux 都可以(本文以常见的 Windows/CMake 环境为例)。
- 源码:建议从 GitHub 拉取
TDesktop官方源码,或者你喜欢的 Fork 分支(如Forkgram)。推荐 Forkgram,因为它本身就集成了一些常用的 Patch,编译出来更适合日常折腾。 - 编译工具:
- CMake(版本不要太旧)
- Visual Studio(Windows 下推荐 2019 或 2022,装好 C++ 开发组件)
- Python(用于部分脚本处理)
- Perl(如有需要)
核心修改:找准那个 PTT 文件
Telegram 的逻辑主要用 C++ 写,但列表的显示逻辑和一些过滤规则涉及到 Dialogs(会话列表)相关的代码。我们要实现的目标是:修改会话列表的排序/过滤逻辑,将“包含 @ 提醒的群组”视为高优先级会话。
1. 定位关键代码
在源码中,你需要关注涉及到 Dialogs::IndexedList 或者 Entry 相关的文件。通常逻辑位于 Telegram/SourceFiles/dialogs 目录下。
我们需要寻找类似 UnreadMessages 的判断逻辑。原版中,区分“置顶/未读”通常通过 Flags 来标记。我们需要加入一个新的判断条件:是否包含 mentions(提及时)。
2. 具体的修改思路
我们需要修改会话排序的权重逻辑。简单来说,就是告诉程序:“如果一个群组有未读的 @ 提醒,它的排序权重应该等于(甚至高于)未读私聊。”
- 找到决定会话是否进入
PrimaryList(主列表)或者置顶区的逻辑判断。 - 原生逻辑可能只检查了
unread或mention两种状态。 - 我们要做的:在判断是否需要“重点展示”时,强制将
hasMention(有提及)的会话纳入高优先级排序。
(注:具体的代码行数可能随版本更新而变动,核心在于搜索 session->unreadMentions() 或类似的函数调用,并在排序算法中提升其权重。)
3. 防止过度干扰
为了不让效果太突兀,可能还需要微调一下。例如,确保只有未读的 @ 提醒才触发置顶,点进去看完后自动回落,保持列表清爽。
编译与替换
修改完代码逻辑后,就是常规的编译流程。
- 运行更新脚本:通常源码目录下有
update.py,它会帮你拉取子模块(比如 OpenSSL 等依赖库,这一步最容易翻车,建议全程开科学上网)。 - 生成项目文件:使用 CMake 生成 Visual Studio 的解决方案(
.sln文件)。cmake -B build -S . -G "Visual Studio 17 2022" -A x64 - 编译:打开生成的
Telegram.sln,选择Release模式,点击“生成解决方案”。去泡杯咖啡,这个过程取决于你的电脑性能。 - 替换文件:编译成功后,在
build/Release目录下能找到Telegram.exe。记得把官方客户端关掉,备份好原来的Telegram.exe,然后把你编译好的文件扔进去覆盖。
常见问题排雷
Q: 编译报错,缺各种库怎么办?
A: 90% 的情况是 update.py 没跑好或者网络问题。确保你的 Python 环境顺畅,且能访问 GitHub,尤其是依赖的子模块。
Q: 修改后没效果?
A: 确认你修改的是 Debug 还是 Release 版本对应的代码,且一定要重新全量编译,有时候 CMake 的增量编译会忽略某些逻辑更改。
Q: 64gram 或其他 Mod 版能用吗?
A: 原理上是通用的,只要找到它们对 Dialogs 排序逻辑的那层封装,原理一样。但不同 Mod 作者代码风格差异大,可能需要耐心找找位置。
总结
n通过这次魔改,你的 Telegram 就不再是那个只会傻傻按时间排序的消息列表了,而是一个懂你心思的智能助手。对于社群运营者、客服或者单纯就是群太多的“水群”大佬来说,这个小小的改动能极大地提升效率,再也不用焦虑错过重要信息了。
还在等什么?赶紧打开 IDE,给你的专属客户端加个 Buff 吧!

评论已关闭