欢迎光临散文网 会员登陆 & 注册

Python 加 PowerShell 删除指定QQ群的图片【tjxwork】

2023-07-22 02:50 作者:tjxgame  | 我要投稿

B站专栏的排版是真的烂,各种不让插外链。

建议到这里看:

Python 加 PowerShell 删除指定 QQ 群的图片 - tjxblog: 

https://www.tjxblog.com/blog/2023-0009




前言

不知道你们是不是和我一样,QQ加了不少的群,基本是加了就不看的。

有一些水群又水得厉害,收进群助手了,但没有屏蔽信息,不知道不觉间,就堆了一堆的图片。

而QQ的删除聊天记录,就真的只是删除聊天记录,群里面图片还是会留在聊天记录的文件夹里面。

这就很麻烦了,你又分不清哪个群的图片,把图片全删除了,又有那么几个群是想保留图片的。

刚好,腾讯最近出了个新的NT架构的QQ,我本来期待他能像微信一样按群来删除图片,结果还是不行。

搜索一番,找到两个项目,分别用来解密和解码QQ的数据库,然后发现能从数据库的群聊天信息拿到图片路径。

那就好办了,写了几个脚本来实现按群来删除图片。

GitHub项目地址:

tjxwork/qq_db_export_group_image_path_and_move_or_delete: 

QQ数据库导出群图片路径并移动或者删除(github.com): https://github.com/tjxwork/qq_db_export_group_image_path_and_move_or_delete

视频教程地址:

其实是先有的视频教程(演示),这篇文章算是图文教程,会比视频教程详细一点。

删除指定QQ群的图片【tjxwork】_哔哩哔哩_bilibili

删除指定QQ群的图片【tjxwork】 - YouTube: 

https://www.youtube.com/watch?v=lMe9MrxBN-c


建议

如果你是出于:“想要清理不看的QQ群的群图片,并且希望能一直保持聊天记录比较“干净”。” 的目的。

那么,新版的NTQQ暂时不建议使用,因为目前只有旧版的QQ才能屏蔽接受群图片(看的时候可以手动点击加载)

QQ的相关信息

QQ的聊天记录路径

聊天记录的配置文件存放在:C:\Users\Public\Documents\Tencent\QQ\UserDataInfo.ini

同一台电脑下,所有用户使用同一个配置文件。

例如,当聊天记录存放在D:\Chats\Tencent Files时,UserDataInfo.ini 的内容为:

QQ配置文件的相关信息可以看之前这篇:免登录,用脚本提前修改微信、企业微信、QQ 的聊天路径 - tjxblog: https://www.tjxblog.com/blog/2023-0001

NT版本QQ暂时无法修改记录路径,它直接沿用了旧版QQ的路径设定。

QQ的图片文件结构

例如,当聊天记录存放在D:\Chats\Tencent Files,QQ账号是303xxx445 时

移动脚本要处理的是,聊天记录文件夹的 Image 下面的 Group Group2 两个文件夹

新版NT架构QQ的相关信息

当你使用首次使用NTQQ的时候,会提示导入数据库。

其实就是把旧的 聊天记录文件夹\QQ账号\Msg3.0.db

导入了到了新的 聊天记录文件夹\QQ账号\nt_qq\nt_db\nt_msg.db

这期间会提示优化过程,新的数据库应该是和旧数据库不一样的。

使用新的NTQQ的时候,会在原来的聊天记录路径下建立聊天记录路径\QQ账号\nt_qq\文件夹

接收到的图片及各类文件都是存放在新的路径下面。

各种数据库:聊天记录路径\QQ账号\nt_qq\nt_db

图片之类的:聊天记录路径\QQ账号\nt_qq\nt_data

图片的存放结构和Windows版微信类似,会按年-月份的方式来区分。

但是NTQQ目前仍然做不到像微信那样,按群来删除图片之类的文件。

聊天记录路径\QQ账号\nt_qq\nt_data\Pic 的结构:

前置项目及所需工具

解密QQ数据库 qq-win-db-key

Young-Lord/qq-win-db-key: Windows QQ 聊天数据库解密 (github.com): https://github.com/Young-Lord/qq-win-db-key

解码QQ数据库 qq_msg_decode

saucer-man/qq_msg_decode: 解码qq聊天数据库 (github.com): 

https://github.com/saucer-man/qq_msg_decode

修复QQ数据库 SQLite-Tools

SQLite Download Page: 

https://www.sqlite.org/download.html

这里用的是 sqlite-tools-win32-x86-3420000: 

https://www.sqlite.org/2023/sqlite-tools-win32-x86-3420000.zip

操作流程

为了方便描述,假设下载完上面2个项目及SQLite-Tools后,都带文件夹解压到和我的脚本文件在同一级,为当前目录,文件结构如下:


tjxwork/qq_db_export_group_image_path_and_move_or_delete: QQ数据库导出群图片路径并移动或者删除(github.com): https://github.com/tjxwork/qq_db_export_group_image_path_and_move_or_delete

以及:

你已经安装好Python,并且添加到系统环境变量。(安装时,勾选 PATH 选项)

Python 脚本运行时,提示缺少什么模块的时候,你要学会 pip install xxxxxx

PowerShell 已允许脚本运行 (请管理员权限打开 PowerShell 运行: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned)

在资源管理器的目录空白处,按着Shift + 鼠标右键,点击 在此处打开 PowerShell 窗口 就可以在当前目录直接打开PowerShell

如果有不是很清楚的地方,请搭配视频版演示食用。

解密QQ数据库

先去你的聊天记录文件夹下面备份 Msg3.0.db

先打开QQ,出现登陆窗口,先不要点击登陆。

在当前目录打开PowerShell,运行解密脚本 \qq-win-db-key-master\main.py

然后点击QQ的登陆按钮。

耐心等待登陆,登陆成功后,脚本也随之运行结束。

此时当前目录下出现一个解密完成的 Msg3.0.db_0_xxxxxxxxxx.db 数据库文件。

QQ可以退出了,后面用不到它了。

修复QQ数据库

在当前目录打开PowerShell,运行  SQLite-Tools

使用SQLite-Tools打开 Msg3.0.db_0_xxxxxxxxxx.db

检查是否出错

不出错就输入 .quit退出 。

如提示出错的话,就继续处理,导出为 temp.sql 临时的SQL文件。

运行完成后,当前目录下出现一个 temp.sql 文件。

modify_temp_sql_last_line.py 脚本功能及默认参数:修改  temp.sql 文件的最后一行为 COMMIT;

运行 modify_temp_sql_last_line.py 脚本

运行完成,可以看到 temp.sql 文件的修改时间发现变化。

在当前目录打开PowerShell,运行  SQLite-Tools

创建新数据库 Msg.db 并导入 temp.sql

等待运行完成后,当前目录下出现一个修复完成的 Msg.db 文件。

解码QQ数据库

使用文本编辑器打开 \qq_msg_decode-main\index.py 文件,

在大约534行处,修改为你的数据库路径,建议使用绝对路径。

例如:

在当前目录打开PowerShell,运行解码脚本 \qq_msg_decode-main\index.py

此过程最为漫长,我10G左右的QQ数据库,跑了4小时20分钟。

脚本跑完后,Msg.db 的体积会变大,因为会在表里面多加一个字段,用于存放解码完成后的信息。

解码完成后的数据库结构如图:

导出群聊天记录的图片路径为CSV

regex_processing_img_path_to_csv.py 脚本功能及默认参数:

读取当前目录下的 Msg.db,导出各个群聊天记录中的图片路径为csv格式,存放到当前目录下的 QQ_Group_CSV文件夹下

运行 regex_processing_img_path_to_csv.py 脚本。

会将数据库内的群消息中的图片路径,以群分类,以数据库中的表名为命名,导出为csv文件。

运行完成后,当前目录下出现一个  QQ_Group_CSV 文件夹

其中包含若干数量的,格式类似 group_123456789.csv 的CSV文件。

注意:CSV文件名,其数字部分并不100%和QQ群的群号对应!

以聊天记录查询对应的群的数据库表名

由于在QQ数据库里面存储的群消息的表的名称,并不是绝对和QQ群的群号是一致对应的。

再加之,有部分还能在QQ消息管理器中查看聊天记录的QQ群,已经被封禁,无法查看其群号。

所以需要通过查询来确定,QQ群与数据库中的表的关系。

query_chat_come_from_qq_group.py 脚本功能及默认参数:

连接到当前目录下的 Msg.db 数据库,使用聊天记录来查询确定其在数据库中对应的表名。

运行 query_chat_come_from_qq_group.py 脚本

复制消息管理器中的文本内容,粘贴到PowerShell窗口中查询,复制内容请尽量具有独特性,防止返回内容过多。

查询效果如图:

定义移动文件脚本参数来移动图片

move_csv_img_path.ps1 的脚本功能:

按脚本中定义黑白名单的群列表、运行模式、时间线,来移动对应群csv文件中记录的图片,按群来分类,移动到指定的目录下。

move_csv_img_path.ps1 的脚本参数部分:

请自行修改脚本中的参数为自己的实际路径。

建议移动后的存放目录,设置为聊天记录同分一区下面,能极大地节省移动时间,同分区移动文件只是修改文件系统中的路径指向而已。

move_csv_img_path.ps1 的脚本运行逻辑:

运行move_csv_img_path.ps1 脚本

返回内容如图:

移动日志中出现大量错误的原因

由于存在表情包之类的复用图片,同一个图片路径,可能会在多个群CSV里面反复出现。 从而导致移动脚本读取第1个群CSV正常移走图片后,移动脚本再读取到后续的群CSV文件中再出这条图片路径, 脚本再次移动该图片路径时找不到图片,就会在日志中记录为失败。此部分内容可以看看视频版演示。

效果

我最后清掉了183G的图片,最多那个群35G……

留下的4个群只有3.32G。

原文作者:tjxwork

原文链接:https://www.tjxblog.com/blog/2023-0009  

发布时间:2023-07-22

Python 加 PowerShell 删除指定QQ群的图片【tjxwork】的评论 (共 条)

分享到微博请遵守国家法律