llonebot-dist 8.0.4 → 8.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/llbot.js CHANGED
@@ -19144,7 +19144,17 @@ function parseElements(elems, isGroup) {
19144
19144
  const svcType = elem.commonElem.serviceType;
19145
19145
  const bizType = elem.commonElem.businessType;
19146
19146
  const pbElem = elem.commonElem.pbElem;
19147
- if (svcType === 37) {
19147
+ if (svcType === 33) {
19148
+ const ext = Msg.QSmallFaceExtra.decode(pbElem);
19149
+ result.push({
19150
+ elementType: ElementType.Face,
19151
+ faceElement: {
19152
+ faceIndex: ext.faceId,
19153
+ faceType: 2,
19154
+ faceText: ext.text
19155
+ }
19156
+ });
19157
+ } else if (svcType === 37) {
19148
19158
  const ext = Msg.LargeFaceExtra.decode(pbElem);
19149
19159
  const faceIndex = Number(ext.faceId ?? 0);
19150
19160
  const face = face_config_default.sysface.find((f) => f.QSid === String(faceIndex));
@@ -19262,13 +19272,6 @@ function registerDispatcher(ctx) {
19262
19272
  try {
19263
19273
  switch (cmd) {
19264
19274
  case MSG_PUSH_CMD:
19265
- if (process.env.DEBUG_RAW_PUSH) try {
19266
- const m = Msg.PushMsg.decode(payload).message;
19267
- const rh = m?.routingHead;
19268
- console.log(`[RawPush] MsgPush msgType=${m?.contentHead.msgType} subType=${m?.contentHead.subType} fromUid=${rh?.fromUid ?? "?"} fromUin=${rh?.fromUin ?? "?"} groupCode=${rh?.group?.groupCode ?? "?"}`);
19269
- } catch (e) {
19270
- console.log(`[RawPush] MsgPush decode failed: ${e.message}`);
19271
- }
19272
19275
  handleMsgPush(ctx, payload);
19273
19276
  break;
19274
19277
  case KICK_CMD:
@@ -19285,6 +19288,11 @@ function registerDispatcher(ctx) {
19285
19288
  }
19286
19289
  function handleMsgPush(ctx, payload) {
19287
19290
  const msg = Msg.PushMsg.decode(payload).message;
19291
+ if (process.env.DEBUG_RAW_PUSH) {
19292
+ const m = msg;
19293
+ const rh = m?.routingHead;
19294
+ console.log(`[RawPush] MsgPush msgType=${m?.contentHead.msgType} subType=${m?.contentHead.subType} fromUid=${rh?.fromUid ?? "?"} fromUin=${rh?.fromUin ?? "?"} groupCode=${rh?.group?.groupCode ?? "?"}`);
19295
+ }
19288
19296
  if (!msg) return;
19289
19297
  const msgType = msg.contentHead.msgType;
19290
19298
  const subType = msg.contentHead.subType;
@@ -20669,7 +20677,7 @@ var OB11HeartbeatEvent = class extends OB11BaseMetaEvent {
20669
20677
  };
20670
20678
  //#endregion
20671
20679
  //#region src/version.ts
20672
- var version$3 = "8.0.4";
20680
+ var version$3 = "8.0.6";
20673
20681
  //#endregion
20674
20682
  //#region node_modules/sift/es5m/index.js
20675
20683
  /******************************************************************************
@@ -31546,7 +31554,7 @@ var UploadPrivateFile$1 = class extends BaseAction {
31546
31554
  if (name.includes("/") || name.includes("\\")) throw new Error(`文件名 ${name} 不合法`);
31547
31555
  const uid = await this.ctx.ntUserApi.getUidByUin(+payload.user_id);
31548
31556
  if (!uid) throw new Error("无法获取用户信息");
31549
- const info = await this.ctx.ntFileApi.uploadPrivateFile(uid, path, name);
31557
+ const info = await this.ctx.ntFileApi.uploadPrivateFile(ChatType.C2C, uid, path, name);
31550
31558
  if (!isLocal) unlink(path).catch(noop);
31551
31559
  const result = await this.ctx.ntMsgApi.sendPrivateFileMessage({
31552
31560
  toUin: +payload.user_id,
@@ -31671,7 +31679,7 @@ var OCRImage = class extends BaseAction {
31671
31679
  const { errMsg, isLocal, path, success } = await uri2local(this.ctx, payload.image);
31672
31680
  if (!success) throw new Error(errMsg);
31673
31681
  const size = await getImageSize(path);
31674
- const result = await this.ctx.ntFileApi.uploadPrivateImage(selfInfo.uid, path, size.width, size.height, "", 0);
31682
+ const result = await this.ctx.ntFileApi.uploadPrivateImage(ChatType.C2C, selfInfo.uid, path, size.width, size.height, "", 0);
31675
31683
  if (!isLocal) unlink(path).catch(noop);
31676
31684
  const msgInfoBytes = result.msgInfo instanceof Uint8Array || Buffer.isBuffer(result.msgInfo) ? Buffer.from(result.msgInfo) : null;
31677
31685
  if (!msgInfoBytes) throw new Error("uploadC2CImage 返回的 msgInfo 不是 bytes");
@@ -50920,7 +50928,7 @@ var FileApi = [
50920
50928
  await writeFile(tempPath, data);
50921
50929
  const uid = await ctx.ntUserApi.getUidByUin(payload.user_id);
50922
50930
  if (!uid) return Failed(-404, "User not found");
50923
- const info = await ctx.ntFileApi.uploadPrivateFile(uid, tempPath, payload.file_name);
50931
+ const info = await ctx.ntFileApi.uploadPrivateFile(ChatType.C2C, uid, tempPath, payload.file_name);
50924
50932
  unlink(tempPath).catch(noop);
50925
50933
  const result = await ctx.ntMsgApi.sendPrivateFileMessage({
50926
50934
  toUin: payload.user_id,
@@ -56211,7 +56219,7 @@ var MessageBuilding = class MessageBuilding {
56211
56219
  }
56212
56220
  async [ElementType.Face](data) {
56213
56221
  const { faceElement } = data;
56214
- if (faceElement.stickerType && faceElement.stickerId) {
56222
+ if (faceElement.faceType === 3) {
56215
56223
  const f = faceElement;
56216
56224
  const pbElem = Msg.LargeFaceExtra.encode({
56217
56225
  aniStickerPackId: f.packId ? String(f.packId) : "1",
@@ -56225,9 +56233,19 @@ var MessageBuilding = class MessageBuilding {
56225
56233
  pbElem,
56226
56234
  businessType: f.stickerType ?? 1
56227
56235
  } });
56228
- return;
56229
- }
56230
- this.outputElems.push({ face: { index: faceElement.faceIndex } });
56236
+ } else if (faceElement.faceType === 2) {
56237
+ const f = faceElement;
56238
+ const pbElem = Msg.QSmallFaceExtra.encode({
56239
+ faceId: f.faceIndex,
56240
+ text: f.faceText,
56241
+ compatText: f.faceText
56242
+ });
56243
+ this.outputElems.push({ commonElem: {
56244
+ serviceType: 33,
56245
+ pbElem,
56246
+ businessType: f.stickerType ?? 1
56247
+ } });
56248
+ } else this.outputElems.push({ face: { index: faceElement.faceIndex } });
56231
56249
  }
56232
56250
  async [ElementType.MarketFace](data) {
56233
56251
  const { marketFaceElement } = data;
@@ -59371,6 +59389,10 @@ function isDockerEnvironment() {
59371
59389
  return false;
59372
59390
  }
59373
59391
  }
59392
+ /** PMHQ 模式必须传 --pmhq-port (CLI/Desktop/docker 启动脚本都会带), 以此区分直连模式 */
59393
+ function isPmhqMode() {
59394
+ return process.argv.some((arg) => arg.startsWith("--pmhq-port="));
59395
+ }
59374
59396
  //#endregion
59375
59397
  //#region src/webui/BE/routes/config.ts
59376
59398
  function isListenAllInterfaces(host) {
@@ -59755,7 +59777,7 @@ function createMessagesRoutes(ctx, createPicElement) {
59755
59777
  }, 500);
59756
59778
  sentMsgIds.push(info.fileId);
59757
59779
  } else {
59758
- const info = await ctx.ntFileApi.uploadPrivateFile(peerUid, f.filePath, f.fileName);
59780
+ const info = await ctx.ntFileApi.uploadPrivateFile(ChatType.C2C, peerUid, f.filePath, f.fileName);
59759
59781
  const result = await ctx.ntMsgApi.sendPrivateFileMessage({
59760
59782
  toUin: +peerId,
59761
59783
  toUid: peerUid,
@@ -73522,7 +73544,6 @@ var DirectProtocolClient = class extends EventEmitter {
73522
73544
  await this.ensureSignSetup();
73523
73545
  if (!this.signPreflighted && this.config.authToken) {
73524
73546
  this.signPreflighted = true;
73525
- console.log("[Sign] preflightSign() 被调用 -- 只有 direct 模式 connect 会到这里, PMHQ 模式不该出现这行");
73526
73547
  const reason = await preflightSign();
73527
73548
  if (reason) throw new Error(`sign preflight failed: ${reason}`);
73528
73549
  }
@@ -73580,39 +73601,538 @@ var DirectProtocolClient = class extends EventEmitter {
73580
73601
  };
73581
73602
  }
73582
73603
  SIGN_ALLOWLIST = new Set([
73583
- "wtlogin.trans_emp",
73584
- "wtlogin.login",
73585
- "trpc.o3.ecdh_access.EcdhAccess.SsoEstablishShareKey",
73586
- "trpc.o3.ecdh_access.EcdhAccess.SsoSecureAccess",
73604
+ "AvatarInfoSvr.QQHeadUrlReq",
73605
+ "CertifiedAccountSvc.certified_account_read.GetFollowList",
73606
+ "ConfigPushSvc.PushResp",
73607
+ "ConnAuthSvr.fast_qq_login",
73608
+ "ConnAuthSvr.get_app_info",
73609
+ "ConnAuthSvr.get_app_info_emp",
73610
+ "ConnAuthSvr.get_auth_api_list",
73611
+ "ConnAuthSvr.get_auth_api_list_emp",
73612
+ "ConnAuthSvr.sdk_auth_api",
73613
+ "ConnAuthSvr.sdk_auth_api_emp",
73614
+ "FeedCloudSvr.trpc.circlesearch.exhibition.ExhibitionSvr.ExhibitionSuggestion",
73615
+ "FeedCloudSvr.trpc.feedcloud.commreader.ComReader.GetBusiInfo",
73616
+ "FeedCloudSvr.trpc.feedcloud.commreader.ComReader.GetCommentList",
73617
+ "FeedCloudSvr.trpc.feedcloud.commreader.ComReader.GetFeedList",
73618
+ "FeedCloudSvr.trpc.feedcloud.commreader.ComReader.GetMainPageBasicData",
73619
+ "FeedCloudSvr.trpc.feedcloud.commreader.ComReader.GetMainPageCommData",
73620
+ "FeedCloudSvr.trpc.feedcloud.commreader.ComReader.GetRelationGroupList",
73621
+ "FeedCloudSvr.trpc.feedcloud.commreader.ComReader.GetReplyList",
73622
+ "FeedCloudSvr.trpc.feedcloud.commreader.ComReader.GetRerankedFeedList",
73623
+ "FeedCloudSvr.trpc.feedcloud.commwriter.ComWriter.DoBarrage",
73624
+ "FeedCloudSvr.trpc.feedcloud.commwriter.ComWriter.DoComment",
73625
+ "FeedCloudSvr.trpc.feedcloud.commwriter.ComWriter.DoFollow",
73626
+ "FeedCloudSvr.trpc.feedcloud.commwriter.ComWriter.DoLike",
73627
+ "FeedCloudSvr.trpc.feedcloud.commwriter.ComWriter.DoPush",
73628
+ "FeedCloudSvr.trpc.feedcloud.commwriter.ComWriter.DoReply",
73629
+ "FeedCloudSvr.trpc.feedcloud.commwriter.ComWriter.PublishFeed",
73630
+ "FeedCloudSvr.trpc.videocircle.circleprofile.CircleProfile.SetProfile",
73631
+ "GameCenterMsg.GetUserInfo",
73632
+ "HttpConn.0x6ff_501",
73633
+ "IncreaseURLSvr.QQHeadUrlReq",
73634
+ "LightAppSvc.mini_app_cloudstorage.GetUserCloudStorage",
73635
+ "LightAppSvc.mini_app_privacy.GetPrivacyInfo",
73636
+ "LightAppSvc.mini_app_userapp.GetDropdownAppList",
73637
+ "MQUpdateSvc_com_qq_qzone_act.web.OidbSvcTrpcJsapiTcp.0x9377_0",
73638
+ "MQUpdateSvc_com_qq_ti.web.OidbSvcTrpcJsapiTcp.0x9044_0",
73639
+ "MQUpdateSvc_com_qq_ti.web.OidbSvcTrpcJsapiTcp.0x9047_0",
73640
+ "MQUpdateSvc_com_qq_ti.web.OidbSvcTrpcJsapiTcp.0x9172_0",
73641
+ "MessageSvc.PbBindUinGetMsg",
73642
+ "MessageSvc.PbGetGroupMsg",
73643
+ "MessageSvc.PbGetMsg",
73644
+ "MessageSvc.PbGetRoamMsg",
73587
73645
  "MessageSvc.PbSendMsg",
73588
- "OidbSvcTrpcTcp.0x6d9_4",
73589
- "OidbSvcTrpcTcp.0x929b_0",
73590
- "OidbSvcTrpcTcp.0xfe1_2",
73591
- "OidbSvcTrpcTcp.0xfe1_8",
73592
- "OidbSvcTrpcTcp.0x102a_1",
73646
+ "MsgProxy.SendMsg",
73647
+ "NowSummaryCard.NearbyMiniCardReq",
73648
+ "OidbSvc.0x42d",
73649
+ "OidbSvc.0x42d_4",
73650
+ "OidbSvc.0x480_9",
73651
+ "OidbSvc.0x480_9_IMCore",
73652
+ "OidbSvc.0x4ff_9",
73653
+ "OidbSvc.0x4ff_9_IMCore",
73654
+ "OidbSvc.0x515_2",
73655
+ "OidbSvc.0x53c_2",
73656
+ "OidbSvc.0x56c_6",
73657
+ "OidbSvc.0x570_8",
73658
+ "OidbSvc.0x580_1",
73659
+ "OidbSvc.0x587_123",
73660
+ "OidbSvc.0x587_normalNightSet",
73661
+ "OidbSvc.0x58b",
73662
+ "OidbSvc.0x592",
73663
+ "OidbSvc.0x592_1",
73664
+ "OidbSvc.0x592_10",
73665
+ "OidbSvc.0x592_11",
73666
+ "OidbSvc.0x592_12",
73667
+ "OidbSvc.0x592_13",
73668
+ "OidbSvc.0x592_15",
73669
+ "OidbSvc.0x592_16",
73670
+ "OidbSvc.0x592_17",
73671
+ "OidbSvc.0x592_18",
73672
+ "OidbSvc.0x592_19",
73673
+ "OidbSvc.0x592_2",
73674
+ "OidbSvc.0x592_3",
73675
+ "OidbSvc.0x592_4",
73676
+ "OidbSvc.0x592_5",
73677
+ "OidbSvc.0x592_6",
73678
+ "OidbSvc.0x592_7",
73679
+ "OidbSvc.0x592_8",
73680
+ "OidbSvc.0x592_9",
73681
+ "OidbSvc.0x59f",
73682
+ "OidbSvc.0x5d0_1",
73683
+ "OidbSvc.0x5eb_15",
73684
+ "OidbSvc.0x5eb_22",
73685
+ "OidbSvc.0x5eb_42073",
73686
+ "OidbSvc.0x5eb_42261",
73687
+ "OidbSvc.0x5eb_43",
73688
+ "OidbSvc.0x5eb_96",
73689
+ "OidbSvc.0x5eb_99",
73690
+ "OidbSvc.0x5eb_ForTheme",
73691
+ "OidbSvc.0x5eb_cn_switch",
73692
+ "OidbSvc.0x5eb_common",
73693
+ "OidbSvc.0x6d6_0",
73694
+ "OidbSvc.0x6d6_2",
73695
+ "OidbSvc.0x6d6_3",
73696
+ "OidbSvc.0x6d7_0",
73697
+ "OidbSvc.0x6d9_4",
73698
+ "OidbSvc.0x6de",
73699
+ "OidbSvc.0x758",
73700
+ "OidbSvc.0x758_0",
73701
+ "OidbSvc.0x758_1",
73702
+ "OidbSvc.0x787_0",
73703
+ "OidbSvc.0x787_1",
73704
+ "OidbSvc.0x787_11",
73705
+ "OidbSvc.0x7a2_0",
73706
+ "OidbSvc.0x7df_3",
73707
+ "OidbSvc.0x852_35",
73708
+ "OidbSvc.0x852_48",
73709
+ "OidbSvc.0x88d_0",
73710
+ "OidbSvc.0x88d_1",
73711
+ "OidbSvc.0x88d_1_2",
73712
+ "OidbSvc.0x88d_7",
73713
+ "OidbSvc.0x899_0",
73714
+ "OidbSvc.0x899_9",
73715
+ "OidbSvc.0x89a_0",
73716
+ "OidbSvc.0x89b_1",
73717
+ "OidbSvc.0x8a0_0",
73718
+ "OidbSvc.0x8a1_0",
73719
+ "OidbSvc.0x8a1_7",
73720
+ "OidbSvc.0x8a4",
73721
+ "OidbSvc.0x8a8",
73722
+ "OidbSvc.0x8ba",
73723
+ "OidbSvc.0x8f1",
73724
+ "OidbSvc.0x9fa",
73725
+ "OidbSvc.0xb3c",
73726
+ "OidbSvc.0xb3c_1",
73727
+ "OidbSvc.0xb3c_2",
73728
+ "OidbSvc.0xb3c_3",
73729
+ "OidbSvc.0xb3c_4",
73730
+ "OidbSvc.0xb3c_5",
73731
+ "OidbSvc.0xb3c_6",
73732
+ "OidbSvc.0xb3c_7",
73733
+ "OidbSvc.0xb3c_8",
73734
+ "OidbSvc.0xb3c_add",
73735
+ "OidbSvc.0xb3c_delete",
73736
+ "OidbSvc.0xb3c_get_by_id",
73737
+ "OidbSvc.0xb3c_get_done",
73738
+ "OidbSvc.0xb3c_get_done_count",
73739
+ "OidbSvc.0xb3c_get_undone",
73740
+ "OidbSvc.0xb3c_share",
73741
+ "OidbSvc.0xb3c_update",
73742
+ "OidbSvc.0xb3c_update_5",
73743
+ "OidbSvc.0xb77_34",
73744
+ "OidbSvc.0xb77_46",
73745
+ "OidbSvc.0xb77_48",
73746
+ "OidbSvc.0xb77_9",
73747
+ "OidbSvc.0xbbb",
73748
+ "OidbSvc.0xbcb",
73749
+ "OidbSvc.0xbe8",
73750
+ "OidbSvc.0xc26_0",
73751
+ "OidbSvc.0xc33_42220",
73752
+ "OidbSvc.0xc6b",
73753
+ "OidbSvc.0xcd5",
73754
+ "OidbSvc.0xcdd",
73755
+ "OidbSvc.0xd69",
73756
+ "OidbSvc.0xdc2_34",
73757
+ "OidbSvc.0xdc2_9",
73758
+ "OidbSvc.0xe27",
73759
+ "OidbSvc.0xe3e",
73760
+ "OidbSvc.0xe61",
73761
+ "OidbSvc.0xe63_1",
73762
+ "OidbSvc.0xe72",
73763
+ "OidbSvc.0xef0_1",
73764
+ "OidbSvc.0xf7e_1",
73765
+ "OidbSvc.oidb_0x758",
73766
+ "OidbSvcTRPCTcp.0x758_1",
73767
+ "OidbSvcTRPCTcp.0xf67_1",
73768
+ "OidbSvcTcp.0x102a",
73769
+ "OidbSvcTcp.0x88d_0",
73770
+ "OidbSvcTcp.0x88d_1",
73771
+ "OidbSvcTcp.0xef0_1",
73772
+ "OidbSvcTrpcTcp.0x1017_1",
73773
+ "OidbSvcTrpcTcp.0x101b_1",
73774
+ "OidbSvcTrpcTcp.0x101e_1",
73775
+ "OidbSvcTrpcTcp.0x101e_2",
73593
73776
  "OidbSvcTrpcTcp.0x102a_0",
73594
- "OidbSvcTrpcTcp.0xfd4_1",
73595
- "OidbSvcTrpcTcp.0xfe5_2",
73596
- "OidbSvcTrpcTcp.0x5cf_11",
73777
+ "OidbSvcTrpcTcp.0x102a_1",
73778
+ "OidbSvcTrpcTcp.0x102a_3",
73779
+ "OidbSvcTrpcTcp.0x105b_1",
73780
+ "OidbSvcTrpcTcp.0x1092_0",
73597
73781
  "OidbSvcTrpcTcp.0x10c0_1",
73598
73782
  "OidbSvcTrpcTcp.0x10c0_2",
73599
73783
  "OidbSvcTrpcTcp.0x10c8_1",
73600
- "OidbSvcTrpcTcp.0x972_6",
73601
- "OidbSvcTrpcTcp.0x8fc_3",
73602
- "OidbSvcTrpcTcp.0x6d6_2",
73603
- "OidbSvcTrpcTcp.0x6d6_3",
73604
- "OidbSvcTrpcTcp.0xe37_1700",
73605
- "OidbSvcTrpcTcp.0xe37_1200",
73606
- "OidbSvcTrpcTcp.0x11c5_100",
73607
- "OidbSvcTrpcTcp.0x11c5_200",
73784
+ "OidbSvcTrpcTcp.0x10c8_2",
73785
+ "OidbSvcTrpcTcp.0x10d8_1",
73786
+ "OidbSvcTrpcTcp.0x10db_1",
73787
+ "OidbSvcTrpcTcp.0x10e4_1",
73788
+ "OidbSvcTrpcTcp.0x10ed_1",
73789
+ "OidbSvcTrpcTcp.0x10f4_1",
73790
+ "OidbSvcTrpcTcp.0x1100_1",
73791
+ "OidbSvcTrpcTcp.0x1102_1",
73792
+ "OidbSvcTrpcTcp.0x1103_1",
73793
+ "OidbSvcTrpcTcp.0x1105_1",
73794
+ "OidbSvcTrpcTcp.0x1107_1",
73795
+ "OidbSvcTrpcTcp.0x110d_1",
73796
+ "OidbSvcTrpcTcp.0x112a_1",
73797
+ "OidbSvcTrpcTcp.0x112a_2",
73798
+ "OidbSvcTrpcTcp.0x112e_1",
73799
+ "OidbSvcTrpcTcp.0x1130_1",
73800
+ "OidbSvcTrpcTcp.0x116c_1",
73801
+ "OidbSvcTrpcTcp.0x116d_1",
73802
+ "OidbSvcTrpcTcp.0x1194_1",
73608
73803
  "OidbSvcTrpcTcp.0x11c4_100",
73609
73804
  "OidbSvcTrpcTcp.0x11c4_200",
73805
+ "OidbSvcTrpcTcp.0x11c5_100",
73806
+ "OidbSvcTrpcTcp.0x11c5_200",
73610
73807
  "OidbSvcTrpcTcp.0x11e9_100",
73611
73808
  "OidbSvcTrpcTcp.0x11e9_200",
73809
+ "OidbSvcTrpcTcp.0x11ea_200",
73810
+ "OidbSvcTrpcTcp.0x11ec_1",
73811
+ "OidbSvcTrpcTcp.0x121e_0",
73812
+ "OidbSvcTrpcTcp.0x1224_0",
73813
+ "OidbSvcTrpcTcp.0x1225_0",
73814
+ "OidbSvcTrpcTcp.0x123c_1",
73815
+ "OidbSvcTrpcTcp.0x1250_0",
73816
+ "OidbSvcTrpcTcp.0x1258_1",
73817
+ "OidbSvcTrpcTcp.0x125b_500",
73818
+ "OidbSvcTrpcTcp.0x1262_19",
73612
73819
  "OidbSvcTrpcTcp.0x126d_200",
73613
73820
  "OidbSvcTrpcTcp.0x126e_200",
73821
+ "OidbSvcTrpcTcp.0x1277_0",
73822
+ "OidbSvcTrpcTcp.0x127a_0",
73823
+ "OidbSvcTrpcTcp.0x1289_1",
73824
+ "OidbSvcTrpcTcp.0x12a9_200",
73825
+ "OidbSvcTrpcTcp.0x12b1_0",
73826
+ "OidbSvcTrpcTcp.0x55f_0",
73827
+ "OidbSvcTrpcTcp.0x587_74",
73828
+ "OidbSvcTrpcTcp.0x5cf_11",
73829
+ "OidbSvcTrpcTcp.0x644_1",
73830
+ "OidbSvcTrpcTcp.0x6d6_2",
73831
+ "OidbSvcTrpcTcp.0x6d6_3",
73832
+ "OidbSvcTrpcTcp.0x6d8_1",
73833
+ "OidbSvcTrpcTcp.0x6d9_2",
73834
+ "OidbSvcTrpcTcp.0x6d9_4",
73835
+ "OidbSvcTrpcTcp.0x758_1",
73836
+ "OidbSvcTrpcTcp.0x787_1",
73837
+ "OidbSvcTrpcTcp.0x7c1_1",
73838
+ "OidbSvcTrpcTcp.0x7c2_5",
73839
+ "OidbSvcTrpcTcp.0x88d_0",
73840
+ "OidbSvcTrpcTcp.0x88d_111",
73841
+ "OidbSvcTrpcTcp.0x88d_14",
73842
+ "OidbSvcTrpcTcp.0x899_0",
73843
+ "OidbSvcTrpcTcp.0x899_1",
73844
+ "OidbSvcTrpcTcp.0x899_9",
73845
+ "OidbSvcTrpcTcp.0x89a_0",
73846
+ "OidbSvcTrpcTcp.0x89a_15",
73847
+ "OidbSvcTrpcTcp.0x8a0_1",
73848
+ "OidbSvcTrpcTcp.0x8a1_7",
73849
+ "OidbSvcTrpcTcp.0x8f9_14",
73850
+ "OidbSvcTrpcTcp.0x8fc_3",
73851
+ "OidbSvcTrpcTcp.0x901f_1",
73852
+ "OidbSvcTrpcTcp.0x902e_1",
73853
+ "OidbSvcTrpcTcp.0x9076_1",
73854
+ "OidbSvcTrpcTcp.0x9078_1",
73855
+ "OidbSvcTrpcTcp.0x9079_1",
73856
+ "OidbSvcTrpcTcp.0x911a_19",
73857
+ "OidbSvcTrpcTcp.0x911a_22",
73858
+ "OidbSvcTrpcTcp.0x9124_0",
73859
+ "OidbSvcTrpcTcp.0x9127_1",
73860
+ "OidbSvcTrpcTcp.0x9144_1",
73861
+ "OidbSvcTrpcTcp.0x9176_1",
73862
+ "OidbSvcTrpcTcp.0x917b_1",
73863
+ "OidbSvcTrpcTcp.0x91b6_1",
73864
+ "OidbSvcTrpcTcp.0x929b_0",
73865
+ "OidbSvcTrpcTcp.0x92d5_0",
73866
+ "OidbSvcTrpcTcp.0x92e3_0",
73867
+ "OidbSvcTrpcTcp.0x92e4_0",
73868
+ "OidbSvcTrpcTcp.0x92eb_0",
73869
+ "OidbSvcTrpcTcp.0x930d_0",
73870
+ "OidbSvcTrpcTcp.0x930e_0",
73871
+ "OidbSvcTrpcTcp.0x93d7_1",
73872
+ "OidbSvcTrpcTcp.0x9409_10",
73873
+ "OidbSvcTrpcTcp.0x9409_11",
73874
+ "OidbSvcTrpcTcp.0x9409_12",
73875
+ "OidbSvcTrpcTcp.0x9409_13",
73876
+ "OidbSvcTrpcTcp.0x9409_14",
73877
+ "OidbSvcTrpcTcp.0x9409_15",
73878
+ "OidbSvcTrpcTcp.0x9409_16",
73879
+ "OidbSvcTrpcTcp.0x9409_18",
73880
+ "OidbSvcTrpcTcp.0x9409_7",
73881
+ "OidbSvcTrpcTcp.0x9559_0",
73882
+ "OidbSvcTrpcTcp.0x955f_1",
73883
+ "OidbSvcTrpcTcp.0x9560_1",
73884
+ "OidbSvcTrpcTcp.0x962a_1",
73885
+ "OidbSvcTrpcTcp.0x9689_1",
73886
+ "OidbSvcTrpcTcp.0x972_6",
73887
+ "OidbSvcTrpcTcp.0x9a2_12",
73888
+ "OidbSvcTrpcTcp.0x9a2_8",
73889
+ "OidbSvcTrpcTcp.0xa80_1",
73890
+ "OidbSvcTrpcTcp.0xaf6_0",
73891
+ "OidbSvcTrpcTcp.0xb77_57",
73892
+ "OidbSvcTrpcTcp.0xcd5",
73893
+ "OidbSvcTrpcTcp.0xdc2_34",
73894
+ "OidbSvcTrpcTcp.0xe37_1200",
73895
+ "OidbSvcTrpcTcp.0xe37_1700",
73896
+ "OidbSvcTrpcTcp.0xe37_700",
73897
+ "OidbSvcTrpcTcp.0xe37_800",
73898
+ "OidbSvcTrpcTcp.0xf55_1",
73899
+ "OidbSvcTrpcTcp.0xf57_1",
73900
+ "OidbSvcTrpcTcp.0xf57_106",
73901
+ "OidbSvcTrpcTcp.0xf57_9",
73902
+ "OidbSvcTrpcTcp.0xf59_1",
73903
+ "OidbSvcTrpcTcp.0xf59_2",
73904
+ "OidbSvcTrpcTcp.0xf5b_1",
73905
+ "OidbSvcTrpcTcp.0xf5d_1",
73906
+ "OidbSvcTrpcTcp.0xf5d_11",
73907
+ "OidbSvcTrpcTcp.0xf65_1",
73908
+ "OidbSvcTrpcTcp.0xf65_10",
73909
+ "OidbSvcTrpcTcp.0xf67_1",
73910
+ "OidbSvcTrpcTcp.0xf67_5",
73911
+ "OidbSvcTrpcTcp.0xf6e_1",
73912
+ "OidbSvcTrpcTcp.0xf88_1",
73913
+ "OidbSvcTrpcTcp.0xf89_1",
73914
+ "OidbSvcTrpcTcp.0xfa5_1",
73915
+ "OidbSvcTrpcTcp.0xfc9_1",
73916
+ "OidbSvcTrpcTcp.0xfd4_1",
73917
+ "OidbSvcTrpcTcp.0xfe1",
73918
+ "OidbSvcTrpcTcp.0xfe1_2",
73919
+ "OidbSvcTrpcTcp.0xfe1_8",
73920
+ "OidbSvcTrpcTcp.0xfe4_2",
73921
+ "OidbSvcTrpcTcp.0xfe5_2",
73922
+ "OidbSvcTrpcTcp.0xfe7_2",
73923
+ "OidbSvcTrpcTcp.0xfe7_3",
73924
+ "OidbSvcTrpcTcp.0xfe7_4",
73925
+ "OidbSvc_device.0x633",
73926
+ "OidbSvc_device.0x9f5",
73927
+ "PbMessageSvc.PbUnReadMsgSeq",
73928
+ "ProfileService.GetSimpleInfo",
73929
+ "ProfileService.GroupMngReq",
73930
+ "ProfileService.Pb.ReqSystemMsgAction.Group",
73931
+ "ProfileService.Pb.ReqSystemMsgNew.Group",
73932
+ "ProfileService.ReqBatchProcess",
73933
+ "ProfileService.SimpleInfo",
73934
+ "ProfileService.getGroupInfoReq",
73935
+ "PttStore.GroupPttDown",
73936
+ "PubAccountSvc.get_follow_list",
73937
+ "PushService.settoken",
73938
+ "QChannelSvr.trpc.qchannel.commreader.ComReader.BatchGetFeedDetail",
73939
+ "QChannelSvr.trpc.qchannel.commwriter.ComWriter.DoComment",
73940
+ "QChannelSvr.trpc.qchannel.commwriter.ComWriter.DoReply",
73941
+ "QChannelSvr.trpc.qchannel.commwriter.ComWriter.PublishFeed",
73942
+ "QQAIOMediaSvc.share_trans_check",
73943
+ "QQConnectLogin.auth",
73944
+ "QQConnectLogin.auth_emp",
73945
+ "QQConnectLogin.get_promote_page",
73946
+ "QQConnectLogin.get_promote_page_emp",
73947
+ "QQConnectLogin.pre_auth",
73948
+ "QQConnectLogin.pre_auth_emp",
73949
+ "QQConnectLogin.submit_promote_page",
73950
+ "QQConnectLogin.submit_promote_page_emp",
73951
+ "QQLBSShareSvc.room_operation",
73952
+ "QQRTCSvc.RoomManager-GetRoomInfo",
73953
+ "QQStranger.FeedPlazaSvr.SsoFeedPublish",
73954
+ "QQStranger.FeedSvr.SsoFeedPublish",
73955
+ "QQStranger.InteractiveMsgSvr.SsoSendInterMsg",
73956
+ "QQStranger.UserInfo.SsoBatchGetMiniUserInfo",
73957
+ "QQStranger.UserInfo.SsoGetMiniUserInfo",
73958
+ "QQStranger.UserInfo.SsoSetMiniUserInfo",
73959
+ "QQStranger.login_svr.SsoLoginInfoReport",
73960
+ "QSec.AVEng",
73961
+ "RegPrxySvc.infoLogin",
73962
+ "RegPrxySvc.infoSync",
73963
+ "ResourceConfig.ClientReq",
73964
+ "ResourceConfig.GetResourceReq",
73965
+ "SQQzoneSvc.Custom.getFacade",
73966
+ "SQQzoneSvc.GetCate",
73967
+ "SQQzoneSvc.addComment",
73968
+ "SQQzoneSvc.addReply",
73969
+ "SQQzoneSvc.elaborateFeedReport",
73970
+ "SQQzoneSvc.forward",
73971
+ "SQQzoneSvc.get",
73972
+ "SQQzoneSvc.getAIONewestFeeds",
73973
+ "SQQzoneSvc.getActiveFeeds",
73974
+ "SQQzoneSvc.getMainPage",
73975
+ "SQQzoneSvc.getPhotoComment",
73976
+ "SQQzoneSvc.getPhotoWall",
73977
+ "SQQzoneSvc.getProfile",
73978
+ "SQQzoneSvc.getProfileFeeds",
73979
+ "SQQzoneSvc.getUndealCount",
73980
+ "SQQzoneSvc.getVisitorNotify",
73981
+ "SQQzoneSvc.get_all_feedsphoto_ex",
73982
+ "SQQzoneSvc.like",
73983
+ "SQQzoneSvc.mobileqboss.get",
73984
+ "SQQzoneSvc.photo",
73985
+ "SQQzoneSvc.preGetPassiveFeeds",
73986
+ "SQQzoneSvc.publishmood",
73987
+ "SQQzoneSvc.shuoshuo",
73988
+ "SecuritySvc.GetConfig",
73989
+ "SsoSnsSession.Cmd0x3_SubCmd0x1_FuncGetBlockList",
73990
+ "StatSvc.GetDevLoginInfo",
73991
+ "StatSvc.GetOnlineStatus",
73992
+ "StatSvc.SetStatusFromClient",
73993
+ "StatSvc.SimpleGet",
73994
+ "StatSvc.register",
73995
+ "SummaryCard.ReqSummaryCard",
73996
+ "VisitorSvc.ReqDeleteVisitorRecord",
73997
+ "VisitorSvc.ReqFavorite",
73998
+ "WalletGestureSvc.GetPassword",
73999
+ "WalletGestureSvc.GetSignV2",
74000
+ "WalletGestureSvc.SetPassword",
74001
+ "account.RequestQueryQQMobileContactsV3",
74002
+ "friendlist.AddFriendReq",
74003
+ "friendlist.GetFriendListReq",
74004
+ "friendlist.GetLastLoginInfoReq",
74005
+ "friendlist.GetMultiTroopInfoReq",
74006
+ "friendlist.GetSimpleOnlineFriendInfoReq",
74007
+ "friendlist.GetTroopAppointRemarkReq",
74008
+ "friendlist.GetTroopListReqV2",
74009
+ "friendlist.GetTroopMemberList",
74010
+ "friendlist.GetTroopMemberListReq",
74011
+ "friendlist.ModifyGroupInfoReq",
74012
+ "friendlist.addFriend",
74013
+ "friendlist.getFriendGroupList",
74014
+ "friendlist.getTroopMemberList",
74015
+ "gcbindgroupsso.get_appid",
74016
+ "gcbindgroupsso.unbind_group",
74017
+ "group_member_card.get_group_member_card_info",
74018
+ "group_member_statistic.get_group_member_statistic",
74019
+ "miniapp.trpc.minigame.sdk_qgroup_svr.sdk_qgroup_svr.JoinGroup",
74020
+ "oidb_0x42e_3",
74021
+ "oidb_0x43c_4",
74022
+ "oidb_0x43c_5",
74023
+ "oidb_0x5d0_1",
74024
+ "oidb_0x5d6_19",
74025
+ "oidb_0x5d6_21",
74026
+ "oidb_0x7a2_0",
74027
+ "oidb_0x7c4_0",
74028
+ "oidb_0x7df_3",
74029
+ "oidb_0x9045_1",
74030
+ "oidb_0x9072_0",
74031
+ "oidb_0xcf3_0",
74032
+ "oidb_0xcf4_0",
74033
+ "oidb_0xd9c_11",
74034
+ "oidb_0xdc2_34",
74035
+ "oidb_0xe37_1200",
74036
+ "oidb_0xe37_800",
74037
+ "oidb_0xe61_1",
74038
+ "oidb_0xe8c_0",
74039
+ "oidb_0xeb1_1",
74040
+ "oidb_0xf7e_1",
74041
+ "oidb_0xfd4_1",
74042
+ "qidianservice.135",
74043
+ "qidianservice.207",
74044
+ "qidianservice.269",
74045
+ "qidianservice.290",
74046
+ "qzoneh5.h5.wnshtml",
74047
+ "trpc.QQService.CommonLogic.StatusService.SsoGetLikeList",
74048
+ "trpc.commercial.dataworks.UserActionReport_sso.SsoReport",
74049
+ "trpc.down.intercept.Intercept.SsoGetDownloadTips",
74050
+ "trpc.down.intercept.Intercept.SsoGetInterceptFile",
74051
+ "trpc.down.joint_operation_game_intercept.JointOperationGameIntercept.SsoCheck",
74052
+ "trpc.down.joint_operation_game_intercept.JointOperationGameIntercept.SsoQueryConfig",
74053
+ "trpc.ecom.api_gateway.ApiGateway.SsoForward",
74054
+ "trpc.g_qqrtc.qq_mav_room_state_read.GetRoomState.SsoGetInfoByUin",
74055
+ "trpc.gc_indust.device_report.SsoHome.SsoHomeReport",
73614
74056
  "trpc.group.long_msg_interface.MsgService.SsoRecvLongMsg",
73615
- "OidbSvcTrpcTcp.0x88d_0"
74057
+ "trpc.group.long_msg_interface.MsgService.SsoSendLongMsg",
74058
+ "trpc.group_pro.msgproxy.sendmsg",
74059
+ "trpc.group_pro.synclogic.SyncLogic.SyncFirstView",
74060
+ "trpc.login.ecdh.EcdhService.SsoKeyExchange",
74061
+ "trpc.login.ecdh.EcdhService.SsoNTLoginAuthCodeLogin",
74062
+ "trpc.login.ecdh.EcdhService.SsoNTLoginAuthLogin",
74063
+ "trpc.login.ecdh.EcdhService.SsoNTLoginAuthNewDevice",
74064
+ "trpc.login.ecdh.EcdhService.SsoNTLoginCheckA1List",
74065
+ "trpc.login.ecdh.EcdhService.SsoNTLoginCheckGateWayCode",
74066
+ "trpc.login.ecdh.EcdhService.SsoNTLoginCheckSms",
74067
+ "trpc.login.ecdh.EcdhService.SsoNTLoginCheckThirdCode",
74068
+ "trpc.login.ecdh.EcdhService.SsoNTLoginEasyLogin",
74069
+ "trpc.login.ecdh.EcdhService.SsoNTLoginEasyLoginUnusualDevice",
74070
+ "trpc.login.ecdh.EcdhService.SsoNTLoginGetSaltList",
74071
+ "trpc.login.ecdh.EcdhService.SsoNTLoginGetSms",
74072
+ "trpc.login.ecdh.EcdhService.SsoNTLoginOptimusLogin",
74073
+ "trpc.login.ecdh.EcdhService.SsoNTLoginPasswordLogin",
74074
+ "trpc.login.ecdh.EcdhService.SsoNTLoginPasswordLoginNewDevice",
74075
+ "trpc.login.ecdh.EcdhService.SsoNTLoginPasswordLoginUnusualDevice",
74076
+ "trpc.login.ecdh.EcdhService.SsoNTLoginRapidLogin",
74077
+ "trpc.login.ecdh.EcdhService.SsoNTLoginRefreshA2",
74078
+ "trpc.login.ecdh.EcdhService.SsoNTLoginRefreshTicket",
74079
+ "trpc.login.ecdh.EcdhService.SsoNTLoginTGTExchangeFastLogin",
74080
+ "trpc.login.ecdh.EcdhService.SsoOIDB0x916a",
74081
+ "trpc.login.ecdh.EcdhService.SsoOIDB0x916b",
74082
+ "trpc.login.ecdh.EcdhService.SsoOIDB0x916c",
74083
+ "trpc.login.ecdh.EcdhService.SsoOIDB0x916d",
74084
+ "trpc.login.ecdh.EcdhService.SsoQRLoginAuthQr",
74085
+ "trpc.login.ecdh.EcdhService.SsoQRLoginCancleQr",
74086
+ "trpc.login.ecdh.EcdhService.SsoQRLoginGenQr",
74087
+ "trpc.login.ecdh.EcdhService.SsoQRLoginRejectQr",
74088
+ "trpc.login.ecdh.EcdhService.SsoQRLoginScanQr",
74089
+ "trpc.lplan.feed_svr.StatusWrite.SsoComment",
74090
+ "trpc.lplan.feed_svr.StatusWrite.SsoPostStatus",
74091
+ "trpc.lplan.feed_svr.StatusWrite.SsoReply",
74092
+ "trpc.lplan.like_svr.Like.SsoDoLike",
74093
+ "trpc.lplan.map_svr.Map.SsoReportLocation",
74094
+ "trpc.lplan.user_manager_svr.User.SsoLogin",
74095
+ "trpc.lplan.user_manager_svr.User.SsoSetProfile",
74096
+ "trpc.metaverse.mob_proxy_svr.MobProxy.SsoHandle",
74097
+ "trpc.msg.msg_svc.MsgService.SsoC2CRecallMsg",
74098
+ "trpc.msg.msg_svc.MsgService.SsoGetPeerSeq",
74099
+ "trpc.msg.msg_svc.MsgService.SsoReadedReport",
74100
+ "trpc.msg.olpush.OlPushService.SsoPushAck",
74101
+ "trpc.msg.register_proxy.RegisterProxy.PushParams",
74102
+ "trpc.msg.register_proxy.RegisterProxy.SsoInfoSync",
74103
+ "trpc.o3.ecdh_access.EcdhAccess.SsoEstablishShareKey",
74104
+ "trpc.o3.ecdh_access.EcdhAccess.SsoSecureA2Access",
74105
+ "trpc.o3.ecdh_access.EcdhAccess.SsoSecureA2Establish",
74106
+ "trpc.o3.ecdh_access.EcdhAccess.SsoSecureAccess",
74107
+ "trpc.o3.report.Report.SsoReport",
74108
+ "trpc.passwd.manager.PasswdManager.SetPasswd",
74109
+ "trpc.passwd.manager.PasswdManager.VerifyPasswd",
74110
+ "trpc.qlive.qlive_proxy_svr.TrpcProxy.*",
74111
+ "trpc.qlive.relationchain_svr.RelationchainSvr.Follow",
74112
+ "trpc.qlive.word_svr.WordSvr.NewPublicChat",
74113
+ "trpc.qmeta.mob_proxy_svr.MobProxy.SsoHandle",
74114
+ "trpc.qpay.encryptedtransfer.Encryption.SsoUINEncrypt",
74115
+ "trpc.qpay.midas_order.Order.SsoMakeOrder",
74116
+ "trpc.qpay.red_pack_skin.Skin.SsoAddSkin",
74117
+ "trpc.qpay.sso.web.Do",
74118
+ "trpc.qq_new_tech.status_svc.StatusService.Register",
74119
+ "trpc.qq_new_tech.status_svc.StatusService.SetStatus",
74120
+ "trpc.qq_new_tech.status_svc.StatusService.SsoHeartBeat",
74121
+ "trpc.qq_new_tech.status_svc.StatusService.UnRegister",
74122
+ "trpc.qqhb.qqhb_proxy.Handler.sso_handle",
74123
+ "trpc.qqstranger.common_proxy.CommonProxy.SsoHandle",
74124
+ "trpc.qqva.vipdata.Vipdata.SsoGetUserData",
74125
+ "trpc.springfestival.redpacket.LuckyBag.SsoSubmitGrade",
74126
+ "wtlogin.device_lock",
74127
+ "wtlogin.exchange_emp",
74128
+ "wtlogin.log_report",
74129
+ "wtlogin.login",
74130
+ "wtlogin.name2uin",
74131
+ "wtlogin.qrlogin",
74132
+ "wtlogin.register",
74133
+ "wtlogin.trans_emp",
74134
+ "wtlogin_device.login",
74135
+ "wtlogin_device.tran_sim_emp"
73616
74136
  ]);
73617
74137
  async sendCommand(cmd, payload, encryptType, timeout = 15e3) {
73618
74138
  const seq = this.nextSeq();
@@ -74666,7 +75186,7 @@ function getCurrentLoginState() {
74666
75186
  }
74667
75187
  function startIpcServer() {
74668
75188
  const pipeName = process.env.LL_IPC_PIPE;
74669
- if (!pipeName || process.platform !== "win32") return;
75189
+ if (!pipeName) return;
74670
75190
  if (server) return;
74671
75191
  server = net.createServer((socket) => {
74672
75192
  socket.setEncoding("utf8");
@@ -74682,13 +75202,36 @@ function startIpcServer() {
74682
75202
  });
74683
75203
  socket.on("error", () => {});
74684
75204
  });
74685
- const pipePath = `\\\\.\\pipe\\${pipeName}`;
74686
- server.listen(pipePath, () => {
74687
- console.log(`[LL_IPC] listening on ${pipePath}`);
75205
+ let listenPath;
75206
+ if (process.platform === "win32") listenPath = `\\\\.\\pipe\\${pipeName}`;
75207
+ else {
75208
+ listenPath = pipeName;
75209
+ try {
75210
+ fs$2.unlinkSync(listenPath);
75211
+ } catch {}
75212
+ }
75213
+ server.listen(listenPath, () => {
75214
+ console.log(`[LL_IPC] listening on ${listenPath}`);
74688
75215
  });
74689
75216
  server.on("error", (e) => {
74690
75217
  console.warn(`[LL_IPC] server error: ${e.message}`);
74691
75218
  });
75219
+ if (process.platform !== "win32") {
75220
+ const cleanup = () => {
75221
+ try {
75222
+ fs$2.unlinkSync(listenPath);
75223
+ } catch {}
75224
+ };
75225
+ process.once("exit", cleanup);
75226
+ process.once("SIGINT", () => {
75227
+ cleanup();
75228
+ process.exit(0);
75229
+ });
75230
+ process.once("SIGTERM", () => {
75231
+ cleanup();
75232
+ process.exit(0);
75233
+ });
75234
+ }
74692
75235
  }
74693
75236
  function handleLine(socket, line) {
74694
75237
  let msg;
@@ -74741,7 +75284,7 @@ var QQProtocolBase = class extends Service {
74741
75284
  const { pmhqHost, pmhqPort } = this.getPMHQHostPort();
74742
75285
  this.httpUrl = `http://${pmhqHost}:${pmhqPort}/`;
74743
75286
  this.wsUrl = `ws://${pmhqHost}:${pmhqPort}/ws`;
74744
- if (process.env.QQ_USE_PMHQ) this.connectWebSocket().then();
75287
+ if (isPmhqMode()) this.connectWebSocket().then();
74745
75288
  }
74746
75289
  maybeEmitOnline() {
74747
75290
  if (this.onlineEmitted) return;
@@ -74751,6 +75294,22 @@ var QQProtocolBase = class extends Service {
74751
75294
  this.ctx.parallel("qq/online");
74752
75295
  }
74753
75296
  /**
75297
+ * emit qq/online 之后 ntUserApi 才会随插件加载. 用 ctx.inject 等它 ready 再拉一次 nick;
75298
+ * 拿到就写 selfInfo.nick, 失败就 warn 一下留空。
75299
+ */
75300
+ scheduleFetchSelfNick(myToken) {
75301
+ this.ctx.inject(["ntUserApi"], async (ctx) => {
75302
+ if (this.pmhqProbeToken !== myToken) return;
75303
+ try {
75304
+ const nick = await ctx.ntUserApi.getSelfNick(false);
75305
+ this.logger.info(`getSelfNick -> ${JSON.stringify(nick)}`);
75306
+ if (nick) selfInfo.nick = nick;
75307
+ } catch (e) {
75308
+ this.logger.warn(`getSelfNick threw: ${e.message}`);
75309
+ }
75310
+ });
75311
+ }
75312
+ /**
74754
75313
  * PMHQ 模式下 LLBot 是寄生在 QQ NT 上的,QQ NT 早就登录过了,开机时的 InfoSyncPush 也早处理完。
74755
75314
  * LLBot 想要群最新 seq(拉历史用)就得自己主动触发一次:发 SsoInfoSync,server 看到注册请求就回一发 InfoSyncPush。
74756
75315
  * isFirstRegisterProxyOnline=0 + 派生 guid(基于 uid,每个号固定)尽量避免和 QQ NT 的注册项冲突。
@@ -74772,7 +75331,9 @@ var QQProtocolBase = class extends Service {
74772
75331
  if (wasOnline) this.ctx.parallel("protocol/disconnect");
74773
75332
  }
74774
75333
  /**
74775
- * PMHQ 模式:周期 SsoHeartBeat 探测登录;同时挂 recv listener self uid/uin
75334
+ * PMHQ 模式:轮询 /health self uin/uid(DLL QQ 内存直接读 uin,
75335
+ * injector 侧扫 recv pb 抠 uid, 都写到 /health)。拿到 uin+uid 立即 emit online,
75336
+ * nick 通过 scheduleFetchSelfNick 异步等 ntUserApi 服务 ready 后再拉。
74776
75337
  * 重连后会被 onopen 再次调用,所以必须先 reset 旧状态再启动新一轮。
74777
75338
  */
74778
75339
  startPmhqLoginProbe() {
@@ -74781,20 +75342,27 @@ var QQProtocolBase = class extends Service {
74781
75342
  let warnedNotLoggedIn = false;
74782
75343
  const probe = async () => {
74783
75344
  if (this.pmhqProbeToken !== myToken) return;
74784
- const ntFriendApi = this.ctx.get("ntFriendApi");
74785
- if (ntFriendApi) try {
74786
- const info = (await ntFriendApi.getFriends(true)).friends.find((e) => e.isSelf);
75345
+ try {
75346
+ const resp = await fetch(`${this.httpUrl}health`);
75347
+ if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
75348
+ const health = await resp.json();
74787
75349
  if (this.pmhqProbeToken !== myToken) return;
74788
- selfInfo.uid = info.uid;
74789
- selfInfo.uin = info.uin.toString();
74790
- selfInfo.nick = info.nick;
74791
- if (!selfInfo.online) this.logger.info("QQ 登录成功");
74792
- selfInfo.online = true;
74793
- this.maybeEmitOnline();
75350
+ if (health.uin && health.uid) {
75351
+ selfInfo.uid = health.uid;
75352
+ selfInfo.uin = String(health.uin);
75353
+ this.ctx.logger.info(`Self info ${selfInfo.nick || "<pending>"}(${selfInfo.uin}) uid=${selfInfo.uid}`);
75354
+ if (!selfInfo.online) this.logger.info("QQ 登录成功");
75355
+ selfInfo.online = true;
75356
+ this.maybeEmitOnline();
75357
+ this.scheduleFetchSelfNick(myToken);
75358
+ } else if (!warnedNotLoggedIn) {
75359
+ this.logger.info("QQ 未登录,等待登录中...");
75360
+ warnedNotLoggedIn = true;
75361
+ }
74794
75362
  } catch (e) {
74795
75363
  if (this.pmhqProbeToken !== myToken) return;
74796
- if (!warnedNotLoggedIn && !e.message.includes("(QQ DLL not connected)")) {
74797
- this.logger.info("QQ 未登录,等待登录中...");
75364
+ if (!warnedNotLoggedIn) {
75365
+ this.logger.info("PMHQ /health probe failed (QQ 未启动?), 继续等待: %s", e.message);
74798
75366
  warnedNotLoggedIn = true;
74799
75367
  }
74800
75368
  }
@@ -78018,7 +78586,7 @@ async function onLoad() {
78018
78586
  };
78019
78587
  let lastQrCodeTime = 0;
78020
78588
  isDockerEnvironment();
78021
- const useDirectProtocol = !process.env.QQ_USE_PMHQ;
78589
+ const useDirectProtocol = !isPmhqMode();
78022
78590
  const printLoginQrCode = async () => {
78023
78591
  try {
78024
78592
  const data = await ctx.qqProtocol.getDirectLoginQrCode();
@@ -78105,17 +78673,12 @@ async function onLoad() {
78105
78673
  });
78106
78674
  startIpcServer();
78107
78675
  setLoginState({ state: "initializing" });
78108
- if (useDirectProtocol) {
78109
- console.log(`[mode] direct protocol -- QQ_USE_PMHQ=${JSON.stringify(process.env.QQ_USE_PMHQ)}`);
78110
- ctx.qqProtocol.initDirectClient().then(() => {
78111
- directLoginLoop();
78112
- }).catch((e) => {
78113
- ctx.logger.error("直连协议初始化失败 (initDirectClient):", e);
78114
- });
78115
- } else {
78116
- console.log("[mode] PMHQ hook mode -- 不会 init/preflight");
78117
- ctx.qqProtocol.startHook();
78118
- }
78676
+ if (useDirectProtocol) ctx.qqProtocol.initDirectClient().then(() => {
78677
+ directLoginLoop();
78678
+ }).catch((e) => {
78679
+ ctx.logger.error("直连协议初始化失败 (initDirectClient):", e);
78680
+ });
78681
+ else ctx.qqProtocol.startHook();
78119
78682
  });
78120
78683
  }
78121
78684
  process.on("unhandledRejection", (reason) => {