LiteLoaderQQNT-Anti-Recall插件图片反撤回功能的技术分析与优化方案

LiteLoaderQQNT-Anti-Recall插件图片反撤回功能的技术分析与优化方案

【免费下载链接】LiteLoaderQQNT-Anti-Recall LiteLoaderQQNT 插件 - QQNT 简易防撤回 【免费下载链接】LiteLoaderQQNT-Anti-Recall 项目地址: https://gitcode.com/gh_mirrors/li/LiteLoaderQQNT-Anti-Recall

背景介绍

在QQNT新版客户端中,图片消息的撤回机制给用户带来了诸多不便。LiteLoaderQQNT-Anti-Recall插件作为一款流行的防撤回工具,其核心功能是保存被撤回的消息内容。然而,随着QQNT版本的更新,原有的图片反撤回功能出现了失效的情况,特别是当消息未在聊天窗口显示时,被撤回的图片会显示为"图裂"状态。

问题分析

原有实现机制

插件最初通过拼接图片的MD5值,向gchat.qpic.cn域名发起请求来下载图片。具体实现逻辑是:

  1. 从消息元素中提取picElement对象
  2. 获取图片的md5HexStr属性
  3. 拼接成特定格式的URL:https://gchat.qpic.cn/gchatpic_new/0/0-${md5HexStr}/0
  4. 通过HTTP请求下载图片并保存到本地

失效原因

经过深入分析,我们发现失效的主要原因有以下几点:

  1. 图片下载机制变更:腾讯已弃用旧的图片下载接口,新的图片下载需要使用不同的域名和参数结构
  2. URL格式更新:新版QQNT生成的图片URL包含appid、fileid等新参数,不再单纯依赖MD5值
  3. 访问权限控制:新增了rkey验证机制,需要额外的密钥才能访问图片资源

技术解决方案

新接口分析

通过调试和日志分析,我们发现新版QQNT的图片下载具有以下特点:

  1. 使用新的域名:multimedia.nt.qq.com.cn
  2. URL结构包含三个关键部分:
    • 基础路径:/download
    • 查询参数:appid、fileid、spec等
    • rkey验证参数

实现方案改进

基于以上发现,我们设计了新的图片下载逻辑:

  1. URL解析:从消息元素的originImageUrl属性获取基础URL
  2. 接口类型判断:通过appid参数识别新旧接口(1406/1407为新接口)
  3. rkey获取:从专用服务获取临时的访问密钥
  4. URL拼接:组合基础URL和rkey形成完整的下载地址
  5. 图片下载:通过HTTP请求获取图片数据并保存

关键代码实现

async function processNewPic(picElement) {
  // 获取基础URL
  const baseUrl = picElement.originImageUrl;
  
  // 获取rkey(示例中使用静态值,实际应动态获取)
  const rkey = "&rkey=CAQSKAB6JWENi5LMM1551AAp6a_Ykh9RvPEkj7Vs91WuPERKpLK8jUYK-qE";
  
  // 拼接完整URL
  const picUrl = `https://multimedia.nt.qq.com.cn${baseUrl}${rkey}`;
  
  // 下载并保存图片
  const body = await request(picUrl);
  fs.writeFileSync(picElement.sourcePath, body);
}

技术细节深入

rkey机制解析

rkey是腾讯新增的图片访问验证机制,具有以下特性:

  1. 时效性:每个rkey都有有效期,通常为几小时
  2. 分类:分为私聊(private_rkey)和群聊(group_rkey)两种
  3. 获取方式:可以通过特定API接口获取
  4. 安全性:防止图片资源被滥用和盗链

新旧接口对比

特性旧接口新接口
域名gchat.qpic.cnmultimedia.nt.qq.com.cn
标识MD5值fileid参数
验证rkey参数
分类appid区分(1406/1407)
稳定性已弃用现行方案

实现建议

对于插件开发者,建议采取以下策略:

  1. 兼容处理:同时支持新旧两种接口,根据appid参数自动切换
  2. rkey缓存:获取rkey后适当缓存,避免频繁请求
  3. 错误处理:增加下载失败的重试机制
  4. 日志记录:完善错误日志,便于问题排查
  5. 自动更新:当接口再次变更时能够及时通知用户

总结

通过对QQNT新版图片下载机制的逆向分析,我们成功找出了防撤回插件失效的根本原因,并提出了基于新接口的解决方案。这一案例也展示了即时通讯软件接口变更对第三方插件的影响,以及如何通过技术手段适应这些变化。未来,随着QQ客户端的持续更新,类似的接口变更可能还会发生,保持对协议变化的敏感度和快速响应能力将是插件长期可用的关键。

【免费下载链接】LiteLoaderQQNT-Anti-Recall LiteLoaderQQNT 插件 - QQNT 简易防撤回 【免费下载链接】LiteLoaderQQNT-Anti-Recall 项目地址: https://gitcode.com/gh_mirrors/li/LiteLoaderQQNT-Anti-Recall

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值