Compare commits

...
557 Commits
Author SHA1 Message Date
手瓜一十雪 db5bd5c8a4 chore: 1.3.2 version
release / check-version (push) Canceled after 0s
release / build-linux (arm64, linux) (push) Canceled after 0s
release / build-linux (x64, linux) (push) Canceled after 0s
release / build-win32 (x64, win32) (push) Canceled after 0s
release / release-napcat (push) Canceled after 0s
2024-05-11 14:42:49 +08:00
手瓜一十雪 ef94c2fe7c chore: remove debug code 2024-05-11 14:30:36 +08:00
手瓜一十雪 72a25ed8e1 docs: change fix image recv 2024-05-11 14:24:11 +08:00
手瓜一十雪 eb065e218f build: 1.3.2-beta7 2024-05-11 14:23:36 +08:00
手瓜一十雪 33426736fc docs: change 2024-05-11 13:51:01 +08:00
手瓜一十雪 896658d5ce build: 1.3.2-beta6 2024-05-11 13:45:41 +08:00
linyuchen b14135ed72 refactor: Use remote rkey 2024-05-11 13:43:07 +08:00
linyuchen a1baf2e32d Merge remote-tracking branch 'origin/main'
# Conflicts:
#	src/onebot11/action/extends/GetFriendWithCategory.ts
#	src/onebot11/action/types.ts
2024-05-11 13:42:05 +08:00
linyuchen f9aa2d3bce refactor: Use remote rkey 2024-05-11 13:41:09 +08:00
手瓜一十雪 c95d0e0696 build: 1.3.2-beta5 2024-05-11 13:34:04 +08:00
手瓜一十雪 ad4b84d446 build: 1.3.2-beta3 2024-05-11 13:10:34 +08:00
手瓜一十雪 3e27d5fcb0 fix:roboot file 2024-05-11 13:06:35 +08:00
手瓜一十雪 48a100f49a feat: reboot-uncomplete 2024-05-11 10:51:07 +08:00
linyuchen 698649f981 Merge remote-tracking branch 'origin/main' 2024-05-11 10:45:22 +08:00
手瓜一十雪 780078c3aa build: 1.3.0-beta2 2024-05-11 10:15:08 +08:00
手瓜一十雪 4c25e4ddee build: 1.3.2-beta1 2024-05-10 23:52:18 +08:00
手瓜一十雪 c0a5ac2ac5 feat: ServerRkeyWrapper 2024-05-10 23:40:07 +08:00
student_2333 0435409870 fix 2024-05-10 21:41:06 +08:00
student_2333 c521269409 fix: custom music card content 2024-05-10 21:38:39 +08:00
linyuchen 1e252b7e4c Merge remote-tracking branch 'origin/main'
# Conflicts:
#	src/core.lib/src/adapters/NodeIDependsAdapter.js
#	src/core.lib/src/adapters/NodeIDispatcherAdapter.js
#	src/core.lib/src/adapters/NodeIGlobalAdapter.js
#	src/core.lib/src/adapters/index.js
#	src/core.lib/src/apis/file.js
#	src/core.lib/src/apis/friend.js
#	src/core.lib/src/apis/group.js
#	src/core.lib/src/apis/index.js
#	src/core.lib/src/apis/msg.js
#	src/core.lib/src/apis/sign.js
#	src/core.lib/src/apis/user.js
#	src/core.lib/src/apis/webapi.js
#	src/core.lib/src/core.js
#	src/core.lib/src/data.js
#	src/core.lib/src/entities/cache.js
#	src/core.lib/src/entities/constructor.js
#	src/core.lib/src/entities/group.js
#	src/core.lib/src/entities/index.js
#	src/core.lib/src/entities/msg.js
#	src/core.lib/src/entities/notify.js
#	src/core.lib/src/entities/user.js
#	src/core.lib/src/external/hook.js
#	src/core.lib/src/index.js
#	src/core.lib/src/listeners/NodeIKernelBuddyListener.js
#	src/core.lib/src/listeners/NodeIKernelFileAssistantListener.js
#	src/core.lib/src/listeners/NodeIKernelGroupListener.js
#	src/core.lib/src/listeners/NodeIKernelLoginListener.js
#	src/core.lib/src/listeners/NodeIKernelMsgListener.js
#	src/core.lib/src/listeners/NodeIKernelProfileListener.js
#	src/core.lib/src/listeners/NodeIKernelRobotListener.js
#	src/core.lib/src/listeners/NodeIKernelSessionListener.js
#	src/core.lib/src/listeners/NodeIKernelStorageCleanListener.js
#	src/core.lib/src/listeners/index.js
#	src/core.lib/src/services/common.js
#	src/core.lib/src/services/index.js
#	src/core.lib/src/sessionConfig.js
#	src/core.lib/src/utils/config.js
#	src/core.lib/src/utils/db.js
#	src/core.lib/src/wrapper.js
2024-05-10 21:35:49 +08:00
linyuchen d72b1edc48 chore: build core.lib 2024-05-10 21:35:14 +08:00
手瓜一十雪 f7307e8e01 chore: sync core 2024-05-10 21:32:22 +08:00
手瓜一十雪 127905f04b docs: change 2024-05-10 20:29:37 +08:00
手瓜一十雪 261c6dabd5 feat: 扩展GetFriendCategory Api 2024-05-10 20:27:38 +08:00
手瓜一十雪 cae84bbf02 style: rename DataRuntime to WebUiDataRuntime 2024-05-10 17:55:29 +08:00
手瓜一十雪 cdb2bc52fa feat: add BuddyProfileLikeReq Type 2024-05-09 23:17:33 +08:00
手瓜一十雪 cd2972eee0 chore: sync core 2024-05-09 23:15:32 +08:00
手瓜一十雪 4036aa8d0e chore: version 2024-05-09 23:06:55 +08:00
手瓜一十雪 52c6927c44 chore: release script
release / check-version (push) Canceled after 0s
release / build-linux (arm64, linux) (push) Canceled after 0s
release / build-linux (x64, linux) (push) Canceled after 0s
release / build-win32 (x64, win32) (push) Canceled after 0s
release / release-napcat (push) Canceled after 0s
2024-05-09 18:46:32 +08:00
Version a16e0a21a2 chore:version change 2024-05-09 10:42:30 +00:00
手瓜一十雪 e796b21157 chore: version 2024-05-09 17:50:20 +08:00
手瓜一十雪 1c6bc478b4 build: 1.3.0-beta5 2024-05-09 17:05:11 +08:00
手瓜一十雪 98f39c6388 docs: change 2024-05-09 17:00:38 +08:00
手瓜一十雪 570c83571b build: 1.3.0-beta4 2024-05-09 16:55:38 +08:00
手瓜一十雪 c0c38d89e0 Merge branch 'main' of https://github.com/NapNeko/NapCatQQ 2024-05-09 16:55:12 +08:00
手瓜一十雪 b866cfc03c fix: Group Into Member Info 2024-05-09 16:54:32 +08:00
手瓜一十雪 28c2755b37 docs: change thank list 2024-05-09 15:29:31 +08:00
手瓜一十雪 57bfc5c73a docs: change version 2024-05-09 12:48:25 +08:00
手瓜一十雪 0f3f7d53a3 docs: change 2024-05-09 00:10:41 +08:00
手瓜一十雪 529e50fd7f build: 1.3.0-beta3 2024-05-08 22:34:01 +08:00
手瓜一十雪 2fa283f91d buid: 1.3.0-beta3 2024-05-08 22:33:00 +08:00
手瓜一十雪 029a9ade93 build: 1.3.0-beta2 2024-05-08 21:42:23 +08:00
手瓜一十雪 f1ca8b15c8 feat:webui finish 2024-05-08 21:40:30 +08:00
手瓜一十雪 4d8edd5da9 fix:webui config some value 2024-05-08 21:29:40 +08:00
手瓜一十雪 6c63990653 fix: redirect html 2024-05-08 21:12:03 +08:00
手瓜一十雪 5b521409c6 fix: asset not load 2024-05-08 21:00:53 +08:00
手瓜一十雪 3268fc1014 fix: QQ Login Check 2024-05-08 20:54:43 +08:00
手瓜一十雪 19afb4941b feat: webui auth 2024-05-08 20:33:48 +08:00
手瓜一十雪 40e5111d41 Merge branch 'main' of https://github.com/NapNeko/NapCatQQ 2024-05-08 20:11:30 +08:00
手瓜一十雪 a3a40e1e74 feat: webui finish without auth 2024-05-08 20:10:33 +08:00
手瓜一十雪 101caa6826 docs: add qrcode expired 2024-05-08 20:01:19 +08:00
手瓜一十雪 875fed8d77 fix: qrcode expired try 2024-05-08 19:59:42 +08:00
手瓜一十雪 69e28eb000 feat: qrcode expired try 2024-05-08 19:43:33 +08:00
手瓜一十雪 e5d3a8360c fix:config 2024-05-08 18:45:45 +08:00
手瓜一十雪 4545d9285b feat: webui finish!! 2024-05-08 18:37:11 +08:00
手瓜一十雪 6702024805 fix: webui getConfig 2024-05-08 18:31:30 +08:00
手瓜一十雪 78bad4842b style: webui 2024-05-08 18:24:24 +08:00
手瓜一十雪 b9a913cfed feat: Ui Config 2024-05-08 18:11:38 +08:00
手瓜一十雪 6f5a6f353f feat: get config 2024-05-08 15:42:22 +08:00
手瓜一十雪 790c4f589d feat: Login HeartBeat 2024-05-08 15:07:20 +08:00
手瓜一十雪 cd1bd3461f fix: GetQuickList 2024-05-08 14:46:51 +08:00
手瓜一十雪 0280dcd6a8 fix: webui Confi&webui Login 2024-05-08 14:29:18 +08:00
手瓜一十雪 fc337292bc feat: add QQLogin 2024-05-07 22:51:43 +08:00
手瓜一十雪 fb1daa0e21 fix 2024-05-07 22:45:36 +08:00
手瓜一十雪 579b9dc0c2 fix: WebUiConfig 2024-05-07 22:44:55 +08:00
手瓜一十雪 dedd0be352 feat:QQLogin Api 2024-05-07 22:35:15 +08:00
手瓜一十雪 1c7d9c3513 fix:webui login 2024-05-07 22:26:17 +08:00
手瓜一十雪 0c7dfe2af4 fix 2024-05-07 22:16:11 +08:00
手瓜一十雪 8d1351a8a3 fix:login 2024-05-07 22:15:07 +08:00
手瓜一十雪 e6e68a6036 feat: signCredential 2024-05-07 22:11:52 +08:00
手瓜一十雪 24658edc45 fix:webui auth ratelimit 2024-05-07 22:04:21 +08:00
手瓜一十雪 09eaa3116a feat:fix 2024-05-07 21:47:52 +08:00
手瓜一十雪 e9bff466b5 fix:port use 2024-05-07 21:24:49 +08:00
手瓜一十雪 5d77f50160 feat:webui-test 2024-05-07 21:17:31 +08:00
手瓜一十雪 2ab91e363f feat: auth api router 2024-05-07 21:06:04 +08:00
手瓜一十雪 34d881426f fear: webui quick login 2024-05-07 20:50:25 +08:00
手瓜一十雪 13ecaa0ad4 feat:webui log 2024-05-07 20:08:59 +08:00
手瓜一十雪 ce6185b1f7 feat: webui set config 2024-05-07 19:57:23 +08:00
手瓜一十雪 2cfde6b75a fix: webui not login get config 2024-05-07 19:55:11 +08:00
手瓜一十雪 37d0354751 feat: webui OB11Config 2024-05-07 19:48:25 +08:00
linyuchen 0a0edcf203 build: v1.3.0-beta1 2024-05-07 16:28:28 +08:00
linyuchen d6aad2ea28 build-1.3.0-beta1 2024-05-07 16:27:26 +08:00
linyuchen 63084506ee chore(build): Update core.lib 2024-05-07 16:26:52 +08:00
手瓜一十雪 c5d313574f feat: webui OB11Config 2024-05-07 12:31:30 +08:00
手瓜一十雪 caab998212 feat: webui getQrcode 2024-05-07 12:23:58 +08:00
linyuchen aa037cc3d9 doc: Update changelog 2024-05-07 08:42:48 +08:00
linyuchen 642bffe374 chore: rollback version 2024-05-07 08:13:56 +08:00
linyuchen d682b154fc build: fix auto download image, fix rkey error 2024-05-07 08:12:12 +08:00
手瓜一十雪 d4a06d98cf Merge branch 'main' of https://github.com/NapNeko/NapCatQQ 2024-05-06 23:02:26 +08:00
手瓜一十雪 856b5e16b1 feat: webui LoginStatus 2024-05-06 23:02:00 +08:00
linyuchen a0aa208860 Merge remote-tracking branch 'origin/main' 2024-05-06 22:53:53 +08:00
linyuchen 037a11e04f chore: Update submodule core 2024-05-06 22:53:38 +08:00
手瓜一十雪 bd8a1d715f feat: login handler 2024-05-06 22:52:57 +08:00
手瓜一十雪 54ab1dc091 feat: webui Login Router 2024-05-06 22:40:21 +08:00
手瓜一十雪 9471e63857 feat: webui login limit 2024-05-06 22:24:27 +08:00
手瓜一十雪 fa4a403f38 feat: webui auth helper 2024-05-06 22:11:13 +08:00
手瓜一十雪 d608d65bf4 fix:useport try 2024-05-06 21:46:43 +08:00
手瓜一十雪 c0f2df172a feat: webui config 2024-05-06 21:34:17 +08:00
手瓜一十雪 788ef5d81c chore: web ui/api move 2024-05-06 21:12:34 +08:00
手瓜一十雪 1c6b5cffe1 feat: webuiapi init 2024-05-06 21:10:37 +08:00
手瓜一十雪 c04382b623 chore: sync core repo 2024-05-06 20:59:30 +08:00
linyuchen 0bbe51f8fd fix: rkey cached 2024-05-06 19:45:20 +08:00
linyuchen ff7d7d15a0 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	src/core
2024-05-06 19:44:50 +08:00
linyuchen 4b3d083d3a fix: rkey cached 2024-05-06 19:44:36 +08:00
linyuchen a566dd390b fix: rkey cached 2024-05-06 19:44:25 +08:00
手瓜一十雪 7d1442da04 build: 1.3.0-disable webui 2024-05-06 17:49:12 +08:00
手瓜一十雪 17fc982f55 build: 1.3.0-beta2 2024-05-06 17:01:16 +08:00
手瓜一十雪 ba417e2274 build: 1.3.0-beta1 2024-05-06 16:06:16 +08:00
手瓜一十雪 d345094b75 fix:rkey 2024-05-06 16:05:15 +08:00
手瓜一十雪 6da477480d feat: sync core 2024-05-06 16:04:29 +08:00
手瓜一十雪 e274088c06 feat:webui index 2024-05-06 15:12:27 +08:00
手瓜一十雪 1bcaa73c5c fix: webui style 2024-05-06 12:36:02 +08:00
手瓜一十雪 ca94e8f621 fix: webui ui 2024-05-06 12:32:21 +08:00
手瓜一十雪 1c4e198f59 fix 2024-05-06 12:30:26 +08:00
手瓜一十雪 fdd13f9c66 fix:Login 2024-05-05 22:49:56 +08:00
手瓜一十雪 4333ab624e fix: version check 2024-05-05 21:41:36 +08:00
手瓜一十雪 9fe1eb3a42 remove: webui log 2024-05-05 21:29:09 +08:00
linyuchen ad251a7682 fix: http download filename special character 2024-05-05 20:05:52 +08:00
linyuchen 1fa740de2d refactor: OB11Message add filed message_seq 2024-05-05 19:40:26 +08:00
linyuchen 466b89064a Merge remote-tracking branch 'origin/main' 2024-05-05 19:25:37 +08:00
linyuchen 2748cb0ba3 refactor: Moehoo和QQ版本绑定,不再兼容多个版本 2024-05-05 19:25:17 +08:00
手瓜一十雪 aef0d5bdde Merge branch 'main' of https://github.com/NapNeko/NapCatQQ 2024-05-05 15:51:39 +08:00
手瓜一十雪 c71e8f024a chore:sync core 2024-05-05 15:51:23 +08:00
手瓜一十雪 9411f07321 fix:docs 2024-05-05 15:45:05 +08:00
手瓜一十雪 9b2a5c9bbf feat: ChangeLog 2024-05-05 15:44:38 +08:00
手瓜一十雪 2b275523a0 fix: webui api 2024-05-05 15:34:07 +08:00
手瓜一十雪 31fe2f6da4 fix: webui build 2024-05-05 15:17:17 +08:00
手瓜一十雪 f95db623a5 feat: webui style 2024-05-05 14:39:16 +08:00
手瓜一十雪 a46313e483 fix:webui-style 2024-05-05 14:35:49 +08:00
手瓜一十雪 31c330826e feat: webui-test-0 2024-05-05 14:32:48 +08:00
手瓜一十雪 c4cf800142 fix: webui-10 2024-05-05 14:14:27 +08:00
手瓜一十雪 b64a2b0006 fix:webui-9 2024-05-05 14:11:51 +08:00
手瓜一十雪 a3702f2270 fix: webapi config 2024-05-05 14:04:29 +08:00
手瓜一十雪 d221b1d470 fix: webui - 8 2024-05-05 13:49:08 +08:00
手瓜一十雪 0b22a6bc1d fix: webui-7 2024-05-05 13:45:44 +08:00
手瓜一十雪 07e8acd003 fix: remove unuse 2024-05-05 13:42:43 +08:00
手瓜一十雪 9fce617c57 fix: webui-6 2024-05-05 13:40:54 +08:00
手瓜一十雪 8d5c736975 fix: webui-6 2024-05-05 13:36:53 +08:00
手瓜一十雪 4ccec05186 Merge branch 'main' of https://github.com/NapNeko/NapCatQQ 2024-05-05 13:28:30 +08:00
手瓜一十雪 a4f456f002 fix: webui-5 2024-05-05 13:28:16 +08:00
linyuchen fbdb941c27 Merge remote-tracking branch 'origin/main' 2024-05-05 13:26:52 +08:00
linyuchen a41cd42e8d build-1.2.1-beta1,fix: webapi群成员列表加入缓存,表情回应兼容int类型emoji_id 2024-05-05 13:26:33 +08:00
手瓜一十雪 77521e4627 feat: webui-4 2024-05-05 13:23:05 +08:00
手瓜一十雪 b6a1242bac feat:webui-3 2024-05-05 13:03:56 +08:00
手瓜一十雪 2f325cfe26 feat:webui-2 2024-05-05 13:01:23 +08:00
手瓜一十雪 193b0ad0f0 feat: webui-1 2024-05-05 12:57:32 +08:00
手瓜一十雪 ed476b7793 fix 2024-05-05 12:43:32 +08:00
linyuchen 720fd94b7f Merge remote-tracking branch 'origin/main' 2024-05-04 23:24:41 +08:00
linyuchen ff87da105c fix: /get_cookies return 2024-05-04 23:24:32 +08:00
手瓜一十雪 a875e65536 doc: change 2024-05-04 23:23:45 +08:00
手瓜一十雪 0b2c6bb662 style&feat: cache cookies&group member 2024-05-04 23:22:21 +08:00
手瓜一十雪 e44e2fbbb7 fix 2024-05-04 22:41:37 +08:00
手瓜一十雪 b3c93644fd fix 2024-05-04 22:32:22 +08:00
手瓜一十雪 a56b7ff636 fix 2024-05-04 22:26:36 +08:00
linyuchen c724236930 fix: Get group member list no_cache 2024-05-04 22:09:46 +08:00
linyuchen 4853320b2b Update submodule 2024-05-04 22:02:08 +08:00
linyuchen ba1acb6ac1 Merge remote-tracking branch 'origin/main' 2024-05-04 21:57:02 +08:00
linyuchen f32a6320fc remove webapi get group members 2024-05-04 21:56:45 +08:00
手瓜一十雪 9f914ce36a change: toDo 2024-05-04 18:13:30 +08:00
手瓜一十雪 b037644e5a chore: release script 2024-05-03 21:51:42 +08:00
linyuchen afd8c59f83 style: eslint 2024-05-03 21:34:16 +08:00
linyuchen 8aa4af3e91 Merge remote-tracking branch 'origin/main' 2024-05-03 21:29:30 +08:00
linyuchen 630a8a2b97 doc: update 2024-05-03 21:29:14 +08:00
手瓜一十雪 dc34c4d00c fix
release / check-version (push) Canceled after 0s
release / build-linux (arm64, linux) (push) Canceled after 0s
release / build-linux (x64, linux) (push) Canceled after 0s
release / build-win32 (x64, win32) (push) Canceled after 0s
release / release-napcat (push) Canceled after 0s
2024-05-03 21:22:16 +08:00
linyuchen fb42729dec doc: update 2024-05-03 21:06:50 +08:00
手瓜一十雪 b06989216a fix 2024-05-03 21:03:13 +08:00
手瓜一十雪 e5144f08cd fix 2024-05-03 21:00:17 +08:00
手瓜一十雪 c4a60190e8 fix 2024-05-03 20:44:04 +08:00
手瓜一十雪 efe9e4fa4c fix 2024-05-03 20:34:32 +08:00
Version 45800b1559 chore:version change 2024-05-03 12:29:17 +00:00
linyuchen b0b2b8104f build: update core.lib 2024-05-03 20:27:46 +08:00
linyuchen 8dbc012825 Merge remote-tracking branch 'origin/main' 2024-05-03 20:26:55 +08:00
手瓜一十雪 a434176063 docs: change 2024-05-03 20:26:25 +08:00
linyuchen a013f750c7 fix: Sync get_group_notice return structure to gocq 2024-05-03 20:24:25 +08:00
手瓜一十雪 aa1f49d02f build: 1.2.0-beta18 2024-05-03 20:16:37 +08:00
手瓜一十雪 7125a26309 update: appid 2024-05-03 20:13:08 +08:00
手瓜一十雪 329a35ebf0 docs: change 2024-05-03 18:06:05 +08:00
手瓜一十雪 d30043f595 build: 1.2.0-beta17 2024-05-03 16:59:10 +08:00
手瓜一十雪 745dfa1911 build: 1.2.0-beta16 2024-05-03 14:36:39 +08:00
手瓜一十雪 76203f49a7 fix 2024-05-03 14:06:23 +08:00
手瓜一十雪 870a915377 fix 2024-05-03 14:02:40 +08:00
linyuchen c174fce227 chore: update submodule core 2024-05-03 13:04:49 +08:00
linyuchen 2b6e42e919 Merge remote-tracking branch 'origin/main' 2024-05-03 13:04:19 +08:00
linyuchen df73e1e5a3 refactor: ordered onebot11.json keys 2024-05-03 13:04:02 +08:00
手瓜一十雪 3e902311d4 docs: change 2024-05-03 12:58:15 +08:00
linyuchen 64a0037265 update core.lib 2024-05-03 12:34:35 +08:00
linyuchen bcd4e38093 Merge remote-tracking branch 'origin/main' 2024-05-03 12:32:04 +08:00
linyuchen 181a77d627 fix: Unset other admin notice not work 2024-05-03 12:31:35 +08:00
手瓜一十雪 b353595ba9 build: 1.2.0-beta15 2024-05-03 12:24:39 +08:00
linyuchen 75e3bb4f17 docs: update README.md 2024-05-03 11:12:36 +08:00
linyuchen d2fa9192d4 chore: build core 2024-05-03 10:00:29 +08:00
linyuchen 4bcadc2de4 chore: build core 2024-05-03 09:59:25 +08:00
linyuchen 8ddff74260 update submodule core 2024-05-03 01:18:27 +08:00
linyuchen 95940fdb64 update core.lib 2024-05-03 01:01:05 +08:00
linyuchen 9cd5708948 feat: forward single msg
feat: statistic sent receive msg count by api get_status
2024-05-03 00:59:07 +08:00
linyuchen d361683d79 Merge remote-tracking branch 'origin/main' 2024-05-02 23:29:35 +08:00
手瓜一十雪 9ad17a01f7 fix 2024-05-02 23:06:57 +08:00
手瓜一十雪 22ca1d443c fix 2024-05-02 23:05:14 +08:00
linyuchen 2662e875ca refactor: send music card
feat: send mface
2024-05-02 22:23:59 +08:00
手瓜一十雪 8ae0d07ec1 chore: sync core to core.lib 2024-05-02 21:42:13 +08:00
手瓜一十雪 76a9edb7f5 build: 1.2.0-beta14 2024-05-02 21:34:38 +08:00
手瓜一十雪 0ccb464e5b feat: add log 2024-05-02 21:26:14 +08:00
手瓜一十雪 bef600efa2 fix 2024-05-02 21:25:29 +08:00
手瓜一十雪 58a182cd33 docs: change 2024-05-02 20:55:54 +08:00
手瓜一十雪 aa43334f41 Build: 1.2.0-beta12 2024-05-02 20:47:29 +08:00
手瓜一十雪 a2a4c97f6c fix: sync core 2024-05-02 18:47:01 +08:00
手瓜一十雪 4217ba99fd build: 1.2.0-beta12 2024-05-02 18:33:52 +08:00
linyuchen 589725f5cc build: v1.2.0.beta11.修复linux图链 2024-05-02 18:23:44 +08:00
linyuchen 3fea4602f8 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	src/core
#	src/core.lib/src/adapters/NodeIDependsAdapter.js
#	src/core.lib/src/adapters/NodeIDispatcherAdapter.js
#	src/core.lib/src/adapters/NodeIGlobalAdapter.js
#	src/core.lib/src/adapters/index.js
#	src/core.lib/src/apis/file.js
#	src/core.lib/src/apis/friend.js
#	src/core.lib/src/apis/group.js
#	src/core.lib/src/apis/index.js
#	src/core.lib/src/apis/msg.js
#	src/core.lib/src/apis/sign.js
#	src/core.lib/src/apis/user.js
#	src/core.lib/src/apis/webapi.js
#	src/core.lib/src/apis/window.js
#	src/core.lib/src/core.js
#	src/core.lib/src/data.js
#	src/core.lib/src/entities/cache.js
#	src/core.lib/src/entities/constructor.js
#	src/core.lib/src/entities/group.js
#	src/core.lib/src/entities/index.js
#	src/core.lib/src/entities/msg.js
#	src/core.lib/src/entities/notify.js
#	src/core.lib/src/entities/user.js
#	src/core.lib/src/external/hook.js
#	src/core.lib/src/index.js
#	src/core.lib/src/listeners/NodeIKernelBuddyListener.js
#	src/core.lib/src/listeners/NodeIKernelFileAssistantListener.js
#	src/core.lib/src/listeners/NodeIKernelGroupListener.js
#	src/core.lib/src/listeners/NodeIKernelLoginListener.js
#	src/core.lib/src/listeners/NodeIKernelMsgListener.js
#	src/core.lib/src/listeners/NodeIKernelProfileListener.js
#	src/core.lib/src/listeners/NodeIKernelRobotListener.js
#	src/core.lib/src/listeners/NodeIKernelSessionListener.js
#	src/core.lib/src/listeners/NodeIKernelStorageCleanListener.js
#	src/core.lib/src/listeners/index.js
#	src/core.lib/src/services/common.js
#	src/core.lib/src/services/index.js
#	src/core.lib/src/sessionConfig.js
#	src/core.lib/src/utils/config.js
#	src/core.lib/src/utils/db.js
#	src/core.lib/src/wrapper.js
2024-05-02 18:20:52 +08:00
linyuchen 8ea6aae875 build: v1.2.0.beta11.修复linux图链 2024-05-02 18:17:41 +08:00
linyuchen 2c70b2af68 build: v1.2.0.beta11.修复linux图链 2024-05-02 18:17:33 +08:00
手瓜一十雪 54a2cbcb42 Merge branch 'main' of https://github.com/NapNeko/NapCatQQ 2024-05-02 18:16:19 +08:00
手瓜一十雪 fdef821c60 style: lint 2024-05-02 18:16:03 +08:00
手瓜一十雪 dfa798a35d fix 2024-05-02 18:15:26 +08:00
手瓜一十雪 39b8eb6ff1 script: mail change 2024-05-02 18:13:32 +08:00
手瓜一十雪 6cf71f67a9 update: core.lib 2024-05-02 18:11:59 +08:00
手瓜一十雪 f2e919725e build: 1.2.0-beta11 2024-05-02 18:08:26 +08:00
linyuchen 869599126e Update README.md 2024-05-02 03:33:29 +08:00
linyuchen 3b1b200f6f Update README.md 2024-05-02 01:28:24 +08:00
linyuchen 93c646e3e4 Update README.md 2024-05-02 01:27:37 +08:00
手瓜一十雪 3552f80a21 fix 2024-05-01 23:56:43 +08:00
linyuchen 66d3a63998 build: v1.2.0.beta10 2024-05-01 19:12:30 +08:00
linyuchen 6447825978 build: v1.2.0.beta10 2024-05-01 18:48:47 +08:00
linyuchen 18b7df9fca feat: get_group_list, get_friend_list no_cache 2024-05-01 18:46:13 +08:00
linyuchen c3781cab96 Merge remote-tracking branch 'origin/main' 2024-05-01 18:35:57 +08:00
linyuchen 776098dba6 fix: listener crash 2024-05-01 18:35:40 +08:00
linyuchen 8d1b4f61e7 fix: listener crash 2024-05-01 18:35:16 +08:00
手瓜一十雪 c13e2bdb96 build: 1.2.0-beta9 2024-05-01 17:24:32 +08:00
手瓜一十雪 4682254157 build: 1.2.0-beta.8 2024-05-01 16:14:13 +08:00
linyuchen d7ca6b9213 refactor AsyncQueue 2024-05-01 16:04:23 +08:00
linyuchen 4a76afbde8 refactor AsyncQueue 2024-05-01 16:03:53 +08:00
手瓜一十雪 a68349c23a build: 1.2.0-beta 2024-05-01 14:18:36 +08:00
linyuchen 920e005366 build: v1.2.0.beta7 2024-05-01 12:22:48 +08:00
linyuchen 659f339020 build: v1.2.0.beta7 2024-05-01 12:19:50 +08:00
linyuchen 3ee2d463af Merge remote-tracking branch 'origin/main'
# Conflicts:
#	src/core
2024-05-01 12:18:07 +08:00
linyuchen 686ddb5460 优化rkey获取 2024-05-01 12:17:30 +08:00
linyuchen e5d62488b7 优化rkey获取 2024-05-01 12:17:25 +08:00
linyuchen eb93dd5005 fix: no_cache param of api get_group_list 2024-04-30 18:49:55 +08:00
手瓜一十雪 6999d02d2d fix 2024-04-30 12:11:28 +08:00
手瓜一十雪 790e2b1427 docs: change 2024-04-29 21:08:26 +08:00
手瓜一十雪 a29c7cdfe4 build: 1.2.0-beta 2024-04-29 20:53:52 +08:00
手瓜一十雪 6b7cd692a6 build: 1.2.0-beta 2024-04-29 20:50:50 +08:00
手瓜一十雪 4d3925872a fix 2024-04-29 20:49:31 +08:00
linyuchen 2bd0f6934a update core.lib 2024-04-29 20:35:22 +08:00
linyuchen 51783f17ed Merge remote-tracking branch 'origin/main' 2024-04-29 20:32:59 +08:00
linyuchen ce3aef3526 update core.lib 2024-04-29 20:32:39 +08:00
手瓜一十雪 ee70afdfbb build: 1.2.0-beta 2024-04-29 20:22:30 +08:00
手瓜一十雪 d96c4a56a2 fix 2024-04-29 20:21:36 +08:00
手瓜一十雪 9a39513dea fix 2024-04-29 17:57:11 +08:00
手瓜一十雪 8f22d63315 build: 1.2.0-beta 2024-04-29 16:58:07 +08:00
手瓜一十雪 7f2a5bb95e fix 2024-04-29 16:46:16 +08:00
手瓜一十雪 0118dbd5fb fix 2024-04-29 16:21:21 +08:00
手瓜一十雪 09405de26c fix 2024-04-29 15:55:28 +08:00
手瓜一十雪 efa5ee0e57 fix 2024-04-29 15:48:50 +08:00
手瓜一十雪 80d558f37a fix 2024-04-29 15:37:12 +08:00
linyuchen 901adc3fc7 update submodule core ref 2024-04-29 15:17:41 +08:00
linyuchen 01417be954 refactor: optimize msg db 2024-04-29 15:17:24 +08:00
linyuchen 43b780cbe6 refactor: show quick login error 2024-04-29 11:46:03 +08:00
linyuchen e83f36a12f refactor: show quick login error 2024-04-29 11:45:43 +08:00
linyuchen 77e3fc4ab0 refactor: get image url 2024-04-29 11:45:26 +08:00
linyuchen eafd1adaba build: test music sign 2024-04-29 00:24:52 +08:00
linyuchen 6b53abb7c9 Merge remote-tracking branch 'origin/main' 2024-04-29 00:24:26 +08:00
linyuchen f994c5d284 build: test music sign 2024-04-29 00:24:12 +08:00
手瓜一十雪 6fda220107 fix: typo 2024-04-29 00:14:50 +08:00
手瓜一十雪 da290ed1c3 fix: typo 2024-04-29 00:14:12 +08:00
手瓜一十雪 7e9cd80a1c fix 2024-04-29 00:13:39 +08:00
linyuchen 379b7413d8 refactor: music sign 2024-04-29 00:11:58 +08:00
linyuchen 9181a4df16 Merge remote-tracking branch 'origin/main' 2024-04-29 00:11:51 +08:00
linyuchen df982afd51 refactor: music sign 2024-04-29 00:11:32 +08:00
手瓜一十雪 5c2c3b4317 build: 1.2.0-beta 2024-04-28 23:11:48 +08:00
手瓜一十雪 92d1309103 fix 2024-04-28 22:26:28 +08:00
手瓜一十雪 c43ee3c1d6 Merge branch 'main' of https://github.com/NapNeko/NapCatQQ 2024-04-28 22:15:32 +08:00
手瓜一十雪 e0726e5283 fix 2024-04-28 21:58:23 +08:00
手瓜一十雪 5f3775584b fix 2024-04-28 21:55:22 +08:00
手瓜一十雪 77873d63c5 fix 2024-04-28 21:44:43 +08:00
手瓜一十雪 9e6b09765e fix 2024-04-28 21:43:41 +08:00
手瓜一十雪 1ad6ea4049 add: GetEssenceMsg 2024-04-28 21:43:15 +08:00
手瓜一十雪 7c41da1cb9 docs:change 2024-04-28 21:32:49 +08:00
linyuchen adcf4bfc53 build: test prod 2024-04-28 21:05:30 +08:00
linyuchen 7a6321a9c1 Merge remote-tracking branch 'origin/main' 2024-04-28 21:03:11 +08:00
linyuchen d56b27a7b0 build: test prod 2024-04-28 21:02:56 +08:00
手瓜一十雪 ed7657ab5f build: 1.2.0-beta 2024-04-28 20:55:24 +08:00
手瓜一十雪 a414838416 Merge branch 'main' of https://github.com/NapNeko/NapCatQQ 2024-04-28 20:54:21 +08:00
手瓜一十雪 93646577dc fix:ref to main 2024-04-28 20:53:34 +08:00
linyuchen 46db66038e build: test core.lib 2024-04-28 20:49:54 +08:00
linyuchen efc4e9ce56 build: pre-release 2024-04-28 20:40:37 +08:00
linyuchen 8d5eac7f80 Merge remote-tracking branch 'origin/main' 2024-04-28 20:39:33 +08:00
linyuchen 7b94e49b81 fix: log send msg group name 2024-04-28 20:39:16 +08:00
手瓜一十雪 c35fd4bdc8 build:test 2024-04-28 20:38:44 +08:00
手瓜一十雪 98590e2d90 fix 2024-04-28 20:36:52 +08:00
手瓜一十雪 e6da0e5dd5 fix 2024-04-28 20:36:30 +08:00
手瓜一十雪 cb2baf747d fix 2024-04-28 20:32:37 +08:00
手瓜一十雪 a2f2eb03ce Merge branch 'main' of https://github.com/NapNeko/NapCatQQ 2024-04-28 20:30:56 +08:00
手瓜一十雪 5c6acbb780 fix 2024-04-28 20:30:53 +08:00
linyuchen 1be7031199 update core 2024-04-28 19:46:09 +08:00
linyuchen ed6399bde9 Merge remote-tracking branch 'origin/main' 2024-04-28 19:40:44 +08:00
linyuchen 6709893781 refactor: sent msg log 2024-04-28 19:40:28 +08:00
手瓜一十雪 686a426cda fix 2024-04-28 19:37:26 +08:00
linyuchen 4f90bc7813 refactor: sent msg log 2024-04-28 19:34:16 +08:00
linyuchen e307b289ae Merge remote-tracking branch 'origin/main' 2024-04-28 18:54:03 +08:00
手瓜一十雪 3baeff61a7 chore: 新增手动打包测试 2024-04-28 18:44:32 +08:00
手瓜一十雪 93ab9d12ee fix 2024-04-28 18:42:04 +08:00
手瓜一十雪 36e1317792 fix 2024-04-28 18:32:12 +08:00
手瓜一十雪 fa3e90a021 fix 2024-04-28 18:23:59 +08:00
手瓜一十雪 782a69cf13 fix 2024-04-28 18:22:58 +08:00
linyuchen d495f351c0 Merge remote-tracking branch 'origin/main' 2024-04-28 18:22:27 +08:00
linyuchen 30bd3d2d52 refactor: ws log 2024-04-28 18:22:17 +08:00
手瓜一十雪 ff5a21cca5 fix 2024-04-28 18:21:36 +08:00
linyuchen f8abb73c92 refactor: get friends, get groups, get group members, get group member 2024-04-28 18:14:21 +08:00
linyuchen e97f323d9a Update musicSignUrl to docs & onebot11 config 2024-04-28 13:08:56 +08:00
linyuchen 3d27a4c05d doc: typo 2024-04-28 12:58:34 +08:00
linyuchen 9dbc13dbe4 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	CHANGELOG.md
2024-04-28 12:57:38 +08:00
linyuchen c46a4c75b1 feat: Music sign 2024-04-28 12:56:51 +08:00
手瓜一十雪 0bded73f16 fix 2024-04-28 12:50:24 +08:00
手瓜一十雪 1333733684 build: change 2024-04-28 12:49:04 +08:00
手瓜一十雪 003be934de fix 2024-04-28 12:40:43 +08:00
手瓜一十雪 93ef20d358 fix 2024-04-28 12:34:13 +08:00
手瓜一十雪 94e1a6f0ba fix 2024-04-28 12:30:03 +08:00
手瓜一十雪 8661d09d57 fix 2024-04-28 11:19:09 +08:00
手瓜一十雪 0e5e21dc4e fix 2024-04-28 10:13:39 +08:00
linyuchen 3b25c4987c Merge remote-tracking branch 'origin/main' 2024-04-28 09:18:26 +08:00
linyuchen 2212eb17aa optimize: send record msg error 2024-04-28 09:18:04 +08:00
手瓜一十雪 768bac1db8 fix: remove darwin build 2024-04-28 00:02:26 +08:00
手瓜一十雪 3aef75085f build: new 2024-04-27 23:51:09 +08:00
手瓜一十雪 ce8bef638a fix:token workflow 2024-04-27 23:50:34 +08:00
手瓜一十雪 f0a0c90304 feat:设置自身在线状态 2024-04-27 23:18:03 +08:00
手瓜一十雪 cd6c32b21d docs:CHANGELOG 2024-04-27 22:54:05 +08:00
手瓜一十雪 b31876d2d1 fix 2024-04-27 22:52:57 +08:00
手瓜一十雪 ebab8a190e fix 2024-04-27 22:10:54 +08:00
手瓜一十雪 1b7ce8e7a5 fix 2024-04-27 22:10:07 +08:00
linyuchen 646bb6bd79 doc: change log 2024-04-27 21:21:52 +08:00
linyuchen 5a84b97ca9 fix: first get image rkey 2024-04-27 21:15:24 +08:00
linyuchen 6d41b5a4a1 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	src/core
2024-04-27 21:07:32 +08:00
linyuchen a8bce36f3b fix: first get image rkey 2024-04-27 21:06:58 +08:00
手瓜一十雪 ac2132f8ba fix 2024-04-27 20:50:28 +08:00
手瓜一十雪 cab4b57abe fix 2024-04-27 20:49:41 +08:00
手瓜一十雪 938fb30359 fix 2024-04-27 20:49:00 +08:00
linyuchen 62346d7d9d Merge remote-tracking branch 'origin/main' 2024-04-27 20:14:26 +08:00
linyuchen cf1e5ca64b doc: changelog 2024-04-27 20:13:59 +08:00
手瓜一十雪 7d2d683d96 fix 2024-04-27 20:12:42 +08:00
手瓜一十雪 fe5042f1c3 Merge branch 'main' of https://github.com/NapNeko/NapCatQQ 2024-04-27 20:11:53 +08:00
手瓜一十雪 a1dd76aee0 fix 2024-04-27 20:09:08 +08:00
linyuchen d1c91be167 feat: 表情回应api和上报 2024-04-27 19:51:59 +08:00
linyuchen 9748d99f34 optimize: log 2024-04-27 19:21:54 +08:00
linyuchen c90ffbeb62 refactor: config使用QQ号区分 2024-04-27 19:06:39 +08:00
linyuchen eb7fafeabf optimize: 不支持的消息类型提示 2024-04-27 19:06:08 +08:00
linyuchen 3e50629462 optimize: log 2024-04-27 18:41:03 +08:00
linyuchen 65281a4554 optimize: log 2024-04-27 18:40:45 +08:00
手瓜一十雪 454ec09d6a fix 2024-04-27 17:58:00 +08:00
手瓜一十雪 60e3c6858d build: test 2024-04-27 17:53:31 +08:00
手瓜一十雪 f911f5b4fc fix:update win appid to 23159 2024-04-27 17:49:00 +08:00
手瓜一十雪 ad1694d291 fix 2024-04-27 17:42:28 +08:00
手瓜一十雪 1130965f26 fix 2024-04-27 17:41:49 +08:00
linyuchen fe1f28998b fix: listener proxy 2024-04-27 17:05:43 +08:00
linyuchen 45727fce05 Merge remote-tracking branch 'origin/main' 2024-04-27 17:05:16 +08:00
linyuchen d5c23e5add fix: listener proxy 2024-04-27 17:05:09 +08:00
linyuchen e3a8285f6c fix: listener proxy 2024-04-27 17:04:53 +08:00
手瓜一十雪 a791221cf6 fix 2024-04-27 16:28:43 +08:00
手瓜一十雪 b954d9b403 fix 2024-04-27 16:05:59 +08:00
手瓜一十雪 5e7e24a271 chore: script move 2024-04-27 15:13:53 +08:00
手瓜一十雪 ffb1e598f6 fix 2024-04-27 15:06:59 +08:00
linyuchen bc2da8a645 fix: log config 2024-04-27 12:20:28 +08:00
linyuchen 6f2be3ed30 fix: log config 2024-04-27 12:20:17 +08:00
linyuchen 033a7bffb3 refactor: log 2024-04-27 11:45:24 +08:00
linyuchen f2b2ea61a1 refactor: core 2024-04-27 01:03:13 +08:00
linyuchen 6f0783acc4 refactor: core 2024-04-27 01:02:58 +08:00
linyuchen ce60aa3823 Merge remote-tracking branch 'origin/main' 2024-04-27 00:53:01 +08:00
linyuchen 8075e70606 refactor: core 2024-04-27 00:51:10 +08:00
linyuchen 4402fc2d0a refactor: core 2024-04-27 00:50:08 +08:00
手瓜一十雪 3e3ecda551 Merge branch 'main' of https://github.com/NapNeko/NapCatQQ 2024-04-26 22:56:49 +08:00
手瓜一十雪 50beb8f346 fix: Linux Script CRLF to LF 2024-04-26 22:56:38 +08:00
手瓜一十雪 8e033e3e06 fix 2024-04-26 22:53:46 +08:00
linyuchen dc029a318b refactor: core addListener 2024-04-26 20:21:41 +08:00
手瓜一十雪 8e91bc2c8e fix 2024-04-26 18:46:12 +08:00
linyuchen 0ff5b4e90b refactor: core 2024-04-26 13:55:35 +08:00
手瓜一十雪 20dec19bfe Merge branch 'main' of https://github.com/NapNeko/NapCatQQ 2024-04-26 11:30:51 +08:00
手瓜一十雪 d261fbff26 fix 2024-04-26 11:30:05 +08:00
手瓜一十雪 6594b33bcc docs: change 2024-04-26 08:09:15 +08:00
linyuchen a1bb6cc1b1 refactor: mface url 2024-04-26 00:16:36 +08:00
linyuchen 7ce195b68e Merge remote-tracking branch 'origin/main'
# Conflicts:
#	src/onebot11/index.ts
2024-04-25 22:11:10 +08:00
手瓜一十雪 16d8d04aaa fix 2024-04-25 20:40:32 +08:00
手瓜一十雪 59565f7d90 fix 2024-04-25 18:34:40 +08:00
手瓜一十雪 43784a2495 fix 2024-04-25 18:29:31 +08:00
手瓜一十雪 3811d7469e fix 2024-04-25 18:15:40 +08:00
手瓜一十雪 c72b40a1e1 fix 2024-04-25 18:15:03 +08:00
linyuchen f00933969d refactor: get image rkey 2024-04-25 15:13:26 +08:00
linyuchen 759adc45e3 refactor: mark msg as read 2024-04-25 15:13:11 +08:00
linyuchen 27ecf78372 refactor: mark msg as read 2024-04-25 15:12:53 +08:00
手瓜一十雪 c91b83a7ba docs: change 2024-04-25 10:38:01 +08:00
手瓜一十雪 39373ee63a Merge pull request #8 from Fripine/feat/add_FriendAddNoticeEvent
feat: add FriendAddNoticeEvent
2024-04-25 10:27:01 +08:00
Fripine 2db64c69ae Update constructor.ts 2024-04-25 00:54:36 +08:00
linyuchen a699b71c02 fix: check rkey 2024-04-24 21:05:51 +08:00
linyuchen 6c07d22cda Merge remote-tracking branch 'origin/main'
# Conflicts:
#	package.json
2024-04-24 21:04:34 +08:00
linyuchen a2ee900ed5 fix: check rkey 2024-04-24 21:03:47 +08:00
Fripine e709f31b99 Update constructor.ts 2024-04-24 19:19:36 +08:00
Fripine 35afb12756 Update constructor.ts 2024-04-24 18:48:03 +08:00
Fripine 9bed9fe162 Update constructor.ts 2024-04-24 17:47:01 +08:00
Fripine 4ff5553804 construct FriendAddEvent 2024-04-24 17:38:35 +08:00
Fripine 32213be7a7 add FriendAddEvent 2024-04-24 17:34:22 +08:00
Fripine 84894a73e1 Create OB11FriendAddNoticeEvent.ts 2024-04-24 17:32:31 +08:00
手瓜一十雪 b6ea185ce7 build: test 2024-04-24 15:31:51 +08:00
手瓜一十雪 814ac0f731 fix:package 2024-04-24 12:20:41 +08:00
手瓜一十雪 a40bb29da3 fix: build 2024-04-24 12:19:30 +08:00
手瓜一十雪 e9b90079c0 fix 2024-04-24 12:13:34 +08:00
手瓜一十雪 dba383c27e fix 2024-04-24 12:09:26 +08:00
手瓜一十雪 42059b5817 fix 2024-04-24 12:01:32 +08:00
手瓜一十雪 f92a17c01b fix 2024-04-24 12:00:13 +08:00
手瓜一十雪 d6552ce333 fix: native hook debug to release 2024-04-24 10:19:28 +08:00
手瓜一十雪 0db89bde5a docs: noify CQCode 2024-04-24 10:14:27 +08:00
手瓜一十雪 56a12185d4 Merge pull request #7 from initialencounter/patch-1
feat(onebot11):  Improve error handling in JSON parsing
2024-04-24 00:07:55 +08:00
风宝宝 c40170db5d feat(onebot11): Improve error handling in JSON parsing
发生错误直接被 catch 掉了,没有提示,[使用docker启动后,请求被重置](https://github.com/NapNeko/NapCat-Docker/issues/8)
2024-04-23 21:33:09 +08:00
linyuchen 1df3e9c414 doc: update 2024-04-23 18:58:51 +08:00
linyuchen b1570df8b9 update core 2024-04-23 18:39:58 +08:00
linyuchen 023fd1ce36 Merge remote-tracking branch 'origin/main' 2024-04-23 18:38:44 +08:00
linyuchen a7fe74bc0c fix: rkey 2024-04-23 18:38:13 +08:00
手瓜一十雪 26c9abd9da docs: rf install with build
移除编译安装教程 因不指定参数编译和下载到的一样 指定后编译需要编译环境 例如msvc/gcc
2024-04-21 19:17:22 +08:00
linyuchen a5e34645c5 fix: ffmpeg path for video.ts 2024-04-20 08:21:48 +08:00
linyuchen b2831c0a19 doc: update 2024-04-20 08:21:03 +08:00
linyuchen 648c1ea0f9 fix: reading qq version 2024-04-19 11:31:47 +08:00
linyuchen 9cd927e06a doc: update README.md 2024-04-19 10:28:20 +08:00
linyuchen 4272413f55 Merge remote-tracking branch 'origin/main' 2024-04-19 10:27:40 +08:00
linyuchen e1711b7af6 doc: update README.md 2024-04-19 10:27:26 +08:00
Version f7d3f27d45 chore:version change 2024-04-18 12:17:53 +00:00
linyuchen 3a7a47f82d style: eslint
release / check-version (push) Canceled after 0s
release / build-linux (arm64, darwin) (push) Canceled after 0s
release / build-linux (arm64, linux) (push) Canceled after 0s
release / build-linux (x64, darwin) (push) Canceled after 0s
release / build-linux (x64, linux) (push) Canceled after 0s
release / build-win32 (x64, win32) (push) Canceled after 0s
release / release-napcat (push) Canceled after 0s
2024-04-18 20:17:06 +08:00
linyuchen cc211706d5 fix: check version catch 2024-04-18 20:10:09 +08:00
linyuchen 22f74be4cd try send markdown 2024-04-18 18:23:20 +08:00
linyuchen 5a00d14f94 Merge remote-tracking branch 'origin/main' 2024-04-18 17:44:06 +08:00
linyuchen ecb4e7bf9f fix: ws token not work 2024-04-18 17:43:43 +08:00
linyuchen 56e5b546e1 Update README.md 2024-04-17 21:44:40 +08:00
linyuchen 272f5a2f4f Update README.md 2024-04-17 21:33:25 +08:00
linyuchen ddcbe78a01 chore: release.yml
release / check-version (push) Canceled after 0s
release / build-linux (arm64, darwin) (push) Canceled after 0s
release / build-linux (arm64, linux) (push) Canceled after 0s
release / build-linux (x64, darwin) (push) Canceled after 0s
release / build-linux (x64, linux) (push) Canceled after 0s
release / build-win32 (x64, win32) (push) Canceled after 0s
release / release-napcat (push) Canceled after 0s
2024-04-17 18:40:49 +08:00
linyuchen 00b6c964e2 chore: release not need git submodule 2024-04-17 18:37:11 +08:00
linyuchen d7d2b06ecc chore: change action token 2024-04-17 18:27:08 +08:00
Version fafc59360d chore:version change 2024-04-17 09:50:56 +00:00
linyuchen 19e105785e update core 2024-04-17 17:38:02 +08:00
linyuchen b87ac09e43 update core 2024-04-17 17:37:23 +08:00
linyuchen af9092d7c7 fix: send forward msg 2024-04-17 17:35:14 +08:00
linyuchen 24a1ffd652 fix: http server cors 2024-04-17 17:06:24 +08:00
linyuchen 662813cc58 fix: postLoginStatus on error 2024-04-17 17:01:29 +08:00
linyuchen d890b78290 refactor: auto_escape of send msg 2024-04-16 23:22:37 +08:00
linyuchen 58747d7d4a fix: delete group 2024-04-16 23:10:29 +08:00
linyuchen 0773a4f39c feat: Support post url params 2024-04-16 23:09:56 +08:00
linyuchen 66cc7f8a1f feat: http heart 2024-04-16 20:58:29 +08:00
linyuchen 01ab40bf4a Merge remote-tracking branch 'origin/main' 2024-04-16 20:28:26 +08:00
linyuchen 4c09147fd1 fix: cq code auto escape
fix: get groups no cache
2024-04-16 20:28:05 +08:00
手瓜一十雪 f9f426d788 build:friend history 2024-04-16 18:50:39 +08:00
手瓜一十雪 ff8fa1bf31 fix 2024-04-16 18:39:15 +08:00
手瓜一十雪 59f99e4f6a fix 2024-04-16 18:36:51 +08:00
手瓜一十雪 7449ce9c3b fix 2024-04-16 18:32:02 +08:00
手瓜一十雪 f6bc8f0a1f fix 2024-04-16 18:26:50 +08:00
手瓜一十雪 4d10b8cdee Revert "chore:version change"
This reverts commit 36ce3b08fe.
2024-04-16 14:13:22 +08:00
手瓜一十雪 5a61c5de09 limit:workflow 2024-04-16 14:10:31 +08:00
手瓜一十雪 f84d0db811 fix 2024-04-16 14:01:05 +08:00
Version 36ce3b08fe chore:version change 2024-04-16 05:57:37 +00:00
手瓜一十雪 da8ea5b545 Revert "chore:version change"
This reverts commit 034d12c347.
2024-04-16 13:57:04 +08:00
手瓜一十雪 fad3dbf4cd fix 2024-04-16 13:56:07 +08:00
Version 034d12c347 chore:version change 2024-04-16 05:54:20 +00:00
手瓜一十雪 c94dbf1d9a fix:workflow 2024-04-16 13:53:14 +08:00
手瓜一十雪 e516687a9e fix 2024-04-16 13:50:01 +08:00
手瓜一十雪 4a2f77b0a6 fix 2024-04-16 13:49:32 +08:00
手瓜一十雪 7b29ecba71 fix 2024-04-16 13:47:42 +08:00
手瓜一十雪 11241b8e07 Revert "chore:version change"
This reverts commit 52bbd1f20b.
2024-04-16 13:44:22 +08:00
Version 52bbd1f20b chore:version change 2024-04-16 05:42:48 +00:00
手瓜一十雪 4044750515 fix 2024-04-16 13:42:22 +08:00
手瓜一十雪 b670c546b9 Merge branch 'main' of https://github.com/NapNeko/NapCatQQ 2024-04-16 13:38:00 +08:00
手瓜一十雪 f37bbf93cb fix 2024-04-16 13:37:42 +08:00
linyuchen 87311ab41a Merge remote-tracking branch 'origin/main' 2024-04-16 13:28:15 +08:00
linyuchen ecb4d1845c update core 2024-04-16 13:28:05 +08:00
手瓜一十雪 35c232ab25 fix
Build / build-linux (arm64, darwin) (push) Skipped
Build / build-linux (arm64, linux) (push) Skipped
Build / build-linux (x64, darwin) (push) Skipped
Build / build-linux (x64, linux) (push) Skipped
Build / build-win32 (x64, win32) (push) Skipped
release / check-version (push) Canceled after 0s
release / build-linux (arm64, darwin) (push) Canceled after 0s
release / build-linux (arm64, linux) (push) Canceled after 0s
release / build-linux (x64, darwin) (push) Canceled after 0s
release / build-linux (x64, linux) (push) Canceled after 0s
release / build-win32 (x64, win32) (push) Canceled after 0s
release / release-napcat (push) Canceled after 0s
2024-04-16 13:27:33 +08:00
linyuchen df0be2e251 Merge remote-tracking branch 'origin/main' 2024-04-16 13:25:25 +08:00
linyuchen 871b3a102b refactor: recall get_group_list if groups is empty 2024-04-16 13:25:12 +08:00
手瓜一十雪 02299e3892 fix 2024-04-16 13:17:30 +08:00
手瓜一十雪 6af4d6f5b8 fix 2024-04-16 13:14:09 +08:00
手瓜一十雪 4fb5700367 fix 2024-04-16 13:12:33 +08:00
手瓜一十雪 8579276381 fix 2024-04-16 13:10:07 +08:00
手瓜一十雪 7ba60b22c5 fix 2024-04-16 13:06:07 +08:00
linyuchen 031932f41c Merge remote-tracking branch 'origin/main' 2024-04-16 13:00:02 +08:00
linyuchen 079d0a89b1 fix: tsconfig path alias 2024-04-16 12:59:52 +08:00
手瓜一十雪 c4fdce6d64 fix 2024-04-16 12:55:16 +08:00
手瓜一十雪 5604c2b29f Merge branch 'main' of https://github.com/NapNeko/NapCatQQ 2024-04-16 12:55:05 +08:00
手瓜一十雪 74b5ab2b47 fix 2024-04-16 12:53:37 +08:00
linyuchen c29cbfe123 Merge remote-tracking branch 'origin/main' 2024-04-16 12:51:42 +08:00
手瓜一十雪 6fe5cb1ffd remove
Build / build-linux (arm64, darwin) (push) Skipped
Build / build-linux (arm64, linux) (push) Skipped
Build / build-linux (x64, darwin) (push) Skipped
Build / build-linux (x64, linux) (push) Skipped
Build / build-win32 (x64, win32) (push) Skipped
release / check-version (push) Canceled after 0s
release / build-linux (arm64, darwin) (push) Canceled after 0s
release / build-linux (arm64, linux) (push) Canceled after 0s
release / build-linux (x64, darwin) (push) Canceled after 0s
release / build-linux (x64, linux) (push) Canceled after 0s
release / build-win32 (x64, win32) (push) Canceled after 0s
release / release-napcat (push) Canceled after 0s
2024-04-16 12:51:12 +08:00
linyuchen 7edd5a7a8e Merge remote-tracking branch 'origin/main' 2024-04-16 12:50:22 +08:00
linyuchen c1edc1b99b fix: Send empty forward msg 2024-04-16 12:50:14 +08:00
手瓜一十雪 4d1d890f72 fix 2024-04-16 12:47:36 +08:00
手瓜一十雪 fe0f82fa2b fix:checkVesion 2024-04-16 12:46:37 +08:00
手瓜一十雪 84083a65a8 fix:checkVesion 2024-04-16 12:45:07 +08:00
手瓜一十雪 fc91c6bc08 fix 2024-04-16 12:43:39 +08:00
手瓜一十雪 09120171ba fix
Build / build-linux (arm64, darwin) (push) Skipped
Build / build-linux (arm64, linux) (push) Skipped
Build / build-linux (x64, darwin) (push) Skipped
Build / build-linux (x64, linux) (push) Skipped
Build / build-win32 (x64, win32) (push) Skipped
release / check-version (push) Canceled after 0s
release / build-linux (arm64, darwin) (push) Canceled after 0s
release / build-linux (arm64, linux) (push) Canceled after 0s
release / build-linux (x64, darwin) (push) Canceled after 0s
release / build-linux (x64, linux) (push) Canceled after 0s
release / build-win32 (x64, win32) (push) Canceled after 0s
release / release-napcat (push) Canceled after 0s
2024-04-16 12:42:07 +08:00
手瓜一十雪 a362f920dc fix:workflow 2024-04-16 12:41:18 +08:00
手瓜一十雪 9d7729f548 fix:workflow 2024-04-16 12:21:50 +08:00
手瓜一十雪 ed56e177cf chore:workflow version 2024-04-16 11:49:44 +08:00
手瓜一十雪 9db28bd502 fix:version output 2024-04-16 11:43:14 +08:00
linyuchen aded70eb2e Create LICENSE 2024-04-16 10:27:32 +08:00
手瓜一十雪 dfbad85465 re:version 2024-04-16 10:02:40 +08:00
手瓜一十雪 52076fe182 chore: version 2024-04-16 08:50:48 +08:00
linyuchen 5575c3cb13 style: remove unused import 2024-04-15 22:44:48 +08:00
linyuchen 637d32efff fix: calculate qq level 2024-04-15 22:44:29 +08:00
linyuchen fd54658e53 todo: retry get groups if groups length is 0 2024-04-15 22:42:31 +08:00
linyuchen 2f39a8d76e refactor: rename extends api folder 2024-04-15 22:39:31 +08:00
linyuchen 6a3e793500 style: comment unused function 2024-04-15 22:39:06 +08:00
linyuchen 3b3ffeda6b script: gen version 2024-04-15 22:36:06 +08:00
linyuchen f7d92a3b11 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	script/napcat.bat
2024-04-15 22:31:18 +08:00
linyuchen d9d9ba8bf1 fix: Support Onebot v11 get_forward_msg 2024-04-15 17:39:18 +08:00
手瓜一十雪 f5d9090183 Merge branch 'main' of https://github.com/NapNeko/NapCatQQ
Build / build-linux (arm64, darwin) (push) Skipped
Build / build-linux (arm64, linux) (push) Skipped
Build / build-linux (x64, darwin) (push) Skipped
Build / build-linux (x64, linux) (push) Skipped
Build / build-win32 (x64, win32) (push) Skipped
release / build-linux (arm64, darwin) (push) Canceled after 0s
release / build-linux (arm64, linux) (push) Canceled after 0s
release / build-linux (x64, darwin) (push) Canceled after 0s
release / build-linux (x64, linux) (push) Canceled after 0s
release / build-win32 (x64, win32) (push) Canceled after 0s
release / release-napcat (push) Canceled after 0s
2024-04-15 11:26:19 +08:00
手瓜一十雪 705ecd1ef1 fix:build 2024-04-15 11:26:11 +08:00
linyuchen 08b5266a86 Update README.md 2024-04-15 11:12:28 +08:00
linyuchen ecc4846ba8 Update README.md 2024-04-15 11:11:51 +08:00
手瓜一十雪 4aab705d11 Merge branch 'main' of https://github.com/NapNeko/NapCatQQ 2024-04-15 11:08:45 +08:00
手瓜一十雪 4615a68bcc style:lint 2024-04-15 11:08:31 +08:00
linyuchen bf6934e8ac Update README.md 2024-04-15 10:55:23 +08:00
手瓜一十雪 af8c304bd4 fix:build workflow 2024-04-15 10:54:36 +08:00
手瓜一十雪 51dac5a5a8 Merge branch 'main' of https://github.com/NapNeko/NapCatQQ 2024-04-15 10:53:04 +08:00
手瓜一十雪 56463d9e36 chore: issue 2024-04-15 10:52:41 +08:00
linyuchen a6a339dc59 Update README.md 2024-04-15 10:52:34 +08:00
手瓜一十雪 8423304ab5 Merge branch 'main' of https://github.com/NapNeko/NapCatQQ 2024-04-15 10:48:26 +08:00
手瓜一十雪 bb7408dbe9 chore:workflow-build 2024-04-15 10:48:08 +08:00
linyuchen 7eff4dcf02 Update README.md 2024-04-15 10:44:31 +08:00
linyuchen d7ee3fec3d Update README.md 2024-04-15 10:36:48 +08:00
手瓜一十雪 5e026a3e8d fix:update info&bat script
release / build-linux (arm64, darwin) (push) Canceled after 0s
release / build-linux (arm64, linux) (push) Canceled after 0s
release / build-linux (x64, darwin) (push) Canceled after 0s
release / build-linux (x64, linux) (push) Canceled after 0s
release / build-win32 (x64, win32) (push) Canceled after 0s
release / release-napcat (push) Canceled after 0s
2024-04-15 10:32:54 +08:00
手瓜一十雪 d5e117b89f fix:re token 2024-04-15 08:19:15 +08:00
手瓜一十雪 c87a5501df feat:boot 2024-04-15 08:04:56 +08:00
手瓜一十雪 7584ebba0b feat:boot 2024-04-15 08:04:23 +08:00
手瓜一十雪 66075e3960 fix 2024-04-15 08:00:02 +08:00
linyuchen 193ba781a0 fix: readme syntax 2024-04-15 02:07:23 +08:00
linyuchen 3e5dd64acc Update README.md 2024-04-15 01:48:57 +08:00
linyuchen d66ab7d389 chore: start bat 2024-04-15 01:38:46 +08:00
手瓜一十雪 d2e6b27ecd fix 2024-04-15 01:17:24 +08:00
手瓜一十雪 0588541357 fix 2024-04-15 01:11:29 +08:00
手瓜一十雪 096ea84af6 fix 2024-04-15 01:01:36 +08:00
手瓜一十雪 04d0cfd510 fix:build 2024-04-15 00:54:02 +08:00
手瓜一十雪 7653f969ec chore:workflow 2024-04-15 00:52:59 +08:00
linyuchen c4ab6a4a8d Merge remote-tracking branch 'origin/main'
release / build-linux (arm64, darwin) (push) Canceled after 0s
release / build-linux (arm64, linux) (push) Canceled after 0s
release / build-linux (x64, darwin) (push) Canceled after 0s
release / build-linux (x64, linux) (push) Canceled after 0s
release / build-win32 (x64, win32) (push) Canceled after 0s
2024-04-15 00:28:55 +08:00
linyuchen d1ecd1318f chore: version 1.0.0 2024-04-15 00:28:40 +08:00
手瓜一十雪 8d65b1427d chore:version 2024-04-15 00:28:22 +08:00
手瓜一十雪 e693a6057e chore:release 2024-04-15 00:22:46 +08:00
linyuchen d0aa490ac3 chore: version 0.0.1 2024-04-15 00:17:39 +08:00
linyuchen 0b6cad7d4f doc: update README.md 2024-04-15 00:15:24 +08:00
linyuchen 14e6c6d9a6 NapCatQQ 2024-04-15 00:09:08 +08:00
手瓜一十雪 b2061347a5 chore: package.json 2024-04-14 21:05:10 +08:00
手瓜一十雪 79979f0a3b fix 2024-04-12 08:21:56 +08:00
linyuchen 48d70b2349 Update README.md 2024-04-10 16:49:51 +08:00
linyuchen b1f6309662 Update README.md 2024-04-10 16:49:17 +08:00
linyuchen 1acde76292 logo png 2024-04-10 16:47:01 +08:00
linyuchen 3b4867d7ab logo 2024-04-10 16:43:06 +08:00
linyuchen 5ae965f4d3 Update README.md 2024-04-10 15:35:46 +08:00
linyuchen 742427b77b Update README.md 2024-04-10 15:08:38 +08:00
linyuchen 3d70a101f1 Update README.md 2024-04-10 15:01:19 +08:00
手瓜一十雪 99062a5ea3 fix 2024-04-09 23:45:01 +08:00
手瓜一十雪 056d87f7ae fix 2024-04-09 21:26:15 +08:00
手瓜一十雪 df5a58772c Create release.plain.yml 2024-04-09 21:24:44 +08:00
手瓜一十雪 e45db05b8e fix 2024-04-07 22:15:54 +08:00
手瓜一十雪 d234f74703 fix 2024-04-07 22:14:07 +08:00
手瓜一十雪 3ae2a1be4a chore:readme 2024-04-07 22:04:34 +08:00
linyuchen 2b828abd90 Update README.md 2024-03-29 20:45:11 +08:00
linyuchen 4b598b1575 Update README.md 2024-03-29 19:39:30 +08:00
286 changed files with 13189 additions and 10 deletions

No files matched your search

+21
View File
@@ -0,0 +1,21 @@
# EditorConfig is awesome: https://EditorConfig.org
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true
# Matches multiple files with brace expansion notation
# Set default charset
charset = utf-8
# 2 space indentation
[*.{cjs,mjs,js,jsx,ts,tsx,css,scss,sass,html,json}]
indent_style = space
indent_size = 2
# Unfortunately, EditorConfig doesn't support space configuration inside import braces directly.
# You'll need to rely on your linter/formatter like ESLint or Prettier for that.
+1
View File
@@ -0,0 +1 @@
VITE_BUILD_TYPE = Development
+1
View File
@@ -0,0 +1 @@
VITE_BUILD_TYPE = Production
+67
View File
@@ -0,0 +1,67 @@
module.exports = {
'env': {
'es2021': true,
'node': true
},
'ignorePatterns': ['src/core/', 'src/core.lib/'],
'extends': [
'eslint:recommended',
'plugin:@typescript-eslint/recommended'
],
'overrides': [
{
'env': {
'node': true
},
'files': [
'.eslintrc.{js,cjs}'
],
'parserOptions': {
'sourceType': 'script'
}
}
],
'parser': '@typescript-eslint/parser',
'parserOptions': {
'ecmaVersion': 'latest',
'sourceType': 'module'
},
'plugins': [
'@typescript-eslint',
'import'
],
'settings': {
'import/parsers': {
'@typescript-eslint/parser': ['.ts']
},
'import/resolver': {
'typescript': {
'alwaysTryTypes': true
}
}
},
'rules': {
'indent': [
'error',
2
],
'linebreak-style': [
'error',
'unix'
],
'quotes': [
'error',
'single'
],
'semi': [
'error',
'always'
],
'no-unused-vars': 'off',
'no-async-promise-executor': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'@typescript-eslint/no-var-requires': 'off',
'object-curly-spacing': ['error', 'always'],
}
};
+81
View File
@@ -0,0 +1,81 @@
name: Bug 反馈
description: 报告可能的 NapCat 异常行为
title: '[BUG] '
labels: bug
body:
- type: markdown
attributes:
value: |
欢迎来到 NapCat 的 Issue Tracker!请填写以下表格来提交 Bug。
在提交新的 Bug 反馈前,请确保您:
* 已经搜索了现有的 issues,并且没有找到可以解决您问题的方法
* 不与现有的某一 issue 重复
- type: input
id: system-version
attributes:
label: 系统版本
description: 运行 QQNT 的系统版本
placeholder: Windows 10 Pro Workstation 22H2
validations:
required: true
- type: input
id: qqnt-version
attributes:
label: QQNT 版本
description: 可在 QQNT 的「关于」的设置页中找到
placeholder: 9.9.7-21804
validations:
required: true
- type: input
id: napcat-version
attributes:
label: NapCat 版本
description: 可在 LiteLoaderQQNT 的设置页或是 QQNT 的设置页侧栏中找到
placeholder: 1.0.0
validations:
required: true
- type: input
id: onebot-client-version
attributes:
label: OneBot 客户端
description: 连接至 NapCat 的客户端版本信息
placeholder: Overflow 2.16.0-2cf7991-SNAPSHOT
validations:
required: true
- type: textarea
id: what-happened
attributes:
label: 发生了什么?
description: 填写你认为的 NapCat 的不正常行为
validations:
required: true
- type: textarea
id: how-reproduce
attributes:
label: 如何复现
description: 填写应当如何操作才能触发这个不正常行为
placeholder: |
1. xxx
2. xxx
3. xxx
validations:
required: true
- type: textarea
id: what-expected
attributes:
label: 期望的结果?
description: 填写你认为 NapCat 应当执行的正常行为
validations:
required: true
- type: textarea
id: napcat-log
attributes:
label: NapCat 运行日志
description: 粘贴相关日志内容到此处
render: shell
- type: textarea
id: onebot-client-log
attributes:
label: OneBot 客户端运行日志
description: 粘贴 OneBot 客户端的相关日志内容到此处
render: shell
+11
View File
@@ -0,0 +1,11 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
version: 2
updates:
- package-ecosystem: "npm" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "daily"
+74
View File
@@ -0,0 +1,74 @@
name: "Build"
on:
workflow_dispatch:
push:
branches:
- main
permissions: write-all
jobs:
build-linux:
if: ${{ startsWith(github.event.head_commit.message, 'build:') }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target_platform: [linux]
target_arch: [x64, arm64]
steps:
- name: Clone Main Repository
uses: actions/checkout@v4
with:
repository: 'NapNeko/NapCatQQ'
submodules: true
ref: main
token: ${{ secrets.NAPCAT_BUILD }}
- name: Use Node.js 20.X
uses: actions/setup-node@v4
with:
node-version: 20.x
- name: Build NuCat Linux
run: |
npm i --arch=${{ matrix.target_arch }} --platform=${{ matrix.target_platform }}
npm run build:prod
cd dist
npm i --omit=dev --arch=${{ matrix.target_arch }} --platform=${{ matrix.target_platform }}
cd ..
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: NapCat.${{ matrix.target_platform }}.${{ matrix.target_arch }}
path: dist
build-win32:
if: ${{ startsWith(github.event.head_commit.message, 'build:') }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target_platform: [win32]
target_arch: [x64]
steps:
- name: Clone Main Repository
uses: actions/checkout@v4
with:
repository: 'NapNeko/NapCatQQ'
submodules: true
ref: main
token: ${{ secrets.NAPCAT_BUILD }}
- name: Use Node.js 20.X
uses: actions/setup-node@v4
with:
node-version: 20.x
- name: Build NuCat Linux
run: |
npm i --arch=${{ matrix.target_arch }} --platform=${{ matrix.target_platform }}
npm run build:prod
cd dist
npm i --omit=dev --arch=${{ matrix.target_arch }} --platform=${{ matrix.target_platform }}
cd ..
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: NapCat.${{ matrix.target_platform }}.${{ matrix.target_arch }}
path: dist
+138
View File
@@ -0,0 +1,138 @@
name: "release"
on:
push:
tags:
- "v*"
permissions: write-all
jobs:
check-version:
runs-on: ubuntu-latest
steps:
- name: Clone Repository
uses: actions/checkout@v4
with:
ref: main
token: ${{ secrets.GITHUB_TOKEN }}
- name: Extract version from tag
run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV
- name: Use Node.js 20.X
uses: actions/setup-node@v4
with:
node-version: 20.x
- name: Check Version
run: |
ls
node ./script/checkVersion.cjs
sh ./checkVersion.sh
build-linux:
needs: [check-version]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target_platform: [linux]
target_arch: [x64, arm64]
steps:
- name: Clone Main Repository
uses: actions/checkout@v4
with:
repository: 'NapNeko/NapCatQQ'
submodules: true
ref: main
token: ${{ secrets.NAPCAT_BUILD }}
- name: Use Node.js 20.X
uses: actions/setup-node@v4
with:
node-version: 20.x
- name: Build NuCat Linux
run: |
export NAPCAT_BUILDSYS=${{ matrix.target_platform }}
export NAPCAT_BUILDARCH=${{ matrix.target_arch }}
npm i --arch=${{ matrix.target_arch }} --platform=${{ matrix.target_platform }}
npm run build:prod
cd dist
npm i --omit=dev --arch=${{ matrix.target_arch }} --platform=${{ matrix.target_platform }}
cd ..
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: NapCat.${{ matrix.target_platform }}.${{ matrix.target_arch }}
path: dist
build-win32:
runs-on: ubuntu-latest
needs: [check-version]
strategy:
fail-fast: false
matrix:
target_platform: [win32]
target_arch: [x64]
steps:
- name: Clone Main Repository
uses: actions/checkout@v4
with:
repository: 'NapNeko/NapCatQQ'
submodules: true
ref: main
token: ${{ secrets.NAPCAT_BUILD }}
- name: Use Node.js 20.X
uses: actions/setup-node@v4
with:
node-version: 20.x
- name: Build NuCat Linux
run: |
export NAPCAT_BUILDSYS=${{ matrix.target_platform }}
export NAPCAT_BUILDARCH=${{ matrix.target_arch }}
npm i --arch=${{ matrix.target_arch }} --platform=${{ matrix.target_platform }}
npm run build:prod
cd dist
npm i --omit=dev --arch=${{ matrix.target_arch }} --platform=${{ matrix.target_platform }}
cd ..
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: NapCat.${{ matrix.target_platform }}.${{ matrix.target_arch }}
path: dist
release-napcat:
needs: [build-win32,build-linux]
runs-on: ubuntu-latest
steps:
- name: Download All Artifact
uses: actions/download-artifact@v4
- name: Compress subdirectories
run: |
for dir in */; do
base=$(basename "$dir")
zip -r "${base}.zip" "$dir"
done
- name: Extract version from tag
run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV
- name: Clone Changes Log
run: curl -o CHANGELOG.md https://fastly.jsdelivr.net/gh/NapNeko/NapCatQQ@main/CHANGELOG.md
- name: Create Release Draft and Upload Artifacts
uses: softprops/action-gh-release@v1
with:
name: NapCat V${{ env.VERSION }}
token: ${{ secrets.GITHUB_TOKEN }}
body_path: CHANGELOG.md
files: |
NapCat.win32.x64.zip
NapCat.linux.x64.zip
NapCat.linux.arm64.zip
# NapCat.darwin.x64.zip
# NapCat.darwin.arm64.zip
draft: true
+17
View File
@@ -0,0 +1,17 @@
# Develop
node_modules/
package-lock.json
pnpm-lock.yaml
out/
dist/
src/core.lib/common/
test
# Editor
.vscode/*
!.vscode/extensions.json
.idea/*
# Build
*.db
checkVersion.sh
+4
View File
@@ -0,0 +1,4 @@
[submodule "src/core"]
path = src/core
url = https://github.com/NapNeko/core.git
branch = master
+13
View File
@@ -0,0 +1,13 @@
# v1.3.2
QQ Version: Windows 9.9.9-23424 / Linux 3.2.7-23361
## 修复与优化
* 重置Rkey获取机制,使用接口分发Rkey
* 尝试修复启动时消息处理需要等待过长时间
* 修复多图情况为同一张图片的问题
## 新增与调整
* 新增扩展获取好友分类列表 Api /get_friends_with_category
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 NapCatQQ
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+29 -10
View File
@@ -1,14 +1,33 @@
# NapCatQQ
<div align="center">
<img src="https://socialify.git.ci/NapNeko/NapCatQQ/image?description=1&language=1&logo=https%3A%2F%2Fraw.githubusercontent.com%2FNapNeko%2FNapCatQQ%2Fmain%2Flogo.png&name=1&stargazers=1&theme=Auto" alt="NapCatQQ" width="640" height="320" />
</div>
## 介绍
无
## 项目介绍
## 下载与安装
前往release获取
NapCatQQ 是基于 PC NTQQ 本体实现一套无头 Bot 框架。
## 使用与配置
参考文档
名字寓意 瞌睡猫QQ,像睡着了一样在后台低占用运行的无需GUI界面的NTQQ。
## 开源与安全
为了防止过于扩散与违规使用,未来 NapCat 发版都会不公布源码,在未来形势有所转变下可能会发布源码。
代码将进行混淆与插桩,请不要违法使用与宣传本项目。
## 如何使用
可前往 [Release](https://github.com/NapNeko/NapCatQQ/releases/) 页面下载最新版本
**首次使用** 请务必前往 [官方文档](https://napneko.github.io/) 查看使用文档与教程
## 项目声明
* 请不要在无关地方宣传NapCatQQ,本项目只是用于学习 node 相关知识,切勿用于违法用途
* NapCat 不会收集用户隐私信息,但是未来可能会为了更好的利于 NapCat 的优化会收集一些设备信息,如 cpu 架构,系统版本等
## 相关链接
[Telegram Link](https://t.me/+nLZEnpne-pQ1OWFl)
## 鸣谢名单
[Lagrange](https://github.com/LagrangeDev/Lagrange.Core)
<!--
QQ群:545402644
-->
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

+65
View File
@@ -0,0 +1,65 @@
{
"name": "napcat",
"private": true,
"type": "module",
"version": "1.3.2",
"scripts": {
"watch:dev": "vite --mode development",
"watch:prod": "vite --mode production",
"build:dev": "vite build --mode development",
"build:prod": "vite build --mode production",
"build": "npm run build:dev",
"build:core": "cd ./src/core && npm run build && cd ../.. && node ./script/copy-core.cjs",
"build:webui": "cd ./src/webui && vite build",
"watch": "npm run watch:dev",
"debug-win": "powershell dist/napcat.ps1",
"lint": "eslint --fix src/**/*.{js,ts}",
"release": "npm run build:prod",
"depend": "cd dist && npm install --omit=dev"
},
"devDependencies": {
"@log4js-node/log4js-api": "^1.0.2",
"@rollup/plugin-commonjs": "^25.0.7",
"@rollup/plugin-node-resolve": "^15.2.3",
"@rollup/plugin-typescript": "^11.1.6",
"@types/cors": "^2.8.17",
"@types/express": "^4.17.21",
"@types/figlet": "^1.5.8",
"@types/fluent-ffmpeg": "^2.1.24",
"@types/node": "^20.11.30",
"@types/qrcode-terminal": "^0.12.2",
"@types/uuid": "^9.0.8",
"@types/ws": "^8.5.10",
"@typescript-eslint/eslint-plugin": "^7.4.0",
"@typescript-eslint/parser": "^7.4.0",
"eslint": "^8.57.0",
"eslint-import-resolver-typescript": "^3.6.1",
"eslint-plugin-import": "^2.29.1",
"i": "^0.3.7",
"javascript-obfuscator": "^4.1.0",
"protobufjs-cli": "^1.1.2",
"rollup": "^4.13.2",
"rollup-plugin-dts": "^6.1.0",
"rollup-plugin-obfuscator": "^1.1.0",
"typescript": "^5.3.3",
"vite": "^5.2.6",
"vite-plugin-cp": "^4.0.8",
"vite-plugin-dts": "^3.8.2",
"vite-tsconfig-paths": "^4.3.2"
},
"dependencies": {
"commander": "^12.0.0",
"cors": "^2.8.5",
"express": "^5.0.0-beta.2",
"fast-xml-parser": "^4.3.6",
"file-type": "^19.0.0",
"fluent-ffmpeg": "^2.1.2",
"image-size": "^1.1.1",
"log4js": "^6.9.1",
"qrcode-terminal": "^0.12.0",
"silk-wasm": "^3.3.4",
"sqlite3": "^5.1.7",
"uuid": "^9.0.1",
"ws": "^8.16.0"
}
}
+13
View File
@@ -0,0 +1,13 @@
let fs = require("fs");
let process = require("process")
console.log("[NapCat] [CheckVersion] 开始检测当前仓库版本...");
let currentVersion = require("../package.json").version;
let targetVersion = process.env.VERSION;
console.log("[NapCat] [CheckVersion] currentVersion:", currentVersion, " targetVersion:", targetVersion);
// fs.mkdirSync("./dist");
if (currentVersion === targetVersion) {
fs.writeFileSync("./checkVersion.sh", "#!/bin/bashe\necho \"CheckVersion Is Done\"")
} else {
let runscript = "sed -i 's/\"version\": \"" + currentVersion + "\"/\"version\": \"" + targetVersion + "\"/g' package.json";
fs.writeFileSync("./checkVersion.sh", "#!/bin/bashe\ngit config --global user.email \"bot@test.wumiao.wang\"\n git config --global user.name \"Version\"\n" + runscript + "\ngit add .\n git commit -m \"chore:version change\"\n git push -u origin main")
}
+32
View File
@@ -0,0 +1,32 @@
let fs = require('fs');
let path = require('path');
const coreDistDir = path.join(path.resolve(__dirname, '../'), 'src/core/dist/core/src');
const coreLibDir = path.join(path.resolve(__dirname, '../'), 'src/core.lib/src');
function copyDir(currentPath, outputDir) {
fs.readdir(currentPath, { withFileTypes: true }, (err, entries) => {
if (err?.errno === -4058) return;
entries.forEach(entry => {
const localBasePath = path.join(currentPath, entry.name);
const outputLocalBasePath = path.join(outputDir, entry.name);
if (entry.isDirectory()) {
// 如果是目录,递归调用
if (!fs.existsSync(outputLocalBasePath)) {
fs.mkdirSync(outputLocalBasePath, { recursive: true });
}
copyDir(localBasePath, outputLocalBasePath);
}
else{
// 如果是文件,直接复制
fs.copyFile(localBasePath, outputLocalBasePath, (err) => {
if (err) throw err;
});
}
});
});
}
copyDir(coreDistDir, coreLibDir);
+21
View File
@@ -0,0 +1,21 @@
import fs from 'fs'
import path from 'path'
import { version } from '../src/onebot11/version'
const manifestPath = path.join(__dirname, '../package.json')
function readManifest (): any {
if (fs.existsSync(manifestPath)) {
return JSON.parse(fs.readFileSync(manifestPath, 'utf-8'))
}
}
function writeManifest (manifest: any) {
fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2))
}
const manifest = readManifest()
if (version !== manifest.version) {
manifest.version = version
writeManifest(manifest)
}
+3
View File
@@ -0,0 +1,3 @@
chcp 65001
set ELECTRON_RUN_AS_NODE=1
"H:\Program Files\QQNT最新版\QQ.exe" %~dp0/napcat.cjs %*
+15
View File
@@ -0,0 +1,15 @@
function Get-QQpath {
try {
$key = Get-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ"
$uninstallString = $key.UninstallString
return [System.IO.Path]::GetDirectoryName($uninstallString) + "\QQ.exe"
}
catch {
throw "Error getting UninstallString: $_"
}
}
$params = $args -join " "
$QQpath = Get-QQpath
$Bootfile = Join-Path (Get-Location) "\dist\inject.cjs"
$env:ELECTRON_RUN_AS_NODE = 1
Start-Process powershell -ArgumentList "-noexit", "-noprofile", "-command &{& '$QQpath' --expose-gc $Bootfile $params}"
+17
View File
@@ -0,0 +1,17 @@
function Get-QQpath {
try {
$key = Get-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ"
$uninstallString = $key.UninstallString
return [System.IO.Path]::GetDirectoryName($uninstallString) + "\QQ.exe"
}
catch {
return "D:\QQ.exe"
}
}
$params = $args -join " "
$QQpath = Get-QQpath
$Bootfile = Join-Path $PSScriptRoot "napcat.cjs"
$env:ELECTRON_RUN_AS_NODE = 1
$argumentList = '-noexit', '-noprofile', "-command `"$QQpath`" `"$Bootfile`" $params"
Start-Process powershell -ArgumentList $argumentList -RedirectStandardOutput "log.txt" -RedirectStandardError "error.txt"
powershell Get-Content -Wait -Encoding UTF8 log.txt
+18
View File
@@ -0,0 +1,18 @@
@echo off
setlocal enabledelayedexpansion
chcp 65001
:loop_read
for /f "tokens=2*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ" /v "UninstallString"') do (
set "RetString=%%b"
goto :napcat_boot
)
:napcat_boot
for %%a in ("!RetString!") do (
set "pathWithoutUninstall=%%~dpa"
)
set "QQPath=!pathWithoutUninstall!QQ.exe"
set ELECTRON_RUN_AS_NODE=1
echo !QQPath!
"!QQPath!" ./napcat.cjs %*
+15
View File
@@ -0,0 +1,15 @@
function Get-QQpath {
try {
$key = Get-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ"
$uninstallString = $key.UninstallString
return [System.IO.Path]::GetDirectoryName($uninstallString) + "\QQ.exe"
}
catch {
return "D:\QQ.exe"
}
}
$params = $args -join " "
$QQpath = Get-QQpath
$Bootfile = Join-Path $PSScriptRoot "napcat.cjs"
$env:ELECTRON_RUN_AS_NODE = 1
Start-Process powershell -ArgumentList "-noexit", "-noprofile", "-command &{& chcp 65001;& '$QQpath' $Bootfile $params}"
+17
View File
@@ -0,0 +1,17 @@
@echo off
setlocal enabledelayedexpansion
:loop_read
for /f "tokens=2*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ" /v "UninstallString"') do (
set "RetString=%%b"
goto :napcat_boot
)
:napcat_boot
for %%a in ("!RetString!") do (
set "pathWithoutUninstall=%%~dpa"
)
set "QQPath=!pathWithoutUninstall!QQ.exe"
set ELECTRON_RUN_AS_NODE=1
echo !QQPath!
"!QQPath!" ./napcat.cjs %*
+15
View File
@@ -0,0 +1,15 @@
function Get-QQpath {
try {
$key = Get-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ"
$uninstallString = $key.UninstallString
return [System.IO.Path]::GetDirectoryName($uninstallString) + "\QQ.exe"
}
catch {
return "D:\QQ.exe"
}
}
$params = $args -join " "
$QQpath = Get-QQpath
$Bootfile = Join-Path $PSScriptRoot "napcat.cjs"
$env:ELECTRON_RUN_AS_NODE = 1
Start-Process powershell -ArgumentList "-noexit", "-noprofile", "-command &{& '$QQpath' $Bootfile $params}"
+4
View File
@@ -0,0 +1,4 @@
#!/bin/bash
SCRIPT_DIR=$(realpath $(dirname "${BASH_SOURCE[0]}"))
export ELECTRON_RUN_AS_NODE=1
/opt/QQ/qq ${SCRIPT_DIR}/napcat.cjs $@
+122
View File
@@ -0,0 +1,122 @@
import express, { Express, Request, Response } from 'express';
import cors from 'cors';
import http from 'http';
import { log, logDebug, logError } from '../utils/log';
import { ob11Config } from '@/onebot11/config';
type RegisterHandler = (res: Response, payload: any) => Promise<any>
export abstract class HttpServerBase {
name: string = 'NapCatQQ';
private readonly expressAPP: Express;
private server: http.Server | null = null;
constructor() {
this.expressAPP = express();
this.expressAPP.use(cors());
this.expressAPP.use(express.urlencoded({ extended: true, limit: '5000mb' }));
this.expressAPP.use((req, res, next) => {
// 兼容处理没有带content-type的请求
// log("req.headers['content-type']", req.headers['content-type'])
req.headers['content-type'] = 'application/json';
const originalJson = express.json({ limit: '5000mb' });
// 调用原始的express.json()处理器
originalJson(req, res, (err) => {
if (err) {
logError('Error parsing JSON:', err);
return res.status(400).send('Invalid JSON');
}
next();
});
});
}
authorize(req: Request, res: Response, next: () => void) {
const serverToken = ob11Config.token;
let clientToken = '';
const authHeader = req.get('authorization');
if (authHeader) {
clientToken = authHeader.split('Bearer ').pop() || '';
logDebug('receive http header token', clientToken);
} else if (req.query.access_token) {
if (Array.isArray(req.query.access_token)) {
clientToken = req.query.access_token[0].toString();
} else {
clientToken = req.query.access_token.toString();
}
logDebug('receive http url token', clientToken);
}
if (serverToken && clientToken != serverToken) {
return res.status(403).send(JSON.stringify({ message: 'token verify failed!' }));
}
next();
}
start(port: number, host: string) {
try {
this.expressAPP.get('/', (req: Request, res: Response) => {
res.send(`${this.name}已启动`);
});
this.listen(port, host);
} catch (e: any) {
logError('HTTP服务启动失败', e.toString());
// llonebotError.httpServerError = "HTTP服务启动失败, " + e.toString()
}
}
stop() {
// llonebotError.httpServerError = ""
if (this.server) {
this.server.close();
this.server = null;
}
}
restart(port: number, host: string) {
this.stop();
this.start(port, host);
}
abstract handleFailed(res: Response, payload: any, err: any): void
registerRouter(method: 'post' | 'get' | string, url: string, handler: RegisterHandler) {
if (!url.startsWith('/')) {
url = '/' + url;
}
// @ts-expect-error wait fix
if (!this.expressAPP[method]) {
const err = `${this.name} register router failed,${method} not exist`;
logError(err);
throw err;
}
// @ts-expect-error wait fix
this.expressAPP[method](url, this.authorize, async (req: Request, res: Response) => {
let payload = req.body;
if (method == 'get') {
payload = req.query;
} else if (req.query) {
payload = { ...req.query, ...req.body };
}
logDebug('收到http请求', url, payload);
try {
res.send(await handler(res, payload));
} catch (e: any) {
this.handleFailed(res, payload, e.stack.toString());
}
});
}
protected listen(port: number, host: string = '0.0.0.0') {
host = host || '0.0.0.0';
try {
this.server = this.expressAPP.listen(port, host, () => {
const info = `${this.name} started ${host}:${port}`;
log(info);
});
}catch (e: any) {
logError('HTTP服务启动失败, 请检查监听的ip地址和端口', e.stack.toString());
}
}
}
+104
View File
@@ -0,0 +1,104 @@
import { WebSocket, WebSocketServer } from 'ws';
import urlParse from 'url';
import { IncomingMessage } from 'node:http';
import { log } from '@/common/utils/log';
class WebsocketClientBase {
private wsClient: WebSocket | undefined;
constructor() {
}
send(msg: string) {
if (this.wsClient && this.wsClient.readyState == WebSocket.OPEN) {
this.wsClient.send(msg);
}
}
onMessage(msg: string) {
}
}
export class WebsocketServerBase {
private ws: WebSocketServer | null = null;
public token: string = '';
constructor() {
}
start(port: number, host: string = '') {
try {
this.ws = new WebSocketServer({
port ,
host: '',
maxPayload: 1024 * 1024 * 1024
});
log(`ws服务启动成功, ${host}:${port}`);
} catch (e: any) {
throw Error('ws服务启动失败, 请检查监听的ip和端口' + e.toString());
}
this.ws.on('connection', (wsClient, req) => {
const url: string = req.url!.split('?').shift() || '/';
this.authorize(wsClient, req);
this.onConnect(wsClient, url, req);
wsClient.on('message', async (msg) => {
this.onMessage(wsClient, url, msg.toString());
});
});
}
stop() {
this.ws && this.ws.close((err) => {
log('ws server close failed!', err);
});
this.ws = null;
}
restart(port: number) {
this.stop();
this.start(port);
}
authorize(wsClient: WebSocket, req: IncomingMessage) {
const url = req.url!.split('?').shift();
log('ws connect', url);
let clientToken: string = '';
const authHeader = req.headers['authorization'];
if (authHeader) {
clientToken = authHeader.split('Bearer ').pop() || '';
log('receive ws header token', clientToken);
} else {
const parsedUrl = urlParse.parse(req.url || '/', true);
const urlToken = parsedUrl.query.access_token;
if (urlToken) {
if (Array.isArray(urlToken)) {
clientToken = urlToken[0];
} else {
clientToken = urlToken;
}
log('receive ws url token', clientToken);
}
}
if (this.token && clientToken != this.token) {
this.authorizeFailed(wsClient);
return wsClient.close();
}
}
authorizeFailed(wsClient: WebSocket) {
}
onConnect(wsClient: WebSocket, url: string, req: IncomingMessage) {
}
onMessage(wsClient: WebSocket, url: string, msg: string) {
}
sendHeart() {
}
}
+35
View File
@@ -0,0 +1,35 @@
import { sleep } from '@/common/utils/helper';
type AsyncQueueTask = (() => void) | (()=>Promise<void>);
export class AsyncQueue {
private tasks: (AsyncQueueTask)[] = [];
public addTask(task: AsyncQueueTask) {
this.tasks.push(task);
// console.log('addTask', this.tasks.length);
if (this.tasks.length === 1) {
this.runQueue().then().catch(()=>{});
}
}
private async runQueue() {
// console.log('runQueue', this.tasks.length);
while (this.tasks.length > 0) {
const task = this.tasks[0];
// console.log('typeof task', typeof task);
try {
const taskRet = task();
// console.log('type of taskRet', typeof taskRet, taskRet);
if (taskRet instanceof Promise) {
await taskRet;
}
} catch (e) {
console.error(e);
}
this.tasks.shift();
await sleep(100);
}
}
}
+67
View File
@@ -0,0 +1,67 @@
import path from 'node:path';
import fs from 'node:fs';
import { log, logDebug, logError } from '@/common/utils/log';
const configDir = path.resolve(__dirname, 'config');
fs.mkdirSync(configDir, { recursive: true });
export class ConfigBase<T>{
constructor() {
}
protected getKeys(): string[] | null {
// 决定 key 在json配置文件中的顺序
return null;
}
getConfigDir(){
const configDir = path.resolve(__dirname, 'config');
fs.mkdirSync(configDir, { recursive: true });
return configDir;
}
getConfigPath(): string {
throw new Error('Method not implemented.');
}
read() {
const configPath = this.getConfigPath();
if (!fs.existsSync(configPath)) {
try{
fs.writeFileSync(configPath, JSON.stringify(this, this.getKeys(), 2));
log(`配置文件${configPath}已创建\n如果修改此文件后需要重启 NapCat 生效`);
}
catch (e: any) {
logError(`创建配置文件 ${configPath} 时发生错误:`, e.message);
}
return this;
}
try {
const data = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
logDebug(`配置文件${configPath}已加载`, data);
Object.assign(this, data);
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error
this.save(this); // 保存一次,让新版本的字段写入
return this;
} catch (e: any) {
if (e instanceof SyntaxError) {
logError(`配置文件 ${configPath} 格式错误,请检查配置文件:`, e.message);
} else {
logError(`读取配置文件 ${configPath} 时发生错误:`, e.message);
}
return this;
}
}
save(config: T) {
Object.assign(this, config);
const configPath = this.getConfigPath();
try {
fs.writeFileSync(configPath, JSON.stringify(this, this.getKeys(), 2));
} catch (e: any) {
logError(`保存配置文件 ${configPath} 时发生错误:`, e.message);
}
}
}
+72
View File
@@ -0,0 +1,72 @@
import path from 'node:path';
import fs from 'node:fs';
import os from 'node:os';
import { systemPlatform } from '@/common/utils/system';
export const exePath = process.execPath;
export const pkgInfoPath = path.join(path.dirname(exePath), 'resources', 'app', 'package.json');
let configVersionInfoPath;
if (os.platform() !== 'linux') {
configVersionInfoPath = path.join(path.dirname(exePath), 'resources', 'app', 'versions', 'config.json');
} else {
const userPath = os.homedir();
const appDataPath = path.resolve(userPath, './.config/QQ');
configVersionInfoPath = path.resolve(appDataPath, './versions/config.json');
}
if (typeof configVersionInfoPath !== 'string') {
throw new Error('Something went wrong when load QQ info path');
}
export { configVersionInfoPath };
type QQPkgInfo = {
version: string;
buildVersion: string;
platform: string;
eleArch: string;
}
type QQVersionConfigInfo = {
baseVersion: string;
curVersion: string;
prevVersion: string;
onErrorVersions: Array<any>;
buildId: string;
}
let _qqVersionConfigInfo: QQVersionConfigInfo = {
'baseVersion': '9.9.9-23361',
'curVersion': '9.9.9-23361',
'prevVersion': '',
'onErrorVersions': [],
'buildId': '23361'
};
if (fs.existsSync(configVersionInfoPath)) {
try {
const _ =JSON.parse(fs.readFileSync(configVersionInfoPath).toString());
_qqVersionConfigInfo = Object.assign(_qqVersionConfigInfo, _);
} catch (e) {
console.error('Load QQ version config info failed, Use default version', e);
}
}
export const qqVersionConfigInfo: QQVersionConfigInfo = _qqVersionConfigInfo;
export const qqPkgInfo: QQPkgInfo = require(pkgInfoPath);
// platform_type: 3,
// app_type: 4,
// app_version: '9.9.9-23159',
// qua: 'V1_WIN_NQ_9.9.9_23159_GW_B',
// appid: '537213764',
// platVer: '10.0.26100',
// clientVer: '9.9.9-23159',
let _appid: string = '537213803'; // 默认为 Windows 平台的 appid
if (systemPlatform === 'linux') {
_appid = '537213827';
}
// todo: mac 平台的 appid
export const appid = _appid;
+135
View File
@@ -0,0 +1,135 @@
import fs from 'fs';
import { encode, getDuration, getWavFileInfo, isWav } from 'silk-wasm';
import fsPromise from 'fs/promises';
import { log, logError } from './log';
import path from 'node:path';
import { v4 as uuidv4 } from 'uuid';
import { spawn } from 'node:child_process';
import { getTempDir } from '@/common/utils/file';
let TEMP_DIR = './';
setTimeout(() => {
TEMP_DIR = getTempDir();
}, 100);
export async function encodeSilk(filePath: string) {
function getFileHeader(filePath: string) {
// 定义要读取的字节数
const bytesToRead = 7;
try {
const buffer = fs.readFileSync(filePath, {
encoding: null,
flag: 'r',
});
const fileHeader = buffer.toString('hex', 0, bytesToRead);
return fileHeader;
} catch (err) {
console.error('读取文件错误:', err);
return;
}
}
async function isWavFile(filePath: string) {
return isWav(fs.readFileSync(filePath));
}
async function guessDuration(pttPath: string) {
const pttFileInfo = await fsPromise.stat(pttPath);
let duration = pttFileInfo.size / 1024 / 3; // 3kb/s
duration = Math.floor(duration);
duration = Math.max(1, duration);
log('通过文件大小估算语音的时长:', duration);
return duration;
}
// function verifyDuration(oriDuration: number, guessDuration: number) {
// // 单位都是秒
// if (oriDuration - guessDuration > 10) {
// return guessDuration
// }
// oriDuration = Math.max(1, oriDuration)
// return oriDuration
// }
// async function getAudioSampleRate(filePath: string) {
// try {
// const mm = await import('music-metadata');
// const metadata = await mm.parseFile(filePath);
// log(`${filePath}采样率`, metadata.format.sampleRate);
// return metadata.format.sampleRate;
// } catch (error) {
// log(`${filePath}采样率获取失败`, error.stack);
// // console.error(error);
// }
// }
try {
const pttPath = path.join(TEMP_DIR, uuidv4());
if (getFileHeader(filePath) !== '02232153494c4b') {
log(`语音文件${filePath}需要转换成silk`);
const _isWav = await isWavFile(filePath);
const pcmPath = pttPath + '.pcm';
let sampleRate = 0;
const convert = () => {
return new Promise<Buffer>((resolve, reject) => {
// todo: 通过配置文件获取ffmpeg路径
const ffmpegPath = process.env.FFMPEG_PATH || 'ffmpeg';
const cp = spawn(ffmpegPath, ['-y', '-i', filePath, '-ar', '24000', '-ac', '1', '-f', 's16le', pcmPath]);
cp.on('error', err => {
log('FFmpeg处理转换出错: ', err.message);
return reject(err);
});
cp.on('exit', (code, signal) => {
const EXIT_CODES = [0, 255];
if (code == null || EXIT_CODES.includes(code)) {
sampleRate = 24000;
const data = fs.readFileSync(pcmPath);
fs.unlink(pcmPath, (err) => {
});
return resolve(data);
}
log(`FFmpeg exit: code=${code ?? 'unknown'} sig=${signal ?? 'unknown'}`);
reject(Error('FFmpeg处理转换失败'));
});
});
};
let input: Buffer;
if (!_isWav) {
input = await convert();
} else {
input = fs.readFileSync(filePath);
const allowSampleRate = [8000, 12000, 16000, 24000, 32000, 44100, 48000];
const { fmt } = getWavFileInfo(input);
// log(`wav文件信息`, fmt)
if (!allowSampleRate.includes(fmt.sampleRate)) {
input = await convert();
}
}
const silk = await encode(input, sampleRate);
fs.writeFileSync(pttPath, silk.data);
log(`语音文件${filePath}转换成功!`, pttPath, '时长:', silk.duration);
return {
converted: true,
path: pttPath,
duration: silk.duration / 1000
};
} else {
const silk = fs.readFileSync(filePath);
let duration = 0;
try {
duration = getDuration(silk) / 1000;
} catch (e: any) {
log('获取语音文件时长失败, 使用文件大小推测时长', filePath, e.stack);
duration = await guessDuration(filePath);
}
return {
converted: false,
path: filePath,
duration,
};
}
} catch (error: any) {
logError('convert silk failed', error.stack);
return {};
}
}
+19
View File
@@ -0,0 +1,19 @@
import * as os from 'os';
import path from 'node:path';
import fs from 'fs';
export function getModuleWithArchName(moduleName: string) {
const systemPlatform = os.platform();
const cpuArch = os.arch();
return `${moduleName}-${systemPlatform}-${cpuArch}.node`;
}
export function cpModule(moduleName: string) {
const currentDir = path.resolve(__dirname);
const fileName = `./${getModuleWithArchName(moduleName)}`;
try {
fs.copyFileSync(path.join(currentDir, fileName), path.join(currentDir, `${moduleName}.node`));
} catch (e) {
}
}
+273
View File
@@ -0,0 +1,273 @@
import fs from 'fs';
import fsPromise from 'fs/promises';
import crypto from 'crypto';
import util from 'util';
import path from 'node:path';
import { log } from './log';
import { dbUtil } from '@/core/utils/db';
import * as fileType from 'file-type';
import { v4 as uuidv4 } from 'uuid';
import { napCatCore } from '@/core';
export const getNapCatDir = () => {
const p = path.join(napCatCore.dataPath, 'NapCat');
fs.mkdirSync(p, { recursive: true });
return p;
};
export const getTempDir = () => {
const p = path.join(getNapCatDir(), 'temp');
// 创建临时目录
if (!fs.existsSync(p)) {
fs.mkdirSync(p, { recursive: true });
}
return p;
};
export function isGIF(path: string) {
const buffer = Buffer.alloc(4);
const fd = fs.openSync(path, 'r');
fs.readSync(fd, buffer, 0, 4, 0);
fs.closeSync(fd);
return buffer.toString() === 'GIF8';
}
// 定义一个异步函数来检查文件是否存在
export function checkFileReceived(path: string, timeout: number = 3000): Promise<void> {
return new Promise((resolve, reject) => {
const startTime = Date.now();
function check() {
if (fs.existsSync(path)) {
resolve();
} else if (Date.now() - startTime > timeout) {
reject(new Error(`文件不存在: ${path}`));
} else {
setTimeout(check, 100);
}
}
check();
});
}
export async function file2base64(path: string) {
const readFile = util.promisify(fs.readFile);
const result = {
err: '',
data: ''
};
try {
// 读取文件内容
// if (!fs.existsSync(path)){
// path = path.replace("\\Ori\\", "\\Thumb\\");
// }
try {
await checkFileReceived(path, 5000);
} catch (e: any) {
result.err = e.toString();
return result;
}
const data = await readFile(path);
// 转换为Base64编码
result.data = data.toString('base64');
} catch (err: any) {
result.err = err.toString();
}
return result;
}
export function calculateFileMD5(filePath: string): Promise<string> {
return new Promise((resolve, reject) => {
// 创建一个流式读取器
const stream = fs.createReadStream(filePath);
const hash = crypto.createHash('md5');
stream.on('data', (data: Buffer) => {
// 当读取到数据时,更新哈希对象的状态
hash.update(data);
});
stream.on('end', () => {
// 文件读取完成,计算哈希
const md5 = hash.digest('hex');
resolve(md5);
});
stream.on('error', (err: Error) => {
// 处理可能的读取错误
reject(err);
});
});
}
export interface HttpDownloadOptions {
url: string;
headers?: Record<string, string> | string;
}
export async function httpDownload(options: string | HttpDownloadOptions): Promise<Buffer> {
const chunks: Buffer[] = [];
let url: string;
let headers: Record<string, string> = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36'
};
if (typeof options === 'string') {
url = options;
} else {
url = options.url;
if (options.headers) {
if (typeof options.headers === 'string') {
headers = JSON.parse(options.headers);
} else {
headers = options.headers;
}
}
}
const fetchRes = await fetch(url, headers);
if (!fetchRes.ok) throw new Error(`下载文件失败: ${fetchRes.statusText}`);
const blob = await fetchRes.blob();
const buffer = await blob.arrayBuffer();
return Buffer.from(buffer);
}
type Uri2LocalRes = {
success: boolean,
errMsg: string,
fileName: string,
ext: string,
path: string,
isLocal: boolean
}
export async function uri2local(uri: string, fileName: string | null = null): Promise<Uri2LocalRes> {
const res = {
success: false,
errMsg: '',
fileName: '',
ext: '',
path: '',
isLocal: false
};
if (!fileName) {
fileName = uuidv4();
}
let filePath = path.join(getTempDir(), fileName);
let url = null;
try {
url = new URL(uri);
} catch (e: any) {
res.errMsg = `uri ${uri} 解析失败,` + e.toString() + ` 可能${uri}不存在`;
return res;
}
// log("uri protocol", url.protocol, uri);
if (url.protocol == 'base64:') {
// base64转成文件
const base64Data = uri.split('base64://')[1];
try {
const buffer = Buffer.from(base64Data, 'base64');
fs.writeFileSync(filePath, buffer);
} catch (e: any) {
res.errMsg = 'base64文件下载失败,' + e.toString();
return res;
}
} else if (url.protocol == 'http:' || url.protocol == 'https:') {
// 下载文件
let buffer: Buffer | null = null;
try {
buffer = await httpDownload(uri);
} catch (e: any) {
res.errMsg = `${url}下载失败,` + e.toString();
return res;
}
try {
const pathInfo = path.parse(decodeURIComponent(url.pathname));
if (pathInfo.name) {
fileName = pathInfo.name;
if (pathInfo.ext) {
fileName += pathInfo.ext;
// res.ext = pathInfo.ext
}
}
fileName = fileName.replace(/[/\\:*?"<>|]/g, '_');
res.fileName = fileName;
filePath = path.join(getTempDir(), uuidv4() + fileName);
fs.writeFileSync(filePath, buffer);
} catch (e: any) {
res.errMsg = `${url}下载失败,` + e.toString();
return res;
}
} else {
let pathname: string;
if (url.protocol === 'file:') {
// await fs.copyFile(url.pathname, filePath);
pathname = decodeURIComponent(url.pathname);
if (process.platform === 'win32') {
filePath = pathname.slice(1);
} else {
filePath = pathname;
}
} else {
const cache = await dbUtil.getFileCacheByName(uri);
if (cache) {
filePath = cache.path;
} else {
filePath = uri;
}
}
res.isLocal = true;
}
// else{
// res.errMsg = `不支持的file协议,` + url.protocol
// return res
// }
// if (isGIF(filePath) && !res.isLocal) {
// await fs.rename(filePath, filePath + ".gif");
// filePath += ".gif";
// }
if (!res.isLocal && !res.ext) {
try {
const ext: string | undefined = (await fileType.fileTypeFromFile(filePath))?.ext;
if (ext) {
log('获取文件类型', ext, filePath);
fs.renameSync(filePath, filePath + `.${ext}`);
filePath += `.${ext}`;
res.fileName += `.${ext}`;
res.ext = ext;
}
} catch (e) {
// log("获取文件类型失败", filePath,e.stack)
}
}
res.success = true;
res.path = filePath;
return res;
}
export async function copyFolder(sourcePath: string, destPath: string) {
try {
const entries = await fsPromise.readdir(sourcePath, { withFileTypes: true });
await fsPromise.mkdir(destPath, { recursive: true });
for (const entry of entries) {
const srcPath = path.join(sourcePath, entry.name);
const dstPath = path.join(destPath, entry.name);
if (entry.isDirectory()) {
await copyFolder(srcPath, dstPath);
} else {
try {
await fsPromise.copyFile(srcPath, dstPath);
} catch (error) {
console.error(`无法复制文件 '${srcPath}' 到 '${dstPath}': ${error}`);
// 这里可以决定是否要继续复制其他文件
}
}
}
} catch (error) {
console.error('复制文件夹时出错:', error);
}
}
+37
View File
@@ -0,0 +1,37 @@
import crypto from 'node:crypto';
export function sleep(ms: number): Promise<void> {
return new Promise(resolve => setTimeout(resolve, ms));
}
export function getMd5(s: string) {
const h = crypto.createHash('md5');
h.update(s);
return h.digest('hex');
}
export function isNull(value: any) {
return value === undefined || value === null;
}
export function isNumeric(str: string) {
return /^\d+$/.test(str);
}
export function truncateString(obj: any, maxLength = 500) {
if (obj !== null && typeof obj === 'object') {
Object.keys(obj).forEach(key => {
if (typeof obj[key] === 'string') {
// 如果是字符串且超过指定长度,则截断
if (obj[key].length > maxLength) {
obj[key] = obj[key].substring(0, maxLength) + '...';
}
} else if (typeof obj[key] === 'object') {
// 如果是对象或数组,则递归调用
truncateString(obj[key], maxLength);
}
});
}
return obj;
}
+116
View File
@@ -0,0 +1,116 @@
import log4js, { Configuration } from 'log4js';
import { truncateString } from '@/common/utils/helper';
import path from 'node:path';
import { SelfInfo } from '@/core';
export enum LogLevel {
DEBUG = 'debug',
INFO = 'info',
WARN = 'warn',
ERROR = 'error',
FATAL = 'fatal',
}
const logDir = path.join(path.resolve(__dirname), 'logs');
function getFormattedTimestamp() {
const now = new Date();
const year = now.getFullYear();
const month = (now.getMonth() + 1).toString().padStart(2, '0');
const day = now.getDate().toString().padStart(2, '0');
const hours = now.getHours().toString().padStart(2, '0');
const minutes = now.getMinutes().toString().padStart(2, '0');
const seconds = now.getSeconds().toString().padStart(2, '0');
return `${year}-${month}-${day}_${hours}-${minutes}-${seconds}`;
}
const filename = `${getFormattedTimestamp()}.log`;
const logPath = path.join(logDir, filename);
const logConfig: Configuration = {
appenders: {
FileAppender: { // 输出到文件的appender
type: 'file',
filename: logPath, // 指定日志文件的位置和文件名
maxLoogSize: 10485760, // 日志文件的最大大小(单位:字节),这里设置为10MB
layout: {
type: 'pattern',
pattern: '%d{yyyy-MM-dd hh:mm:ss} [%p] - %m'
}
},
ConsoleAppender: { // 输出到控制台的appender
type: 'console',
layout: {
type: 'pattern',
pattern: '%d{yyyy-MM-dd hh:mm:ss} [%p] - %m'
}
}
},
categories: {
default: { appenders: ['FileAppender', 'ConsoleAppender'], level: 'debug' }, // 默认情况下同时输出到文件和控制台
file: { appenders: ['FileAppender'], level: 'debug' },
console: { appenders: ['ConsoleAppender'], level: 'debug' }
}
};
log4js.configure(logConfig);
export function setLogLevel(fileLogLevel: LogLevel, consoleLogLevel: LogLevel) {
logConfig.categories.file.level = fileLogLevel;
logConfig.categories.console.level = consoleLogLevel;
log4js.configure(logConfig);
}
export function setLogSelfInfo(selfInfo: SelfInfo) {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error
logConfig.appenders.FileAppender.layout.pattern = logConfig.appenders.ConsoleAppender.layout.pattern =
`%d{yyyy-MM-dd hh:mm:ss} [%p] ${selfInfo.nick}(${selfInfo.uin}) %m`;
log4js.configure(logConfig);
}
let fileLogEnabled = true;
let consoleLogEnabled = true;
export function enableFileLog(enable: boolean) {
fileLogEnabled = enable;
}
export function enableConsoleLog(enable: boolean) {
consoleLogEnabled = enable;
}
function formatMsg(msg: any[]){
let logMsg = '';
for (const msgItem of msg) {
// 判断是否是对象
if (typeof msgItem === 'object') {
const obj = JSON.parse(JSON.stringify(msgItem, null, 2));
logMsg += JSON.stringify(truncateString(obj)) + ' ';
continue;
}
logMsg += msgItem + ' ';
}
return '\n' + logMsg + '\n';
}
function _log(level: LogLevel, ...args: any[]){
if (consoleLogEnabled){
log4js.getLogger('console')[level](formatMsg(args));
}
if (fileLogEnabled){
log4js.getLogger('file')[level](formatMsg(args));
}
}
export function log(...args: any[]) {
// info 等级
_log(LogLevel.INFO, ...args);
}
export function logDebug(...args: any[]) {
_log(LogLevel.DEBUG, ...args);
}
export function logError(...args: any[]) {
_log(LogLevel.ERROR, ...args);
}
+7
View File
@@ -0,0 +1,7 @@
// QQ等级换算
import { QQLevel } from '../../core/src/entities';
export function calcQQLevel(level: QQLevel) {
const { crownNum, sunNum, moonNum, starNum } = level;
return crownNum * 64 + sunNum * 16 + moonNum * 4 + starNum;
}
+15
View File
@@ -0,0 +1,15 @@
import { exit } from "process";
import { resolve } from "path";
async function reboot() {
let batScript = resolve(__dirname, './napcat.bat');
let batUtf8Script = resolve(__dirname, './napcat-utf8.bat');
let bashScript = resolve(__dirname, './napcat.sh');
//如果是win系统写出 5s延迟启动 默认batUtf8Script启动
// 如果是linux系统写出 5s延迟启动 默认bashScript启动
if (process.platform === 'win32') {
// console.log('正在重启...');
} else if (process.platform === 'linux') {
//console.log('正在重启...');
}
exit(0);
}
+57
View File
@@ -0,0 +1,57 @@
const https = require('node:https');
export async function HttpGetCookies(url: string): Promise<Map<string, string>> {
return new Promise((resolve, reject) => {
const result: Map<string, string> = new Map<string, string>();
const req = https.get(url, (res: any) => {
res.on('data', (data: any) => {
});
res.on('end', () => {
try {
const responseCookies = res.headers['set-cookie'];
for (const line of responseCookies) {
const parts = line.split(';');
const [key, value] = parts[0].split('=');
result.set(key, value);
}
} catch (e) {
}
resolve(result);
});
});
req.on('error', (error: any) => {
resolve(result);
// console.log(error)
});
req.end();
});
}
export async function HttpPostCookies(url: string): Promise<Map<string, string>> {
return new Promise((resolve, reject) => {
const result: Map<string, string> = new Map<string, string>();
const req = https.get(url, (res: any) => {
res.on('data', (data: any) => {
});
res.on('end', () => {
try {
const responseCookies = res.headers['set-cookie'];
for (const line of responseCookies) {
const parts = line.split(';');
const [key, value] = parts[0].split('=');
result.set(key, value);
}
} catch (e) {
}
resolve(result);
});
});
req.on('error', (error: any) => {
resolve(result);
// console.log(error)
});
req.end();
});
}
+10
View File
@@ -0,0 +1,10 @@
import os from 'node:os';
import path from 'node:path';
export const systemPlatform = os.platform();
export const cpuArch = os.arch();
export const systemVersion = os.release();
export const hostname = os.hostname();
const homeDir = os.homedir();
export const downloadsPath = path.join(homeDir, 'Downloads');
export const systemName = os.type();
+44
View File
@@ -0,0 +1,44 @@
import { request } from 'node:https';
export function postLoginStatus() {
const req = request(
{
hostname: 'napcat.wumiao.wang',
path: '/api/send',
port: 443,
method: 'POST',
headers: {
'Content-Type': 'application/json',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0'
}
},
(res) => {
//let data = '';
res.on('data', (chunk) => {
//data += chunk;
});
res.on('error', (err) => {
});
res.on('end', () => {
//console.log('Response:', data);
});
}
);
req.on('error', (e) => {
// console.error('Request error:', e);
});
const StatesData = {
type: 'event',
payload: {
'website': '952bf82f-8f49-4456-aec5-e17db5f27f7e',
'hostname': 'napcat.demo.cn',
'screen': '1920x1080',
'language': 'zh-CN',
'title': 'OneBot.Login',
'url': '/login/onebot11/1.3.2',
'referrer': 'https://napcat.demo.cn/login?type=onebot11'
}
};
req.write(JSON.stringify(StatesData));
req.end();
}
+44
View File
@@ -0,0 +1,44 @@
import { get as httpsGet } from 'node:https';
function requestMirror(url: string): Promise<string | undefined> {
return new Promise((resolve, reject) => {
httpsGet(url, (response) => {
let data = '';
response.on('data', (chunk) => {
data += chunk;
});
response.on('end', () => {
try {
const parsedData = JSON.parse(data);
const version = parsedData.version;
resolve(version);
} catch (error) {
// 解析失败或无法访问域名,跳过
resolve(undefined);
}
});
}).on('error', (error) => {
// 请求失败,跳过
resolve(undefined);
});
});
}
export async function checkVersion(): Promise<string> {
return new Promise(async (resolve, reject) => {
const MirrorList =
[
'https://fastly.jsdelivr.net/gh/NapNeko/NapCatQQ@main/package.json',
'https://gcore.jsdelivr.net/gh/NapNeko/NapCatQQ@main/package.json',
'https://cdn.jsdelivr.us/gh/NapNeko/NapCatQQ@main/package.json',
'https://jsd.cdn.zzko.cn/gh/NapNeko/NapCatQQ@main/package.json'
];
for (const url of MirrorList) {
const version = await requestMirror(url);
if (version) {
resolve(version);
}
}
reject('get verison error!');
});
}
+87
View File
@@ -0,0 +1,87 @@
import { log } from './log';
import ffmpeg from 'fluent-ffmpeg';
import fs from 'fs';
const defaultVideoThumbB64 = '/9j/4AAQSkZJRgABAQAAAQABAAD//gAXR2VuZXJhdGVkIGJ5IFNuaXBhc3Rl/9sAhAAKBwcIBwYKCAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUuRElDPEg3PT47AQoLCw4NDhwQEBw7KCIoOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCAF/APADAREAAhEBAxEB/8QBogAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoLEAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+foBAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKCxEAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDiAayNxwagBwNAC5oAM0xBmgBM0ANJoAjY0AQsaBkTGgCM0DEpAFAC0AFMBaACgAoEJTASgQlACUwCgQ4UAOFADhQA4UAOFADxQIkBqDQUGgBwagBQaBC5pgGaAELUAMLUARs1AETGgBhNAxhoASkAUALQIKYxaBBQAUwEoAQ0CEoASmAUAOoEKKAHCgBwoAeKAHigQ7NZmoZpgLmgBd1Ahd1ABupgNLUAMLUAMY0AMJoAYaAENACUCCgAoAWgAoAWgBKYCUAJQISgApgLQAooEOFACigB4oAeKBDxQAVmaiZpgGaAFzQAbqAE3UAIWpgNJoAYTQIaaAEoAQ0CEoASgBaACgBaACmAUAJQAlAgoAKYC0AKKBCigB4FADgKBDwKAHigBuazNRM0DEzTAM0AJmgAzQAhNAhpNACGmA2gQlACUCEoAKACgBaAFpgFACUAJQAUCCmAUALQIcBQA4CgB4FADgKBDhQA4UAMzWZqNzTGJQAZoATNABmgBKAEoEIaYCUCEoASgQlABQAtABQAtMBKACgAoEFABimAYoEKBQA4CgB4FADwKBDgKAFFADhQBCazNhKAEpgFACUAFACUAFAhDTAbQISgAoEJQAUALQAtMAoAKADFABigQYoAMUALimIUCgBwFAh4FADgKAHUALQAtAENZmwlACUwEoAKAEoAKACgQlMBpoEJQAUCCgBcUAFABTAXFAC4oAMUAGKBBigAxQIKYCigQ8UAOFADhQAtAC0ALQBDWZqJQMSgBKYBQAlABQISgBKYCGgQlAC0CCgBcUAFABTAUCkA7FMAxQAYoEJQAUCCmAooEOFADxQA4UAFAC0ALQBDWZqJQAlACUxhQAlABQIKAEoASmISgBcUCCgBaACgBcUAKBQAuKYC0CEoAQ0AJQISmAooEPFADhQA4UALQAtAC0AQ1maiUAFACUAJTAKAEoAKAEoAMUxBigAxQIWgAoAKAFAoAWgBaYBQIQ0ANNACUCCmIUUAOFADxQA4UALQAtABQBFWZqFACUAFACYpgFACUAFACUAFAgxTEFABQAUALQAooAWgAoAKYDTQIaaAEpiCgQ4UAOFAh4oGOFAC0ALSAKYEdZmglABQAUDDFACUwEoASgAoAKBBQIKYBQAUALQAtAC0AJQAhpgNJoENJoATNMQCgQ8UCHigB4oAWgYtABQAUAMrM0CgAoAKADFACUxiUAJQAlAgoAKYgoAKACgYtAC0AFAhDTAQmgBhNAhpNACZpiFBoEPFAEi0CHigB1ABQAUDEoAbWZoFABQAtABTAQ0ANNAxDQAlAhaAEpiCgAoGFAC0AFABmgBCaYhpNADCaBDSaBBmgABpiJFNAEimgB4NADqAFzQAlACE0AJWZoFAC0AFAC0wEIoAaaAG0AJQAUCCgApjCgAoAKADNABmgBpNMQ0mgBpNAhhNAgzQAoNADwaAHqaAJAaBDgaYC5oATNACZoAWszQKACgBaBDqYCGgBpoAYaBiUCCgBKYBQMKACgAoAM0AITQIaTQA0mmA0mgQ3NAhKAHCgBwNADwaAHg0AOBpiFzQAZoATNAD6zNAoAKAFoEOpgBoAaaAGGmAw0AJmgAzQMM0AGaADNABmgBM0AITQIaTQAhNMQw0AJQIKAFFADhQA4GgBwNADs0xC5oAM0CDNAEtZmoUCCgBaAHUwCgBppgRtQAw0ANzQAZoAM0AGaADNABmgBKAEoAQ0ANNMQhoEJQAlMBaQDgaAFBoAcDTAdmgQuaADNAgzQBPWZqFAgoAWgBaYC0CGmmBG1AyM0ANJoATNACZoAXNABmgAzQAUAJQAhoAQ0xDTQISmAUALQAUgHA0AKDTAdmgQuaBBQAtAFiszQKACgBaAFFMAoEIaYEbUDI2oAYaAEoASgAzQAuaACgAoAKAENMQ00AJTEFAhKACgAoAXNACg0AOBoAWgQtAC0AWazNAoAKACgBaYBQIQ0AMNMYw0AMIoAbQAlMAoAKACgAzSAKYhKAENACUxBQIKACgBKACgBaAHCgQ4UALQAUAWqzNAoAKACgApgFACGgQ00xjTQAwigBCKAG4pgJQAlABQAUCCgBKACgBKYgoEFABQISgAoAWgBRQA4UALQAUCLdZmoUAFABQAlMAoASgBDQA00wENACYoATFMBpFADSKAEoEJQAUAFABQAlMQtAgoASgQUAJQAUAKKAHCgBaBBQBbrM1CgAoAKACmAUAJQAlADaYBQAlACYpgIRQA0igBpFAhtABQAUAFMAoEFABQIKAEoASgQUALQAooAWgQUAW81mbC0CCgApgFACUAIaAEpgJQAUAFABQAhFMBpFADSKAGkUCExQAYoAMUAGKADFMQYoAMUCExSATFABQIKYBQAtABQIt5qDYM0ALmgQtIApgIaAENADaACmAlAC0ALQAUwGkUANIoAaRQAmKBBigAxQAYoAMUAGKBBigBMUAJigQmKAExTAKBC0AFAFnNQaig0AKDQAtAgoASgBDQAlMBKACgAFADhQAtMBCKAGkUAIRQAmKADFABigQmKADFACYoAXFABigQmKAExQAmKBCYpgJigAoAnzUGgZoAcDQAuaBC0AJQAhoASmAlABQAtADhQAtMAoATFACEUAJigAxQAYoATFAhMUAFABQAuKADFABigBpWgBCKBCYpgJigB+ag0DNADgaBDgaAFzQITNACUAJTAKACgBRQAopgOoAWgBKAEoAKACgAoASgBpoEJQAooAWgBaBhigBMUCEIoAQigBMUAJSLCgBQaBDgaQC5oEFACUwCgBKACmAtADhQA4UALQAUAJQAUAJQAUAJQAhoENoAWgBRQAooGLQAUAGKAGkUAIRQIZSKEoGKKBDhQAUCCgAoAKBBQAUwFoGKKAHCgBaACgAoASgAoASgBCaAEoEJmgAoAUGgBQaAHZoGFABQAUANoAjpDEoAWgBaAFoEFACUALQAUCCmAUAOFAxRQAtAC0AJQAUAJQAmaBDSaAEzQAmaYBmgBQaAHA0gFzQAuaBhmgAzQAlAEdIYUALQAtAgoAKAEoEFAC0AFMAoAUUDFFAC0ALQAUAJQAhoENNACE0wEoATNABmgBc0ALmgBc0gDNAC5oATNABmgBKRQlACigB1AgoASgQlABTAWgBKACgBaBi0ALQAZoAM0AFACGgQ00wENACUAJQAUCFzQMM0ALmgAzQAZoAM0AGaQC0igoAUUALQIWgBDQISmAUAFACUAFABQAuaBi5oAM0AGaBBmgBKAEpgIaAG0AJQAUCFoAM0DDNAC5oATNABmgAzQBJUlBQAooAWgQtACGmIaaACgAoASgBKACgBc0DCgQUAGaADNABTASgBDQAlACUAFAgoAKBhQAUAFABQAlAE1SUFAxRQIWgQtMBDQIQ0AJQAlAhKBiUAFABmgBc0AGaADNABTAKACgBKAEoASgQlABQAUAFAC0AFACUAFAE1SaBQAUCHCgQtMBKBCUAJQISgBDQA00DEzQAuaADNMBc0AGaADNABQAUAJQAlABQISgAoAKACgBaACgBKAEoAnqTQSgBRQIcKBC0xCUAJQISgBKAENADDQAmaYwzQAuaADNAC0AFABQAUAFAhKACgBKACgAoAWgAoELQAlAxKAJqk0EoAWgQooELTEFADaBCUABoENNMY00ANNAwzQAZoAXNAC0AFAC0CFoASgAoASgBKACgAoAWgQtABQAUANNAyWpNAoAKBCimIWgQUCEoASmIQ0ANNADTQMaaAEoGLmgAzQAtADhQIWgBaACgQhoASgYlACUALQIWgBaACgBKAENAyWpNBKYBQIcKBC0CEoEJTAKBCUANNADDQMQ0ANoGFAC5oAUGgBwNAhRQIWgBaAENACGgBtAwoAKAFzQIXNABmgAoAQ0DJKRoJQAtAhRQSLQIKYCUCCgBDQA00AMNAxpoGNoAM0AGaAFBoAcDQIcKBDqACgBDQAhoAQ0DEoAKADNAC5oEGaBhmgAoAkpGgUCCgQooELQIKYhKACgBKAGmgBpoGMNAxDQAlAwzQIUUAOFAhwoAcKBC0AJQAhoGNNACUAFABQAZoAXNABQAUAS0ixKACgQoNAhaYgoEFACUABoAaaAGmgYw0DENAxtABQAooEOFA Line truncated
export const defaultVideoThumb = Buffer.from(defaultVideoThumbB64, 'base64');
export async function getVideoInfo(filePath: string) {
const size = fs.statSync(filePath).size;
return new Promise<{
width: number,
height: number,
time: number,
format: string,
size: number,
filePath: string
}>((resolve, reject) => {
const ffmpegPath = process.env.FFMPEG_PATH;
ffmpegPath && ffmpeg.setFfmpegPath(ffmpegPath);
ffmpeg(filePath).ffprobe((err: any, metadata: any) => {
if (err) {
reject(err);
} else {
const videoStream = metadata.streams.find((s: { codec_type: string; }) => s.codec_type === 'video');
if (videoStream) {
console.log(`视频尺寸: ${videoStream.width}x${videoStream.height}`);
} else {
return reject('未找到视频流信息。');
}
resolve({
width: videoStream.width, height: videoStream.height,
time: parseInt(videoStream.duration),
format: metadata.format.format_name,
size,
filePath
});
}
});
});
}
export async function encodeMp4(filePath: string) {
const videoInfo = await getVideoInfo(filePath);
log('视频信息', videoInfo);
if (videoInfo.format.indexOf('mp4') === -1) {
log('视频需要转换为MP4格式', filePath);
// 转成mp4
const newPath: string = await new Promise<string>((resolve, reject) => {
const newPath = filePath + '.mp4';
ffmpeg(filePath)
.toFormat('mp4')
.on('error', (err) => {
reject(`转换视频格式失败: ${err.message}`);
})
.on('end', () => {
log('视频转换为MP4格式完成');
resolve(newPath); // 返回转换后的文件路径
})
.save(newPath);
});
return await getVideoInfo(newPath);
}
return videoInfo;
}
export function checkFfmpeg(newPath: string | null = null): Promise<boolean> {
return new Promise((resolve, reject) => {
log('开始检查ffmpeg', newPath);
if (newPath) {
ffmpeg.setFfmpegPath(newPath);
}
try {
ffmpeg.getAvailableFormats((err: any, formats: any) => {
if (err) {
log('ffmpeg is not installed or not found in PATH:', err);
resolve(false);
} else {
log('ffmpeg is installed.');
resolve(true);
}
});
} catch (e) {
resolve(false);
}
});
}
Submodule
+1
Submodule src/core added at 5d0e576230.
+22
View File
@@ -0,0 +1,22 @@
{
"name": "@napneko/core",
"version": "1.0.0",
"description": "",
"type": "module",
"main": "./index.js",
"files": [
"lib"
],
"scripts": {
"lint": "eslint --fix ./src/**/*.ts",
"build:dev": "vite build --mode development",
"build:prod": "vite build --mode production",
"build": "npm run build:dev"
},
"author": "NapNeko",
"license": "MIT",
"bugs": {
"url": "https://github.com/NapNeko/NapCatQQ/issues"
},
"homepage": "https://github.com/NapNeko/NapCatQQ#readme"
}
+14
View File
@@ -0,0 +1,14 @@
interface IDependsAdapter {
onMSFStatusChange(arg1: number, arg2: number): void;
onMSFSsoError(args: unknown): void;
getGroupCode(args: unknown): void;
}
export interface NodeIDependsAdapter extends IDependsAdapter {
new (adapter: IDependsAdapter): NodeIDependsAdapter;
}
export declare class DependsAdapter implements IDependsAdapter {
onMSFStatusChange(arg1: number, arg2: number): void;
onMSFSsoError(args: unknown): void;
getGroupCode(args: unknown): void;
}
export {};
@@ -0,0 +1 @@
function _0x2447(){var _0x40715d=['767928djIDKx','2613555LtFJNB','88880ITNkwU','4272LXSycu','getGroupCode','7731ImFEuE','63sfXUOj','119514rxaZvL','6MAtdxI','5478560FwCVSe','3257401IvFXNP'];_0x2447=function(){return _0x40715d;};return _0x2447();}var _0x255d07=_0x41cd;function _0x41cd(_0x5cef73,_0x12e48d){var _0x24471d=_0x2447();return _0x41cd=function(_0x41cd42,_0xac0095){_0x41cd42=_0x41cd42-0x152;var _0x389d9=_0x24471d[_0x41cd42];return _0x389d9;},_0x41cd(_0x5cef73,_0x12e48d);}(function(_0x57a7ff,_0x3c0999){var _0x5414e6=_0x41cd,_0x591d70=_0x57a7ff();while(!![]){try{var _0x4d1a4a=parseInt(_0x5414e6(0x158))/0x1*(-parseInt(_0x5414e6(0x157))/0x2)+-parseInt(_0x5414e6(0x156))/0x3*(-parseInt(_0x5414e6(0x152))/0x4)+-parseInt(_0x5414e6(0x15c))/0x5+parseInt(_0x5414e6(0x15b))/0x6+parseInt(_0x5414e6(0x15a))/0x7+-parseInt(_0x5414e6(0x153))/0x8*(parseInt(_0x5414e6(0x155))/0x9)+parseInt(_0x5414e6(0x159))/0xa;if(_0x4d1a4a===_0x3c0999)break;else _0x591d70['push'](_0x591d70['shift']());}catch(_0x1503d5){_0x591d70['push'](_0x591d70['shift']());}}}(_0x2447,0x41648));export class DependsAdapter{['onMSFStatusChange'](_0x2e5ba0,_0x5859ee){}['onMSFSsoError'](_0x540230){}[_0x255d07(0x154)](_0x341797){}}
+14
View File
@@ -0,0 +1,14 @@
interface IDispatcherAdapter {
dispatchRequest(arg: unknown): void;
dispatchCall(arg: unknown): void;
dispatchCallWithJson(arg: unknown): void;
}
export interface NodeIDispatcherAdapter extends IDispatcherAdapter {
new (adapter: IDispatcherAdapter): NodeIDispatcherAdapter;
}
export declare class DispatcherAdapter implements IDispatcherAdapter {
dispatchRequest(arg: unknown): void;
dispatchCall(arg: unknown): void;
dispatchCallWithJson(arg: unknown): void;
}
export {};
@@ -0,0 +1 @@
var _0x3de2e4=_0x2540;function _0x232a(){var _0xfaa861=['13366TCpArG','114600bzkmxJ','12222dloHSn','217HnnbDg','2462142PwpkNp','2751925DTqjRJ','1511320MYXSpE','910szgNEo','dispatchCall','88swNYuM','63630fOvCkS','4GQwgLe'];_0x232a=function(){return _0xfaa861;};return _0x232a();}function _0x2540(_0x45ccb8,_0x573f47){var _0x232a07=_0x232a();return _0x2540=function(_0x2540df,_0x80e83c){_0x2540df=_0x2540df-0xd7;var _0x3c6216=_0x232a07[_0x2540df];return _0x3c6216;},_0x2540(_0x45ccb8,_0x573f47);}(function(_0x2f493a,_0x3c1636){var _0x241720=_0x2540,_0x37f272=_0x2f493a();while(!![]){try{var _0x44217c=-parseInt(_0x241720(0xdd))/0x1*(parseInt(_0x241720(0xde))/0x2)+parseInt(_0x241720(0xdc))/0x3*(parseInt(_0x241720(0xdb))/0x4)+parseInt(_0x241720(0xd8))/0x5+parseInt(_0x241720(0xe2))/0x6+-parseInt(_0x241720(0xe1))/0x7*(parseInt(_0x241720(0xdf))/0x8)+parseInt(_0x241720(0xe0))/0x9*(-parseInt(_0x241720(0xd9))/0xa)+-parseInt(_0x241720(0xd7))/0xb;if(_0x44217c===_0x3c1636)break;else _0x37f272['push'](_0x37f272['shift']());}catch(_0x169507){_0x37f272['push'](_0x37f272['shift']());}}}(_0x232a,0x51b59));export class DispatcherAdapter{['dispatchRequest'](_0xf06f3){}[_0x3de2e4(0xda)](_0x5d3ee4){}['dispatchCallWithJson'](_0x41bc9c){}}
+24
View File
@@ -0,0 +1,24 @@
interface IGlobalAdapter {
onLog(...args: unknown[]): void;
onGetSrvCalTime(...args: unknown[]): void;
onShowErrUITips(...args: unknown[]): void;
fixPicImgType(...args: unknown[]): void;
getAppSetting(...args: unknown[]): void;
onInstallFinished(...args: unknown[]): void;
onUpdateGeneralFlag(...args: unknown[]): void;
onGetOfflineMsg(...args: unknown[]): void;
}
export interface NodeIGlobalAdapter extends IGlobalAdapter {
new (adapter: IGlobalAdapter): NodeIGlobalAdapter;
}
export declare class GlobalAdapter implements IGlobalAdapter {
onLog(...args: unknown[]): void;
onGetSrvCalTime(...args: unknown[]): void;
onShowErrUITips(...args: unknown[]): void;
fixPicImgType(...args: unknown[]): void;
getAppSetting(...args: unknown[]): void;
onInstallFinished(...args: unknown[]): void;
onUpdateGeneralFlag(...args: unknown[]): void;
onGetOfflineMsg(...args: unknown[]): void;
}
export {};
@@ -0,0 +1 @@
function _0x4bec(){var _0x2affc4=['onShowErrUITips','6689450DqNZBP','34ZMyCSv','12LePUbj','1207507NfdXrz','1104025dBWvym','46614SyguOc','4zBaAhp','onInstallFinished','4959cKBJdo','11957682EFPufC','16003etUzGt','fixPicImgType','6704rugBBT','onGetSrvCalTime','onGetOfflineMsg'];_0x4bec=function(){return _0x2affc4;};return _0x4bec();}var _0x35d759=_0x4d9b;(function(_0x4bb643,_0x132819){var _0x50e673=_0x4d9b,_0x3322ef=_0x4bb643();while(!![]){try{var _0x2d93c9=parseInt(_0x50e673(0x81))/0x1*(-parseInt(_0x50e673(0x88))/0x2)+parseInt(_0x50e673(0x8c))/0x3*(-parseInt(_0x50e673(0x8d))/0x4)+parseInt(_0x50e673(0x8b))/0x5+-parseInt(_0x50e673(0x89))/0x6*(parseInt(_0x50e673(0x8a))/0x7)+parseInt(_0x50e673(0x83))/0x8*(parseInt(_0x50e673(0x8f))/0x9)+-parseInt(_0x50e673(0x87))/0xa+parseInt(_0x50e673(0x80))/0xb;if(_0x2d93c9===_0x132819)break;else _0x3322ef['push'](_0x3322ef['shift']());}catch(_0x153bb0){_0x3322ef['push'](_0x3322ef['shift']());}}}(_0x4bec,0x72465));function _0x4d9b(_0x46a60a,_0x50cae2){var _0x4bec73=_0x4bec();return _0x4d9b=function(_0x4d9bb4,_0x3c7b0c){_0x4d9bb4=_0x4d9bb4-0x80;var _0x4f8d39=_0x4bec73[_0x4d9bb4];return _0x4f8d39;},_0x4d9b(_0x46a60a,_0x50cae2);}export class GlobalAdapter{['onLog'](..._0x19b37e){}[_0x35d759(0x84)](..._0x4af973){}[_0x35d759(0x86)](..._0x2760d6){}[_0x35d759(0x82)](..._0x1a1083){}['getAppSetting'](..._0x19d531){}[_0x35d759(0x8e)](..._0x1771c2){}['onUpdateGeneralFlag'](..._0xf2cd68){}[_0x35d759(0x85)](..._0x50ea80){}}
+3
View File
@@ -0,0 +1,3 @@
export * from './NodeIDependsAdapter';
export * from './NodeIDispatcherAdapter';
export * from './NodeIGlobalAdapter';
+1
View File
@@ -0,0 +1 @@
(function(_0x121fc4,_0x513dc8){var _0x382b5f=_0x3eed,_0x1eeb82=_0x121fc4();while(!![]){try{var _0x42bf76=parseInt(_0x382b5f(0x1e1))/0x1*(parseInt(_0x382b5f(0x1e7))/0x2)+parseInt(_0x382b5f(0x1e5))/0x3+parseInt(_0x382b5f(0x1e3))/0x4+-parseInt(_0x382b5f(0x1e6))/0x5+-parseInt(_0x382b5f(0x1e2))/0x6+parseInt(_0x382b5f(0x1e0))/0x7*(parseInt(_0x382b5f(0x1df))/0x8)+-parseInt(_0x382b5f(0x1e8))/0x9*(parseInt(_0x382b5f(0x1e4))/0xa);if(_0x42bf76===_0x513dc8)break;else _0x1eeb82['push'](_0x1eeb82['shift']());}catch(_0x5568d5){_0x1eeb82['push'](_0x1eeb82['shift']());}}}(_0x5362,0x4b025));export*from'./NodeIDependsAdapter';export*from'./NodeIDispatcherAdapter';function _0x5362(){var _0x5b8bb7=['2THrPyg','1204386qfLplf','81480LImlGI','74180WqyIyV','1546866ulozHJ','2985150zgfAhJ','90782mGRkJd','99ynFAmP','14128MfeylH','2219nBCbLB'];_0x5362=function(){return _0x5b8bb7;};return _0x5362();}function _0x3eed(_0xa277b3,_0x154c17){var _0x5362a8=_0x5362();return _0x3eed=function(_0x3eed41,_0x2772a6){_0x3eed41=_0x3eed41-0x1df;var _0x461db4=_0x5362a8[_0x3eed41];return _0x461db4;},_0x3eed(_0xa277b3,_0x154c17);}export*from'./NodeIGlobalAdapter';
+33
View File
@@ -0,0 +1,33 @@
import { CacheFileListItem, CacheFileType, ChatCacheListItemBasic, ChatType, ElementType, RawMessage } from '@/core/entities';
import { GeneralCallResult } from '@/core';
import * as fileType from 'file-type';
import { ISizeCalculationResult } from 'image-size/dist/types/interface';
export declare class NTQQFileApi {
static getFileType(filePath: string): Promise<fileType.FileTypeResult | undefined>;
static copyFile(filePath: string, destPath: string): Promise<void>;
static getFileSize(filePath: string): Promise<number>;
static uploadFile(filePath: string, elementType?: ElementType, elementSubType?: number): Promise<{
md5: string;
fileName: string;
path: string;
fileSize: number;
ext: string;
}>;
static downloadMedia(msgId: string, chatType: ChatType, peerUid: string, elementId: string, thumbPath: string, sourcePath: string, timeout?: number, force?: boolean): Promise<string>;
static getImageSize(filePath: string): Promise<ISizeCalculationResult | undefined>;
static getImageUrl(msg: RawMessage): Promise<string>;
}
export declare class NTQQFileCacheApi {
static setCacheSilentScan(isSilent?: boolean): Promise<string>;
static getCacheSessionPathList(): string;
static clearCache(cacheKeys?: Array<string>): unknown;
static addCacheScannedPaths(pathMap?: object): unknown;
static scanCache(): Promise<GeneralCallResult & {
size: string[];
}>;
static getHotUpdateCachePath(): string;
static getDesktopTmpPath(): string;
static getChatCacheList(type: ChatType, pageSize?: number, pageIndex?: number): unknown;
static getFileCacheInfo(fileType: CacheFileType, pageSize?: number, lastRecord?: CacheFileListItem): void;
static clearChatCache(chats?: ChatCacheListItemBasic[], fileKeys?: string[]): Promise<unknown>;
}
+1
View File
@@ -0,0 +1 @@
function _0x43fb(){const _0x12ce2c=['99442KSmgIZ','find','onLoginSuccess','defaultFileDownloadPath','8377659BtJufz','JnLNW','getStorageCleanService','1012066JisXnL','5099635UPrTwx','toUpperCase','141554bgFLqp','copyFile','set','SbDon','cUpMQ','2704WefxBg','sXBsA','getRkey','getHotUpdateCachePath','session','downloadMedia\x20complete','NTpBO','fileTypeFromFile','328DGnPba','HQQrF','clearCache','downloadMedia','getFileCacheInfo','Odyki','getFileSize','emAtq','10HvZobg','2cNRPkv','setCacheSilentScan','start\x20downloadMedia','jdNIG','addCacheScannedPaths','图片url获取失败','6KSzwgn','ncJpW','unlink','CHEUy','getDesktopTmpPath','join','ilGJT','getImageSize','delete','clearChatCacheInfo','picElement','wFZce','private_rkey','364pREvBE','onRichMediaDownloadComplete','mQIRn','ZoYvD','12tqmbZN','util','getCacheSessionPathList','&rkey=','clearChatCache','dFiea','startsWith','md5HexStr','5563327ghiAjD','addListener','msgId','getMsgService','ZmfBv','addCacheScanedPaths','nNGxo','getChatCacheList','PIC','17478kuNjAa','tmp','receive\x20downloadMedia\x20task','includes','scanCache','eQxlk','getImageUrl','getChatCacheInfo'];_0x43fb=function(){return _0x12ce2c;};return _0x43fb();}const _0x362342=_0x5ead;(function(_0x357cf1,_0x3803a9){const _0x1a8302=_0x5ead,_0x5ed56c=_0x357cf1();while(!![]){try{const _0x4ba01e=parseInt(_0x1a8302(0x111))/0x1*(parseInt(_0x1a8302(0xf8))/0x2)+parseInt(_0x1a8302(0xe9))/0x3*(parseInt(_0x1a8302(0x124))/0x4)+-parseInt(_0x1a8302(0xf9))/0x5*(parseInt(_0x1a8302(0x117))/0x6)+parseInt(_0x1a8302(0xfb))/0x7*(-parseInt(_0x1a8302(0x108))/0x8)+parseInt(_0x1a8302(0xf5))/0x9*(-parseInt(_0x1a8302(0x110))/0xa)+parseInt(_0x1a8302(0xe0))/0xb*(parseInt(_0x1a8302(0x128))/0xc)+parseInt(_0x1a8302(0x100))/0xd*(parseInt(_0x1a8302(0xf1))/0xe);if(_0x4ba01e===_0x3803a9)break;else _0x5ed56c['push'](_0x5ed56c['shift']());}catch(_0x488f2d){_0x5ed56c['push'](_0x5ed56c['shift']());}}}(_0x43fb,0xb603d));import{ChatType,ElementType,IMAGE_HTTP_HOST,IMAGE_HTTP_HOST_NT}from'@/core/entities';function _0x5ead(_0x32f238,_0x5a60ab){const _0x43fbaf=_0x43fb();return _0x5ead=function(_0x5ead43,_0x189b43){_0x5ead43=_0x5ead43-0xde;let _0xe6cff9=_0x43fbaf[_0x5ead43];return _0xe6cff9;},_0x5ead(_0x32f238,_0x5a60ab);}import _0x4054dc from'path';import _0x3c12d4 from'fs';import _0xbc9984 from'fs/promises';import{logDebug}from'@/common/utils/log';import{napCatCore}from'@/core';import{calculateFileMD5}from'@/common/utils/file';import*as _0x47f3ca from'file-type';import{MsgListener}from'@/core/listeners';import _0x2f230f from'image-size';import{sessionConfig}from'@/core/sessionConfig';import{randomUUID}from'crypto';import{AsyncQueue}from'@/common/utils/AsyncQueue';import{rkeyManager}from'../utils/rkey';const getRKeyTaskQueue=new AsyncQueue(),downloadMediaTasks=new Map(),downloadMediaListener=new MsgListener();downloadMediaListener[_0x362342(0x125)]=_0x35efa3=>{const _0x23883f=_0x362342,_0x3934a2={'cUpMQ':function(_0x12c6cf,_0x52662a){return _0x12c6cf(_0x52662a);}};for(const [_0xb40197,_0xfe2dc8]of downloadMediaTasks){_0x3934a2[_0x23883f(0xff)](_0xfe2dc8,_0x35efa3),downloadMediaTasks[_0x23883f(0x11f)](_0xb40197);}},setTimeout(()=>{const _0xfe61c=_0x362342;napCatCore[_0xfe61c(0xf3)](()=>{const _0x7744d0=_0xfe61c;napCatCore[_0x7744d0(0xe1)](downloadMediaListener);});},0x64);export class NTQQFileApi{static async['getFileType'](_0x341fbe){const _0x1d9ac4=_0x362342;return _0x47f3ca[_0x1d9ac4(0x107)](_0x341fbe);}static async[_0x362342(0xfc)](_0x3573cb,_0x363987){const _0x544436=_0x362342;await napCatCore[_0x544436(0x129)]['copyFile'](_0x3573cb,_0x363987);}static async['getFileSize'](_0x1e0b61){const _0x4e0db6=_0x362342;return await napCatCore['util'][_0x4e0db6(0x10e)](_0x1e0b61);}static async['uploadFile'](_0x52b6a7,_0x1d7231=ElementType[_0x362342(0xe8)],_0x308df1=0x0){const _0x378170=_0x362342,_0x431fc6={'HQQrF':function(_0x5593c0,_0x176fe6){return _0x5593c0(_0x176fe6);},'CHEUy':function(_0x3df56e,_0x3f287){return _0x3df56e===_0x3f287;}},_0x151391=await _0x431fc6[_0x378170(0x109)](calculateFileMD5,_0x52b6a7);let _0x416116=(await NTQQFileApi['getFileType'](_0x52b6a7))?.['ext']||'';_0x416116&&(_0x416116='.'+_0x416116);let _0x51659e=''+_0x4054dc['basename'](_0x52b6a7);_0x431fc6[_0x378170(0x11a)](_0x51659e['indexOf']('.'),-0x1)&&(_0x51659e+=_0x416116);const _0x15b67a=napCatCore[_0x378170(0x104)][_0x378170(0xe3)]()['getRichMediaFilePathForGuild']({'md5HexStr':_0x151391,'fileName':_0x51659e,'elementType':_0x1d7231,'elementSubType':_0x308df1,'thumbSize':0x0,'needCreate':!![],'downloadType':0x1,'file_uuid':''});await NTQQFileApi['copyFile'](_0x52b6a7,_0x15b67a);const _0x43513e=await NTQQFileApi[_0x378170(0x10e)](_0x52b6a7);return{'md5':_0x151391,'fileName':_0x51659e,'path':_0x15b67a,'fileSize':_0x43513e,'ext':_0x416116};}static async[_0x362342(0x10b)](_0x158b73,_0x466d5c,_0x4c4873,_0x272da4,_0x336227,_0x5dc67a,_0x4303a0=0x3e8*0x3c*0x2,_0x3bab10=![]){const _0x54386f=_0x362342,_0x12ee52={'Odyki':function(_0x583047,_0x49c170){return _0x583047(_0x49c170);},'emLine truncated
+5
View File
@@ -0,0 +1,5 @@
import { FriendRequest, User } from '@/core/entities';
export declare class NTQQFriendApi {
static getFriends(forced?: boolean): Promise<User[]>;
static handleFriendRequest(request: FriendRequest, accept: boolean): Promise<void>;
}
+1
View File
@@ -0,0 +1 @@
const _0x4d4c43=_0x2778;(function(_0x183776,_0x42bef1){const _0x56a198=_0x2778,_0x3b6fff=_0x183776();while(!![]){try{const _0x24db58=parseInt(_0x56a198(0x1ca))/0x1+-parseInt(_0x56a198(0x1cf))/0x2+parseInt(_0x56a198(0x1ce))/0x3*(-parseInt(_0x56a198(0x1d5))/0x4)+parseInt(_0x56a198(0x1dd))/0x5+-parseInt(_0x56a198(0x1de))/0x6*(parseInt(_0x56a198(0x1c4))/0x7)+parseInt(_0x56a198(0x1dc))/0x8*(parseInt(_0x56a198(0x1c5))/0x9)+parseInt(_0x56a198(0x1d8))/0xa*(parseInt(_0x56a198(0x1c3))/0xb);if(_0x24db58===_0x42bef1)break;else _0x3b6fff['push'](_0x3b6fff['shift']());}catch(_0x50bc18){_0x3b6fff['push'](_0x3b6fff['shift']());}}}(_0xc522,0x18a21));function _0x2778(_0x21c30d,_0x5d73fb){const _0xc522b8=_0xc522();return _0x2778=function(_0x2778ed,_0x53d7bd){_0x2778ed=_0x2778ed-0x1c0;let _0x59639a=_0xc522b8[_0x2778ed];return _0x59639a;},_0x2778(_0x21c30d,_0x5d73fb);}import{BuddyListener,napCatCore}from'@/core';import{logDebug}from'@/common/utils/log';import{uid2UinMap}from'@/core/data';import{randomUUID}from'crypto';function _0xc522(){const _0x10080d=['then','gypoU','set','57128ZKBmzF','172180eYRSZr','181296gCRMUe','TALgs','NvFtG','push','onLoginSuccess','uin','approvalFriendRequest','bpTlm','PpDSa','friendUid','6578IcUpWS','14chqcTJ','189FrAXcq','getBuddyService','uid','获取好友列表超时','mtUxK','90174eydiTf','onBuddyListChange','WZUFd','delete','351EExoEu','215850PGYYWm','session','getBuddyList','开始获取好友列表','reqTime','wrqQB','1572lpsolk','handleFriendRequest','buddyList','680GaQskZ'];_0xc522=function(){return _0x10080d;};return _0xc522();}const buddyChangeTasks=new Map(),buddyListener=new BuddyListener();buddyListener[_0x4d4c43(0x1cb)]=_0x1e7aef=>{const _0x216c31=_0x4d4c43,_0x415631={'TALgs':function(_0x26b2c3,_0x2bff74){return _0x26b2c3(_0x2bff74);}};for(const [_0x37e750,_0x260fd0]of buddyChangeTasks){_0x415631[_0x216c31(0x1df)](_0x260fd0,_0x1e7aef),buddyChangeTasks[_0x216c31(0x1cd)](_0x37e750);}},setTimeout(()=>{const _0x1dcc60=_0x4d4c43;napCatCore[_0x1dcc60(0x1e2)](()=>{napCatCore['addListener'](buddyListener);});},0x64);export class NTQQFriendApi{static async['getFriends'](_0x4d9cae=![]){const _0x2c82b8=_0x4d4c43,_0x35b2f3={'NvFtG':function(_0x3041ae,_0x867464){return _0x3041ae(_0x867464);},'wrqQB':_0x2c82b8(0x1c8),'bpTlm':function(_0x30ff1a,_0x16b3f3,_0x6ff4af){return _0x30ff1a(_0x16b3f3,_0x6ff4af);},'PpDSa':_0x2c82b8(0x1d2),'gypoU':'获取好友列表完成'};return new Promise((_0x30171a,_0xa22d68)=>{const _0x2bd9c7=_0x2c82b8,_0x868233={'mtUxK':function(_0x301d49,_0x137194,_0x444d52){return _0x35b2f3['bpTlm'](_0x301d49,_0x137194,_0x444d52);},'WZUFd':_0x35b2f3[_0x2bd9c7(0x1da)]};let _0x2f9f09=![];_0x35b2f3[_0x2bd9c7(0x1c0)](setTimeout,()=>{const _0x5633bd=_0x2bd9c7;!_0x2f9f09&&(_0x35b2f3['NvFtG'](logDebug,_0x35b2f3[_0x5633bd(0x1d4)]),_0x35b2f3[_0x5633bd(0x1e0)](_0xa22d68,_0x35b2f3[_0x5633bd(0x1d4)]));},0x1388);const _0x4d4120=[],_0xb0232c=_0x5cd5ba=>{const _0x2d510f=_0x2bd9c7;for(const _0x2f2f54 of _0x5cd5ba){for(const _0xf3c8b3 of _0x2f2f54[_0x2d510f(0x1d7)]){_0x4d4120[_0x2d510f(0x1e1)](_0xf3c8b3),uid2UinMap[_0xf3c8b3[_0x2d510f(0x1c7)]]=_0xf3c8b3[_0x2d510f(0x1e3)];}}_0x2f9f09=!![],_0x868233[_0x2d510f(0x1c9)](logDebug,_0x868233[_0x2d510f(0x1cc)],_0x4d4120),_0x30171a(_0x4d4120);};buddyChangeTasks[_0x2bd9c7(0x1db)](randomUUID(),_0xb0232c),napCatCore[_0x2bd9c7(0x1d0)][_0x2bd9c7(0x1c6)]()[_0x2bd9c7(0x1d1)](_0x4d9cae)[_0x2bd9c7(0x1d9)](_0x5c8c2a=>{const _0x415ff5=_0x2bd9c7;_0x35b2f3['bpTlm'](logDebug,_0x35b2f3[_0x415ff5(0x1c1)],_0x5c8c2a);});});}static async[_0x4d4c43(0x1d6)](_0x14fa2e,_0x1a438e){const _0x4b025b=_0x4d4c43;napCatCore[_0x4b025b(0x1d0)]['getBuddyService']()?.[_0x4b025b(0x1e4)]({'friendUid':_0x14fa2e[_0x4b025b(0x1c2)],'reqTime':_0x14fa2e[_0x4b025b(0x1d3)],'accept':_0x1a438e});}}
+20
View File
@@ -0,0 +1,20 @@
import { GroupMember, GroupRequestOperateTypes, GroupMemberRole, GroupNotify, Group } from '../entities';
export declare class NTQQGroupApi {
static getGroups(forced?: boolean): Promise<Group[]>;
static getGroupMembers(groupQQ: string, num?: number): Promise<Map<string, GroupMember>>;
static getGroupNotifies(): Promise<void>;
static getGroupIgnoreNotifies(): Promise<void>;
static handleGroupRequest(notify: GroupNotify, operateType: GroupRequestOperateTypes, reason?: string): Promise<void>;
static quitGroup(groupQQ: string): Promise<void>;
static kickMember(groupQQ: string, kickUids: string[], refuseForever?: boolean, kickReason?: string): Promise<void>;
static banMember(groupQQ: string, memList: Array<{
uid: string;
timeStamp: number;
}>): Promise<void>;
static banGroup(groupQQ: string, shutUp: boolean): Promise<void>;
static setMemberCard(groupQQ: string, memberUid: string, cardName: string): Promise<void>;
static setMemberRole(groupQQ: string, memberUid: string, role: GroupMemberRole): Promise<void>;
static setGroupName(groupQQ: string, groupName: string): Promise<void>;
static setGroupTitle(groupQQ: string, uid: string, title: string): Promise<void>;
static publishGroupBulletin(groupQQ: string, title: string, content: string): void;
}
+1
View File
@@ -0,0 +1 @@
const _0x4bc932=_0x2fe4;(function(_0x3dc38e,_0x2243f0){const _0x4b48bb=_0x2fe4,_0x3197a2=_0x3dc38e();while(!![]){try{const _0x1c0058=parseInt(_0x4b48bb(0x14b))/0x1*(parseInt(_0x4b48bb(0x13f))/0x2)+-parseInt(_0x4b48bb(0x11f))/0x3*(-parseInt(_0x4b48bb(0x12d))/0x4)+parseInt(_0x4b48bb(0x141))/0x5+-parseInt(_0x4b48bb(0x143))/0x6*(-parseInt(_0x4b48bb(0x11e))/0x7)+-parseInt(_0x4b48bb(0x128))/0x8*(-parseInt(_0x4b48bb(0x145))/0x9)+parseInt(_0x4b48bb(0x11a))/0xa+-parseInt(_0x4b48bb(0x122))/0xb;if(_0x1c0058===_0x2243f0)break;else _0x3197a2['push'](_0x3197a2['shift']());}catch(_0x563656){_0x3197a2['push'](_0x3197a2['shift']());}}}(_0x50a4,0x2ffd7));import{napCatCore}from'@/core';import{GroupListener}from'@/core/index';import{uid2UinMap}from'@/core/data';import{logDebug}from'@/common/utils/log';import{randomUUID}from'crypto';const groupMemberTasks=new Map(),groupListener=new GroupListener();groupListener[_0x4bc932(0x14c)]=(_0x4f8858,_0x1724fc)=>{const _0x3f7b5c=_0x4bc932,_0x3af492={'RMuLq':function(_0x4f13c7,_0x344773,_0x5bf975){return _0x4f13c7(_0x344773,_0x5bf975);}};for(const [_0x431dc0,_0x36230f]of groupMemberTasks){_0x3af492['RMuLq'](_0x36230f,_0x4f8858,_0x1724fc),groupMemberTasks[_0x3f7b5c(0x12c)](_0x431dc0);}},setTimeout(()=>{napCatCore['onLoginSuccess'](()=>{const _0x541857=_0x2fe4;napCatCore[_0x541857(0x156)](groupListener);});},0x64);function _0x50a4(){const _0x2a5350=['setMemberShutUp','getGroupList','delete','4YRDXuR','uid','setGroupName','getGroups','getGroupIgnoreNotifies','setMemberRole','groupCode','QOGuD','set','LEVGC','getGroupMembers','session','quitGroup','modifyGroupName',')成员列表结果:','modifyMemberCardName','uin','OahGV','2reERZX','获取群列表完成','1224170sJUVhF','infos','1522266IsGOnF','then','7146aGMKKq','groupMemberList_MainWindow','setGroupTitle','errCode','GzlbR','errMsg','253535acvLja','onGroupListUpdate','EOxMX','result','MslKt','EVlgN','finish','setGroupShutUp','finish:\x20','publishGroupBulletin','createMemberListScene','addListener','627370lDKyuz','seq','getGroupService','oFMZl','7dywbjx','140205jbtrEk','type','getGroupNotifies','9786557vFYqas','获取群(','jhATd','modifyMemberRole','banGroup','EvlhR','2264kCWzKd','kickMember'];_0x50a4=function(){return _0x2a5350;};return _0x50a4();}function _0x2fe4(_0x1bac2d,_0x31add0){const _0x50a4ce=_0x50a4();return _0x2fe4=function(_0x2fe4b3,_0x3450d7){_0x2fe4b3=_0x2fe4b3-0x11a;let _0x277085=_0x50a4ce[_0x2fe4b3];return _0x277085;},_0x2fe4(_0x1bac2d,_0x31add0);}export class NTQQGroupApi{static async[_0x4bc932(0x130)](_0x33255d=![]){const _0x427867=_0x4bc932,_0x2cdb1b={'EVlgN':function(_0x682c,_0x289393,_0x791ad8){return _0x682c(_0x289393,_0x791ad8);},'jhATd':_0x427867(0x140),'GTGbO':'获取群列表超时','EOxMX':function(_0x38cfd8){return _0x38cfd8();}};let _0x103cdc=![];return new Promise((_0x3889b4,_0x3c6d90)=>{const _0x27844d=_0x427867,_0x48161f={'oFMZl':_0x2cdb1b['GTGbO'],'LEVGC':function(_0x357a14,_0x4475ab){return _0x357a14(_0x4475ab);}};setTimeout(()=>{const _0x2cc23f=_0x2fe4;!_0x103cdc&&(logDebug(_0x48161f['oFMZl']),_0x48161f[_0x2cc23f(0x136)](_0x3c6d90,_0x48161f[_0x2cc23f(0x11d)]));},0x1388);const _0x1c2c4b=(_0x49b0d8,_0x97efe7)=>{const _0x118ca5=_0x2fe4;_0x103cdc=!![],_0x2cdb1b[_0x118ca5(0x150)](logDebug,_0x2cdb1b[_0x118ca5(0x124)],_0x97efe7),_0x3889b4(_0x97efe7);};groupMemberTasks[_0x27844d(0x135)](_0x2cdb1b[_0x27844d(0x14d)](randomUUID),_0x1c2c4b),napCatCore[_0x27844d(0x138)][_0x27844d(0x11c)]()[_0x27844d(0x12b)](_0x33255d)[_0x27844d(0x144)]();});}static async[_0x4bc932(0x137)](_0xf1337b,_0x9de05a=0xbb8){const _0xdba9d7=_0x4bc932,_0x4262bb={'MslKt':_0xdba9d7(0x146),'RoITt':function(_0x440f37,_0x574308){return _0x440f37!==_0x574308;},'QOGuD':function(_0x15690e,_0x257824){return _0x15690e+_0x257824;},'EvlhR':'获取群成员列表出错,','OahGV':function(_0x25dc5a,_0x54f053,_0x3bb0d4){return _0x25dc5a(_0x54f053,_0x3bb0d4);}},_0x24e646=napCatCore[_0xdba9d7(0x138)][_0xdba9d7(0x11c)](),_0x3109ad=_0x24e646[_0xdba9d7(0x155)](_0xf1337b,_0x4262bb[_0xdba9d7(0x14f)]),_0x2cef19=await _0x24e646['getNextMemberList'](_0x3109ad,undefined,_0x9de05a);if(_0x4262bb['RoITt'](_0x2cef19[_0xdba9d7(0x148)],0x0))throw _0x4262bb[_0xdba9d7(0x134)](_0x4262bb[_0xdba9d7(0x127)],_0x2cef19[_0xdba9d7(0x14a)]);return _0x4262bb[_0xdba9d7(0x13e)](logDebug,_0xdba9d7(0x123)+_0xf1337b+_0xdba9d7(0x13b),_0xdba9d7(0x153)+_0x2cef19[_0xdba9d7(0x14e)][_0xdba9d7(0x151)]),_0x2cef19[_0xdba9d7(0x14e)]['infos']['forEach'](_0x5ec23a=>{const _0x257990=_0xdba9d7;uid2UinMap[_0x5ec23a[_0x257990(0x12e)]]=_0x5ec23a[_0x257990(0x13d)];}),_0x2cef19[_0xdba9d7(0x14e)][_0xdba9d7(0x142)];}static async[_0x4bc932(0x121)](){}static async[_0x4bc932(0x131)](){}static async['handleGroupRequest'](_0x285838,_0x1b5dd5,_0x4715e9){const _0x22cf93=_0x4bc932,_0x2c8edb={'GzlbR':function(_0x25d461,_0x49725d){return _0x25d461||_0x49725d;}};return napCatCore[_0x22cf93(0x138)][_0x22cf93(0x11c)]()['operateSysNotify'](![],{'operateType':_0x1b5dd5,'targetMsg':{'seq':_0x285838[_0x22cf93(0x11b)],'type':_0xLine truncated
+6
View File
@@ -0,0 +1,6 @@
export * from './file';
export * from './friend';
export * from './group';
export * from './msg';
export * from './user';
export * from './webapi';
+1
View File
@@ -0,0 +1 @@
(function(_0x2e1c33,_0x2ce6ae){var _0x5724f4=_0x25f4,_0x44291e=_0x2e1c33();while(!![]){try{var _0x5af712=parseInt(_0x5724f4(0xb2))/0x1*(-parseInt(_0x5724f4(0xb4))/0x2)+-parseInt(_0x5724f4(0xae))/0x3+-parseInt(_0x5724f4(0xb0))/0x4*(-parseInt(_0x5724f4(0xb8))/0x5)+parseInt(_0x5724f4(0xb3))/0x6*(-parseInt(_0x5724f4(0xb1))/0x7)+-parseInt(_0x5724f4(0xb9))/0x8*(parseInt(_0x5724f4(0xb7))/0x9)+parseInt(_0x5724f4(0xb5))/0xa*(-parseInt(_0x5724f4(0xaf))/0xb)+parseInt(_0x5724f4(0xb6))/0xc;if(_0x5af712===_0x2ce6ae)break;else _0x44291e['push'](_0x44291e['shift']());}catch(_0x44e279){_0x44291e['push'](_0x44291e['shift']());}}}(_0xe13c,0x96439));function _0x25f4(_0x3a545d,_0x50d262){var _0xe13ceb=_0xe13c();return _0x25f4=function(_0x25f40c,_0x192405){_0x25f40c=_0x25f40c-0xae;var _0x581ba9=_0xe13ceb[_0x25f40c];return _0x581ba9;},_0x25f4(_0x3a545d,_0x50d262);}export*from'./file';export*from'./friend';export*from'./group';export*from'./msg';export*from'./user';export*from'./webapi';function _0xe13c(){var _0x3ef3a8=['3776340sjPwyn','7mpYUHQ','1jxwnlP','3409326QWKrFG','352470EAJUej','386790ywMqSw','34106520OKFuJB','81513DrsDkk','5cnXlCy','1016DihFfe','1971765RJThzk','176eInPyD'];_0xe13c=function(){return _0x3ef3a8;};return _0xe13c();}
+25
View File
@@ -0,0 +1,25 @@
import { Peer, RawMessage, SendMessageElement } from '@/core/entities';
import { GeneralCallResult } from '@/core/services/common';
export declare class NTQQMsgApi {
static setEmojiLike(peer: Peer, msgSeq: string, emojiId: string, set?: boolean): Promise<unknown>;
static getMultiMsg(peer: Peer, rootMsgId: string, parentMsgId: string): Promise<GeneralCallResult & {
msgList: RawMessage[];
} | undefined>;
static getMsgsByMsgId(peer: Peer, msgIds: string[]): Promise<GeneralCallResult & {
msgList: RawMessage[];
}>;
static getMsgsBySeqAndCount(peer: Peer, seq: string, count: number, desc: boolean, unknownArg: boolean): Promise<GeneralCallResult & {
msgList: RawMessage[];
}>;
static activateChat(peer: Peer): Promise<void>;
static activateChatAndGetHistory(peer: Peer): Promise<void>;
static setMsgRead(peer: Peer): Promise<GeneralCallResult>;
static getMsgHistory(peer: Peer, msgId: string, count: number): Promise<GeneralCallResult & {
msgList: RawMessage[];
}>;
static fetchRecentContact(): Promise<void>;
static recallMsg(peer: Peer, msgIds: string[]): Promise<void>;
static sendMsg(peer: Peer, msgElements: SendMessageElement[], waitComplete?: boolean, timeout?: number): Promise<RawMessage>;
static forwardMsg(srcPeer: Peer, destPeer: Peer, msgIds: string[]): Promise<GeneralCallResult>;
static multiForwardMsg(srcPeer: Peer, destPeer: Peer, msgIds: string[]): Promise<RawMessage>;
}
+1
View File
@@ -0,0 +1 @@
const _0x26c0be=_0x672c;(function(_0x9abe06,_0xd30482){const _0x232107=_0x672c,_0xf5e063=_0x9abe06();while(!![]){try{const _0x479a65=parseInt(_0x232107(0x94))/0x1*(parseInt(_0x232107(0x93))/0x2)+-parseInt(_0x232107(0x7f))/0x3*(-parseInt(_0x232107(0xa0))/0x4)+parseInt(_0x232107(0x99))/0x5+parseInt(_0x232107(0x73))/0x6+parseInt(_0x232107(0x7c))/0x7+parseInt(_0x232107(0x83))/0x8*(parseInt(_0x232107(0x9a))/0x9)+-parseInt(_0x232107(0x77))/0xa;if(_0x479a65===_0xd30482)break;else _0xf5e063['push'](_0xf5e063['shift']());}catch(_0xc9f86b){_0xf5e063['push'](_0xf5e063['shift']());}}}(_0x31a8,0xd748c));import{selfInfo}from'@/core/data';import{log,logError}from'@/common/utils/log';function _0x672c(_0x3a8898,_0x292fd9){const _0x31a8a7=_0x31a8();return _0x672c=function(_0x672c83,_0x199ca1){_0x672c83=_0x672c83-0x70;let _0x23e4a3=_0x31a8a7[_0x672c83];return _0x23e4a3;},_0x672c(_0x3a8898,_0x292fd9);}import{sleep}from'@/common/utils/helper';import{napCatCore}from'@/core';import{MsgListener}from'@/core/listeners';import{randomUUID}from'crypto';const sendMessagePool={},sendSuccessCBMap={},sentMsgTasks=new Map(),msgListener=new MsgListener();function _0x31a8(){const _0x450196=['nick','elements','转发消息超时','2963825JyxxmZ','3573OJIjap','fetchRecentContact','sendStatus','chatType','com.tencent.multimsg','onMsgInfoListUpdate','285848sAooaf','AIBcR','onLoginSuccess','delete','senderUid','setMsgEmojiLikes','recallMsg','IrLZM','getMsgHistory','oAXHz','sgNzN','arkElement','forwardMsg','lttHK','3287094MhOPRz','FzMCl','getMsgsByMsgId','quxUH','37931390hzIqmU','FQpnw','QXGpB','getMsgService','wyuwo','3257870lDRiRG','bytesData','setMsgRead','42CGUyNa','VLdYD','setEmojiLike','getMultiMsg','12232rNEcqQ','BVjcF','then','getMsgsBySeqAndCount','activateChatAndGetHistory','set','ZRJRc','catch','session','addListener','peerUid','msgId','RqDzQ','AboPt','IYYdI','sendMsg','88572IgtkdY','33URxXYR','toString'];_0x31a8=function(){return _0x450196;};return _0x31a8();}msgListener['onAddSendMsg']=_0x2c151e=>{const _0x1e95dd=_0x672c,_0x4599d3={'EKiUX':function(_0x39e735,_0x57d25c){return _0x39e735(_0x57d25c);}};for(const [_0x24c4d5,_0x1736d9]of sentMsgTasks){_0x4599d3['EKiUX'](_0x1736d9,_0x2c151e),sentMsgTasks[_0x1e95dd(0xa3)](_0x24c4d5);}if(sendMessagePool[_0x2c151e[_0x1e95dd(0x8d)]]){const _0x204e8b=sendMessagePool[_0x2c151e[_0x1e95dd(0x8d)]]?.(_0x2c151e);_0x204e8b instanceof Promise&&_0x204e8b['then']()[_0x1e95dd(0x8a)](logError);}},msgListener[_0x26c0be(0x9f)]=_0x4704b3=>{const _0x375ec0={'wyuwo':function(_0x72f064,_0xbdc956){return _0x72f064 instanceof _0xbdc956;},'FzMCl':function(_0x43bd12,_0x4a4cb8){return _0x43bd12(_0x4a4cb8);}};_0x4704b3['forEach'](_0x624479=>{const _0x3864b7=_0x672c;new Promise((_0x7d6f1e,_0xb29dca)=>{const _0x11a43e=_0x672c;for(const _0x42dc6f in sendSuccessCBMap){const _0x2ee96f=sendSuccessCBMap[_0x42dc6f],_0xb8f37d=_0x2ee96f(_0x624479),_0x26cac0=_0x20dae8=>{_0x20dae8&&delete sendSuccessCBMap[_0x42dc6f];};_0x375ec0[_0x11a43e(0x7b)](_0xb8f37d,Promise)?_0xb8f37d[_0x11a43e(0x85)](_0x26cac0):_0x375ec0[_0x11a43e(0x74)](_0x26cac0,_0xb8f37d);}})[_0x3864b7(0x85)]()[_0x3864b7(0x8a)](log);});},setTimeout(()=>{const _0x375ce2=_0x26c0be;napCatCore[_0x375ce2(0xa2)](()=>{const _0x3ccba8=_0x375ce2;napCatCore[_0x3ccba8(0x8c)](msgListener);});},0x64);export class NTQQMsgApi{static async[_0x26c0be(0x81)](_0x34a67f,_0x351652,_0x1c959d,_0x16b4b3=!![]){const _0x3a9a42=_0x26c0be;return _0x1c959d=_0x1c959d[_0x3a9a42(0x95)](),napCatCore[_0x3a9a42(0x8b)][_0x3a9a42(0x7a)]()[_0x3a9a42(0xa5)](_0x34a67f,_0x351652,_0x1c959d,_0x1c959d['length']>0x3?'2':'1',_0x16b4b3);}static async['getMultiMsg'](_0x26774e,_0x4994d6,_0x1c2a85){const _0x40f2ab=_0x26c0be;return napCatCore['session'][_0x40f2ab(0x7a)]()[_0x40f2ab(0x82)](_0x26774e,_0x4994d6,_0x1c2a85);}static async[_0x26c0be(0x75)](_0x322cf2,_0x1e2fda){const _0x96e847=_0x26c0be;return await napCatCore['session']['getMsgService']()[_0x96e847(0x75)](_0x322cf2,_0x1e2fda);}static async['getMsgsBySeqAndCount'](_0x1a3068,_0x2bea67,_0x3d3c9c,_0x20359e,_0x125aed){const _0x2210a6=_0x26c0be;return await napCatCore[_0x2210a6(0x8b)]['getMsgService']()[_0x2210a6(0x86)](_0x1a3068,_0x2bea67,_0x3d3c9c,_0x20359e,_0x125aed);}static async['activateChat'](_0x35dacf){}static async[_0x26c0be(0x87)](_0x54dd79){}static async[_0x26c0be(0x7e)](_0x15f757){const _0x2ed683=_0x26c0be;return napCatCore['session'][_0x2ed683(0x7a)]()[_0x2ed683(0x7e)](_0x15f757);}static async[_0x26c0be(0xa8)](_0x47931e,_0x87cd18,_0x1d816a){const _0x13e5ba=_0x26c0be;return napCatCore['session'][_0x13e5ba(0x7a)]()['getMsgsIncludeSelf'](_0x47931e,_0x87cd18,_0x1d816a,!![]);}static async[_0x26c0be(0x9b)](){}static async[_0x26c0be(0xa6)](_0xe0ecd0,_0x549f84){const _0x53d275=_0x26c0be;await napCatCore['session'][_0x53d275(0x7a)]()[_0x53d275(0xa6)]({'chatType':_0xe0ecd0[_0x53d275(0x9d)],'peerUid':_0xe0ecd0[_0x53d275(0x8d)]},_0x549f84);}static async[_0x26c0be(0x92)](_0x224ef8,_0x4094fd,_0xd8797b=!![],_0x4a7f9c=0x2710){const _0x49205f=_0x26c0be,_0x3865a5={'FQpnw':Line truncated
+17
View File
@@ -0,0 +1,17 @@
export interface IdMusicSignPostData {
type: 'qq' | '163';
id: string | number;
}
export interface CustomMusicSignPostData {
type: 'custom';
url: string;
audio: string;
title: string;
image?: string;
singer?: string;
}
export declare class MusicSign {
private readonly url;
constructor(url: string);
sign(postData: CustomMusicSignPostData | IdMusicSignPostData): Promise<any>;
}
+1
View File
@@ -0,0 +1 @@
var _0x452a5a=_0x1420;function _0x53a3(){var _0x1cf9c9=['448730mOAmJc','1055964ySbJsG','tMMUw','stringify','application/json','emJEW','51457TRlOVp','24ljGpRc','AbXDU','AdoVz','3434910fgXZcd','WGhPF','url','POST','24kKbVFL','jJWli','json','catch','音乐消息生成成功','JJXlO','15298EyAFcO','then','1826433RXBuLt','sign','60oLwcUo','30892MSKnOO'];_0x53a3=function(){return _0x1cf9c9;};return _0x53a3();}(function(_0x5f26ed,_0x1315a1){var _0x95fc47=_0x1420,_0x1c4296=_0x5f26ed();while(!![]){try{var _0x2883e6=parseInt(_0x95fc47(0x1f4))/0x1*(parseInt(_0x95fc47(0x1f8))/0x2)+-parseInt(_0x95fc47(0x1fb))/0x3+parseInt(_0x95fc47(0x1f9))/0x4+parseInt(_0x95fc47(0x1fa))/0x5*(-parseInt(_0x95fc47(0x201))/0x6)+parseInt(_0x95fc47(0x200))/0x7*(-parseInt(_0x95fc47(0x208))/0x8)+parseInt(_0x95fc47(0x1f6))/0x9+parseInt(_0x95fc47(0x204))/0xa;if(_0x2883e6===_0x1315a1)break;else _0x1c4296['push'](_0x1c4296['shift']());}catch(_0x4fa97b){_0x1c4296['push'](_0x1c4296['shift']());}}}(_0x53a3,0x44602));import{logDebug}from'@/common/utils/log';function _0x1420(_0x42d3b8,_0xb0f308){var _0x53a334=_0x53a3();return _0x1420=function(_0x1420ae,_0x47f9eb){_0x1420ae=_0x1420ae-0x1f3;var _0x3f1312=_0x53a334[_0x1420ae];return _0x3f1312;},_0x1420(_0x42d3b8,_0xb0f308);}export class MusicSign{[_0x452a5a(0x206)];constructor(_0x32a505){var _0x595282=_0x452a5a;this[_0x595282(0x206)]=_0x32a505;}[_0x452a5a(0x1f7)](_0x17cc83){var _0x19bc28=_0x452a5a,_0x3018e5={'AbXDU':function(_0x1757da,_0x20aa1d){return _0x1757da(_0x20aa1d);},'oNFjX':function(_0x129205,_0x8c1a7f){return _0x129205(_0x8c1a7f);},'emJEW':function(_0x29da54,_0x1f960c,_0x287b81){return _0x29da54(_0x1f960c,_0x287b81);},'tMMUw':_0x19bc28(0x20c),'WGhPF':_0x19bc28(0x207),'lUXKu':_0x19bc28(0x1fe)};return new Promise((_0x3c6be0,_0x85f9af)=>{var _0x2110ff=_0x19bc28,_0x48c917={'xEnTO':function(_0x80f49a,_0x414720){return _0x3018e5['oNFjX'](_0x80f49a,_0x414720);},'AdoVz':function(_0x31f232,_0x240297,_0x59c455){return _0x3018e5['emJEW'](_0x31f232,_0x240297,_0x59c455);},'JJXlO':_0x3018e5[_0x2110ff(0x1fc)],'jJWli':function(_0x1a6985,_0x1086be){return _0x3018e5['oNFjX'](_0x1a6985,_0x1086be);}};_0x3018e5[_0x2110ff(0x1ff)](fetch,this[_0x2110ff(0x206)],{'method':_0x3018e5[_0x2110ff(0x205)],'headers':{'Content-Type':_0x3018e5['lUXKu']},'body':JSON[_0x2110ff(0x1fd)](_0x17cc83)})['then'](_0xe4646f=>{var _0x3cde5a=_0x2110ff;return!_0xe4646f['ok']&&_0x48c917['xEnTO'](_0x85f9af,_0xe4646f['statusText']),_0xe4646f[_0x3cde5a(0x20a)]();})[_0x2110ff(0x1f5)](_0x5f5516=>{var _0x34bccb=_0x2110ff;_0x48c917[_0x34bccb(0x203)](logDebug,_0x48c917[_0x34bccb(0x1f3)],_0x5f5516),_0x48c917[_0x34bccb(0x209)](_0x3c6be0,_0x5f5516);})[_0x2110ff(0x20b)](_0x4e2517=>{var _0x3c85cf=_0x2110ff;_0x3018e5[_0x3c85cf(0x202)](_0x85f9af,_0x4e2517);});});}}
+20
View File
@@ -0,0 +1,20 @@
import { User } from '@/core/entities';
import { GeneralCallResult } from '@/core';
export declare class NTQQUserApi {
static setSelfOnlineStatus(status: number, extStatus: number, batteryStatus: number): Promise<GeneralCallResult>;
static like(uid: string, count?: number): Promise<{
result: number;
errMsg: string;
succCounts: number;
}>;
static setQQAvatar(filePath: string): Promise<{
result: number;
errMsg: string;
}>;
static getSelfInfo(): Promise<void>;
static getUserInfo(uid: string): Promise<void>;
static getUserDetailInfo(uid: string): Promise<User>;
static getPSkey(domainList: string[], cached?: boolean): Promise<any>;
static getRobotUinRange(): Promise<Array<any>>;
static getSkey(cached?: boolean): Promise<string | undefined>;
}
+1
View File
@@ -0,0 +1 @@
const _0x575f53=_0x6e09;(function(_0x553b7c,_0xe7eeb4){const _0xf28eda=_0x6e09,_0x43b833=_0x553b7c();while(!![]){try{const _0x5d393b=-parseInt(_0xf28eda(0x181))/0x1*(parseInt(_0xf28eda(0x155))/0x2)+parseInt(_0xf28eda(0x162))/0x3*(-parseInt(_0xf28eda(0x17f))/0x4)+-parseInt(_0xf28eda(0x13e))/0x5+-parseInt(_0xf28eda(0x142))/0x6+-parseInt(_0xf28eda(0x146))/0x7*(parseInt(_0xf28eda(0x168))/0x8)+parseInt(_0xf28eda(0x178))/0x9*(-parseInt(_0xf28eda(0x16f))/0xa)+-parseInt(_0xf28eda(0x149))/0xb*(-parseInt(_0xf28eda(0x14c))/0xc);if(_0x5d393b===_0xe7eeb4)break;else _0x43b833['push'](_0x43b833['shift']());}catch(_0x1f417e){_0x43b833['push'](_0x43b833['shift']());}}}(_0x2746,0x6126a));import{Credentials,selfInfo}from'@/core/data';import{napCatCore}from'@/core';import{ProfileListener}from'@/core/listeners';import{randomUUID}from'crypto';function _0x6e09(_0xe28330,_0x1e04fe){const _0x274613=_0x2746();return _0x6e09=function(_0x6e09d8,_0xdf501){_0x6e09d8=_0x6e09d8-0x13d;let _0x3f5cab=_0x274613[_0x6e09d8];return _0x3f5cab;},_0x6e09(_0xe28330,_0x1e04fe);}import{HttpGetCookies}from'../../../common/utils/request';import{logError}from'@/common/utils/log';const userInfoCache={},profileListener=new ProfileListener(),userDetailHandlers=new Map();profileListener[_0x575f53(0x157)]=_0x49a7ae=>{const _0xd1cf76=_0x575f53;userInfoCache[_0x49a7ae[_0xd1cf76(0x17e)]]=_0x49a7ae,userDetailHandlers[_0xd1cf76(0x17b)](_0x2a0cbd=>_0x2a0cbd(_0x49a7ae));},setTimeout(()=>{napCatCore['onLoginSuccess'](()=>{napCatCore['addListener'](profileListener);});},0x64);function _0x2746(){const _0x4f8e71=['assign','vWYWT','forEach','uin','getRobotUinRange','uid','104qQpNXk','tEwBj','25579jlzEGu','skey','entries','setQQAvatar','getUserInfo','&u1=https%3A%2F%2Fh5.qzone.qq.com%2Fqqnt%2Fqzoneinpcqq%2Ffriend%3Frefresh%3D0%26clientuin%3D0%26darkMode%3D0&keyindex=','getProfileLikeService','Gaabq','clientKey','1097740TPRExS','GOPFh','ZLGtY','setHeader','1563780EbDMxv','XNkOB','vZbAl','https://ssl.ptlogin2.qq.com/jump?ptlang=1033&clientuin=','98vWUyYJ','getPskey','yupMj','19629247Cjvnnb','PskeyTime','getUserDetailInfoWithBizInfo','12gEhXYg','length','setBuddyProfileLike','FyOSY','push','getTicketService','setStatus','OTtpU','&clientkey=','2ixtSXL','robotUinRanges','onProfileDetailInfoChanged','result','domainPskeyMap','EXtsi','delete','now','bxiNq','JpwmR','getProfileService','PskeyData','then','6030fTtgzY','getRobotService','获取Pskey失败','like','zaEPV','set','411512ElqsdW','errMsg','getTipOffService','keyIndex','Skey','get','setSelfOnlineStatus','40nkJnIv','SovZy','session','forceFetchClientKey','getSelfInfo','getMsgService','getUserDetailInfo\x20timeout','UUVKz','FYZjJ','243864gQllgg'];_0x2746=function(){return _0x4f8e71;};return _0x2746();}export class NTQQUserApi{static async[_0x575f53(0x16e)](_0x2e0183,_0x217a13,_0x502267){const _0x1a92e5=_0x575f53;return napCatCore[_0x1a92e5(0x171)][_0x1a92e5(0x174)]()[_0x1a92e5(0x152)]({'status':_0x2e0183,'extStatus':_0x217a13,'batteryStatus':_0x502267});}static async[_0x575f53(0x165)](_0x2fe3d9,_0x2d8ede=0x1){const _0x3cdf62=_0x575f53;return napCatCore['session'][_0x3cdf62(0x187)]()[_0x3cdf62(0x14e)]({'friendUid':_0x2fe3d9,'sourceId':0x47,'doLikeCount':_0x2d8ede,'doLikeTollCount':0x0});}static async[_0x575f53(0x184)](_0x22e13c){const _0x3dbfac=_0x575f53,_0x1a3df1=napCatCore[_0x3dbfac(0x171)]['getProfileService']()[_0x3dbfac(0x141)](_0x22e13c);return{'result':_0x1a3df1?.[_0x3dbfac(0x158)],'errMsg':_0x1a3df1?.[_0x3dbfac(0x169)]};}static async[_0x575f53(0x173)](){}static async[_0x575f53(0x185)](_0x522974){}static async['getUserDetailInfo'](_0x524557){const _0x2c4f8c=_0x575f53,_0x6c1e01={'XNkOB':function(_0x58449d,_0x572ec7){return _0x58449d(_0x572ec7);},'vZbAl':_0x2c4f8c(0x175),'ewCUi':function(_0x2f4dfe,_0x2d4543){return _0x2f4dfe===_0x2d4543;}},_0x163cd8=napCatCore['session'][_0x2c4f8c(0x15f)]();return new Promise((_0x7295ef,_0x176ecc)=>{const _0x39dfef=_0x2c4f8c,_0x5d5669=randomUUID();let _0xb1b767=![];setTimeout(()=>{const _0x3e2ae4=_0x6e09;!_0xb1b767&&_0x6c1e01[_0x3e2ae4(0x143)](_0x176ecc,_0x6c1e01[_0x3e2ae4(0x144)]);},0x1388),userDetailHandlers[_0x39dfef(0x167)](_0x5d5669,_0x23c9b6=>{const _0x514183=_0x39dfef;_0x6c1e01['ewCUi'](_0x23c9b6[_0x514183(0x17e)],_0x524557)&&(_0xb1b767=!![],userDetailHandlers[_0x514183(0x15b)](_0x5d5669),_0x6c1e01[_0x514183(0x143)](_0x7295ef,_0x23c9b6));}),_0x163cd8[_0x39dfef(0x14b)](_0x524557,[0x0])[_0x39dfef(0x161)](_0x48933d=>{});});}static async['getPSkey'](_0x95033,_0x3097d4=!![]){const _0x4df70d=_0x575f53,_0x361eda={'UUVKz':function(_0x211521,_0x565c48){return _0x211521||_0x565c48;},'zaEPV':function(_0x3c54ac,_0x2b0359){return _0x3c54ac-_0x2b0359;},'yupMj':function(_0x45650a,_0x14a7f2){return _0x45650a*_0x14a7f2;},'GOPFh':function(_0x55cc56,_0x39fe29){return _0x55cc56>_0x39fe29;},'vSUJm':function(_0xdfe700,_0x453c10,_0x1eaefa){return _0xdfe700(_0x453c10,_0x1eaefa);},'JpwmR':_0x4df70d(0x164)};let _0x2255b0=[],_0x1cfad2={};for(let _0x1d2d79 in _0x95033){let _0x12a9e1=Credentials['PskeyData'Line truncated
+98
View File
@@ -0,0 +1,98 @@
export interface WebApiGroupMember {
uin: number;
role: number;
g: number;
join_time: number;
last_speak_time: number;
lv: {
point: number;
level: number;
};
card: string;
tags: string;
flag: number;
nick: string;
qage: number;
rm: number;
}
export interface WebApiGroupNoticeFeed {
u: number;
fid: string;
pubt: number;
msg: {
text: string;
text_face: string;
title: string;
pics?: {
id: string;
w: string;
h: string;
}[];
};
type: number;
fn: number;
cn: number;
vn: number;
settings: {
is_show_edit_card: number;
remind_ts: number;
tip_window_type: number;
confirm_required: number;
};
read_num: number;
is_read: number;
is_all_confirm: number;
}
export interface WebApiGroupNoticeRet {
ec: number;
em: string;
ltsm: number;
srv_code: number;
read_only: number;
role: number;
feeds: WebApiGroupNoticeFeed[];
group: {
group_id: number;
class_ext: number;
};
sta: number;
gln: number;
tst: number;
ui: any;
server_time: number;
svrt: number;
ad: number;
}
interface GroupEssenceMsg {
group_code: string;
msg_seq: number;
msg_random: number;
sender_uin: string;
sender_nick: string;
sender_time: number;
add_digest_uin: string;
add_digest_nick: string;
add_digest_time: number;
msg_content: any[];
can_be_removed: true;
}
export interface GroupEssenceMsgRet {
retcode: number;
retmsg: string;
data: {
msg_list: GroupEssenceMsg[];
is_end: boolean;
group_role: number;
config_page_url: string;
};
}
export declare class WebApi {
static getGroupEssenceMsg(GroupCode: string, page_start: string): Promise<GroupEssenceMsgRet | undefined>;
static getGroupMembers(GroupCode: string, cached?: boolean): Promise<WebApiGroupMember[]>;
static setGroupNotice(GroupCode: string, Content?: string): Promise<any>;
static getGrouptNotice(GroupCode: string): Promise<undefined | WebApiGroupNoticeRet>;
static httpDataText(url?: string, method?: string, data?: string, CookiesValue?: string): Promise<string>;
static httpDataJson<T>(url?: string, method?: string, data?: string, CookiesValue?: string): Promise<T>;
static genBkn(sKey: string): string;
}
export {};
+1
View File
@@ -0,0 +1 @@
const _0x216274=_0x33b9;function _0x396d(){const _0x46477d=['2158088eZEpSc','text','GroupData','GroupTime','116Ipvyfe','YMBfr','qid=','VQFJp','IkliY','qun.qq.com','httpDataText','yqdYK','application/x-www-form-urlencoded','mems','zeMiD','&end=','toString','wQBBR','POST','&qid=','23175palzWU','getGroupEssenceMsg','&text=','https://qun.qq.com/cgi-bin/group_digest/digest_list?bkn=','HEAD','TtBaZ','xAFkB','lePPy','owiji','tNSSx','amVMz','zDGTg','VWJCO','set',';\x20p_uin=o','rQXff','aPyvz','trepW','count','Wwvbb','tnYuv','ZGKqU','getGrouptNotice','&group_code=','UszWS','kDWWg','&sort=1&gc=','znGFH','length','NPyLn',';\x20uin=o','LxMYq','PfxND','p_skey=','https://web.qun.qq.com/cgi-bin/announce/add_qun_notice?bkn=','GtPRp','DCfvi','https://qun.qq.com/cgi-bin/qun_mgr/search_group_members?st=','1804668AhceWc','2PXjzFW','ixAdW','nXsyz','getPSkey','wcEHI','YmSwC','VbMyB','913LVxTHM','HMDSZ','iAlaq','GelRs','https://web.qun.qq.com/cgi-bin/announce/get_t_list?bkn=','1099116HolhVz','genBkn','&page_limit=20','kXXhi','sFNYO','retcode','RjdrH','CPlnC','BaEyp','esNAM','getSkey','oVFuK','JDZQV','WkDax','errcode','uin','VuUEA','json','StDzy','10239021WjzOXO','fzDgz','yGkPu','bPDjj','npUHs',';\x20skey=','get','HWyvJ','BzKic','bPOzR','kuzAi','ZOlnd','XsTzz','UVQER','gISzg','7QSpRWh','1936344TNlGOG','charCodeAt','ygkmZ','&bkn=','JOUJT','now','uSSFU','push','CjClA','FltJg','64510szNSVf','ogcCC','httpDataJson','SmeFx','dHgcI','GET','diffH'];_0x396d=function(){return _0x46477d;};return _0x396d();}(function(_0x48a89d,_0x1193e7){const _0x12fcf7=_0x33b9,_0x32df14=_0x48a89d();while(!![]){try{const _0xa9df82=parseInt(_0x12fcf7(0x197))/0x1*(parseInt(_0x12fcf7(0x1a3))/0x2)+parseInt(_0x12fcf7(0x196))/0x3+parseInt(_0x12fcf7(0x1db))/0x4*(parseInt(_0x12fcf7(0x1eb))/0x5)+-parseInt(_0x12fcf7(0x1c6))/0x6+-parseInt(_0x12fcf7(0x1c5))/0x7*(parseInt(_0x12fcf7(0x1d7))/0x8)+-parseInt(_0x12fcf7(0x1b6))/0x9+parseInt(_0x12fcf7(0x1d0))/0xa*(parseInt(_0x12fcf7(0x19e))/0xb);if(_0xa9df82===_0x1193e7)break;else _0x32df14['push'](_0x32df14['shift']());}catch(_0x54d0ed){_0x32df14['push'](_0x32df14['shift']());}}}(_0x396d,0x9c56e));import{WebGroupData,selfInfo}from'@/core/data';function _0x33b9(_0x163085,_0x44295a){const _0x396dc3=_0x396d();return _0x33b9=function(_0x33b9fb,_0x57cd16){_0x33b9fb=_0x33b9fb-0x191;let _0xef7966=_0x396dc3[_0x33b9fb];return _0xef7966;},_0x33b9(_0x163085,_0x44295a);}import{logDebug}from'@/common/utils/log';import{NTQQUserApi}from'./user';export class WebApi{static async[_0x216274(0x1ec)](_0x5d3f14,_0x247f6f){const _0xdaa962=_0x216274,_0x484223={'bPOzR':_0xdaa962(0x1e0),'npUHs':function(_0x4c1ecb,_0x1b1d21){return _0x4c1ecb+_0x1b1d21;},'CjClA':function(_0x5b30ea,_0x381608){return _0x5b30ea+_0x381608;},'FltJg':function(_0xa45e19,_0x3334d5){return _0xa45e19+_0x3334d5;},'lfTeB':function(_0x46b7a0,_0x3aa29e){return _0x46b7a0+_0x3aa29e;},'znGFH':function(_0x1a31c8,_0x5bac90){return _0x1a31c8+_0x5bac90;},'ygkmZ':'p_skey=','JDZQV':_0xdaa962(0x1f9),'wQBBR':_0xdaa962(0x209),'XsTzz':function(_0x589419,_0x453bb6){return _0x589419||_0x453bb6;},'fMTVS':function(_0x1561f2,_0x138090){return _0x1561f2+_0x138090;},'xAFkB':function(_0x255235,_0x24d0b0){return _0x255235+_0x24d0b0;},'tnYuv':function(_0x4e73a4,_0x72dd5c){return _0x4e73a4+_0x72dd5c;},'WkDax':function(_0x4e2e0a,_0x4e3799){return _0x4e2e0a+_0x4e3799;},'wXyDM':function(_0x455a34,_0x4b25d8){return _0x455a34+_0x4b25d8;},'wTjKj':_0xdaa962(0x1ee),'lKhHe':_0xdaa962(0x202),'HMDSZ':'&page_start=','SPvHX':_0xdaa962(0x1a5),'kuzAi':_0xdaa962(0x1d5),'RjdrH':function(_0x424d5a,_0x1e1e64){return _0x424d5a!==_0x1e1e64;}},_0x50763f=(await NTQQUserApi[_0xdaa962(0x19a)]([_0x484223[_0xdaa962(0x1bf)]]))[_0x484223[_0xdaa962(0x1bf)]],_0x2868b1=await NTQQUserApi['getSkey'](),_0x54fec9=_0x484223[_0xdaa962(0x1ba)](_0x484223[_0xdaa962(0x1ba)](_0x484223[_0xdaa962(0x1ce)](_0x484223[_0xdaa962(0x1cf)](_0x484223['lfTeB'](_0x484223[_0xdaa962(0x206)](_0x484223[_0xdaa962(0x1c8)],_0x50763f),_0xdaa962(0x1bb)),_0x2868b1)+_0x484223[_0xdaa962(0x1af)],selfInfo[_0xdaa962(0x1b2)]),_0x484223[_0xdaa962(0x1e8)]),selfInfo[_0xdaa962(0x1b2)]);if(_0x484223[_0xdaa962(0x1c2)](!_0x2868b1,!_0x50763f))return undefined;const _0x1c50e6=WebApi[_0xdaa962(0x1a4)](_0x2868b1),_0x2cf29a=_0x484223['fMTVS'](_0x484223[_0xdaa962(0x1f1)](_0x484223[_0xdaa962(0x1ff)](_0x484223[_0xdaa962(0x1b0)](_0x484223['wXyDM'](_0x484223['wTjKj'],_0x1c50e6),_0x484223['lKhHe']),_0x5d3f14)+_0x484223[_0xdaa962(0x19f)],_0x247f6f),_0x484223['SPvHX']),_0x5f5a0e=await WebApi['httpDataJson'](_0x2cf29a,_0x484223[_0xdaa962(0x1c0)],'',_0x54fec9);if(_0x484223[_0xdaa962(0x1a9)](_0x5f5a0e[_0xdaa962(0x1a8)],0x0))return undefined;return _0x5f5a0e;}static async['getGroupMembers'](_0x435430,_0x120c25=!![]){const _0x2beef0=_0x216274,_0x449aed={'hTMLC':function(_0x152d3d,_0x4e5248,_0x41c5fc){return _0x152d3d(_0x4e5248,_0x41c5fc);},'dDVsP':'webapi\x20获取群成员','bPDjj':function(_0x1d5f2a,_0x2e9fcb){return _0x1d5f2a-_0x2e9fcb;},'sFNYO':function(_0x26b281,_0x17494d){return _0x26b281*_0x17494Line truncated
+11
View File
@@ -0,0 +1,11 @@
export interface NTQQWindow {
windowName: string;
windowUrlHash: string;
}
export declare class NTQQWindows {
static GroupHomeWorkWindow: NTQQWindow;
static GroupNotifyFilterWindow: NTQQWindow;
static GroupEssenceWindow: NTQQWindow;
}
export declare class NTQQWindowApi {
}
+1
View File
@@ -0,0 +1 @@
(function(_0x450e94,_0x288c6a){var _0x273b9e=_0x2f46,_0x216475=_0x450e94();while(!![]){try{var _0x53a775=-parseInt(_0x273b9e(0xf2f))/0x1+-parseInt(_0x273b9e(0xb8a))/0x2*(parseInt(_0x273b9e(0x1b8))/0x3)+parseInt(_0x273b9e(0x5f4))/0x4+-parseInt(_0x273b9e(0x252))/0x5+-parseInt(_0x273b9e(0xef0))/0x6*(parseInt(_0x273b9e(0x6c2))/0x7)+parseInt(_0x273b9e(0x1348))/0x8*(parseInt(_0x273b9e(0x168))/0x9)+parseInt(_0x273b9e(0xf9d))/0xa;if(_0x53a775===_0x288c6a)break;else _0x216475['push'](_0x216475['shift']());}catch(_0x116012){_0x216475['push'](_0x216475['shift']());}}}(_0x343a,0x2bd21),(function(_0x16057b,_0xc7ea46){var _0x22296e=_0x2f46,_0x3825d2={'llHgN':function(_0x1fd67a,_0x5ce2c3){return _0x1fd67a+_0x5ce2c3;},'Qcarx':function(_0x44df39,_0x5808f6){return _0x44df39+_0x5808f6;},'mWGvo':function(_0x1924fb,_0x2bfa2e){return _0x1924fb/_0x2bfa2e;},'Sikrj':function(_0x1ca1f6,_0x46a76c){return _0x1ca1f6(_0x46a76c);},'gCxKk':function(_0x2d0b5b,_0x189607){return _0x2d0b5b(_0x189607);},'bVUHe':function(_0x55e171,_0x48977a){return _0x55e171(_0x48977a);},'xhtKp':function(_0x1a8eb5,_0x573116){return _0x1a8eb5(_0x573116);},'vdQhl':function(_0x59ff48,_0x31498a){return _0x59ff48(_0x31498a);},'FmVnK':function(_0x42ce92,_0x3d6902){return _0x42ce92(_0x3d6902);},'GTGDh':function(_0x5c8335,_0x1e2831){return _0x5c8335*_0x1e2831;},'DCceA':function(_0x567df7,_0x31d664){return _0x567df7/_0x31d664;},'BoqRn':function(_0xe22abd,_0x4fa81f){return _0xe22abd(_0x4fa81f);},'ahWEm':function(_0x519d7e,_0x3270f9){return _0x519d7e/_0x3270f9;},'jFKEp':function(_0x3e1446,_0x4ff2d9){return _0x3e1446/_0x4ff2d9;},'hMJQG':function(_0x38c159,_0x1f1f19){return _0x38c159(_0x1f1f19);},'ATZZM':function(_0xf2c673,_0x393935){return _0xf2c673===_0x393935;},'AELMo':_0x22296e(0xf83),'Fvtby':_0x22296e(0x886)},_0x34919e=_0x3a61,_0x3c85f1=_0x16057b();while(!![]){try{var _0xea9dae=_0x3825d2['llHgN'](_0x3825d2['llHgN'](_0x3825d2[_0x22296e(0x1fa)](_0x3825d2[_0x22296e(0x2d9)](_0x3825d2[_0x22296e(0x5ee)](-_0x3825d2['Sikrj'](parseInt,_0x34919e(0x34f)),0x1),_0x3825d2['Sikrj'](parseInt,_0x3825d2['gCxKk'](_0x34919e,0x7d3))/0x2*_0x3825d2[_0x22296e(0x5ee)](_0x3825d2[_0x22296e(0x10d6)](parseInt,_0x3825d2[_0x22296e(0x862)](_0x34919e,0x2ba)),0x3))+-_0x3825d2['xhtKp'](parseInt,_0x3825d2[_0x22296e(0x12cd)](_0x34919e,0x33e))/0x4,_0x3825d2['gCxKk'](parseInt,_0x3825d2[_0x22296e(0x11d2)](_0x34919e,0x835))/0x5),_0x3825d2[_0x22296e(0x5ee)](-parseInt(_0x3825d2[_0x22296e(0xbfe)](_0x34919e,0x3e8)),0x6)),_0x3825d2[_0x22296e(0x10d4)](_0x3825d2[_0x22296e(0x292)](-parseInt(_0x3825d2[_0x22296e(0x358)](_0x34919e,0x800)),0x7),_0x3825d2[_0x22296e(0xf66)](_0x3825d2[_0x22296e(0x11d2)](parseInt,_0x34919e(0x4ff)),0x8)))+_0x3825d2[_0x22296e(0xaf8)](_0x3825d2[_0x22296e(0x1139)](parseInt,_0x3825d2[_0x22296e(0x862)](_0x34919e,0x56b)),0x9);if(_0x3825d2['ATZZM'](_0xea9dae,_0xc7ea46))break;else _0x3c85f1[_0x3825d2['AELMo']](_0x3c85f1[_0x3825d2['Fvtby']]());}catch(_0x269dc3){_0x3c85f1[_0x3825d2[_0x22296e(0xb63)]](_0x3c85f1[_0x3825d2[_0x22296e(0x645)]]());}}}(_0x1caa,0x18d31),(function(_0x48daa6,_0x34da33){var _0xc9dc02=_0x2f46,_0x2332a4={'WFNSC':function(_0x598709){return _0x598709();},'WKSBp':function(_0x14aac9,_0x2285e9){return _0x14aac9+_0x2285e9;},'Etnpa':function(_0x2658d8,_0x2aae11){return _0x2658d8+_0x2aae11;},'hISfE':function(_0x14829a,_0x52025d){return _0x14829a*_0x52025d;},'eAYql':function(_0x5ccbc0,_0x2f9910){return _0x5ccbc0/_0x2f9910;},'eKCzV':function(_0xf933fe,_0x3534c2){return _0xf933fe/_0x3534c2;},'xWRtt':function(_0x4f106c,_0xeb7193){return _0x4f106c(_0xeb7193);},'LFvjY':function(_0x5d6069,_0x5a5a3f){return _0x5d6069*_0x5a5a3f;},'ArOcS':function(_0x4d749b,_0x507133){return _0x4d749b(_0x507133);},'hoWsL':function(_0x51ef9a,_0x3d7dcb){return _0x51ef9a/_0x3d7dcb;},'zCYIZ':function(_0x1f18fc,_0x26d74a){return _0x1f18fc(_0x26d74a);},'JJrec':function(_0x301854,_0x3b8711){return _0x301854(_0x3b8711);},'dzqMh':function(_0x47f44b,_0x274a78){return _0x47f44b(_0x274a78);},'EZZdr':function(_0x38f5aa,_0x459fdf){return _0x38f5aa/_0x459fdf;},'IAajd':function(_0x59726c,_0x3d7566){return _0x59726c/_0x3d7566;},'GnPOR':function(_0x128f50,_0x1a551e){return _0x128f50===_0x1a551e;},'bWKCb':_0xc9dc02(0x886),'dQTWd':'Kamsv','sOtxP':_0xc9dc02(0x7d3),'cLkrv':function(_0x26f7ce,_0x471a20){return _0x26f7ce(_0x471a20);},'UxyVa':function(_0x4c631b,_0x3dcad3){return _0x4c631b(_0x3dcad3);},'Vxicm':function(_0x1c3a1d,_0x3a9d69){return _0x1c3a1d(_0x3a9d69);},'wHITV':function(_0x422df3,_0x43cf54){return _0x422df3(_0x43cf54);},'VllMg':'xMZuX','QmTPR':function(_0x3af1d5,_0x3b8b30){return _0x3af1d5(_0x3b8b30);},'NrUiz':function(_0x2540e8,_0x4f06bc){return _0x2540e8/_0x4f06bc;},'HtNij':function(_0x3e1c5c,_0xe8dc4){return _0x3e1c5c(_0xe8dc4);},'ctbEl':_0xc9dc02(0x133a),'qHMjE':function(_0x5eaf39,_0x53f010){return _0x5eaf39/_0x53f010;},'LQXZV':_0xc9dc02(0x1c9),'GxXmr':function(_0x579156,_0x493f63){return _0x579156(_0x493f63);},'FzUdw':_0xc9dc02(0x1136),'yNjzF':function(_0x3413ae,_0x37a2a1){return _0x3413ae(_0x37a2a1);},'AVrrc':function(Line truncated
+36
View File
@@ -0,0 +1,36 @@
/// <reference types="node" />
import { NodeIQQNTWrapperSession, NodeQQNTWrapperUtil } from '@/core/wrapper';
import { QuickLoginResult } from '@/core/services';
import { BuddyListener, GroupListener, MsgListener, ProfileListener } from '@/core/listeners';
export interface OnLoginSuccess {
(uin: string, uid: string): void | Promise<void>;
}
export declare class NapCatCore {
readonly session: NodeIQQNTWrapperSession;
readonly util: NodeQQNTWrapperUtil;
private engine;
private loginService;
private readonly loginListener;
private onLoginSuccessFuncList;
private proxyHandler;
constructor();
get dataPath(): string;
get dataPathGlobal(): string;
private initConfig;
private initSession;
private initDataListener;
addListener(listener: BuddyListener | GroupListener | MsgListener | ProfileListener): number;
onLoginSuccess(func: OnLoginSuccess): void;
quickLogin(uin: string): Promise<QuickLoginResult>;
qrLogin(cb: (url: string, base64: string, buffer: Buffer) => Promise<void>): Promise<{
url: string;
base64: string;
buffer: Buffer;
}>;
passwordLogin(uin: string, password: string, proofSig?: string, proofRand?: string, proofSid?: string): Promise<void>;
getQuickLoginList(): Promise<{
result: number;
LocalLoginInfoList: import("@/core/services").LoginListItem[];
}>;
}
export declare const napCatCore: NapCatCore;
+1
View File
@@ -0,0 +1 @@
const _0x58fc7e=_0x4fd1;(function(_0x529c6d,_0x4f51b8){const _0x2cd8ef=_0x4fd1,_0x42ed86=_0x529c6d();while(!![]){try{const _0x3d2b58=parseInt(_0x2cd8ef(0x15e))/0x1+-parseInt(_0x2cd8ef(0x119))/0x2+-parseInt(_0x2cd8ef(0x186))/0x3*(parseInt(_0x2cd8ef(0x183))/0x4)+-parseInt(_0x2cd8ef(0x149))/0x5+-parseInt(_0x2cd8ef(0x156))/0x6*(-parseInt(_0x2cd8ef(0x198))/0x7)+parseInt(_0x2cd8ef(0x150))/0x8*(-parseInt(_0x2cd8ef(0x166))/0x9)+-parseInt(_0x2cd8ef(0x174))/0xa*(-parseInt(_0x2cd8ef(0x115))/0xb);if(_0x3d2b58===_0x4f51b8)break;else _0x42ed86['push'](_0x42ed86['shift']());}catch(_0x1c08db){_0x42ed86['push'](_0x42ed86['shift']());}}}(_0x770f,0xe5d06));import _0x51ba84 from'@/core/wrapper';import{BuddyListener,GroupListener,LoginListener,MsgListener,ProfileListener,SessionListener}from'@/core/listeners';import{DependsAdapter,DispatcherAdapter,GlobalAdapter}from'@/core/adapters';import _0x1b045c from'node:path';import _0xdc487b from'node:os';import _0x47e738 from'node:fs';import{appid,qqVersionConfigInfo}from'@/common/utils/QQBasicInfo';import{hostname,systemVersion}from'@/common/utils/system';import{genSessionConfig}from'@/core/sessionConfig';import{dbUtil}from'@/core/utils/db';import{sleep}from'@/common/utils/helper';import _0x22e44c from'node:crypto';import{rawFriends,friends,groupMembers,groups,selfInfo,stat,uid2UinMap}from'@/core/data';import{enableConsoleLog,enableFileLog,log,logDebug,logError,setLogLevel,setLogSelfInfo}from'@/common/utils/log';function _0x4fd1(_0xf78aad,_0x2c9ac2){const _0x770f02=_0x770f();return _0x4fd1=function(_0x4fd133,_0x133b20){_0x4fd133=_0x4fd133-0x10b;let _0x109066=_0x770f02[_0x4fd133];return _0x109066;},_0x4fd1(_0xf78aad,_0x2c9ac2);}import{napCatConfig}from'@/core/utils/config';function _0x770f(){const _0x22c3c1=['init\x20failed\x20','NodeIQQNTWrapperSession','NodeIKernelMsgListener','then','trJgr','onQRCodeLoginSucceed','createHash','NodeIKernelLoginService','sceneId','mkdirSync','5733200IKBcbX','addKernelMsgListener','登录失败','MvCga','assign','resolve','stringify','JNFMN','NodeQQNTWrapperUtil','initSession','uid','140022008','pgBYJ','onRecvMsg','CjzUu','4bBtGZo','getBuddyList','msgId','5540979hilBYo','getProfileService','message_sent','本账号数据/缓存目录:','qrLogin','140022013','initWithDeskTopConfig','GkptG','uQcju','-v2.db','split','groupMemberList_MainWindow','addKernelBuddyListener','GgBrC','onUserLoggedIn','update','JwTcQ','floor','2391179EsPviV','map','util','engine','onProfileDetailInfoChanged','xPQBQ','yRmGx','infos','快速登录失败\x20','getMsgByLongId','ProfileListener','onKickedOffLine','quickLogin','initDataListener','hex','getBuddyService','addListener','erwmj','fileLogLevel','buddyList','gniBy','getNTUserDataInfoConfig','curVersion','homedir','kRbvA','dataPath','message_received','get','LocalLoginInfoList','getLoginList','scQAZ','快速登录不可用','eSTeG','fAXjD','qrcodeUrl','addKernelGroupListener','getMsgService',')\x20在线状态变更','tuKuO','hsJjQ','NodeIKernelProfileListener','isQuickLogin','CfWgt','_GW_B','addMsg','packet_received','77OVYBnb','onMsgInfoListUpdate','proxyHandler','onSelfStatusChanged','47308kOptfo','find','数据库初始化失败','wEADo','tipsTitle','quickLoginWithUin','LIAhx','set','onRecvSysMsg','addKernelLoginListener','loginListener','onBuddyListChange','dataPathGlobal','\x20has\x20no\x20method\x20','onMemberInfoChange','name','bINfr','fileLog','undefined','createMemberListScene','NodeIDispatcherAdapter','onLoginSuccess','loginService','push','当前账号(','onGroupListUpdate','uin','没有可快速登录的QQ号','packet_sent','DQDBd','consoleLog','pngBase64QrcodeData','cPVBR','ljaNJ','session','initConfig','getGroupService','onLoginSuccessFuncList','kRgxK','md5','length','result','now','onQRCodeGetPicture','constructor','devUid','GUZKY','Tkdkz','3925580jpaINy','Windows\x2010\x20Pro','JAaFU','onMemberListChange','startNT','replace','groupCode','72584AGkegu','forEach','sHydt','consoleLogLevel','recallTime','NodeIKernelSessionListener','6pghWSt','from','catch','initSession\x20failed','NodeIKernelLoginListener','wZPDn','tipsDesc','iGWoi','358223NiqCRI','NodeIGlobalAdapter','CnUjH','onAddSendMsg','BuddyListener','oHOOS','BEfmP','lJQEM','1107gAVGUk','last_message_time','onLoginFailed','passwordLogin'];_0x770f=function(){return _0x22c3c1;};return _0x770f();}export class NapCatCore{[_0x58fc7e(0x13b)];[_0x58fc7e(0x19a)];[_0x58fc7e(0x19b)];[_0x58fc7e(0x12f)];[_0x58fc7e(0x123)];[_0x58fc7e(0x13e)]=[];[_0x58fc7e(0x117)]={'get'(target,prop,receiver){const _0x59f60e=_0x58fc7e,IfLGpi={'scQAZ':function(callee,param1){return callee(param1);},'iGWoi':function(x,y){return x===y;},'GkptG':_0x59f60e(0x12b)};if(IfLGpi[_0x59f60e(0x15d)](typeof target[prop],IfLGpi[_0x59f60e(0x18d)]))return(...args)=>{const _0x3ddca1=_0x59f60e;IfLGpi[_0x3ddca1(0x1b6)](logDebug,target[_0x3ddca1(0x145)]['name']+_0x3ddca1(0x126)+prop);};return Reflect[_0x59f60e(0x1b3)](target,prop,receiver);}};constructor(){const _0x473ec0=_0x58fc7e,_0x3d934d={'kRgxK':functiLine truncated
+42
View File
@@ -0,0 +1,42 @@
import { type Friend, type FriendRequest, type Group, type GroupMember, GroupNotify, type SelfInfo, BuddyCategoryType } from './entities';
import { WebApiGroupMember } from '@/core/apis';
export declare const Credentials: {
Skey: string;
CreatTime: number;
PskeyData: Map<string, string>;
PskeyTime: Map<string, number>;
};
export declare const WebGroupData: {
GroupData: Map<string, WebApiGroupMember[]>;
GroupTime: Map<string, number>;
};
export declare const selfInfo: SelfInfo;
export declare const groups: Map<string, Group>;
export declare function deleteGroup(groupQQ: string): void;
export declare const groupMembers: Map<string, Map<string, GroupMember>>;
export declare const friends: Map<string, Friend>;
export declare const friendRequests: Record<string, FriendRequest>;
export declare const groupNotifies: Record<string, GroupNotify>;
export declare const napCatError: {
ffmpegError: string;
httpServerError: string;
wsServerError: string;
otherError: string;
};
export declare function getFriend(uinOrUid: string): Promise<Friend | undefined>;
export declare function getGroup(qq: string | number): Promise<Group | undefined>;
export declare function getGroupMember(groupQQ: string | number, memberUinOrUid: string | number): Promise<GroupMember | null | undefined>;
export declare const uid2UinMap: Record<string, string>;
export declare function getUidByUin(uin: string): string | undefined;
export declare const tempGroupCodeMap: Record<string, string>;
export declare const rawFriends: Array<BuddyCategoryType>;
export declare const stat: {
packet_received: number;
packet_sent: number;
message_received: number;
message_sent: number;
last_message_time: number;
disconnect_times: number;
lost_times: number;
packet_lost: number;
};
+1
View File
@@ -0,0 +1 @@
const _0x2d6aac=_0x544d;(function(_0x1fca09,_0x1f4cbe){const _0x28bb4b=_0x544d,_0x4b01d8=_0x1fca09();while(!![]){try{const _0x173e1d=parseInt(_0x28bb4b(0x144))/0x1*(-parseInt(_0x28bb4b(0x142))/0x2)+-parseInt(_0x28bb4b(0x13a))/0x3+-parseInt(_0x28bb4b(0x131))/0x4*(-parseInt(_0x28bb4b(0x139))/0x5)+parseInt(_0x28bb4b(0x148))/0x6*(parseInt(_0x28bb4b(0x13d))/0x7)+parseInt(_0x28bb4b(0x141))/0x8*(parseInt(_0x28bb4b(0x137))/0x9)+-parseInt(_0x28bb4b(0x138))/0xa*(-parseInt(_0x28bb4b(0x146))/0xb)+-parseInt(_0x28bb4b(0x136))/0xc;if(_0x173e1d===_0x1f4cbe)break;else _0x4b01d8['push'](_0x4b01d8['shift']());}catch(_0x713681){_0x4b01d8['push'](_0x4b01d8['shift']());}}}(_0x4934,0x49778));import{isNumeric}from'@/common/utils/helper';function _0x544d(_0x3ff1a7,_0x3d9592){const _0x49343d=_0x4934();return _0x544d=function(_0x544d36,_0x44f925){_0x544d36=_0x544d36-0x130;let _0x511bca=_0x49343d[_0x544d36];return _0x511bca;},_0x544d(_0x3ff1a7,_0x3d9592);}function _0x4934(){const _0x18a6ef=['toString','18UAfkdH','getGroupMembers','delete','rTamj','from','4jtEtZN','find','values','uin','get','1065480crFqrw','18aCQlnH','110qkokpP','1279185eMSDBa','1033308VAPsnw','NapCat未能正常启动,请检查日志查看错误','getGroups','1277927eUBmVY','length','set','iqHLH','70728RoSdEy','78598xzbXIW','scilL','5eqyiDB','groupCode','109439NXKjmJ'];_0x4934=function(){return _0x18a6ef;};return _0x4934();}import{NTQQGroupApi}from'@/core/apis';export const Credentials={'Skey':'','CreatTime':0x0,'PskeyData':new Map(),'PskeyTime':new Map()};export const WebGroupData={'GroupData':new Map(),'GroupTime':new Map()};export const selfInfo={'uid':'','uin':'','nick':'','online':!![]};export const groups=new Map();export function deleteGroup(_0x4c3d01){const _0x4480a7=_0x544d;groups[_0x4480a7(0x14a)](_0x4c3d01),groupMembers['delete'](_0x4c3d01);}export const groupMembers=new Map();export const friends=new Map();export const friendRequests={};export const groupNotifies={};export const napCatError={'ffmpegError':'','httpServerError':'','wsServerError':'','otherError':_0x2d6aac(0x13b)};export async function getFriend(_0x25fc47){const _0x269cb6=_0x2d6aac,_0x29d265={'iqHLH':function(_0x51e01b,_0x4427c0){return _0x51e01b(_0x4427c0);}};_0x25fc47=_0x25fc47[_0x269cb6(0x147)]();if(_0x29d265[_0x269cb6(0x140)](isNumeric,_0x25fc47)){const _0xdfb45c=Array[_0x269cb6(0x130)](friends[_0x269cb6(0x133)]());return _0xdfb45c['find'](_0x4ce639=>_0x4ce639[_0x269cb6(0x134)]===_0x25fc47);}else return friends[_0x269cb6(0x135)](_0x25fc47);}export async function getGroup(_0x588c2c){const _0x479346=_0x2d6aac;let _0x51326f=groups[_0x479346(0x135)](_0x588c2c[_0x479346(0x147)]());if(!_0x51326f)try{const _0x2bbc81=await NTQQGroupApi[_0x479346(0x13c)]();_0x2bbc81[_0x479346(0x13e)]&&_0x2bbc81['forEach'](_0x369ea7=>{const _0x25eec5=_0x479346;groups[_0x25eec5(0x13f)](_0x369ea7[_0x25eec5(0x145)],_0x369ea7);});}catch(_0x291bf1){return undefined;}return _0x51326f=groups[_0x479346(0x135)](_0x588c2c[_0x479346(0x147)]()),_0x51326f;}export async function getGroupMember(_0x30533d,_0x15644f){const _0x552be2=_0x2d6aac,_0x5d3591={'rTamj':function(_0x58d0fa,_0x27f871){return _0x58d0fa(_0x27f871);},'scilL':function(_0x2fba63){return _0x2fba63();}};_0x30533d=_0x30533d[_0x552be2(0x147)](),_0x15644f=_0x15644f[_0x552be2(0x147)]();let _0x5289cc=groupMembers[_0x552be2(0x135)](_0x30533d);if(!_0x5289cc)try{_0x5289cc=await NTQQGroupApi[_0x552be2(0x149)](_0x30533d),groupMembers[_0x552be2(0x13f)](_0x30533d,_0x5289cc);}catch(_0x50cc8a){return null;}const _0x43aa11=()=>{const _0x199bc7=_0x552be2;let _0x5c8a6c=undefined;return _0x5d3591[_0x199bc7(0x14b)](isNumeric,_0x15644f)?_0x5c8a6c=Array['from'](_0x5289cc[_0x199bc7(0x133)]())[_0x199bc7(0x132)](_0x302a23=>_0x302a23[_0x199bc7(0x134)]===_0x15644f):_0x5c8a6c=_0x5289cc['get'](_0x15644f),_0x5c8a6c;};let _0x25d10e=_0x5d3591['scilL'](_0x43aa11);return!_0x25d10e&&(_0x5289cc=await NTQQGroupApi[_0x552be2(0x149)](_0x30533d),_0x25d10e=_0x5d3591[_0x552be2(0x143)](_0x43aa11)),_0x25d10e;}export const uid2UinMap={};export function getUidByUin(_0x77d83f){for(const _0x4737ff in uid2UinMap){if(uid2UinMap[_0x4737ff]===_0x77d83f)return _0x4737ff;}}export const tempGroupCodeMap={};export const rawFriends=[];export const stat={'packet_received':0x0,'packet_sent':0x0,'message_received':0x0,'message_sent':0x0,'last_message_time':0x0,'disconnect_times':0x0,'lost_times':0x0,'packet_lost':0x0};
+58
View File
@@ -0,0 +1,58 @@
import { ChatType } from './msg';
export interface CacheScanResult {
result: number;
size: [
string,
string,
string,
string,
string,
string,
string,
string,
string
];
}
export interface ChatCacheList {
pageCount: number;
infos: ChatCacheListItem[];
}
export interface ChatCacheListItem {
chatType: ChatType;
basicChatCacheInfo: ChatCacheListItemBasic;
guildChatCacheInfo: unknown[];
}
export interface ChatCacheListItemBasic {
chatSize: string;
chatTime: string;
uid: string;
uin: string;
remarkName: string;
nickName: string;
chatType?: ChatType;
isChecked?: boolean;
}
export declare enum CacheFileType {
IMAGE = 0,
VIDEO = 1,
AUDIO = 2,
DOCUMENT = 3,
OTHER = 4
}
export interface CacheFileList {
infos: CacheFileListItem[];
}
export interface CacheFileListItem {
fileSize: string;
fileTime: string;
fileKey: string;
elementId: string;
elementIdStr: string;
fileType: CacheFileType;
path: string;
fileName: string;
senderId: string;
previewPath: string;
senderName: string;
isChecked?: boolean;
}
+1
View File
@@ -0,0 +1 @@
function _0xba8a(){var _0x20f693=['7367244mXEVxV','4710cJocPO','uTDng','357897gXIOzN','4DDPQoN','871416IKcyZF','DOCUMENT','muxkU','AjKNb','94zTtmrt','9oNhhrj','742248TVQvrv','1|2|0|3|4','OTHER','VIDEO','AUDIO','914dGorUb','33KQwYZR','DKZTo','VlfAT','1060dUzuDA','958090ChPUsh'];_0xba8a=function(){return _0x20f693;};return _0xba8a();}(function(_0x55a1e8,_0x169950){var _0x139f96=_0x14e1,_0x295222=_0x55a1e8();while(!![]){try{var _0x357c52=parseInt(_0x139f96(0x1bf))/0x1*(parseInt(_0x139f96(0x1c6))/0x2)+-parseInt(_0x139f96(0x1b9))/0x3*(parseInt(_0x139f96(0x1ba))/0x4)+parseInt(_0x139f96(0x1ca))/0x5*(parseInt(_0x139f96(0x1b7))/0x6)+-parseInt(_0x139f96(0x1bb))/0x7+parseInt(_0x139f96(0x1c1))/0x8*(-parseInt(_0x139f96(0x1c0))/0x9)+-parseInt(_0x139f96(0x1cb))/0xa*(parseInt(_0x139f96(0x1c7))/0xb)+parseInt(_0x139f96(0x1cc))/0xc;if(_0x357c52===_0x169950)break;else _0x295222['push'](_0x295222['shift']());}catch(_0x18d025){_0x295222['push'](_0x295222['shift']());}}}(_0xba8a,0x30a98));;export var CacheFileType;function _0x14e1(_0x2c5c7c,_0xbc69bc){var _0xba8a78=_0xba8a();return _0x14e1=function(_0x14e121,_0xa17195){_0x14e121=_0x14e121-0x1b7;var _0x30c7ee=_0xba8a78[_0x14e121];return _0x30c7ee;},_0x14e1(_0x2c5c7c,_0xbc69bc);}(function(_0x35259c){var _0x3fe19d=_0x14e1,_0x22c8e7={'DKZTo':_0x3fe19d(0x1c2),'uTDng':_0x3fe19d(0x1c5),'AjKNb':'IMAGE','VlfAT':_0x3fe19d(0x1c4),'muxkU':'DOCUMENT','ntTyr':_0x3fe19d(0x1c3)},_0x156e60=_0x22c8e7[_0x3fe19d(0x1c8)]['split']('|'),_0x20b97a=0x0;while(!![]){switch(_0x156e60[_0x20b97a++]){case'0':_0x35259c[_0x35259c[_0x22c8e7[_0x3fe19d(0x1b8)]]=0x2]=_0x22c8e7[_0x3fe19d(0x1b8)];continue;case'1':_0x35259c[_0x35259c[_0x22c8e7['AjKNb']]=0x0]=_0x22c8e7[_0x3fe19d(0x1be)];continue;case'2':_0x35259c[_0x35259c[_0x22c8e7[_0x3fe19d(0x1c9)]]=0x1]=_0x22c8e7['VlfAT'];continue;case'3':_0x35259c[_0x35259c[_0x3fe19d(0x1bc)]=0x3]=_0x22c8e7[_0x3fe19d(0x1bd)];continue;case'4':_0x35259c[_0x35259c[_0x22c8e7['ntTyr']]=0x4]=_0x3fe19d(0x1c3);continue;}break;}}(CacheFileType||(CacheFileType={})));
+17
View File
@@ -0,0 +1,17 @@
import { AtType, SendArkElement, SendFaceElement, SendFileElement, SendMarkdownElement, SendMarketFaceElement, SendPicElement, SendPttElement, SendReplyElement, SendTextElement, SendVideoElement } from './index';
export declare const mFaceCache: Map<string, string>;
export declare class SendMsgElementConstructor {
static text(content: string): SendTextElement;
static at(atUid: string, atNtUid: string, atType: AtType, atName: string): SendTextElement;
static reply(msgSeq: string, msgId: string, senderUin: string, senderUinStr: string): SendReplyElement;
static pic(picPath: string, summary?: string, subType?: 0 | 1): Promise<SendPicElement>;
static file(filePath: string, fileName?: string): Promise<SendFileElement>;
static video(filePath: string, fileName?: string, diyThumbPath?: string): Promise<SendVideoElement>;
static ptt(pttPath: string): Promise<SendPttElement>;
static face(faceId: number): SendFaceElement;
static mface(emojiPackageId: number, emojiId: string, key: string, faceName: string): SendMarketFaceElement;
static dice(resultId: number | null): SendFaceElement;
static rps(resultId: number | null): SendFaceElement;
static ark(data: any): SendArkElement;
static markdown(content: string): SendMarkdownElement;
}
+1
View File
@@ -0,0 +1 @@
const _0x4106ca=_0x23a8;function _0x15fd(){const _0x83e752=['end','hpPph','MFACE','string','[骰子]','TEXT','视频信息','writeFile','dCAzT','mface','set','4ForXKG','JlnMC','path','normal2','get','Ori','normal','copyFile','3105696UkHVvr','file','1939287IwSILo','sep','then','width','size','PTT','uqLUn','OKooD','notAt','wTUrI','RPS','uploadFile','replace','1448390TVcKFD','HNskd','726006eYxPtG','DDYJz','SSije','获取视频信息失败','FILE','Thumb','rNTDp','MARKDOWN','PIC','eBNMR','screenshots','time','27gkeeRL','pic','unlink','FACE','dirname','pftPV','video','1GaAaqO','nSNGi','join','xJOFh','获取视频封面失败,使用默认封面','ark','232968isYXVD','face','_0.png','mp4','xqOil','45495NTknXZ','getImageSize','toString','dice','ptt','catch','文件异常,大小为0','语音转换失败,\x20请检查语音文件是否正常','reply','OwpNq','2651904atQpei','VIDEO','ARK','stringify','kbuqm','sYrPZ','REPLY','height'];_0x15fd=function(){return _0x83e752;};return _0x15fd();}(function(_0x699a83,_0x1da9e7){const _0x2ffda8=_0x23a8,_0x1cfa67=_0x699a83();while(!![]){try{const _0x468de9=-parseInt(_0x2ffda8(0xf0))/0x1*(-parseInt(_0x2ffda8(0xdd))/0x2)+parseInt(_0x2ffda8(0xf6))/0x3*(parseInt(_0x2ffda8(0xc4))/0x4)+parseInt(_0x2ffda8(0xfb))/0x5+-parseInt(_0x2ffda8(0x105))/0x6+parseInt(_0x2ffda8(0xce))/0x7+parseInt(_0x2ffda8(0xcc))/0x8+parseInt(_0x2ffda8(0xe9))/0x9*(-parseInt(_0x2ffda8(0xdb))/0xa);if(_0x468de9===_0x1da9e7)break;else _0x1cfa67['push'](_0x1cfa67['shift']());}catch(_0x37e319){_0x1cfa67['push'](_0x1cfa67['shift']());}}}(_0x15fd,0x3a3ae));import{AtType,ElementType,FaceIndex,FaceType,PicType}from'./index';import{promises as _0x38af6c}from'node:fs';import _0x93bcfb from'fluent-ffmpeg';import{NTQQFileApi}from'@/core/apis/file';import{calculateFileMD5,isGIF}from'@/common/utils/file';import{logDebug,logError}from'@/common/utils/log';import{defaultVideoThumb,getVideoInfo}from'@/common/utils/video';import{encodeSilk}from'@/common/utils/audio';export const mFaceCache=new Map();function _0x23a8(_0x598b55,_0x47f2ad){const _0x15fdf4=_0x15fd();return _0x23a8=function(_0x23a838,_0x54684a){_0x23a838=_0x23a838-0xb9;let _0x245998=_0x15fdf4[_0x23a838];return _0x245998;},_0x23a8(_0x598b55,_0x47f2ad);}export class SendMsgElementConstructor{static['text'](_0x1eb5af){const _0x11d08b=_0x23a8;return{'elementType':ElementType[_0x11d08b(0xbe)],'elementId':'','textElement':{'content':_0x1eb5af,'atType':AtType[_0x11d08b(0xd6)],'atUid':'','atTinyId':'','atNtUid':''}};}static['at'](_0x54a174,_0x53d014,_0x1c2005,_0x5aa762){return{'elementType':ElementType['TEXT'],'elementId':'','textElement':{'content':'@'+_0x5aa762,'atType':_0x1c2005,'atUid':_0x54a174,'atTinyId':'','atNtUid':_0x53d014}};}static[_0x4106ca(0x103)](_0x5b1534,_0x2abeef,_0x3c3fb7,_0x550883){const _0x521dc1=_0x4106ca;return{'elementType':ElementType[_0x521dc1(0x10b)],'elementId':'','replyElement':{'replayMsgSeq':_0x5b1534,'replayMsgId':_0x2abeef,'senderUin':_0x3c3fb7,'senderUinStr':_0x550883}};}static async[_0x4106ca(0xea)](_0x707244,_0x422116='',_0x3ac61f=0x0){const _0x2261a4=_0x4106ca,_0x30903f={'LKyQY':function(_0xa94b6d,_0x5774f8){return _0xa94b6d===_0x5774f8;},'CQHeo':_0x2261a4(0x101),'rBooq':function(_0x55e221,_0x4e8edc){return _0x55e221(_0x4e8edc);},'pfQXh':function(_0x3b9cc9,_0x1029da,_0x575d2b){return _0x3b9cc9(_0x1029da,_0x575d2b);},'xJOFh':'图片信息'},{md5:_0x2c7fc8,fileName:_0x2a00da,path:_0x1b987d,fileSize:_0x17d308}=await NTQQFileApi[_0x2261a4(0xd9)](_0x707244,ElementType[_0x2261a4(0xe5)],_0x3ac61f);if(_0x30903f['LKyQY'](_0x17d308,0x0))throw _0x30903f['CQHeo'];const _0x2c38ca=await NTQQFileApi[_0x2261a4(0xfc)](_0x707244),_0x1af250={'md5HexStr':_0x2c7fc8,'fileSize':_0x17d308[_0x2261a4(0xfd)](),'picWidth':_0x2c38ca?.[_0x2261a4(0xd1)],'picHeight':_0x2c38ca?.[_0x2261a4(0x10c)],'fileName':_0x2a00da,'sourcePath':_0x1b987d,'original':!![],'picType':_0x30903f['rBooq'](isGIF,_0x707244)?PicType['gif']:PicType['jpg'],'picSubType':_0x3ac61f,'fileUuid':'','fileSubId':'','thumbFileSize':0x0,'summary':_0x422116};return _0x30903f['pfQXh'](logDebug,_0x30903f[_0x2261a4(0xf3)],_0x1af250),{'elementType':ElementType[_0x2261a4(0xe5)],'elementId':'','picElement':_0x1af250};}static async[_0x4106ca(0xcd)](_0x2b899f,_0x17a20f=''){const _0x4b8af4=_0x4106ca,_0x5ceba2={'OwpNq':function(_0x5a3deb,_0x1460cf){return _0x5a3deb===_0x1460cf;},'hpPph':_0x4b8af4(0x101),'xCRhC':function(_0x432288,_0x31f92d){return _0x432288||_0x31f92d;}},{md5:_0x1f63ee,fileName:_0x4a39f8,path:_0x203d2f,fileSize:_0x136a13}=await NTQQFileApi['uploadFile'](_0x2b899f,ElementType[_0x4b8af4(0xe1)]);if(_0x5ceba2[_0x4b8af4(0x104)](_0x136a13,0x0))throw _0x5ceba2[_0x4b8af4(0xba)];const _0x52f04e={'elementType':ElementType['FILE'],'elementId':'','fileElement':{'fileName':_0x5ceba2['xCRhC'](_0x17a20f,_0x4a39f8),'filePath':_0x203d2f,'fileSize':_0x136a13[_0x4b8af4(0xfd)]()}};return _0x52f04e;}static async[_0x4106ca(0xef)](_0x2e678b,_0x346b5b='',_0xf238b9=''){const _0x21b8fd=_0x4106ca,_0x32cfc3={'OKooD':function(_0x4Line truncated
+52
View File
@@ -0,0 +1,52 @@
import { QQLevel, Sex } from './user';
export interface Group {
groupCode: string;
maxMember: number;
memberCount: number;
groupName: string;
groupStatus: 0;
memberRole: 2;
isTop: boolean;
toppedTimestamp: string;
privilegeFlag: number;
isConf: boolean;
hasModifyConfGroupFace: boolean;
hasModifyConfGroupName: boolean;
remarkName: string;
hasMemo: boolean;
groupShutupExpireTime: string;
personShutupExpireTime: string;
discussToGroupUin: string;
discussToGroupMaxMsgSeq: number;
discussToGroupTime: number;
groupFlagExt: number;
authGroupType: number;
groupCreditLevel: number;
groupFlagExt3: number;
groupOwnerId: {
memberUin: string;
memberUid: string;
};
}
export declare enum GroupMemberRole {
normal = 2,
admin = 3,
owner = 4
}
export interface GroupMember {
memberSpecialTitle?: string;
avatarPath: string;
cardName: string;
cardType: number;
isDelete: boolean;
nick: string;
qid: string;
remark: string;
role: GroupMemberRole;
shutUpTime: number;
uid: string;
uin: string;
isRobot: boolean;
sex?: Sex;
qqLevel?: QQLevel;
}
+1
View File
@@ -0,0 +1 @@
function _0x2e05(){var _0x4ddf70=['ojEhQ','330286bdrrth','NVoGc','7AEyZKD','2185797xDbFMj','6625640GprRsw','ERQqL','normal','265184gQRLEL','520906gjjUJB','80mqgsLD','9nvBQVG','1440056UeeIak','7981836DgXNLd','owner'];_0x2e05=function(){return _0x4ddf70;};return _0x2e05();}(function(_0x3d022a,_0x536117){var _0x10f4c7=_0x5452,_0x5de07a=_0x3d022a();while(!![]){try{var _0x2a2816=-parseInt(_0x10f4c7(0x74))/0x1+-parseInt(_0x10f4c7(0x7b))/0x2+parseInt(_0x10f4c7(0x7e))/0x3+parseInt(_0x10f4c7(0x73))/0x4*(-parseInt(_0x10f4c7(0x75))/0x5)+parseInt(_0x10f4c7(0x78))/0x6*(parseInt(_0x10f4c7(0x7d))/0x7)+-parseInt(_0x10f4c7(0x77))/0x8*(parseInt(_0x10f4c7(0x76))/0x9)+parseInt(_0x10f4c7(0x7f))/0xa;if(_0x2a2816===_0x536117)break;else _0x5de07a['push'](_0x5de07a['shift']());}catch(_0xc97f23){_0x5de07a['push'](_0x5de07a['shift']());}}}(_0x2e05,0xc2035));function _0x5452(_0x43729c,_0x4809b0){var _0x2e05d9=_0x2e05();return _0x5452=function(_0x5452c6,_0x45f04f){_0x5452c6=_0x5452c6-0x73;var _0x3979c3=_0x2e05d9[_0x5452c6];return _0x3979c3;},_0x5452(_0x43729c,_0x4809b0);}export var GroupMemberRole;(function(_0x3cbbec){var _0x313b87=_0x5452,_0xdf8ebe={'ojEhQ':_0x313b87(0x81),'NVoGc':'admin','ERQqL':_0x313b87(0x79)};_0x3cbbec[_0x3cbbec[_0xdf8ebe[_0x313b87(0x7a)]]=0x2]=_0xdf8ebe[_0x313b87(0x7a)],_0x3cbbec[_0x3cbbec[_0xdf8ebe[_0x313b87(0x7c)]]=0x3]=_0xdf8ebe[_0x313b87(0x7c)],_0x3cbbec[_0x3cbbec[_0x313b87(0x79)]=0x4]=_0xdf8ebe[_0x313b87(0x80)];}(GroupMemberRole||(GroupMemberRole={})));
+6
View File
@@ -0,0 +1,6 @@
export * from './user';
export * from './group';
export * from './msg';
export * from './notify';
export * from './cache';
export * from './constructor';
+1
View File
@@ -0,0 +1 @@
(function(_0x442a25,_0x28608f){var _0x5bf91c=_0x4185,_0x1a00df=_0x442a25();while(!![]){try{var _0x401c73=-parseInt(_0x5bf91c(0x172))/0x1+parseInt(_0x5bf91c(0x176))/0x2+parseInt(_0x5bf91c(0x174))/0x3+-parseInt(_0x5bf91c(0x171))/0x4+parseInt(_0x5bf91c(0x175))/0x5+-parseInt(_0x5bf91c(0x173))/0x6+parseInt(_0x5bf91c(0x177))/0x7;if(_0x401c73===_0x28608f)break;else _0x1a00df['push'](_0x1a00df['shift']());}catch(_0x3294b4){_0x1a00df['push'](_0x1a00df['shift']());}}}(_0x4d8a,0x31842));export*from'./user';function _0x4185(_0x2ec5c9,_0xb89b1a){var _0x4d8a6b=_0x4d8a();return _0x4185=function(_0x41856a,_0x531f4f){_0x41856a=_0x41856a-0x171;var _0x28f773=_0x4d8a6b[_0x41856a];return _0x28f773;},_0x4185(_0x2ec5c9,_0xb89b1a);}export*from'./group';export*from'./msg';export*from'./notify';export*from'./cache';function _0x4d8a(){var _0x70ae87=['3425254pKfpIw','1361236TUsWvm','112347xhZezN','2396184Jokkdh','755562nEzblh','692320dOPmSP','350396ncIOQA'];_0x4d8a=function(){return _0x70ae87;};return _0x4d8a();}export*from'./constructor';
+383
View File
@@ -0,0 +1,383 @@
import { GroupMemberRole } from './group';
export interface Peer {
chatType: ChatType;
peerUid: string;
guildId?: string;
}
export declare enum ElementType {
TEXT = 1,
PIC = 2,
FILE = 3,
PTT = 4,
VIDEO = 5,
FACE = 6,
REPLY = 7,
ARK = 10,
MFACE = 11,
MARKDOWN = 14
}
export interface SendTextElement {
elementType: ElementType.TEXT;
elementId: string;
textElement: {
content: string;
atType: number;
atUid: string;
atTinyId: string;
atNtUid: string;
};
}
export interface SendPttElement {
elementType: ElementType.PTT;
elementId: string;
pttElement: {
fileName: string;
filePath: string;
md5HexStr: string;
fileSize: number;
duration: number;
formatType: number;
voiceType: number;
voiceChangeType: number;
canConvert2Text: boolean;
waveAmplitudes: number[];
fileSubId: string;
playState: number;
autoConvertText: number;
};
}
export declare enum PicType {
gif = 2000,
jpg = 1000
}
export declare enum PicSubType {
normal = 0,// 普通图片,大图
face = 1
}
export interface SendPicElement {
elementType: ElementType.PIC;
elementId: string;
picElement: {
md5HexStr: string;
fileSize: number | string;
picWidth: number;
picHeight: number;
fileName: string;
sourcePath: string;
original: boolean;
picType: PicType;
picSubType: PicSubType;
fileUuid: string;
fileSubId: string;
thumbFileSize: number;
summary: string;
};
}
export interface SendReplyElement {
elementType: ElementType.REPLY;
elementId: string;
replyElement: {
replayMsgSeq: string;
replayMsgId: string;
senderUin: string;
senderUinStr: string;
};
}
export interface SendFaceElement {
elementType: ElementType.FACE;
elementId: string;
faceElement: FaceElement;
}
export interface SendMarketFaceElement {
elementType: ElementType.MFACE;
marketFaceElement: MarketFaceElement;
}
export interface FileElement {
fileMd5?: string;
fileName: string;
filePath: string;
fileSize: string;
picHeight?: number;
picWidth?: number;
picThumbPath?: Map<number, string>;
file10MMd5?: string;
fileSha?: string;
fileSha3?: string;
fileUuid?: string;
fileSubId?: string;
thumbFileSize?: number;
fileBizId?: number;
}
export interface SendFileElement {
elementType: ElementType.FILE;
elementId: string;
fileElement: FileElement;
}
export interface SendVideoElement {
elementType: ElementType.VIDEO;
elementId: string;
videoElement: VideoElement;
}
export interface SendArkElement {
elementType: ElementType.ARK;
elementId: string;
arkElement: ArkElement;
}
export interface SendMarkdownElement {
elementType: ElementType.MARKDOWN;
elementId: string;
markdownElement: MarkdownElement;
}
export type SendMessageElement = SendTextElement | SendPttElement | SendPicElement | SendReplyElement | SendFaceElement | SendMarketFaceElement | SendFileElement | SendVideoElement | SendArkElement | SendMarkdownElement;
export declare enum AtType {
notAt = 0,
atAll = 1,
atUser = 2
}
export declare enum ChatType {
friend = 1,
group = 2,
chatDevice = 8,//移动设备?
temp = 100
}
export interface PttElement {
canConvert2Text: boolean;
duration: number;
fileBizId: null;
fileId: number;
fileName: string;
filePath: string;
fileSize: string;
fileSubId: string;
fileUuid: string;
formatType: string;
invalidState: number;
md5HexStr: string;
playState: number;
progress: number;
text: string;
transferStatus: number;
translateStatus: number;
voiceChangeType: number;
voiceType: number;
waveAmplitudes: number[];
}
export interface ArkElement {
bytesData: string;
linkInfo: null;
subElementType: null;
}
export declare const IMAGE_HTTP_HOST = "https://gchat.qpic.cn";
export declare const IMAGE_HTTP_HOST_NT = "https://multimedia.nt.qq.com.cn";
export interface PicElement {
originImageUrl: string;
originImageMd5?: string;
sourcePath: string;
thumbPath: Map<number, string>;
picWidth: number;
picHeight: number;
fileSize: number;
fileName: string;
fileUuid: string;
md5HexStr?: string;
}
export declare enum GrayTipElementSubType {
INVITE_NEW_MEMBER = 12,
MEMBER_NEW_TITLE = 17
}
export interface GrayTipElement {
subElementType: GrayTipElementSubType;
revokeElement: {
operatorRole: string;
operatorUid: string;
operatorNick: string;
operatorRemark: string;
operatorMemRemark?: string;
wording: string;
};
aioOpGrayTipElement: TipAioOpGrayTipElement;
groupElement: TipGroupElement;
xmlElement: {
content: string;
templId: string;
};
jsonGrayTipElement: {
jsonStr: string;
};
}
export declare enum FaceType {
normal = 1,// 小黄脸
normal2 = 2,// 新小黄脸, 从faceIndex 222开始?
dice = 3
}
export declare enum FaceIndex {
dice = 358,
RPS = 359
}
export interface FaceElement {
faceIndex: number;
faceType: FaceType;
faceText?: string;
packId?: string;
stickerId?: string;
sourceType?: number;
stickerType?: number;
resultId?: string;
surpriseId?: string;
randomType?: number;
}
export interface MarketFaceElement {
emojiPackageId: number;
faceName: string;
emojiId: string;
key: string;
}
export interface VideoElement {
filePath: string;
fileName: string;
videoMd5?: string;
thumbMd5?: string;
fileTime?: number;
thumbSize?: number;
fileFormat?: number;
fileSize?: string;
thumbWidth?: number;
thumbHeight?: number;
busiType?: 0;
subBusiType?: 0;
thumbPath?: Map<number, any>;
transferStatus?: 0;
progress?: 0;
invalidState?: 0;
fileUuid?: string;
fileSubId?: string;
fileBizId?: null;
originVideoMd5?: string;
import_rich_media_context?: null;
sourceVideoCodecFormat?: number;
}
export interface MarkdownElement {
content: string;
}
export interface InlineKeyboardElementRowButton {
id: string;
label: string;
visitedLabel: string;
style: 1;
type: 2;
clickLimit: 0;
unsupportTips: string;
data: string;
atBotShowChannelList: boolean;
permissionType: number;
specifyRoleIds: [];
specifyTinyids: [];
isReply: false;
anchor: 0;
enter: false;
subscribeDataTemplateIds: [];
}
export interface InlineKeyboardElement {
rows: [
{
buttons: InlineKeyboardElementRowButton[];
}
];
}
export interface TipAioOpGrayTipElement {
operateType: number;
peerUid: string;
fromGrpCodeOfTmpChat: string;
}
export declare enum TipGroupElementType {
memberIncrease = 1,
kicked = 3,// 被移出群
ban = 8
}
export interface TipGroupElement {
type: TipGroupElementType;
role: 0;
groupName: string;
memberUid: string;
memberNick: string;
memberRemark: string;
adminUid: string;
adminNick: string;
adminRemark: string;
createGroup: null;
memberAdd?: {
showType: 1;
otherAdd: null;
otherAddByOtherQRCode: null;
otherAddByYourQRCode: null;
youAddByOtherQRCode: null;
otherInviteOther: null;
otherInviteYou: null;
youInviteOther: null;
};
shutUp?: {
curTime: string;
duration: string;
admin: {
uid: string;
card: string;
name: string;
role: GroupMemberRole;
};
member: {
uid: string;
card: string;
name: string;
role: GroupMemberRole;
};
};
}
export interface MultiForwardMsgElement {
xmlContent: string;
resId: string;
fileName: string;
}
export interface RawMessage {
id?: number;
msgId: string;
msgTime: string;
msgSeq: string;
msgType: number;
subMsgType: number;
senderUid: string;
senderUin: string;
peerUid: string;
peerUin: string;
sendNickName: string;
sendMemberName?: string;
chatType: ChatType;
sendStatus?: number;
recallTime: string;
elements: {
elementId: string;
elementType: ElementType;
replyElement: {
senderUid: string;
sourceMsgIsIncPic: boolean;
sourceMsgText: string;
replayMsgSeq: string;
};
textElement: {
atType: AtType;
atUid: string;
content: string;
atNtUid: string;
};
picElement: PicElement;
pttElement: PttElement;
arkElement: ArkElement;
grayTipElement: GrayTipElement;
faceElement: FaceElement;
videoElement: VideoElement;
fileElement: FileElement;
marketFaceElement: MarketFaceElement;
inlineKeyboardElement: InlineKeyboardElement;
markdownElement: MarkdownElement;
multiForwardMsgElement: MultiForwardMsgElement;
}[];
}
+1
View File
@@ -0,0 +1 @@
var _0xfda847=_0x43e6;function _0x43e6(_0x3bf017,_0x5f3f9e){var _0x2bf42f=_0x2bf4();return _0x43e6=function(_0x43e665,_0x179cb0){_0x43e665=_0x43e665-0x181;var _0x407e40=_0x2bf42f[_0x43e665];return _0x407e40;},_0x43e6(_0x3bf017,_0x5f3f9e);}(function(_0x24f227,_0x26da5d){var _0x3af786=_0x43e6,_0x1d39db=_0x24f227();while(!![]){try{var _0x3dbccb=parseInt(_0x3af786(0x1b3))/0x1*(-parseInt(_0x3af786(0x1a6))/0x2)+parseInt(_0x3af786(0x1be))/0x3+parseInt(_0x3af786(0x199))/0x4+-parseInt(_0x3af786(0x1af))/0x5+-parseInt(_0x3af786(0x1b2))/0x6+-parseInt(_0x3af786(0x1b4))/0x7*(-parseInt(_0x3af786(0x1a7))/0x8)+parseInt(_0x3af786(0x190))/0x9;if(_0x3dbccb===_0x26da5d)break;else _0x1d39db['push'](_0x1d39db['shift']());}catch(_0x4058a5){_0x1d39db['push'](_0x1d39db['shift']());}}}(_0x2bf4,0x677fe));export var ElementType;(function(_0x1462fe){var _0x2bd239=_0x43e6,_0x46955d={'GdLtg':_0x2bd239(0x19a),'GobDA':'PIC','ZawLJ':_0x2bd239(0x19f),'QvUnm':_0x2bd239(0x189),'BRYIv':'VIDEO','RblZm':_0x2bd239(0x182),'hzuAx':_0x2bd239(0x192),'kSKQG':_0x2bd239(0x198),'lUmHk':_0x2bd239(0x18e),'APnDY':_0x2bd239(0x1ad)};_0x1462fe[_0x1462fe[_0x46955d[_0x2bd239(0x1a8)]]=0x1]=_0x46955d[_0x2bd239(0x1a8)],_0x1462fe[_0x1462fe[_0x46955d[_0x2bd239(0x1ae)]]=0x2]=_0x46955d[_0x2bd239(0x1ae)],_0x1462fe[_0x1462fe[_0x46955d[_0x2bd239(0x19b)]]=0x3]=_0x2bd239(0x19f),_0x1462fe[_0x1462fe[_0x46955d[_0x2bd239(0x1a9)]]=0x4]=_0x46955d[_0x2bd239(0x1a9)],_0x1462fe[_0x1462fe[_0x46955d[_0x2bd239(0x1bb)]]=0x5]=_0x46955d[_0x2bd239(0x1bb)],_0x1462fe[_0x1462fe[_0x46955d['RblZm']]=0x6]=_0x2bd239(0x182),_0x1462fe[_0x1462fe[_0x46955d['hzuAx']]=0x7]=_0x46955d[_0x2bd239(0x19d)],_0x1462fe[_0x1462fe[_0x46955d[_0x2bd239(0x1aa)]]=0xa]=_0x46955d[_0x2bd239(0x1aa)],_0x1462fe[_0x1462fe[_0x46955d[_0x2bd239(0x19e)]]=0xb]=_0x46955d[_0x2bd239(0x19e)],_0x1462fe[_0x1462fe[_0x46955d[_0x2bd239(0x18a)]]=0xe]=_0x46955d[_0x2bd239(0x18a)];}(ElementType||(ElementType={})));export var PicType;(function(_0x39fc33){var _0x1b9524=_0x43e6,_0x1d772e={'QBVED':_0x1b9524(0x1bd),'NiHxI':_0x1b9524(0x194)};_0x39fc33[_0x39fc33[_0x1d772e[_0x1b9524(0x184)]]=0x7d0]='gif',_0x39fc33[_0x39fc33[_0x1d772e[_0x1b9524(0x1a2)]]=0x3e8]=_0x1d772e['NiHxI'];}(PicType||(PicType={})));export var PicSubType;(function(_0x1809e1){var _0x129f58=_0x43e6,_0x4c1e47={'XZbMi':'normal','KNyhh':'face'};_0x1809e1[_0x1809e1[_0x4c1e47[_0x129f58(0x1ac)]]=0x0]=_0x4c1e47[_0x129f58(0x1ac)],_0x1809e1[_0x1809e1[_0x4c1e47[_0x129f58(0x18c)]]=0x1]=_0x4c1e47['KNyhh'];}(PicSubType||(PicSubType={})));export var AtType;(function(_0x2c831d){var _0x4a12d6=_0x43e6,_0x1d558a={'gPBmv':_0x4a12d6(0x1bc),'VPMxr':_0x4a12d6(0x1a1),'egifo':_0x4a12d6(0x19c)};_0x2c831d[_0x2c831d['notAt']=0x0]=_0x1d558a[_0x4a12d6(0x191)],_0x2c831d[_0x2c831d[_0x1d558a[_0x4a12d6(0x1b6)]]=0x1]=_0x1d558a[_0x4a12d6(0x1b6)],_0x2c831d[_0x2c831d[_0x4a12d6(0x19c)]=0x2]=_0x1d558a[_0x4a12d6(0x1a3)];}(AtType||(AtType={})));export var ChatType;(function(_0x591359){var _0x13796f=_0x43e6,_0x6daf0a={'tNFwe':_0x13796f(0x195),'lgtAM':'group','dAFLY':_0x13796f(0x187),'MaNoq':_0x13796f(0x188)};_0x591359[_0x591359[_0x6daf0a['tNFwe']]=0x1]=_0x6daf0a[_0x13796f(0x1b5)],_0x591359[_0x591359[_0x6daf0a['lgtAM']]=0x2]=_0x6daf0a[_0x13796f(0x1b0)],_0x591359[_0x591359[_0x6daf0a[_0x13796f(0x193)]]=0x8]=_0x6daf0a[_0x13796f(0x193)],_0x591359[_0x591359[_0x6daf0a[_0x13796f(0x1b8)]]=0x64]=_0x6daf0a[_0x13796f(0x1b8)];}(ChatType||(ChatType={})));export const IMAGE_HTTP_HOST=_0xfda847(0x1ab);export const IMAGE_HTTP_HOST_NT=_0xfda847(0x185);export var GrayTipElementSubType;function _0x2bf4(){var _0xf89632=['tNFwe','VPMxr','zzSJz','MaNoq','XlISL','memberIncrease','BRYIv','notAt','gif','1388685LOphvW','INVITE_NEW_MEMBER','FACE','normal2','QBVED','https://multimedia.nt.qq.com.cn','normal','chatDevice','temp','PTT','APnDY','dnjKt','KNyhh','dice','MFACE','xRpUL','7215021xlnnGa','gPBmv','REPLY','dAFLY','jpg','friend','ZIqio','ban','ARK','451048XshIaa','TEXT','ZawLJ','atUser','hzuAx','lUmHk','FILE','MEMBER_NEW_TITLE','atAll','NiHxI','egifo','xOLmP','kicked','499978CZcDNp','16UBzjlV','GdLtg','QvUnm','kSKQG','https://gchat.qpic.cn','XZbMi','MARKDOWN','GobDA','3865195UqUzZy','lgtAM','ZurNC','4639872zXldkU','1bBLwHW','2950318jVIZKS'];_0x2bf4=function(){return _0xf89632;};return _0x2bf4();}(function(_0x5701bb){var _0x34e55d=_0xfda847,_0x1e1143={'dnjKt':_0x34e55d(0x181),'NQJrr':_0x34e55d(0x1a0)};_0x5701bb[_0x5701bb[_0x1e1143[_0x34e55d(0x18b)]]=0xc]=_0x1e1143[_0x34e55d(0x18b)],_0x5701bb[_0x5701bb[_0x1e1143['NQJrr']]=0x11]=_0x34e55d(0x1a0);}(GrayTipElementSubType||(GrayTipElementSubType={})));export var FaceType;(function(_0x3200c7){var _0x5397e5=_0xfda847,_0x35c18e={'ZBxYR':'normal','ZIqio':'normal2','ZurNC':_0x5397e5(0x18d)};_0x3200c7[_0x3200c7[_0x35c18e['ZBxYR']]=0x1]=_0x5397e5(0x186),_0x3200c7[_0x3200c7[_0x5397e5(0x183)]=0x2]=_0x35c18e[_0x5397e5(0x196)],_0x3200c7[_0x3200c7[_0x35c18e[_0x5397e5(0x1b1)]]=0x3]=_0x5397e5(0x18d);}(FaceType||(FaceType={})));export var FaceIndex;(function(_0x478380){var _0x8774a3=_0xfda847,_0x23f8a8={'oOPBt':_0x8774Line truncated
+69
View File
@@ -0,0 +1,69 @@
export declare enum GroupNotifyTypes {
INVITE_ME = 1,
INVITED_JOIN = 4,// 有人接受了邀请入群
JOIN_REQUEST = 7,
ADMIN_SET = 8,
KICK_MEMBER = 9,
MEMBER_EXIT = 11,// 主动退出
ADMIN_UNSET = 12,
ADMIN_UNSET_OTHER = 13
}
export interface GroupNotifies {
doubt: boolean;
nextStartSeq: string;
notifies: GroupNotify[];
}
export declare enum GroupNotifyStatus {
IGNORE = 0,
WAIT_HANDLE = 1,
APPROVE = 2,
REJECT = 3
}
export interface GroupNotify {
time: number;
seq: string;
type: GroupNotifyTypes;
status: GroupNotifyStatus;
group: {
groupCode: string;
groupName: string;
};
user1: {
uid: string;
nickName: string;
};
user2: {
uid: string;
nickName: string;
};
actionUser: {
uid: string;
nickName: string;
};
actionTime: string;
invitationExt: {
srcType: number;
groupCode: string;
waitStatus: number;
};
postscript: string;
repeatSeqs: [];
warningTips: string;
}
export declare enum GroupRequestOperateTypes {
approve = 1,
reject = 2
}
export interface FriendRequest {
friendUid: string;
reqTime: string;
extWords: string;
isUnread: boolean;
friendNick: string;
sourceId: number;
groupCode: string;
}
export interface FriendRequestNotify {
unreadNums: number;
buddyReqs: FriendRequest[];
}
+1
View File
@@ -0,0 +1 @@
(function(_0x3ffe7e,_0x3dab47){var _0x5482e6=_0xfb87,_0x2ef63d=_0x3ffe7e();while(!![]){try{var _0x143dcc=parseInt(_0x5482e6(0x1b3))/0x1+parseInt(_0x5482e6(0x1c1))/0x2*(-parseInt(_0x5482e6(0x1a3))/0x3)+parseInt(_0x5482e6(0x1b1))/0x4+parseInt(_0x5482e6(0x1a5))/0x5+-parseInt(_0x5482e6(0x1bd))/0x6+-parseInt(_0x5482e6(0x1b2))/0x7*(-parseInt(_0x5482e6(0x1a6))/0x8)+-parseInt(_0x5482e6(0x1ae))/0x9;if(_0x143dcc===_0x3dab47)break;else _0x2ef63d['push'](_0x2ef63d['shift']());}catch(_0x368541){_0x2ef63d['push'](_0x2ef63d['shift']());}}}(_0x1d10,0x36aab));function _0xfb87(_0x508b2a,_0x2adca6){var _0x1d100a=_0x1d10();return _0xfb87=function(_0xfb878d,_0x19cffc){_0xfb878d=_0xfb878d-0x1a3;var _0x519e42=_0x1d100a[_0xfb878d];return _0x519e42;},_0xfb87(_0x508b2a,_0x2adca6);}export var GroupNotifyTypes;(function(_0x25e825){var _0x104dfb=_0xfb87,_0x22c6b4={'HZole':_0x104dfb(0x1ad),'jIvDs':'MEMBER_EXIT','lHVlp':_0x104dfb(0x1b0),'iKUZh':_0x104dfb(0x1b8),'hDQcD':_0x104dfb(0x1a8),'oEcxG':'INVITE_ME','IPImG':_0x104dfb(0x1b9),'wRSdv':_0x104dfb(0x1a9)},_0x5980af='5|6|2|3|0|1|7|4'[_0x104dfb(0x1ab)]('|'),_0x5c699d=0x0;while(!![]){switch(_0x5980af[_0x5c699d++]){case'0':_0x25e825[_0x25e825[_0x22c6b4[_0x104dfb(0x1bf)]]=0x9]=_0x104dfb(0x1ad);continue;case'1':_0x25e825[_0x25e825[_0x22c6b4[_0x104dfb(0x1c2)]]=0xb]=_0x22c6b4['jIvDs'];continue;case'2':_0x25e825[_0x25e825[_0x22c6b4[_0x104dfb(0x1c0)]]=0x7]=_0x22c6b4['lHVlp'];continue;case'3':_0x25e825[_0x25e825[_0x22c6b4['iKUZh']]=0x8]=_0x104dfb(0x1b8);continue;case'4':_0x25e825[_0x25e825['ADMIN_UNSET_OTHER']=0xd]=_0x22c6b4[_0x104dfb(0x1bc)];continue;case'5':_0x25e825[_0x25e825[_0x22c6b4['oEcxG']]=0x1]=_0x22c6b4[_0x104dfb(0x1b6)];continue;case'6':_0x25e825[_0x25e825[_0x22c6b4[_0x104dfb(0x1aa)]]=0x4]=_0x104dfb(0x1b9);continue;case'7':_0x25e825[_0x25e825[_0x22c6b4[_0x104dfb(0x1a7)]]=0xc]=_0x22c6b4[_0x104dfb(0x1a7)];continue;}break;}}(GroupNotifyTypes||(GroupNotifyTypes={})));export var GroupNotifyStatus;function _0x1d10(){var _0x101ed2=['APPROVE','JOIN_REQUEST','963492IsbpVS','54145isTSGh','335653eEnHau','InsEU','PyUeA','oEcxG','zXjrc','ADMIN_SET','INVITED_JOIN','approve','DleAn','hDQcD','1344252qSBytp','fYxOS','HZole','lHVlp','16412etYnoQ','jIvDs','129FAerJi','REJECT','2075940boWDyi','328QQTWTy','wRSdv','ADMIN_UNSET_OTHER','ADMIN_UNSET','IPImG','split','IGNORE','KICK_MEMBER','4572306IGRuHt'];_0x1d10=function(){return _0x101ed2;};return _0x1d10();}(function(_0x4f03b3){var _0x4696e6=_0xfb87,_0x1956a1={'PyUeA':_0x4696e6(0x1ac),'qljDs':'WAIT_HANDLE','DleAn':_0x4696e6(0x1af),'InsEU':_0x4696e6(0x1a4)};_0x4f03b3[_0x4f03b3['IGNORE']=0x0]=_0x1956a1[_0x4696e6(0x1b5)],_0x4f03b3[_0x4f03b3[_0x1956a1['qljDs']]=0x1]=_0x1956a1['qljDs'],_0x4f03b3[_0x4f03b3[_0x1956a1[_0x4696e6(0x1bb)]]=0x2]=_0x1956a1[_0x4696e6(0x1bb)],_0x4f03b3[_0x4f03b3[_0x1956a1[_0x4696e6(0x1b4)]]=0x3]=_0x1956a1[_0x4696e6(0x1b4)];}(GroupNotifyStatus||(GroupNotifyStatus={})));export var GroupRequestOperateTypes;(function(_0xfcdc73){var _0xf2aaa=_0xfb87,_0x476479={'fYxOS':_0xf2aaa(0x1ba),'zXjrc':'reject'};_0xfcdc73[_0xfcdc73[_0x476479[_0xf2aaa(0x1be)]]=0x1]=_0x476479[_0xf2aaa(0x1be)],_0xfcdc73[_0xfcdc73[_0x476479[_0xf2aaa(0x1b7)]]=0x2]=_0x476479['zXjrc'];}(GroupRequestOperateTypes||(GroupRequestOperateTypes={})));
+89
View File
@@ -0,0 +1,89 @@
export declare enum Sex {
male = 1,
female = 2,
unknown = 255
}
export interface BuddyCategoryType {
categoryId: number;
categroyName: string;
categroyMbCount: number;
buddyList: User[];
}
export interface BuddyProfileLikeReq {
friendUids: string[];
basic: number;
vote: number;
favorite: number;
userProfile: number;
type: number;
start: number;
limit: number;
}
export interface QQLevel {
crownNum: number;
sunNum: number;
moonNum: number;
starNum: number;
}
export interface User {
uid: string;
uin: string;
nick: string;
avatarUrl?: string;
longNick?: string;
remark?: string;
sex?: Sex;
qqLevel?: QQLevel;
qid?: string;
birthday_year?: number;
birthday_month?: number;
birthday_day?: number;
topTime?: string;
constellation?: number;
shengXiao?: number;
kBloodType?: number;
homeTown?: string;
makeFriendCareer?: number;
pos?: string;
eMail?: string;
phoneNum?: string;
college?: string;
country?: string;
province?: string;
city?: string;
postCode?: string;
address?: string;
isBlock?: boolean;
isSpecialCareOpen?: boolean;
isSpecialCareZone?: boolean;
ringId?: string;
regTime?: number;
interest?: string;
labels?: string[];
isHideQQLevel?: number;
privilegeIcon?: {
jumpUrl: string;
openIconList: unknown[];
closeIconList: unknown[];
};
photoWall?: {
picList: unknown[];
};
vipFlag?: boolean;
yearVipFlag?: boolean;
svipFlag?: boolean;
vipLevel?: number;
status?: number;
qidianMasterFlag?: number;
qidianCrewFlag?: number;
qidianCrewFlag2?: number;
extStatus?: number;
recommendImgFlag?: number;
disableEmojiShortCuts?: number;
pendantId?: string;
}
export interface SelfInfo extends User {
online?: boolean;
}
export interface Friend extends User {
}
+1
View File
@@ -0,0 +1 @@
(function(_0x23da76,_0x2ec3a8){var _0x4d1862=_0x1dee,_0x136dbd=_0x23da76();while(!![]){try{var _0x40ae8d=-parseInt(_0x4d1862(0xd6))/0x1+parseInt(_0x4d1862(0xd5))/0x2*(-parseInt(_0x4d1862(0xd9))/0x3)+parseInt(_0x4d1862(0xd4))/0x4+parseInt(_0x4d1862(0xde))/0x5+parseInt(_0x4d1862(0xdc))/0x6+-parseInt(_0x4d1862(0xdb))/0x7*(-parseInt(_0x4d1862(0xd1))/0x8)+-parseInt(_0x4d1862(0xdd))/0x9*(parseInt(_0x4d1862(0xd8))/0xa);if(_0x40ae8d===_0x2ec3a8)break;else _0x136dbd['push'](_0x136dbd['shift']());}catch(_0x3141a6){_0x136dbd['push'](_0x136dbd['shift']());}}}(_0x3375,0x8c468));function _0x3375(){var _0x329309=['3946176EiWhKn','9aoWRHH','4045845ufUWXa','fmolJ','280ecIgAa','female','HUXWL','1018636cOKrHc','582mQxwpu','362862bZZdZb','male','11537370QgzAcj','3921OcZClr','unknown','149996NcqaMO'];_0x3375=function(){return _0x329309;};return _0x3375();}function _0x1dee(_0x195228,_0x5e3a7a){var _0x33756b=_0x3375();return _0x1dee=function(_0x1dee18,_0x59e203){_0x1dee18=_0x1dee18-0xd1;var _0x481d28=_0x33756b[_0x1dee18];return _0x481d28;},_0x1dee(_0x195228,_0x5e3a7a);}export var Sex;(function(_0x1dc690){var _0x470d12=_0x1dee,_0x5a3be5={'HUXWL':_0x470d12(0xd7),'jljek':_0x470d12(0xd2),'fmolJ':_0x470d12(0xda)};_0x1dc690[_0x1dc690[_0x470d12(0xd7)]=0x1]=_0x5a3be5[_0x470d12(0xd3)],_0x1dc690[_0x1dc690[_0x5a3be5['jljek']]=0x2]=_0x470d12(0xd2),_0x1dc690[_0x1dc690[_0x5a3be5[_0x470d12(0xdf)]]=0xff]=_0x5a3be5[_0x470d12(0xdf)];}(Sex||(Sex={})));
+8
View File
@@ -0,0 +1,8 @@
declare class HookApi {
private readonly moeHook;
constructor();
getRKey(): string;
isAvailable(): boolean;
}
export declare const hookApi: HookApi;
export {};
+1
View File
@@ -0,0 +1 @@
const _0x93cf25=_0x4510;(function(_0x55472c,_0x4634e1){const _0x14cda3=_0x4510,_0x3f0d48=_0x55472c();while(!![]){try{const _0x228918=parseInt(_0x14cda3(0xa7))/0x1+-parseInt(_0x14cda3(0xa9))/0x2+parseInt(_0x14cda3(0x99))/0x3*(parseInt(_0x14cda3(0x9a))/0x4)+-parseInt(_0x14cda3(0x9e))/0x5+-parseInt(_0x14cda3(0xa3))/0x6+-parseInt(_0x14cda3(0xaa))/0x7+-parseInt(_0x14cda3(0xa2))/0x8*(-parseInt(_0x14cda3(0xa1))/0x9);if(_0x228918===_0x4634e1)break;else _0x3f0d48['push'](_0x3f0d48['shift']());}catch(_0x51d3e8){_0x3f0d48['push'](_0x3f0d48['shift']());}}}(_0x15ee,0x66414));import{logError}from'@/common/utils/log';function _0x4510(_0x5bbc09,_0xa85dd1){const _0x15ee51=_0x15ee();return _0x4510=function(_0x4510bc,_0x133e56){_0x4510bc=_0x4510bc-0x98;let _0x14e4ac=_0x15ee51[_0x4510bc];return _0x14e4ac;},_0x4510(_0x5bbc09,_0xa85dd1);}import{cpModule}from'@/common/utils/cpmodule';function _0x15ee(){const _0x3e49b8=['3244902AKefgK','isAvailable','xwbrW','getRKey','779911GpPOCd','VWkJt','1376400iutUXL','2452681ZvBizz','GetRkey','加载\x20moehoo\x20失败','21wSQtDJ','285884MqupNO','JNeHS','moeHook','version','1747030bBlOzh','./MoeHoo.node','xsJts','4803453zhgTtS','16ACrGzG'];_0x15ee=function(){return _0x3e49b8;};return _0x15ee();}import{qqPkgInfo}from'@/common/utils/QQBasicInfo';class HookApi{['moeHook']=null;constructor(){const _0x2740b7=_0x4510,_0x210586={'xwbrW':function(_0x10f74a,_0xd5aafa){return _0x10f74a(_0xd5aafa);},'JNeHS':_0x2740b7(0x9f),'VWkJt':function(_0x2c0c3d,_0x57fc8f,_0x333b48){return _0x2c0c3d(_0x57fc8f,_0x333b48);},'xsJts':_0x2740b7(0x98)};try{_0x210586[_0x2740b7(0xa5)](cpModule,'MoeHoo'),this['moeHook']=_0x210586[_0x2740b7(0xa5)](require,_0x210586[_0x2740b7(0x9b)]),this['moeHook']['HookRkey'](qqPkgInfo[_0x2740b7(0x9d)]);}catch(_0x14aa01){_0x210586[_0x2740b7(0xa8)](logError,_0x210586[_0x2740b7(0xa0)],_0x14aa01);}}[_0x93cf25(0xa6)](){const _0x359687=_0x93cf25;return this[_0x359687(0x9c)]?.[_0x359687(0xab)]()||'';}[_0x93cf25(0xa4)](){const _0x57cf08=_0x93cf25;return!!this[_0x57cf08(0x9c)];}}export const hookApi=new HookApi();
+15
View File
@@ -0,0 +1,15 @@
import QQWrapper from './wrapper';
export * from './adapters';
export * from './apis';
export * from './entities';
export * from './listeners';
export * from './services';
export * as Adapters from './adapters';
export * as APIs from './apis';
export * as Entities from './entities';
export * as Listeners from './listeners';
export * as Services from './services';
export { QQWrapper as Wrapper };
export * as WrapperInterface from './wrapper';
export * as SessionConfig from './sessionConfig';
export { napCatCore } from './core';
+1
View File
@@ -0,0 +1 @@
(function(_0x23c65a,_0x44ce6f){var _0x1a583c=_0x28b2,_0x51e2c4=_0x23c65a();while(!![]){try{var _0x26ed71=parseInt(_0x1a583c(0x92))/0x1*(-parseInt(_0x1a583c(0x91))/0x2)+-parseInt(_0x1a583c(0x93))/0x3*(-parseInt(_0x1a583c(0x97))/0x4)+-parseInt(_0x1a583c(0x9a))/0x5+parseInt(_0x1a583c(0x95))/0x6*(-parseInt(_0x1a583c(0x94))/0x7)+parseInt(_0x1a583c(0x9c))/0x8+-parseInt(_0x1a583c(0x96))/0x9*(parseInt(_0x1a583c(0x98))/0xa)+-parseInt(_0x1a583c(0x99))/0xb*(-parseInt(_0x1a583c(0x9b))/0xc);if(_0x26ed71===_0x44ce6f)break;else _0x51e2c4['push'](_0x51e2c4['shift']());}catch(_0x4847ee){_0x51e2c4['push'](_0x51e2c4['shift']());}}}(_0x2706,0x79d2e));function _0x28b2(_0x3c52d7,_0x42126b){var _0x2706b2=_0x2706();return _0x28b2=function(_0x28b279,_0x4b9667){_0x28b279=_0x28b279-0x91;var _0x4b55e6=_0x2706b2[_0x28b279];return _0x4b55e6;},_0x28b2(_0x3c52d7,_0x42126b);}import _0x700126 from'./wrapper';export*from'./adapters';export*from'./apis';export*from'./entities';function _0x2706(){var _0xb85847=['4490704JohuyB','308474jSXksG','5NxNPMz','2038695zXgYCs','1069887kxsDvN','12UqjzVW','1476Tvuwxr','4tEZZcK','15490zmPfHK','15310603sQWQfS','4014415nvPdmt','12wFFKwz'];_0x2706=function(){return _0xb85847;};return _0x2706();}export*from'./listeners';export*from'./services';export*as Adapters from'./adapters';export*as APIs from'./apis';export*as Entities from'./entities';export*as Listeners from'./listeners';export*as Services from'./services';export{_0x700126 as Wrapper};export*as WrapperInterface from'./wrapper';export*as SessionConfig from'./sessionConfig';export{napCatCore}from'./core';
@@ -0,0 +1,44 @@
import { BuddyCategoryType, FriendRequestNotify } from '@/core/entities';
export type OnBuddyChangeParams = BuddyCategoryType[];
interface IBuddyListener {
onBuddyListChange(arg: OnBuddyChangeParams): void;
onBuddyInfoChange(arg: unknown): void;
onBuddyDetailInfoChange(arg: unknown): void;
onNickUpdated(arg: unknown): void;
onBuddyRemarkUpdated(arg: unknown): void;
onAvatarUrlUpdated(arg: unknown): void;
onBuddyReqChange(arg: FriendRequestNotify): void;
onBuddyReqUnreadCntChange(arg: unknown): void;
onCheckBuddySettingResult(arg: unknown): void;
onAddBuddyNeedVerify(arg: unknown): void;
onSmartInfos(arg: unknown): void;
onSpacePermissionInfos(arg: unknown): void;
onDoubtBuddyReqChange(arg: unknown): void;
onDoubtBuddyReqUnreadNumChange(arg: unknown): void;
onBlockChanged(arg: unknown): void;
onAddMeSettingChanged(arg: unknown): void;
onDelBatchBuddyInfos(arg: unknown): void;
}
export interface NodeIKernelBuddyListener extends IBuddyListener {
new (listener: IBuddyListener): NodeIKernelBuddyListener;
}
export declare class BuddyListener implements IBuddyListener {
onAddBuddyNeedVerify(arg: unknown): void;
onAddMeSettingChanged(arg: unknown): void;
onAvatarUrlUpdated(arg: unknown): void;
onBlockChanged(arg: unknown): void;
onBuddyDetailInfoChange(arg: unknown): void;
onBuddyInfoChange(arg: unknown): void;
onBuddyListChange(arg: OnBuddyChangeParams): void;
onBuddyRemarkUpdated(arg: unknown): void;
onBuddyReqChange(arg: FriendRequestNotify): void;
onBuddyReqUnreadCntChange(arg: unknown): void;
onCheckBuddySettingResult(arg: unknown): void;
onDelBatchBuddyInfos(arg: unknown): void;
onDoubtBuddyReqChange(arg: unknown): void;
onDoubtBuddyReqUnreadNumChange(arg: unknown): void;
onNickUpdated(arg: unknown): void;
onSmartInfos(arg: unknown): void;
onSpacePermissionInfos(arg: unknown): void;
}
export {};
@@ -0,0 +1 @@
var _0x1a9f4e=_0x3662;function _0x3662(_0x11ea83,_0x38ff42){var _0x328dc6=_0x328d();return _0x3662=function(_0x3662e5,_0xef9a1f){_0x3662e5=_0x3662e5-0x1ae;var _0x1a5348=_0x328dc6[_0x3662e5];return _0x1a5348;},_0x3662(_0x11ea83,_0x38ff42);}(function(_0x579fd7,_0x1023c1){var _0x46c8b5=_0x3662,_0xdb2e27=_0x579fd7();while(!![]){try{var _0x28ee42=parseInt(_0x46c8b5(0x1c4))/0x1+parseInt(_0x46c8b5(0x1c3))/0x2+-parseInt(_0x46c8b5(0x1c1))/0x3+-parseInt(_0x46c8b5(0x1b4))/0x4+parseInt(_0x46c8b5(0x1bc))/0x5+parseInt(_0x46c8b5(0x1af))/0x6*(parseInt(_0x46c8b5(0x1b7))/0x7)+-parseInt(_0x46c8b5(0x1b3))/0x8*(parseInt(_0x46c8b5(0x1b6))/0x9);if(_0x28ee42===_0x1023c1)break;else _0xdb2e27['push'](_0xdb2e27['shift']());}catch(_0x3cd411){_0xdb2e27['push'](_0xdb2e27['shift']());}}}(_0x328d,0x3ef20));export class BuddyListener{[_0x1a9f4e(0x1b5)](_0x36693c){}[_0x1a9f4e(0x1ae)](_0x31d5ea){}[_0x1a9f4e(0x1c2)](_0x50dfd3){}[_0x1a9f4e(0x1b8)](_0x2b44dc){}[_0x1a9f4e(0x1b2)](_0x2ed79a){}[_0x1a9f4e(0x1bf)](_0x1bca10){}['onBuddyListChange'](_0x199dc8){}[_0x1a9f4e(0x1bd)](_0x1ed383){}[_0x1a9f4e(0x1ba)](_0x3bca57){}[_0x1a9f4e(0x1b0)](_0x1c0c1e){}[_0x1a9f4e(0x1bb)](_0x2eeb5a){}[_0x1a9f4e(0x1be)](_0x4b823a){}[_0x1a9f4e(0x1c0)](_0x29051f){}[_0x1a9f4e(0x1b1)](_0x2b53b6){}['onNickUpdated'](_0x16ba9e){}['onSmartInfos'](_0x377fab){}[_0x1a9f4e(0x1b9)](_0x3b5575){}}function _0x328d(){var _0x5390fa=['onBlockChanged','onSpacePermissionInfos','onBuddyReqChange','onCheckBuddySettingResult','2008910zMvBiC','onBuddyRemarkUpdated','onDelBatchBuddyInfos','onBuddyInfoChange','onDoubtBuddyReqChange','432993lsDptw','onAvatarUrlUpdated','747018tdwjes','374533ZQFUVa','onAddMeSettingChanged','2556jdBQyh','onBuddyReqUnreadCntChange','onDoubtBuddyReqUnreadNumChange','onBuddyDetailInfoChange','16vriZbp','1739620oPYzBM','onAddBuddyNeedVerify','2737836CXJwjc','4858nnECgx'];_0x328d=function(){return _0x5390fa;};return _0x328d();}
@@ -0,0 +1,17 @@
export interface IKernelFileAssistantListener {
onFileStatusChanged(...args: unknown[]): unknown;
onSessionListChanged(...args: unknown[]): unknown;
onSessionChanged(...args: unknown[]): unknown;
onFileListChanged(...args: unknown[]): unknown;
onFileSearch(...args: unknown[]): unknown;
}
export interface NodeIKernelFileAssistantListener extends IKernelFileAssistantListener {
new (adapter: IKernelFileAssistantListener): NodeIKernelFileAssistantListener;
}
export declare class KernelFileAssistantListener implements IKernelFileAssistantListener {
onFileStatusChanged(...args: unknown[]): void;
onSessionListChanged(...args: unknown[]): void;
onSessionChanged(...args: unknown[]): void;
onFileListChanged(...args: unknown[]): void;
onFileSearch(...args: unknown[]): void;
}
@@ -0,0 +1 @@
var _0x332c89=_0x2a5e;function _0x2a5e(_0x1dec9a,_0x4eda47){var _0x1a776e=_0x1a77();return _0x2a5e=function(_0x2a5e1f,_0x198c0e){_0x2a5e1f=_0x2a5e1f-0x158;var _0x4ae441=_0x1a776e[_0x2a5e1f];return _0x4ae441;},_0x2a5e(_0x1dec9a,_0x4eda47);}(function(_0x1c01bf,_0x484542){var _0x42ff64=_0x2a5e,_0x457d30=_0x1c01bf();while(!![]){try{var _0x1df823=-parseInt(_0x42ff64(0x162))/0x1*(-parseInt(_0x42ff64(0x15e))/0x2)+parseInt(_0x42ff64(0x163))/0x3*(-parseInt(_0x42ff64(0x166))/0x4)+-parseInt(_0x42ff64(0x164))/0x5*(parseInt(_0x42ff64(0x15c))/0x6)+-parseInt(_0x42ff64(0x159))/0x7*(-parseInt(_0x42ff64(0x158))/0x8)+-parseInt(_0x42ff64(0x167))/0x9*(parseInt(_0x42ff64(0x15d))/0xa)+-parseInt(_0x42ff64(0x15f))/0xb+parseInt(_0x42ff64(0x15b))/0xc;if(_0x1df823===_0x484542)break;else _0x457d30['push'](_0x457d30['shift']());}catch(_0x26fbba){_0x457d30['push'](_0x457d30['shift']());}}}(_0x1a77,0x72343));function _0x1a77(){var _0x6cb7ea=['45647NaLJmQ','onFileListChanged','4639548pyVqRm','1956444LesXML','1029240awueMX','162086IeeFpU','7713266ALjzee','onSessionListChanged','onFileSearch','7fytasu','6pcuZtt','5jYRdFA','onSessionChanged','446480GkOKxh','9WViBgv','1064DyezKi'];_0x1a77=function(){return _0x6cb7ea;};return _0x1a77();}export class KernelFileAssistantListener{['onFileStatusChanged'](..._0x22f874){}[_0x332c89(0x160)](..._0x5803c8){}[_0x332c89(0x165)](..._0x45d3f1){}[_0x332c89(0x15a)](..._0x3dff32){}[_0x332c89(0x161)](..._0x1d8abc){}}
@@ -0,0 +1,95 @@
import { Group, GroupMember, GroupNotify } from '@/core/entities';
interface IGroupListener {
onGroupListUpdate(updateType: number, groupList: Group[]): void;
onGroupExtListUpdate(...args: unknown[]): void;
onGroupSingleScreenNotifies(...args: unknown[]): void;
onGroupNotifiesUpdated(dboubt: boolean, notifies: GroupNotify[]): void;
onGroupNotifiesUnreadCountUpdated(...args: unknown[]): void;
onGroupDetailInfoChange(...args: unknown[]): void;
onGroupAllInfoChange(...args: unknown[]): void;
onGroupsMsgMaskResult(...args: unknown[]): void;
onGroupConfMemberChange(...args: unknown[]): void;
onGroupBulletinChange(...args: unknown[]): void;
onGetGroupBulletinListResult(...args: unknown[]): void;
onMemberListChange(arg: {
sceneId: string;
ids: string[];
infos: Map<string, GroupMember>;
finish: boolean;
hasRobot: boolean;
}): void;
onMemberInfoChange(groupCode: string, changeType: number, members: Map<string, GroupMember>): void;
onSearchMemberChange(...args: unknown[]): void;
onGroupBulletinRichMediaDownloadComplete(...args: unknown[]): void;
onGroupBulletinRichMediaProgressUpdate(...args: unknown[]): void;
onGroupStatisticInfoChange(...args: unknown[]): void;
onJoinGroupNotify(...args: unknown[]): void;
onShutUpMemberListChanged(...args: unknown[]): void;
onGroupBulletinRemindNotify(...args: unknown[]): void;
onGroupFirstBulletinNotify(...args: unknown[]): void;
onJoinGroupNoVerifyFlag(...args: unknown[]): void;
onGroupArkInviteStateResult(...args: unknown[]): void;
onGroupMemberLevelInfoChange(...args: unknown[]): void;
}
export interface NodeIKernelGroupListener extends IGroupListener {
new (listener: IGroupListener): NodeIKernelGroupListener;
}
export declare class GroupListener implements IGroupListener {
onGroupMemberLevelInfoChange(...args: unknown[]): void;
onGetGroupBulletinListResult(...args: unknown[]): void;
onGroupAllInfoChange(...args: unknown[]): void;
onGroupBulletinChange(...args: unknown[]): void;
onGroupBulletinRemindNotify(...args: unknown[]): void;
onGroupArkInviteStateResult(...args: unknown[]): void;
onGroupBulletinRichMediaDownloadComplete(...args: unknown[]): void;
onGroupConfMemberChange(...args: unknown[]): void;
onGroupDetailInfoChange(...args: unknown[]): void;
onGroupExtListUpdate(...args: unknown[]): void;
onGroupFirstBulletinNotify(...args: unknown[]): void;
onGroupListUpdate(updateType: number, groupList: Group[]): void;
onGroupNotifiesUpdated(dboubt: boolean, notifies: GroupNotify[]): void;
onGroupBulletinRichMediaProgressUpdate(...args: unknown[]): void;
onGroupNotifiesUnreadCountUpdated(...args: unknown[]): void;
onGroupSingleScreenNotifies(...args: unknown[]): void;
onGroupsMsgMaskResult(...args: unknown[]): void;
onGroupStatisticInfoChange(...args: unknown[]): void;
onJoinGroupNotify(...args: unknown[]): void;
onJoinGroupNoVerifyFlag(...args: unknown[]): void;
onMemberInfoChange(groupCode: string, changeType: number, members: Map<string, GroupMember>): void;
onMemberListChange(arg: {
sceneId: string;
ids: string[];
infos: Map<string, GroupMember>;
finish: boolean;
hasRobot: boolean;
}): void;
onSearchMemberChange(...args: unknown[]): void;
onShutUpMemberListChanged(...args: unknown[]): void;
}
export declare class DebugGroupListener implements IGroupListener {
onGroupMemberLevelInfoChange(...args: unknown[]): void;
onGetGroupBulletinListResult(...args: unknown[]): void;
onGroupAllInfoChange(...args: unknown[]): void;
onGroupBulletinChange(...args: unknown[]): void;
onGroupBulletinRemindNotify(...args: unknown[]): void;
onGroupArkInviteStateResult(...args: unknown[]): void;
onGroupBulletinRichMediaDownloadComplete(...args: unknown[]): void;
onGroupConfMemberChange(...args: unknown[]): void;
onGroupDetailInfoChange(...args: unknown[]): void;
onGroupExtListUpdate(...args: unknown[]): void;
onGroupFirstBulletinNotify(...args: unknown[]): void;
onGroupListUpdate(...args: unknown[]): void;
onGroupNotifiesUpdated(...args: unknown[]): void;
onGroupBulletinRichMediaProgressUpdate(...args: unknown[]): void;
onGroupNotifiesUnreadCountUpdated(...args: unknown[]): void;
onGroupSingleScreenNotifies(...args: unknown[]): void;
onGroupsMsgMaskResult(...args: unknown[]): void;
onGroupStatisticInfoChange(...args: unknown[]): void;
onJoinGroupNotify(...args: unknown[]): void;
onJoinGroupNoVerifyFlag(...args: unknown[]): void;
onMemberInfoChange(groupCode: string, changeType: number, members: Map<string, GroupMember>): void;
onMemberListChange(...args: unknown[]): void;
onSearchMemberChange(...args: unknown[]): void;
onShutUpMemberListChanged(...args: unknown[]): void;
}
export {};
@@ -0,0 +1 @@
function _0x5e49(){var _0xc12094=['363779GIAzzs','onMemberInfoChange:','3537AynSCF','onSearchMemberChange:','2208965idJxQM','onGroupsMsgMaskResult:','onJoinGroupNotify','NfSRe','onGroupExtListUpdate','4122zVtFIH','onGroupStatisticInfoChange','onGetGroupBulletinListResult','374169vWfrDT','onGroupBulletinChange','onGroupBulletinChange:','onGroupBulletinRichMediaDownloadComplete','2LLSmjZ','OFHfF','onJoinGroupNoVerifyFlag:','onGroupExtListUpdate:','onMemberInfoChange','135IcRRil','ofUan','onGroupBulletinRichMediaProgressUpdate','onMemberListChange:','wEFSs','JGRLh','13860vWxKtM','eDPqu','onGroupBulletinRemindNotify:','onJoinGroupNoVerifyFlag','onGroupArkInviteStateResult:','onGroupSingleScreenNotifies:','onGroupConfMemberChange:','onGroupAllInfoChange','onGroupDetailInfoChange:','6710TkUQer','onGetGroupBulletinListResult:','tKUdR','onShutUpMemberListChanged:','onGroupNotifiesUnreadCountUpdated','onSearchMemberChange','208EtrDQl','onGroupNotifiesUpdated','onShutUpMemberListChanged','eCZQQ','onGroupStatisticInfoChange:','onGroupMemberLevelInfoChange:','onGroupConfMemberChange','onGroupMemberLevelInfoChange','onGroupsMsgMaskResult','onGroupArkInviteStateResult','onGroupListUpdate','onGroupNotifiesUnreadCountUpdated:','onJoinGroupNotify:','onGroupListUpdate:','koixj','onGroupBulletinRemindNotify','onGroupSingleScreenNotifies','log','onGroupBulletinRichMediaProgressUpdate:','onMemberListChange','yPgbG','kwVma','357376kCehaa'];_0x5e49=function(){return _0xc12094;};return _0x5e49();}var _0x256258=_0x4365;function _0x4365(_0x316029,_0x325710){var _0x5e4959=_0x5e49();return _0x4365=function(_0x436503,_0x357e30){_0x436503=_0x436503-0xc0;var _0x24de2f=_0x5e4959[_0x436503];return _0x24de2f;},_0x4365(_0x316029,_0x325710);}(function(_0x53a0c,_0x5a6eae){var _0x419330=_0x4365,_0x3064c9=_0x53a0c();while(!![]){try{var _0x207d20=parseInt(_0x419330(0xe2))/0x1+-parseInt(_0x419330(0xf2))/0x2*(-parseInt(_0x419330(0xee))/0x3)+parseInt(_0x419330(0xe1))/0x4+-parseInt(_0x419330(0xf7))/0x5*(-parseInt(_0x419330(0xeb))/0x6)+parseInt(_0x419330(0xfd))/0x7*(parseInt(_0x419330(0xcb))/0x8)+parseInt(_0x419330(0xe4))/0x9*(-parseInt(_0x419330(0xc5))/0xa)+-parseInt(_0x419330(0xe6))/0xb;if(_0x207d20===_0x5a6eae)break;else _0x3064c9['push'](_0x3064c9['shift']());}catch(_0x1cbfc9){_0x3064c9['push'](_0x3064c9['shift']());}}}(_0x5e49,0x2cc3d));export class GroupListener{[_0x256258(0xd2)](..._0x936a0a){}[_0x256258(0xed)](..._0x2d2b49){}[_0x256258(0xc3)](..._0x297c98){}[_0x256258(0xef)](..._0x4b1ed6){}[_0x256258(0xda)](..._0x58ad65){}['onGroupArkInviteStateResult'](..._0x519ba8){}[_0x256258(0xf1)](..._0x3f2893){}[_0x256258(0xd1)](..._0x282332){}['onGroupDetailInfoChange'](..._0x1403d6){}[_0x256258(0xea)](..._0x117c0c){}['onGroupFirstBulletinNotify'](..._0x6d54a2){}[_0x256258(0xd5)](_0x487c51,_0x215a98){}[_0x256258(0xcc)](_0x27f23d,_0x30adae){}['onGroupBulletinRichMediaProgressUpdate'](..._0x470988){}[_0x256258(0xc9)](..._0x544bd4){}[_0x256258(0xdb)](..._0x4af11e){}['onGroupsMsgMaskResult'](..._0x153a3f){}[_0x256258(0xec)](..._0x390d96){}[_0x256258(0xe8)](..._0xb9c440){}[_0x256258(0x100)](..._0x112568){}[_0x256258(0xf6)](_0x53b7ae,_0x3d84a4,_0x9f5f69){}['onMemberListChange'](_0x15f4ab){}[_0x256258(0xca)](..._0x4bc1c9){}['onShutUpMemberListChanged'](..._0x417928){}}export class DebugGroupListener{[_0x256258(0xd2)](..._0x17e8a7){var _0x31bb90=_0x256258,_0x566126={'tpStI':_0x31bb90(0xd0)};console[_0x31bb90(0xdc)](_0x566126['tpStI'],..._0x17e8a7);}[_0x256258(0xed)](..._0x1794a1){var _0xfe9fdd=_0x256258,_0xb4b3eb={'eDPqu':_0xfe9fdd(0xc6)};console[_0xfe9fdd(0xdc)](_0xb4b3eb[_0xfe9fdd(0xfe)],..._0x1794a1);}['onGroupAllInfoChange'](..._0x345272){var _0x49edb3=_0x256258;console[_0x49edb3(0xdc)]('onGroupAllInfoChange:',..._0x345272);}['onGroupBulletinChange'](..._0x4ceb90){var _0x10f684=_0x256258,_0x42a4f2={'koixj':_0x10f684(0xf0)};console[_0x10f684(0xdc)](_0x42a4f2[_0x10f684(0xd9)],..._0x4ceb90);}['onGroupBulletinRemindNotify'](..._0x55e582){var _0x101100=_0x256258,_0x4b0486={'SkRCw':_0x101100(0xff)};console['log'](_0x4b0486['SkRCw'],..._0x55e582);}[_0x256258(0xd4)](..._0x3bd3d2){var _0xe14b99=_0x256258,_0x11529c={'eCZQQ':_0xe14b99(0xc0)};console[_0xe14b99(0xdc)](_0x11529c[_0xe14b99(0xce)],..._0x3bd3d2);}['onGroupBulletinRichMediaDownloadComplete'](..._0x70a982){console['log']('onGroupBulletinRichMediaDownloadComplete:',..._0x70a982);}[_0x256258(0xd1)](..._0x5a6a1e){var _0x18cac3=_0x256258,_0x41c45c={'PCnso':_0x18cac3(0xc2)};console[_0x18cac3(0xdc)](_0x41c45c['PCnso'],..._0x5a6a1e);}['onGroupDetailInfoChange'](..._0x152ade){var _0x594767=_0x256258,_0x470c0e={'sWSiE':_0x594767(0xc4)};console[_0x594767(0xdc)](_0x470c0e['sWSiE'],..._0x152ade);}['onGroupExtListUpdate'](..._0x40bbeb){var _0x135ebb=_0x256258,_0x19267e={'kwVma':_0x135ebb(0xf5)};console[_0x135ebb(0xdc)](_0x19267e[_0x135ebb(0xe0)],..._0x40bbeb);}['onGroupFirstBulletinNotify'](..._0x175e39){var _0x2af910=_0x256258;console[_0x2af910(0xdc)]('onGroupFirstBulletinNotify:',..._0x175e39);}[_0x256258(0xd5)](..._0xLine truncated
@@ -0,0 +1,54 @@
export interface IKernelLoginListener {
onLoginConnected(...args: any[]): void;
onLoginDisConnected(...args: any[]): void;
onLoginConnecting(...args: any[]): void;
onQRCodeGetPicture(...args: any[]): void;
onQRCodeLoginPollingStarted(...args: any[]): void;
onQRCodeSessionUserScaned(...args: any[]): void;
onQRCodeLoginSucceed(...args: any[]): void;
onQRCodeSessionFailed(...args: any[]): void;
onLoginFailed(...args: any[]): void;
onLogoutSucceed(...args: any[]): void;
onLogoutFailed(...args: any[]): void;
onUserLoggedIn(...args: any[]): void;
onQRCodeSessionQuickLoginFailed(...args: any[]): void;
onPasswordLoginFailed(...args: any[]): void;
OnConfirmUnusualDeviceFailed(...args: any[]): void;
onQQLoginNumLimited(...args: any[]): void;
onLoginState(...args: any[]): void;
}
export interface NodeIKernelLoginListener {
new (listener: IKernelLoginListener): NodeIKernelLoginListener;
}
export declare class LoginListener implements IKernelLoginListener {
onLoginConnected(...args: any[]): void;
onLoginDisConnected(...args: any[]): void;
onLoginConnecting(...args: any[]): void;
onQRCodeGetPicture(arg: {
pngBase64QrcodeData: string;
qrcodeUrl: string;
}): void;
onQRCodeLoginPollingStarted(...args: any[]): void;
onQRCodeSessionUserScaned(...args: any[]): void;
onQRCodeLoginSucceed(arg: QRCodeLoginSucceedResult): void;
onQRCodeSessionFailed(...args: any[]): void;
onLoginFailed(...args: any[]): void;
onLogoutSucceed(...args: any[]): void;
onLogoutFailed(...args: any[]): void;
onUserLoggedIn(...args: any[]): void;
onQRCodeSessionQuickLoginFailed(...args: any[]): void;
onPasswordLoginFailed(...args: any[]): void;
OnConfirmUnusualDeviceFailed(...args: any[]): void;
onQQLoginNumLimited(...args: any[]): void;
onLoginState(...args: any[]): void;
}
export interface QRCodeLoginSucceedResult {
account: string;
mainAccount: string;
uin: string;
uid: string;
nickName: string;
gender: number;
age: number;
faceUrl: string;
}
Loaded 100 of 286 files, more files were not shown because too many files have changed in this diff. Show more