Telegram 群组消息置顶技巧:让 @提醒 永远不掉队

Telegram 是很多人日常沟通和获取信息的主力工具,尤其是对于混迹各种技术群、羊毛群的兄弟来说,消息刷屏是家常便饭。一不小心,重要的 @ 提醒就被淹没在海量信息里,稍不注意就错过了大佬的指点或者最新的羊毛信息。今天,咱们来聊聊一个硬核的优化方案:如何通过修改客户端,让有 @ 提醒的群组自动置顶,效果和“PrimaryUnmutedMessages”一样稳。

为什么需要这个功能?

原生的 Telegram 对于置顶的逻辑主要是通过手动操作。虽然可以通过设置“自定义通知”来实现部分消息的特殊对待,但对于那种只有别人 @ 你时才需要立刻关注的群组,原生体验还是不够“智能”。我们希望实现一种逻辑:只要有人在群里 @ 我,这个群就自动跳到列表最上面,不用我手动去置顶,保证我第一时间看到。

准备工作:你需要什么?

在 Qt Creator 中配置 CMake 并编译 Telegram 源码的界面截图

准备工作:搭建 Telegram 编译环境

要实现这个效果,我们不能光在设置里找开关,得动刀改源码。我们需要准备以下两样东西:

  1. Forkgram 或 TDesktop 源码:Forkgram 是基于 Telegram Desktop 的一个第三方修改版,功能更多,反编译和修改也相对友好。如果你是极客,直接用官方的 TDesktop 源码也行。
  2. 编译环境:也就是 CMake、Qt、MinGW 等编译工具链。Windows 下推荐使用 Qt Creator 或者 Visual Studio 进行编译,Linux 下则相对简单一些。

核心修改思路

Telegram 桌面端的聊天列表排序逻辑主要由 Dialogs::LayoutHistory 等类控制。我们要实现的“有我就置顶”,其实就是要 hook 进消息接收的逻辑,判断这条消息是否包含对当前用户的“提及”(Mention)。

具体的实现目标是将包含 @ 提醒的群组,硬塞进“置顶列表”的逻辑队列里,使其表现形式等同于 PrimaryUnmutedMessages(即未静音的重要消息)。

动手修改代码

显示 C++ 代码逻辑的编辑器截图,包含 hasMention 判断条件

核心修改:注入 @ 提醒置顶逻辑

这里我们以 Forkgram 为例(TDesktop 路径基本一致),找到核心的消息处理文件。通常我们需要关注 history.cpp 或者 window/session_controller.cpp 中关于 dialogPosition 的计算逻辑。

我们需要添加一个判断条件:当新消息到达时,检查 msg->hasMention() 是否为真。如果是,则强制提升该 Dialog 的排序权重。

关键代码逻辑示意

(以下为逻辑描述,非具体复制粘贴代码,旨在说明原理)

在计算聊天列表位置时,原本的逻辑可能是这样的: if (pinned) return HighPriority;

我们需要修改为: if (pinned || (msg && msg->hasMention())) return HighPriority;

当然,实际操作中会比这复杂一点,因为还需要处理“取消置顶”的时机。如果群组里有 @ 我,它置顶了;如果我把消息读了,它应该恢复原位还是保持置顶?这取决于你个人的需求。通常的设定是:未读的 @ 消息必须置顶,已读后恢复原位。

这需要在 markAsRead 相关函数里添加代码,检查该 Dialog 是否因为 @ 而置顶,如果是,则在读完后将其移回普通列表。

编译与替换

  1. 修改源码:根据上述思路,在源码中找到对应的判断分支,插入你的逻辑。
  2. 编译:点击编译按钮,这时候就是考验你电脑性能和运气的时候了。耐心等待编译完成,不出错的话你会得到一个全新的 Telegram.exe
  3. 替换注意! 替换之前请务必备份原来的程序。关闭正在运行的 Telegram,将你编译好的 exe 覆盖到安装目录。
  4. 测试:登录账号,找个小号或者自己在某个测试群里 @ 一下,看看聊天列表是不是立马就把这个群顶上去了。

常见问题与解决方案

在折腾的过程中,你可能会遇到一些坑,这里提供几个思路:

  • 编译报错:如果是缺少依赖库,请仔细阅读官方的 Wiki,确保 Qt 版本和编译器版本严格匹配。Windows 下最容易出问题的是 OpenSSL 和 Widevine 的版本问题。
  • 登录失败:如果你修改了核心代码,可能会触发 Telegram 的风控(虽然客户端层面很少见)。建议先在一个小号上测试,确认没问题了再上大号。
  • 效果不生效:检查一下你的逻辑是否正确判断了 msg->hasMention() 有些群组的 @ 是通过 bot 发送的,或者是通过“silent mention”实现的,可能需要判断更细致的 flags。
  • 置顶后下不来:如果你发现置顶后即便读了消息也还在最上面,说明你忘了在“已读”回调里写“取消置顶”的逻辑。记得把状态机写完整。

总结

通过修改 Forkgram/TDesktop 实现 @ 置顶,虽然门槛有点高,需要懂一点 C++ 和编译知识,但一旦搞定,体验提升是非常明显的。特别是对于那些加了几百个群,每个群都在疯狂刷屏的“重度患者”来说,这简直就是救命稻草。

这不仅仅是修改软件,更是一种让工具适应你习惯的极客精神。如果你觉得编译太麻烦,也可以去关注一些现成的第三方修改版,有时候会有大佬发布集成了类似功能的现成包。

折腾愉快,别忘了给群友分享你的成果!

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭