还在为几百个 Telegram 群组的消息轰炸感到头疼吗?尤其是那种平时静音、偶尔才有人 @ 你一下的群组,一不注意就淹没在消息列表里,半天才发现有人找你。

Telegram 手机端或桌面端的聊天列表界面,展示消息堆积的状态

最近发现了一个非常有意思的源码魔改思路,通过修改 Telegram 的客户端源码(支持 TDesktop 和 Forkgram),可以实现一个非常实用的功能:只要有人在群里 @ 你,这个群聊就会自动获得“置顶”效果,重要程度直接拉满。

今天就来把这个硬核的折腾过程转化为保姆级教程,带大家如何自己动手给客户端“开挂”。

为什么需要这个功能?

原生的 Telegram 虽然也有 @ 提醒,但在很多 Fork 版本(如 64gram)或官方版中,大量群组开启“只接收 @ 提醒”后,如果没有未读红点,它们很容易滑到列表深处。等想起来看的时候,黄花菜都凉了。

我们希望的效果是:

  1. 平时群组安静如鸡,不主打扰。
  2. 一旦有人 @ 我的账号,这个群聊立刻像收到未读私聊一样,强势置顶在列表最上方(类似 PrimaryUnmutedMessages 的排序逻辑)。
  3. 这样即使我忙着刷别的群,置顶区也能一眼看到“有人在艾特我”。

准备工作:编译环境搭建

Visual Studio 中打开 C++ 项目文件的截图,展示代码结构和编译环境

这可不是修改个配置文件就能解决的小事,我们需要重新编译客户端。别被吓跑,其实步骤很清晰。

你需要准备:

  • 一台电脑: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(主列表)或者置顶区的逻辑判断。
  • 原生逻辑可能只检查了 unreadmention 两种状态。
  • 我们要做的:在判断是否需要“重点展示”时,强制将 hasMention(有提及)的会话纳入高优先级排序。

(注:具体的代码行数可能随版本更新而变动,核心在于搜索 session->unreadMentions() 或类似的函数调用,并在排序算法中提升其权重。)

3. 防止过度干扰

为了不让效果太突兀,可能还需要微调一下。例如,确保只有未读的 @ 提醒才触发置顶,点进去看完后自动回落,保持列表清爽。

编译与替换

修改完代码逻辑后,就是常规的编译流程。

  1. 运行更新脚本:通常源码目录下有 update.py,它会帮你拉取子模块(比如 OpenSSL 等依赖库,这一步最容易翻车,建议全程开科学上网)。
  2. 生成项目文件:使用 CMake 生成 Visual Studio 的解决方案(.sln 文件)。
    cmake -B build -S . -G "Visual Studio 17 2022" -A x64
    
  3. 编译:打开生成的 Telegram.sln,选择 Release 模式,点击“生成解决方案”。去泡杯咖啡,这个过程取决于你的电脑性能。
  4. 替换文件:编译成功后,在 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 吧!

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭