在日常生活中,我们可能会遇到一些不想看到其头像的 Telegram 用户,虽然官方客户端并没有直接提供“屏蔽头像”的功能,但通过一些技术手段,我们完全可以实现这个需求。今天就来分享一种基于修改 Telegram 客户端源码的实现方式,主要针对 forkgram(一个基于 TDesktop 的第三方分支)进行操作。

为什么需要这样的功能?

Telegram 群组界面展示

在某些群组中,五花八门的头像可能会造成视觉干扰。

有些时候,某些群友的头像可能过于刺眼或者引起不适,屏蔽消息虽然能眼不见为净,但在群组里看到那个头像依然很“出戏”。官方的设置里只能隐藏聊天列表中的大图,或者启用“自动下载媒体”时稍微控制一下,但对于“完全不想看这张脸”这种需求,还得靠魔改客户端来实现。

准备工作

要动真格改代码,你需要具备一定的动手能力。以下是基本的准备工作:

  1. 开发环境:你需要一台安装了 Qt 开发环境的电脑(Windows、Linux 或 macOS 均可,建议使用 Linux 环境,兼容性更好)。CMake 和 C++ 编译器也是必须的。
  2. 源码获取:由于原版 TDesktop 编译较慢且魔改难度稍大,推荐使用基于 TDesktop 修改且优化了编译过程的 forkgram 项目。你可以在其 GitHub 仓库克隆源码。
  3. 文本编辑器/IDE:VS Code 或 Qt Creator 都是不错的选择,方便查找和定位代码。

核心修改思路

修改的核心原理很简单:在客户端渲染用户头像图片之前,增加一个判断逻辑。如果当前的头像拥有者 ID 在你设定的“黑名单”内,就不去加载网络请求的图片数据,或者直接替换成一个本地默认的空白图片。

终端编译过程

使用 CMake 进行代码编译的终端过程。

在 forkgram 的源码结构中,头像加载逻辑通常位于 Telegram/SourceFiles/ui/image 或类似的路径下。我们需要找到负责生成用户头像组件的代码,比如 PeerAvatar.cpp 或者管理图片缓存的 Data/Session 相关文件。

具体操作步骤(以 Linux 为例)

1. 定位代码位置

在源码中搜索 peer->userpicImageLocation 等关键字,找到获取头像 URL 的函数。通常头像的绘制是在 paintUserpic 这一类函数中完成的。

2. 添加黑名单机制

你可以选择硬编码一个 userId 列表,或者为了灵活性,增加一个读取本地配置文件的函数。在代码逻辑中,引入一个 isAvatarHidden(PeerId id) 的辅助函数,函数内部判断该 ID 是否需要屏蔽。

// 伪代码示例
bool isAvatarHidden(PeerId id) {
    // 读取配置文件或硬编码列表
    return blacklistedIds.contains(id);
}

3. 修改渲染逻辑

回到绘制头像的主函数,在请求图片前拦截。

// 修改前
auto image = peer->userpic();
image->paint(...);

// 修改后
if (isAvatarHidden(peer->id())) {
    // 绘制一个默认的蓝色方块或透明色
    paintRadialGradient(...);
} else {
    auto image = peer->userpic();
    image->paint(...);
}

4. 编译与安装

修改完成后,保存文件。回到终端,运行 CMake 构建命令并进行编译。这个过程取决于你的机器性能,可能需要十几分钟到半小时不等。

cmake -B build -DCMAKE_BUILD_TYPE=Release -DTDESKTOP_API_ID=你的api_id -DTDESKTOP_API_HASH=你的api_hash
cmake --build build --parallel
``n
拿到编译好的二进制文件后,替换掉系统中原有的 Telegram 即可。首次运行前记得备份数据,以防出现 Bug。

### 常见问题与解决方案

**Q: 编译时报错缺少依赖怎么办?**

A: 编译依赖较多,如 `range-v3`、`variant` 等。参考项目 README 中的依赖说明,使用包管理器(如 `apt` 或 `brew`)逐一安装。如果是在 Arch Linux 上,可以使用 AUR 助手安装 `telegram-desktop-git` 及其依赖包。

**Q: 修改后头像变成了全黑/空白,无法区分是谁?**

A: 这是因为代码逻辑中完全隐藏了头像信息。建议在绘制默认占位图时,把对方的昵称首字母绘制上去,这样既能“眼不见为净”又能知道是谁在发言。

**Q: 每次更新都需要重新修改吗?**

A: 是的,因为这是源码级别的修改。为了方便维护,建议将修改的文件作为一个 Patch 文件保存,每次更新源码后使用 `git apply` 应用补丁即可。

### 结语

通过简单的源码修改,我们就能把 Telegram 打造成完全符合自己习惯的聊天工具。虽然动手门槛稍微高了一点点,但对于厌倦了千人一面的软件体验的朋友们来说,这无疑是一种极客精神的体现。如果你对 Qt 开发感兴趣,不妨动手试一试,打造一个独一无二的客户端!

以上内容源自技术社区的分享与整理,仅供学习交流使用。

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭