Python 加 PowerShell 刪除指定QQ群的圖片【tjxwork】
B站專欄的排版是真的爛,各種不讓插外鏈。
建議到這里看:
Python 加 PowerShell 刪除指定 QQ 群的圖片 - tjxblog:?
https://www.tjxblog.com/blog/2023-0009

前言
不知道你們是不是和我一樣,QQ加了不少的群,基本是加了就不看的。
有一些水群又水得厲害,收進(jìn)群助手了,但沒(méi)有屏蔽信息,不知道不覺(jué)間,就堆了一堆的圖片。
而QQ的刪除聊天記錄,就真的只是刪除聊天記錄,群里面圖片還是會(huì)留在聊天記錄的文件夾里面。
這就很麻煩了,你又分不清哪個(gè)群的圖片,把圖片全刪除了,又有那么幾個(gè)群是想保留圖片的。
剛好,騰訊最近出了個(gè)新的NT架構(gòu)的QQ,我本來(lái)期待他能像微信一樣按群來(lái)刪除圖片,結(jié)果還是不行。
搜索一番,找到兩個(gè)項(xiàng)目,分別用來(lái)解密和解碼QQ的數(shù)據(jù)庫(kù),然后發(fā)現(xiàn)能從數(shù)據(jù)庫(kù)的群聊天信息拿到圖片路徑。
那就好辦了,寫(xiě)了幾個(gè)腳本來(lái)實(shí)現(xiàn)按群來(lái)刪除圖片。
GitHub項(xiàng)目地址:
tjxwork/qq_db_export_group_image_path_and_move_or_delete:?
QQ數(shù)據(jù)庫(kù)導(dǎo)出群圖片路徑并移動(dòng)或者刪除(github.com): https://github.com/tjxwork/qq_db_export_group_image_path_and_move_or_delete
視頻教程地址:
其實(shí)是先有的視頻教程(演示),這篇文章算是圖文教程,會(huì)比視頻教程詳細(xì)一點(diǎn)。
刪除指定QQ群的圖片【tjxwork】_嗶哩嗶哩_bilibili
刪除指定QQ群的圖片【tjxwork】 - YouTube:?
https://www.youtube.com/watch?v=lMe9MrxBN-c
建議
如果你是出于:“想要清理不看的QQ群的群圖片,并且希望能一直保持聊天記錄比較“干凈”?!?的目的。
那么,新版的NTQQ暫時(shí)不建議使用,因?yàn)槟壳爸挥信f版的QQ才能屏蔽接受群圖片(看的時(shí)候可以手動(dòng)點(diǎn)擊加載)

QQ的相關(guān)信息
QQ的聊天記錄路徑
聊天記錄的配置文件存放在:C:\Users\Public\Documents\Tencent\QQ\UserDataInfo.ini
同一臺(tái)電腦下,所有用戶使用同一個(gè)配置文件。
例如,當(dāng)聊天記錄存放在D:\Chats\Tencent Files時(shí),UserDataInfo.ini 的內(nèi)容為:
QQ配置文件的相關(guān)信息可以看之前這篇:免登錄,用腳本提前修改微信、企業(yè)微信、QQ 的聊天路徑 - tjxblog: https://www.tjxblog.com/blog/2023-0001
NT版本QQ暫時(shí)無(wú)法修改記錄路徑,它直接沿用了舊版QQ的路徑設(shè)定。
QQ的圖片文件結(jié)構(gòu)
例如,當(dāng)聊天記錄存放在D:\Chats\Tencent Files,QQ賬號(hào)是303xxx445 時(shí)
移動(dòng)腳本要處理的是,聊天記錄文件夾的 Image 下面的 Group Group2 兩個(gè)文件夾
新版NT架構(gòu)QQ的相關(guān)信息
當(dāng)你使用首次使用NTQQ的時(shí)候,會(huì)提示導(dǎo)入數(shù)據(jù)庫(kù)。
其實(shí)就是把舊的 聊天記錄文件夾\QQ賬號(hào)\Msg3.0.db
導(dǎo)入了到了新的 聊天記錄文件夾\QQ賬號(hào)\nt_qq\nt_db\nt_msg.db
這期間會(huì)提示優(yōu)化過(guò)程,新的數(shù)據(jù)庫(kù)應(yīng)該是和舊數(shù)據(jù)庫(kù)不一樣的。
使用新的NTQQ的時(shí)候,會(huì)在原來(lái)的聊天記錄路徑下建立聊天記錄路徑\QQ賬號(hào)\nt_qq\文件夾
接收到的圖片及各類文件都是存放在新的路徑下面。
各種數(shù)據(jù)庫(kù):聊天記錄路徑\QQ賬號(hào)\nt_qq\nt_db
圖片之類的:聊天記錄路徑\QQ賬號(hào)\nt_qq\nt_data
圖片的存放結(jié)構(gòu)和Windows版微信類似,會(huì)按年-月份的方式來(lái)區(qū)分。
但是NTQQ目前仍然做不到像微信那樣,按群來(lái)刪除圖片之類的文件。
聊天記錄路徑\QQ賬號(hào)\nt_qq\nt_data\Pic 的結(jié)構(gòu):

前置項(xiàng)目及所需工具
解密QQ數(shù)據(jù)庫(kù) qq-win-db-key
Young-Lord/qq-win-db-key: Windows QQ 聊天數(shù)據(jù)庫(kù)解密 (github.com): https://github.com/Young-Lord/qq-win-db-key
解碼QQ數(shù)據(jù)庫(kù) qq_msg_decode
saucer-man/qq_msg_decode: 解碼qq聊天數(shù)據(jù)庫(kù) (github.com):?
https://github.com/saucer-man/qq_msg_decode
修復(fù)QQ數(shù)據(jù)庫(kù) 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
操作流程
為了方便描述,假設(shè)下載完上面2個(gè)項(xiàng)目及SQLite-Tools后,都帶文件夾解壓到和我的腳本文件在同一級(jí),為當(dāng)前目錄,文件結(jié)構(gòu)如下:

tjxwork/qq_db_export_group_image_path_and_move_or_delete: QQ數(shù)據(jù)庫(kù)導(dǎo)出群圖片路徑并移動(dòng)或者刪除(github.com): https://github.com/tjxwork/qq_db_export_group_image_path_and_move_or_delete
以及:
你已經(jīng)安裝好Python,并且添加到系統(tǒng)環(huán)境變量。(安裝時(shí),勾選 PATH 選項(xiàng))
Python 腳本運(yùn)行時(shí),提示缺少什么模塊的時(shí)候,你要學(xué)會(huì) pip install xxxxxx
PowerShell 已允許腳本運(yùn)行 (請(qǐng)管理員權(quán)限打開(kāi) PowerShell 運(yùn)行: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned)
在資源管理器的目錄空白處,按著Shift + 鼠標(biāo)右鍵,點(diǎn)擊 在此處打開(kāi) PowerShell 窗口 就可以在當(dāng)前目錄直接打開(kāi)PowerShell
如果有不是很清楚的地方,請(qǐng)搭配視頻版演示食用。
解密QQ數(shù)據(jù)庫(kù)
先去你的聊天記錄文件夾下面?zhèn)浞?Msg3.0.db
先打開(kāi)QQ,出現(xiàn)登陸窗口,先不要點(diǎn)擊登陸。
在當(dāng)前目錄打開(kāi)PowerShell,運(yùn)行解密腳本 \qq-win-db-key-master\main.py
然后點(diǎn)擊QQ的登陸按鈕。
耐心等待登陸,登陸成功后,腳本也隨之運(yùn)行結(jié)束。
此時(shí)當(dāng)前目錄下出現(xiàn)一個(gè)解密完成的 Msg3.0.db_0_xxxxxxxxxx.db 數(shù)據(jù)庫(kù)文件。
QQ可以退出了,后面用不到它了。
修復(fù)QQ數(shù)據(jù)庫(kù)
在當(dāng)前目錄打開(kāi)PowerShell,運(yùn)行 ?SQLite-Tools
使用SQLite-Tools打開(kāi) Msg3.0.db_0_xxxxxxxxxx.db
檢查是否出錯(cuò)
不出錯(cuò)就輸入 .quit退出 。
如提示出錯(cuò)的話,就繼續(xù)處理,導(dǎo)出為 temp.sql 臨時(shí)的SQL文件。
運(yùn)行完成后,當(dāng)前目錄下出現(xiàn)一個(gè) temp.sql 文件。
modify_temp_sql_last_line.py 腳本功能及默認(rèn)參數(shù):修改 ?temp.sql 文件的最后一行為 COMMIT;
運(yùn)行 modify_temp_sql_last_line.py 腳本
運(yùn)行完成,可以看到 temp.sql 文件的修改時(shí)間發(fā)現(xiàn)變化。
在當(dāng)前目錄打開(kāi)PowerShell,運(yùn)行 ?SQLite-Tools
創(chuàng)建新數(shù)據(jù)庫(kù) Msg.db 并導(dǎo)入 temp.sql
等待運(yùn)行完成后,當(dāng)前目錄下出現(xiàn)一個(gè)修復(fù)完成的 Msg.db 文件。
解碼QQ數(shù)據(jù)庫(kù)
使用文本編輯器打開(kāi) \qq_msg_decode-main\index.py 文件,
在大約534行處,修改為你的數(shù)據(jù)庫(kù)路徑,建議使用絕對(duì)路徑。
例如:
在當(dāng)前目錄打開(kāi)PowerShell,運(yùn)行解碼腳本 \qq_msg_decode-main\index.py
此過(guò)程最為漫長(zhǎng),我10G左右的QQ數(shù)據(jù)庫(kù),跑了4小時(shí)20分鐘。
腳本跑完后,Msg.db 的體積會(huì)變大,因?yàn)闀?huì)在表里面多加一個(gè)字段,用于存放解碼完成后的信息。
解碼完成后的數(shù)據(jù)庫(kù)結(jié)構(gòu)如圖:

導(dǎo)出群聊天記錄的圖片路徑為CSV
regex_processing_img_path_to_csv.py 腳本功能及默認(rèn)參數(shù):
讀取當(dāng)前目錄下的 Msg.db,導(dǎo)出各個(gè)群聊天記錄中的圖片路徑為csv格式,存放到當(dāng)前目錄下的 QQ_Group_CSV文件夾下
運(yùn)行 regex_processing_img_path_to_csv.py 腳本。
會(huì)將數(shù)據(jù)庫(kù)內(nèi)的群消息中的圖片路徑,以群分類,以數(shù)據(jù)庫(kù)中的表名為命名,導(dǎo)出為csv文件。
運(yùn)行完成后,當(dāng)前目錄下出現(xiàn)一個(gè) ?QQ_Group_CSV 文件夾
其中包含若干數(shù)量的,格式類似 group_123456789.csv 的CSV文件。
注意:CSV文件名,其數(shù)字部分并不100%和QQ群的群號(hào)對(duì)應(yīng)!
以聊天記錄查詢對(duì)應(yīng)的群的數(shù)據(jù)庫(kù)表名
由于在QQ數(shù)據(jù)庫(kù)里面存儲(chǔ)的群消息的表的名稱,并不是絕對(duì)和QQ群的群號(hào)是一致對(duì)應(yīng)的。

再加之,有部分還能在QQ消息管理器中查看聊天記錄的QQ群,已經(jīng)被封禁,無(wú)法查看其群號(hào)。
所以需要通過(guò)查詢來(lái)確定,QQ群與數(shù)據(jù)庫(kù)中的表的關(guān)系。
query_chat_come_from_qq_group.py 腳本功能及默認(rèn)參數(shù):
連接到當(dāng)前目錄下的 Msg.db 數(shù)據(jù)庫(kù),使用聊天記錄來(lái)查詢確定其在數(shù)據(jù)庫(kù)中對(duì)應(yīng)的表名。
運(yùn)行 query_chat_come_from_qq_group.py 腳本
復(fù)制消息管理器中的文本內(nèi)容,粘貼到PowerShell窗口中查詢,復(fù)制內(nèi)容請(qǐng)盡量具有獨(dú)特性,防止返回內(nèi)容過(guò)多。
查詢效果如圖:

定義移動(dòng)文件腳本參數(shù)來(lái)移動(dòng)圖片
move_csv_img_path.ps1 的腳本功能:
按腳本中定義黑白名單的群列表、運(yùn)行模式、時(shí)間線,來(lái)移動(dòng)對(duì)應(yīng)群csv文件中記錄的圖片,按群來(lái)分類,移動(dòng)到指定的目錄下。
move_csv_img_path.ps1 的腳本參數(shù)部分:
請(qǐng)自行修改腳本中的參數(shù)為自己的實(shí)際路徑。
建議移動(dòng)后的存放目錄,設(shè)置為聊天記錄同分一區(qū)下面,能極大地節(jié)省移動(dòng)時(shí)間,同分區(qū)移動(dòng)文件只是修改文件系統(tǒng)中的路徑指向而已。
move_csv_img_path.ps1 的腳本運(yùn)行邏輯:
運(yùn)行move_csv_img_path.ps1 腳本
返回內(nèi)容如圖:


移動(dòng)日志中出現(xiàn)大量錯(cuò)誤的原因
由于存在表情包之類的復(fù)用圖片,同一個(gè)圖片路徑,可能會(huì)在多個(gè)群CSV里面反復(fù)出現(xiàn)。 從而導(dǎo)致移動(dòng)腳本讀取第1個(gè)群CSV正常移走圖片后,移動(dòng)腳本再讀取到后續(xù)的群CSV文件中再出這條圖片路徑, 腳本再次移動(dòng)該圖片路徑時(shí)找不到圖片,就會(huì)在日志中記錄為失敗。此部分內(nèi)容可以看看視頻版演示。

效果
我最后清掉了183G的圖片,最多那個(gè)群35G……
留下的4個(gè)群只有3.32G。




原文作者:tjxwork
原文鏈接:https://www.tjxblog.com/blog/2023-0009 ?
發(fā)布時(shí)間:2023-07-22