From 02980c4d1a22bd0a848f9bab2bae67d2efb73fc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Tue, 14 Oct 2025 20:32:41 +0800 Subject: [PATCH] feat: Update QQ version data and add macOS ARM64 native module Updated qqnt.json, appid.json, and offset.json to support QQ version 9.9.22-40768 and related Linux/macOS versions. Modified calcQQLevel in helper.ts to remove penguinNum from calculation. Added MoeHoo.darwin.arm64.new.node for macOS ARM64 support and updated LiteLoaderWrapper.zip binary. --- external/LiteLoaderWrapper.zip | Bin 76834 -> 76835 bytes launcher/qqnt.json | 10 +++++----- src/common/helper.ts | 6 ++++-- src/core/external/appid.json | 12 ++++++++++++ src/core/external/offset.json | 16 ++++++++++++++++ .../packet/MoeHoo.darwin.arm64.new.node | Bin 0 -> 74856 bytes 6 files changed, 37 insertions(+), 7 deletions(-) create mode 100644 src/native/packet/MoeHoo.darwin.arm64.new.node diff --git a/external/LiteLoaderWrapper.zip b/external/LiteLoaderWrapper.zip index 1e8419c6ce19fc26464ee047c68a3ea5fda00f2c..b5cf06275fae5015215d36a657d6af6aac66f90f 100644 GIT binary patch delta 2637 zcmaJ@2~1R16#e)AfniZVK^$fV7#LOu6jVfoibgOZNJrCZtV`8cS=^%prCKD^QZ`v$ z@mWhnp&~F8MZ~2pBQ7ZsTp9r(8o`CAECz7F)+&AfzX4~Uk>taj^Ut~4yYCJKO`^gk zQI-^`RijW0D8weyUqtOcUs{_KEdu5o&RAxS+%9cR_PbWz z_2yYsLEEd*f68MU6LL;&%zE=MfNM^CxYD`iP}17sqQ-6F@RmDkYR)u-cFT)qM*G!w zuB*!mu4;KQt-UOI&f_ON9<66fccY-B{@_W<=-`^&2QS$b?Hqqdxh`3}cz@xj+mS8b z&4^dX@y*`Rrt@k=XEJlDehAxKEjxO$`0BgoCtjk0gbnuRL)Go+K_lKjo=}a(^w-B+ zD?SmCT;@30KctQ|vfNv%=+m?@@ozbGnAk)EiTiATVLHg84&y{N4F6L}dboMJhusy@ zKfcxcU&FT*+kMRS-r^n>WJtVYiimG_<*Xf3f#aR*j1L-4dl(-|Y2&}GFs9by#3?{6 z`=l5VwbGIsIFnbp6GTyIlLe3YY2KemORcp*f2X+&k6Er2qj~B6f@icRJ(q@X$hgl^ z>qBM;&A4K_4f-lu{)rfw*xnY2dhu-HeRbCg%p=Bcw@Kf6nv z-)avW?zmiQjsiO-QPI|pNS&hxUE@ST?dH9H!$oU*1E}CgFKZ>xZnaDBbq=g>w6`4ihXh@A=a;zK7Cbm|fzdK>$1`2Q5?`_d6TDMhs3*)j!KM4m(P~&YCU?0~HRFfQ(xk$Dr!% z_QpmG5Dre4fQmg9htEnNP(c=jforLOYu_C>LJD$pG=9{8dafN&r|9thc*S6)&g|^n z0(+kn!r8b)-rmSQ+Ji4jVGG-mf_-H$$!Taj6N7kPq%!DOn$(tNI;#GSRw^%@fArDV+0B?5P0ZPhn02#qbcx>sf0=Cal zfaHz@T69Q&P}5-t5veo}=kn;Z0xIrw1bc#+DF{}3gfizJl~ZOSk2)0N;|iEKte0Yg zjJK39sIJs*(*O6;pw!U@!c!&qFK4hpE}FqZk9Q))8kY(6vuDPK{_}iCb-I(+y<|6ye3?5BAltwMFv%nua9loK_}5lP;rX{+(%FU zKuPqP8vKtEgzqHm>q2H?RV{<8Zj8liU390j%Y~?`1ayL)y2k~ioc|qxj7sWd{448^ zX_z%I=$ppD(aLuvbu4Ybb*`|2y?hsYxj`hi=>dbTx9B^)??zI(*NWe|kqMmf1TS-k zg>2MQeB2%U1>f!NB*pKaGpMEAb6{-!JxGGh0w%$`JRp=)cQQ!R{?nGoY19i ztndUkVGct*i6e_121WOJe=J7``85D;B|D4XgLG)c;|TfW06c#j%;zFm9m!rrmeqxE z5W-y+e}v|9d(4DS6ZP77N=4fE)I!JVP=S(PeinG4Ex|=&0B^D-p7V&IwFO^n;RP1P Kvu(+LIm~~hQ^*tm delta 2536 zcmaJ@2~bm46#e)Au;x6Hf+*Idh#TU9RmZwigfZ>}(JESH>8J%P4Lw?ROXsb?L`u=}G4LD`ylbdtzx%ZxX-}@6|y{MpG zq?ci(8~E9pj+M@BzBE>g$GCw(R9f*;i(B1b5{gWf%)htuvA#Pxsa;r%(cagq&?5SQ(kuOHRj@T43Ds{49>FJ0^Uc(|! zi>0g5ZC>TnBd0I_Zpv`kUDz%B--~(S+Bqp}w)m99%C1CjJhbSHukrcpm{mIE9=o-D zf}ic~Gi^`8HC)yZ_DH%mbcy18E^|o{>U#9hb>p?n?5jy0Ni|bPTsbnKVf_;}KE-C; zcNr?9LvDWVG?Sv&>JcXOy~)LuNn5$1+ROVd1x9oWSu@df*Rw-;8%$Nk)Z!!7W8aG2 zau?DI-PD{ltKHhRHg)?i3eV}WX~R$GQ(oPpw!6NGy4O4@J;p!&zULZS<(`+tp>+Yn4=x)JzuGu;MpgImx+lMNZPS^QLmex| zN7>j`jVt$X0fu=c@zz6O)j&hR#9pwP^&3zzKB}U>uNdM5>lB@i8Psg zg^aP8J^rt+;>@tl1$E^%sB2a~(d;8HwP-}vX3_rPqqL^xtUp<5oyd-)?b_<8s!xax zBWfn-qq^pihT2Dh7Uas%N&WCHJjg$jlYcO|IP{*(t zGz1Q0*-=Y>G=+60+ngpG4)Z@3lvpmt#a`fyE~nX890OhXAWA$?KGa@RK<=&S#qUd5 zq2A)^@Q(H5NLAVeHB|SZB&YLfHq_dDHHAubul>YQm(>oSVW!%J=Gl1H8?7mJu5q3j z>vwY;N3qPm0?pRpd)H{SyAqhd zrKRy9p}e~{cQ9Ru#}!hD;Z*DCmtYx8;uKj7dY$1ZbS&gQCL{Sb5;QSW_5t1PLmI2k z!l`o7?m#(dOz19NPPz-+z{9hx>oy3AZYs!J1+T<|G*$K^gY?bU%F7R!HLiVIZ`K*!XqBK;2AjbE!Eq7zSQ!TbII z{#p&elvki8ye0vW;|2{my7pcKnSYFrk)yby$`3;q_7_osH+n%JWnbcBH&x(=UND<& zIg7`6L*Gu-#TM0foX79HL4uF+2UFPaZEup~nE=PK%W4EST5wg~q43B$to9`b=Y~%^ z(aM()w+Zk}miYsx`GS_+)5L#@xA;L6E4?L9P}iI0OS;*QFuuKm%lsh5e&>CD3BgHA z;?Ryp5+8h3rFcjXcw@)z;9&iQnEcXU{sXh^WXJ#j diff --git a/launcher/qqnt.json b/launcher/qqnt.json index 6bba1895..047c6bbb 100644 --- a/launcher/qqnt.json +++ b/launcher/qqnt.json @@ -1,9 +1,9 @@ { "name": "qq-chat", - "verHash": "cc326038", - "version": "9.9.21-39038", - "linuxVersion": "3.2.19-39038", - "linuxVerHash": "c773cdf7", + "verHash": "c50d6326", + "version": "9.9.22-40768", + "linuxVersion": "3.2.20-40768", + "linuxVerHash": "ab90fdfa", "private": true, "description": "QQ", "productName": "QQ", @@ -17,7 +17,7 @@ "qd": "externals/devtools/cli/index.js" }, "main": "./loadNapCat.js", - "buildVersion": "39038", + "buildVersion": "40768", "isPureShell": true, "isByteCodeShell": true, "platform": "win32", diff --git a/src/common/helper.ts b/src/common/helper.ts index 0213be69..9c049059 100644 --- a/src/common/helper.ts +++ b/src/common/helper.ts @@ -163,8 +163,10 @@ export function getQQVersionConfigPath(exePath: string = ''): string | undefined export function calcQQLevel(level?: QQLevel) { if (!level) return 0; - const { penguinNum, crownNum, sunNum, moonNum, starNum } = level; - return penguinNum * 256 + crownNum * 64 + sunNum * 16 + moonNum * 4 + starNum; + //const { penguinNum, crownNum, sunNum, moonNum, starNum } = level; + const { crownNum, sunNum, moonNum, starNum } = level + //没补类型 + return crownNum * 64 + sunNum * 16 + moonNum * 4 + starNum; } export function stringifyWithBigInt(obj: any) { diff --git a/src/core/external/appid.json b/src/core/external/appid.json index 60b6085f..20a98896 100644 --- a/src/core/external/appid.json +++ b/src/core/external/appid.json @@ -390,5 +390,17 @@ "9.9.22-40362": { "appid": 537314212, "qua": "V1_WIN_NQ_9.9.22_40362_GW_B" + }, + "3.2.20-40768": { + "appid": 537319840, + "qua": "V1_LNX_NQ_3.2.20_40768_GW_B" + }, + "9.9.22-40768": { + "appid": 537319804, + "qua": "V1_WIN_NQ_9.9.22_40768_GW_B" + }, + "6.9.82-40768": { + "appid": 537319829, + "qua": "V1_MAC_NQ_6.9.82_40768_GW_B" } } \ No newline at end of file diff --git a/src/core/external/offset.json b/src/core/external/offset.json index f6806035..523071ba 100644 --- a/src/core/external/offset.json +++ b/src/core/external/offset.json @@ -514,5 +514,21 @@ "9.9.22-40362-x64": { "send": "31C0EB8", "recv": "31C465C" + }, + "3.2.20-40768-x64": { + "send": "B69CFE0", + "recv": "B6A0A60" + }, + "9.9.22-40768-x64": { + "send": "31C1838", + "recv": "31C4FDC" + }, + "3.2.20-40768-arm64": { + "send": "7D49B18", + "recv": "7D4D4A8" + }, + "6.9.82-40768-arm64": { + "send": "202A198", + "recv": "202B718" } } \ No newline at end of file diff --git a/src/native/packet/MoeHoo.darwin.arm64.new.node b/src/native/packet/MoeHoo.darwin.arm64.new.node new file mode 100644 index 0000000000000000000000000000000000000000..6c2c3e40be36c4ae427104d01675abf6189d21bf GIT binary patch literal 74856 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