Compare commits

...

134 Commits

Author SHA1 Message Date
手瓜一十雪
45c922c377 release: 1.6.3 2024-06-28 14:00:15 +08:00
手瓜一十雪
f854c258bd fix: 清除旧的反向ws 2024-06-28 13:42:09 +08:00
手瓜一十雪
a643fac073 refactor: msg context 2024-06-28 13:38:03 +08:00
手瓜一十雪
861f105bea fix: uid->uin 临时修复方案
uid uin转换需要优化
2024-06-28 13:11:06 +08:00
手瓜一十雪
bf10ce9f1e fix: error 2024-06-26 18:40:08 +08:00
手瓜一十雪
ccf521d0a8 feat: win ia32支持 2024-06-26 18:13:55 +08:00
手瓜一十雪
6075d98eaa release: v1.6.2 2024-06-26 18:09:41 +08:00
手瓜一十雪
a3801fc243 fix: script 2024-06-26 17:17:33 +08:00
手瓜一十雪
a1f0c05f3a chore: build script 2024-06-26 17:16:54 +08:00
手瓜一十雪
a568c96929 chore: build script 2024-06-26 17:15:46 +08:00
手瓜一十雪
d58bcf3c0e refactor: error catch 2024-06-26 17:14:23 +08:00
手瓜一十雪
985f2e6436 fix: 还原修改 2024-06-25 17:24:42 +08:00
手瓜一十雪
ad441fa793 docs: update 2024-06-24 21:38:28 +08:00
手瓜一十雪
316300cc86 Merge pull request #86 from NapNeko/dependabot/npm_and_yarn/types/uuid-10.0.0
build(deps-dev): bump @types/uuid from 9.0.8 to 10.0.0
2024-06-24 17:44:25 +08:00
dependabot[bot]
5c4f37b234 build(deps-dev): bump @types/uuid from 9.0.8 to 10.0.0
Bumps [@types/uuid](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/uuid) from 9.0.8 to 10.0.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/uuid)

---
updated-dependencies:
- dependency-name: "@types/uuid"
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-24 08:14:47 +00:00
手瓜一十雪
77b51a072d fix: 增加容错 2024-06-24 12:03:49 +08:00
手瓜一十雪
2536e1ae6a release: v1.6.1 2024-06-22 10:54:58 +08:00
手瓜一十雪
14822c9599 style&fix: lint & poke 2024-06-21 23:04:56 +08:00
手瓜一十雪
e53c37adc9 release: v1.6.0 2024-06-21 22:43:19 +08:00
手瓜一十雪
c37539354c docs: update 2024-06-21 22:35:10 +08:00
手瓜一十雪
ae0277f33c release: 1.5.8 2024-06-19 23:34:09 +08:00
手瓜一十雪
b863896249 refactor: log file limit 2024-06-19 23:26:05 +08:00
手瓜一十雪
5b42f8b743 refactor: qqmusic card & requests 2024-06-19 23:06:57 +08:00
手瓜一十雪
3883fab614 remove: debug 2024-06-19 21:37:13 +08:00
手瓜一十雪
61d6bcec4b refactor: qqmusic card & requests 2024-06-19 21:33:31 +08:00
手瓜一十雪
3b5902b033 refactor: requests 2024-06-19 16:45:20 +08:00
手瓜一十雪
3a88c21a3b refactor: 整理action & data 2024-06-19 13:35:42 +08:00
手瓜一十雪
91a5055dee refactor: qqmusic sign & http post 2024-06-19 13:20:52 +08:00
手瓜一十雪
7befd1469f Merge branch 'main' of https://github.com/NapNeko/NapCatQQ 2024-06-19 10:01:37 +08:00
手瓜一十雪
c72ebe495c refactor: remove debug 2024-06-19 10:01:24 +08:00
手瓜一十雪
19e06b97e6 docs: update 2024-06-18 23:57:47 +08:00
手瓜一十雪
7519825303 refactor: test 2024-06-18 23:23:19 +08:00
手瓜一十雪
d9315bf309 refactor: project 2024-06-18 22:49:06 +08:00
手瓜一十雪
8c36c809a0 docs: extend 2024-06-18 11:22:35 +08:00
手瓜一十雪
8138aa3cb2 docs: v1.5.8 2024-06-18 11:21:52 +08:00
手瓜一十雪
87aef3ca78 feat: Util HttpUploadFile 2024-06-18 11:17:09 +08:00
手瓜一十雪
a3f1d26d6b feat: refactor miniapp 2024-06-18 11:08:51 +08:00
手瓜一十雪
06cebc5670 build: try support ia32 2024-06-17 10:03:59 +08:00
手瓜一十雪
867fd62d77 fix: typo 2024-06-16 20:54:52 +08:00
手瓜一十雪
650cdf2916 feat: test 2024-06-16 19:24:42 +08:00
手瓜一十雪
ebf461f2fd feat: 加了一些暂时不能使用的代码 2024-06-16 16:35:09 +08:00
手瓜一十雪
27fa319b2a release: LinuxAppid 24568 2024-06-14 18:43:56 +08:00
手瓜一十雪
d95ac894f4 release: 1.5.6-复活下win 2024-06-14 17:00:35 +08:00
手瓜一十雪
ae84a8dd11 docs: v1.5.6 change 2024-06-14 16:53:26 +08:00
手瓜一十雪
2fc963f986 build: v1.5.6-紧急测试 2024-06-14 16:43:32 +08:00
手瓜一十雪
be1f938ebd fix 2024-06-14 16:42:39 +08:00
手瓜一十雪
cccf4d503d docs: v1.5.6 2024-06-14 15:50:22 +08:00
手瓜一十雪
9dad2a8ac6 remove: debug 2024-06-11 18:11:32 +08:00
手瓜一十雪
75af104f07 release: v1.5.5 2024-06-11 18:10:22 +08:00
手瓜一十雪
76ecba245b fix: error 2024-06-11 18:09:46 +08:00
手瓜一十雪
3697c2ced8 refactor: 移除无缝升级函数 2024-06-11 15:46:27 +08:00
手瓜一十雪
b9d1d84716 release: v1.5.4 2024-06-11 15:20:11 +08:00
手瓜一十雪
64b2d547ce refactor: friend 2024-06-11 12:34:04 +08:00
手瓜一十雪
d8d2ff7e4e chore:appid 2024-06-10 19:00:05 +08:00
手瓜一十雪
8aa5dc6482 Merge pull request #62 from NapNeko/dependabot/npm_and_yarn/uuid-10.0.0
build(deps): bump uuid from 9.0.1 to 10.0.0
2024-06-10 16:46:05 +08:00
dependabot[bot]
474ba20e61 build(deps): bump uuid from 9.0.1 to 10.0.0
Bumps [uuid](https://github.com/uuidjs/uuid) from 9.0.1 to 10.0.0.
- [Changelog](https://github.com/uuidjs/uuid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/uuidjs/uuid/compare/v9.0.1...v10.0.0)

---
updated-dependencies:
- dependency-name: uuid
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-10 08:12:09 +00:00
手瓜一十雪
bdea2d02a9 release: v1.5.3 2024-06-09 20:09:14 +08:00
手瓜一十雪
c4307481f1 build: 1.5.3-beta4 2024-06-09 19:47:16 +08:00
手瓜一十雪
b8ac1b28bd build: v1.5.3-beta3 2024-06-09 19:41:27 +08:00
手瓜一十雪
24038cda95 refactor: video url 2024-06-09 19:40:34 +08:00
手瓜一十雪
86c82e9608 build: 1.5.3-beta2 2024-06-09 19:14:27 +08:00
手瓜一十雪
daab5d150b refactor: friend add 2024-06-09 19:13:49 +08:00
手瓜一十雪
9ff82bdb90 feat: support SetLongNick 2024-06-09 18:28:09 +08:00
手瓜一十雪
c6d70ef1cf build: 1.5.3-beta1 2024-06-09 17:46:32 +08:00
手瓜一十雪
15d4bb3c76 feat: new api 2024-06-09 17:30:30 +08:00
手瓜一十雪
3e698981fd chore: sync core 2024-06-09 14:26:02 +08:00
手瓜一十雪
9d45c934a5 chore: sync core 2024-06-08 22:13:05 +08:00
手瓜一十雪
c2bf9cf93e chore: sync core 2024-06-08 12:11:04 +08:00
手瓜一十雪
b3c6fd7f26 chore: sync core 2024-06-07 17:59:33 +08:00
手瓜一十雪
ccd155de71 feat: 推荐联系人ArkJson 2024-06-07 17:57:33 +08:00
手瓜一十雪
1f90d2e46b feat: 支持专属头衔获取 2024-06-07 17:26:00 +08:00
手瓜一十雪
4c5d974c22 feat: 支持专属头衔获取 2024-06-07 17:25:34 +08:00
手瓜一十雪
392eda1cbc fix: typo 2024-06-07 13:19:22 +08:00
手瓜一十雪
a9da3279e8 docs: change 2024-06-07 13:01:15 +08:00
手瓜一十雪
1ce8351180 docs: develop 2024-06-07 09:49:31 +08:00
手瓜一十雪
96c334478a docs: todo 2024-06-07 00:39:09 +08:00
手瓜一十雪
f1b0875b05 feat: ArkJsonGroupShare 2024-06-06 17:20:34 +08:00
手瓜一十雪
cea9e11c83 docs: add 2024-06-06 14:31:45 +08:00
手瓜一十雪
f098b39200 refactor: uins 2024-06-06 13:34:05 +08:00
手瓜一十雪
012d948b59 chore: sync 2024-06-06 13:23:15 +08:00
手瓜一十雪
3334cd0a71 docs: change 2024-06-06 12:18:17 +08:00
手瓜一十雪
d63d53fd88 docs: move 2024-06-06 11:05:30 +08:00
手瓜一十雪
a7fa39b2fd fix: message_id error 2024-06-06 11:03:29 +08:00
Version
40bb42e193 chore:version change 2024-06-05 10:30:26 +00:00
手瓜一十雪
9c382c639b build: v1.5.2-api兼容 2024-06-05 15:04:04 +08:00
手瓜一十雪
a43cde38f1 refactor: SetMsgEmojiLike 2024-06-05 15:03:14 +08:00
手瓜一十雪
c35d2e08cd refactor: reboot req params 2024-06-05 14:25:21 +08:00
手瓜一十雪
3377c383c1 build: v1.5.2 - GetMsg兼容 2024-06-05 12:14:41 +08:00
手瓜一十雪
c00e6d95cd build: v1.5.2-beta3 2024-06-05 11:23:42 +08:00
手瓜一十雪
725fccf4ed refactor: GoCQHTTP_GetStrangerInfo 2024-06-05 11:19:34 +08:00
手瓜一十雪
13129bd219 build: v1.5.2-beta2 2024-06-05 10:41:40 +08:00
手瓜一十雪
4561977bcf chore: sync core 2024-06-05 10:36:39 +08:00
手瓜一十雪
40be8a91f5 fix 2024-06-05 10:33:36 +08:00
手瓜一十雪
2a04d5830b fix: kick member 2024-06-04 23:52:46 +08:00
手瓜一十雪
82a38574f3 build: v1.5.2-beta 2024-06-04 23:16:33 +08:00
手瓜一十雪
fea3a33c2b refactor: Uid <-> Uin & Remove Cached 2024-06-04 23:13:18 +08:00
手瓜一十雪
9a502cdf6f refactor: uin - > uid 2024-06-04 23:06:53 +08:00
手瓜一十雪
4b616299cf refactor: uin -> uid 2024-06-04 22:50:16 +08:00
手瓜一十雪
102243e064 sync: core 2024-06-04 21:15:29 +08:00
手瓜一十雪
4b21ac5ebe fix: nt event 2024-06-04 21:09:19 +08:00
手瓜一十雪
4dd7363dd3 Merge branch 'main' of https://github.com/NapNeko/NapCatQQ 2024-06-04 12:39:08 +08:00
手瓜一十雪
3d5e5ab78f release: v1.5.1 2024-06-04 12:38:54 +08:00
手瓜一十雪
73045a1b21 Merge pull request #57 from Icexbb/main
fix: 整理日志、添加颜色、使用统一的日志函数以提高日志可读性
2024-06-04 12:37:54 +08:00
手瓜一十雪
871173a7cf fix: 二维码显示 2024-06-04 12:37:35 +08:00
手瓜一十雪
0002313093 Merge branch 'main' into pr/57 2024-06-04 12:31:43 +08:00
手瓜一十雪
948cf5cca6 refactror: cpmoudle
此处非NC运行时的代码 用于打包时运行
2024-06-04 12:26:19 +08:00
手瓜一十雪
d40230879c fix: 玄学的问题 2024-06-04 12:20:42 +08:00
XBB
ab22b775f1 fix: 整理日志、添加颜色、使用统一的日志函数以提高日志可读性 2024-06-04 02:59:35 +08:00
手瓜一十雪
42c85224ba build: v1.5.1-beta1 2024-06-03 21:18:24 +08:00
手瓜一十雪
e57444a353 sync: core 2024-06-03 21:11:21 +08:00
手瓜一十雪
3c6503d495 feat: support SetSelfProfile 2024-06-03 21:02:43 +08:00
手瓜一十雪
149b518f48 release: v1.5.0 2024-06-03 17:15:43 +08:00
手瓜一十雪
74621447ff fix: 提高兼容性 2024-06-03 17:12:53 +08:00
手瓜一十雪
3280952931 fix: 提高Api兼容性 2024-06-03 17:09:23 +08:00
手瓜一十雪
9e670e2736 Merge branch 'main' of https://github.com/NapNeko/NapCatQQ 2024-06-03 16:56:28 +08:00
手瓜一十雪
9fc6347a2f fix: 进一步标准化 2024-06-03 16:56:08 +08:00
Version
ec7a15a192 chore:version change 2024-06-03 08:50:25 +00:00
手瓜一十雪
7f99982810 release: v1.4.9 2024-06-03 16:49:08 +08:00
Version
935d83aaf8 chore:version change 2024-06-02 13:01:32 +00:00
手瓜一十雪
0ff6edd546 style: lint 2024-06-02 20:49:09 +08:00
手瓜一十雪
94f629585a build: v1.4.8-beta2 2024-06-02 20:40:41 +08:00
手瓜一十雪
89c04be02f fix 2024-06-02 13:58:51 +08:00
手瓜一十雪
3151965ea8 build: 1.3.8-beta1 2024-06-02 13:45:48 +08:00
手瓜一十雪
bdf5159be1 refactor: guid 2024-06-02 13:38:33 +08:00
手瓜一十雪
0499ebbea3 release: v1.4.7 2024-06-01 15:52:06 +08:00
手瓜一十雪
d5843b7236 refactor: v1.4.6 2024-06-01 14:09:16 +08:00
手瓜一十雪
1c9c574a90 refactor: v1.4.6 2024-06-01 14:08:10 +08:00
手瓜一十雪
39acf20e48 release: v1.4.6 2024-06-01 14:05:44 +08:00
手瓜一十雪
52eb6ed5ab refactor: group call 2024-06-01 14:02:43 +08:00
手瓜一十雪
ee78d2d59d fix: type hint 2024-06-01 12:14:37 +08:00
手瓜一十雪
60dc5c4a38 refactor: re groupList 2024-06-01 12:10:50 +08:00
手瓜一十雪
50a0dc0355 refactor: GroupListGet 2024-06-01 11:38:50 +08:00
手瓜一十雪
3f681ec914 refactor:NT Event Finish 2024-05-31 23:33:23 +08:00
手瓜一十雪
0bf499f191 release: v1.4.5 2024-05-31 21:25:47 +08:00
206 changed files with 4248 additions and 2346 deletions

View File

@@ -1,4 +1,4 @@
name: "Build"
name: "Build Action"
on:
workflow_dispatch:
push:
@@ -47,7 +47,7 @@ jobs:
fail-fast: false
matrix:
target_platform: [win32]
target_arch: [x64]
target_arch: [x64,ia32]
steps:
- name: Clone Main Repository
uses: actions/checkout@v4

View File

@@ -1,4 +1,4 @@
name: "release"
name: "Build Release"
on:
push:
@@ -72,7 +72,7 @@ jobs:
fail-fast: false
matrix:
target_platform: [win32]
target_arch: [x64]
target_arch: [x64,ia32]
steps:
- name: Clone Main Repository
uses: actions/checkout@v4
@@ -130,6 +130,7 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }}
body_path: CHANGELOG.md
files: |
NapCat.win32.ia32.zip
NapCat.win32.x64.zip
NapCat.linux.x64.zip
NapCat.linux.arm64.zip

69
.github/workflows/test.yml vendored Normal file
View File

@@ -0,0 +1,69 @@
name: "Build Test"
on:
workflow_dispatch:
permissions: write-all
jobs:
build-linux:
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:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target_platform: [win32]
target_arch: [x64,ia32]
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

View File

@@ -0,0 +1,13 @@
# v1.6.3
QQ Version: Windows 9.9.11-24815 / Linux 3.2.9-24815
## 修复与优化
* 修复带有groupid的私聊消息异常发送到群聊消息
* 尝试修复rws热重载失效问题
* 尝试修复进群事件无法正常获取uin
## 新增与调整
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)

View File

@@ -0,0 +1,12 @@
# v1.4.6
QQ Version: Windows 9.9.10-24108 / Linux 3.2.7-23361
## 修复与优化
* 优化整体稳定性
## 新增与调整
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)

View File

@@ -0,0 +1,11 @@
# v1.4.7
QQ Version: Windows 9.9.10-24108 / Linux 3.2.7-23361
## 修复与优化
* 临时扩展 Api: GoCQHTTPUploadGroupFile folder_id字段 用于选择文件夹
## 新增与调整
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)

View File

@@ -0,0 +1,12 @@
# v1.4.8
QQ Version: Windows 9.9.10-24108 / Linux 3.2.7-23361
## 修复与优化
* 优化Guid的生成方式
* 支持临时消息获取群来源
## 新增与调整
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)

View File

@@ -0,0 +1,11 @@
# v1.4.9
QQ Version: Windows 9.9.10-24108 / Linux 3.2.7-23361
## 修复与优化
* 修复接口调用问题 接口标准化 APIset_group_add_request
## 新增与调整
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)

View File

@@ -0,0 +1,11 @@
# v1.5.0
QQ Version: Windows 9.9.10-24108 / Linux 3.2.7-23361
## 修复与优化
* 修正各Api默认值
## 新增与调整
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)

View File

@@ -0,0 +1,12 @@
# v1.5.1
QQ Version: Windows 9.9.10-24108 / Linux 3.2.7-23361
## 修复与优化
* 支持 新Api: set_self_profile 可设置个性签名
* 修复 Api: get_group_system_msg
* 整理日志、添加颜色、使用统一的日志函数以提高日志可读性
## 新增与调整
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)

View File

@@ -0,0 +1,13 @@
# v1.5.2
QQ Version: Windows 9.9.10-24108 / Linux 3.2.7-23361
## 修复与优化
* 替换Uid/Uin为内部实现
* 增加HttpApi调用稳定性
* 修复 GetMsg 兼容性
## 新增与调整
* 支持真正意义上的陌生人信息获取 Api: GoCQHTTP_GetStrangerInfo
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)

View File

@@ -0,0 +1,15 @@
# v1.5.3
QQ Version: Windows 9.9.11-24568 / Linux 3.2.9-23568
## 修复与优化
* 修复引用消息id问题
* 修复添加好友的通知
## 新增与调整
* 扩展群分享Json生成
* 扩展关于收藏的一系列接口
* 支持专属群头衔获取
* 支持视频获取直链
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)

View File

@@ -0,0 +1,11 @@
# v1.5.4
QQ Version: Windows 9.9.11-24568 / Linux 3.2.9-23568
## 修复与优化
* 紧急修复视频与文件问题
## 新增与调整
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)

View File

@@ -0,0 +1,11 @@
# v1.5.5
QQ Version: Windows 9.9.11-24568 / Linux 3.2.9-23568
## 修复与优化
* 紧急修复一些问题
## 新增与调整
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)

View File

@@ -0,0 +1,11 @@
# v1.5.6
QQ Version: Windows 9.9.11-24568 / Linux 3.2.9-24568
## 修复与优化
* 修复一些问题
## 新增与调整
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)

View File

@@ -0,0 +1,11 @@
# v1.5.7
QQ Version: Windows 9.9.11-24568 / Linux 3.2.9-24568
## 修复与优化
* 修复一些问题
## 新增与调整
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)

View File

@@ -0,0 +1,14 @@
# v1.5.8
QQ Version: Windows 9.9.11-24568 / Linux 3.2.9-24568
## 修复与优化
* 修复视频文件残留问题
* 重构 getcookies接口 支持大部分常见域
## 新增与调整
* 日志大小限制
* 支持 QQ音乐 卡片 无签名支持时 启用内置方法(缺点没有封面 限速1min/条)
* 支持Window X86-32机器
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)

View File

@@ -0,0 +1,12 @@
# v1.5.9
QQ Version: Windows 9.9.11-24815 / Linux 3.2.9-24815
## 修复与优化
* 优化缓存问题
* 修复poke异常上报
## 新增与调整
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)

View File

@@ -0,0 +1,11 @@
# v1.6.0
QQ Version: Windows 9.9.11-24815 / Linux 3.2.9-24815
## 修复与优化
## 新增与调整
* 新增图片subtype属性 区分表情图片与商城图片
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)

View File

@@ -0,0 +1,11 @@
# v1.6.1
QQ Version: Windows 9.9.11-24815 / Linux 3.2.9-24815
## 修复与优化
## 新增与调整
* 修复poke异常事件
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)

View File

@@ -0,0 +1,13 @@
# v1.6.2
QQ Version: Windows 9.9.11-24815 / Linux 3.2.9-24815
## 修复与优化
* 修复获取Cookies异常崩溃问题
* 尝试修复成员退群缓存问题
* 修复自身退群后群缓存清理问题
## 新增与调整
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)

2
docs/develop/Android.md Normal file
View File

@@ -0,0 +1,2 @@
# 开始
jadx 跳转于 `com.tencent.qqnt.kernel.*`

View File

@@ -0,0 +1,42 @@
# Android
```java
GroupMemberExtReq groupMemberExtReq = new GroupMemberExtReq();
groupMemberExtReq.sourceType = MemberExtSourceType.TITLETYPE.ordinal();
groupMemberExtReq.groupCode = longOrNull.longValue();
groupMemberExtReq.beginUin = "0";
groupMemberExtReq.dataTime = "0";
Long[] lArr = new Long[1];
AppInterface a2 = dVar.a();
lArr[0] = Long.valueOf(a2 != null ? a2.getLongAccountUin() : 0L);
arrayListOf = CollectionsKt__CollectionsKt.arrayListOf(lArr);
groupMemberExtReq.uinList = arrayListOf;
MemberExtInfoFilter memberExtInfoFilter = new MemberExtInfoFilter();
memberExtInfoFilter.memberLevelInfoUin = 1;
memberExtInfoFilter.memberLevelInfoPoint = 1;
memberExtInfoFilter.memberLevelInfoActiveDay = 1;
memberExtInfoFilter.memberLevelInfoLevel = 1;
memberExtInfoFilter.levelName = 1;
memberExtInfoFilter.dataTime = 1;
memberExtInfoFilter.sysShowFlag = 1;
memberExtInfoFilter.userShowFlag = 1;
memberExtInfoFilter.userShowFlagNew = 1;
memberExtInfoFilter.levelNameNew = 1;
Unit unit = Unit.INSTANCE;
groupMemberExtReq.memberExtFilter = memberExtInfoFilter;
troopLevelFrequencyControl.f(troopUin, new TroopListRepo$fetchTroopLevelInfo$2(b2, groupMemberExtReq, troopUin, new com.tencent.qqnt.troopmemberlist.report.c("fetchTroopLevelInfo")));
```
# Win
参数解析位于 sub_181456A10(24108) -> wrapper.node(24108)+1456A10
IGroupService.GetMemberExt(param: object);
param展开如下
```
groupCode string
beginUin string
dataTime string
uinList Array<string>
uinNum string
groupType string
richCardNameVer string
sourceType number
memberExtFilter object// 参数解析位于 sub_18145A6D0(24108) -> wrapper.node(24108)+145A6D0
```

View File

@@ -0,0 +1,48 @@
public static final int C2C_PIC_DOWNLOAD = 1004;
public static final String C2C_PIC_DOWNLOAD_DOMAIN = "c2cpicdw.qpic.cn";
public static final String C2C_PIC_DOWNLOAD_QUIC_DOMAIN = "c2cpicdw.quic.qpic.cn";
public static final int FLAG_NOT_UPLOAD = 3;
public static final int FLAG_UPLOADINFO_ERROR = 4;
public static final int GROUP_PIC_DOWNLOAD = 1000;
public static final String GROUP_PIC_DOWNLOAD_DOMAIN = "gchat.qpic.cn";
public static final String GROUP_PIC_DOWNLOAD_QUIC_DOMAIN = "gchat.quic.qpic.cn";
public static final String GUILD_PIC_DOWNLOAD_DOMAIN = "gchat.qpic.cn/qmeetpic";
public static final boolean NEW_STORE_FLAG = true;
public static final String PTT_VIDEO_DOWNLOAD_DOMAIN = "grouptalk.c2c.qq.com";
protected static final int AVIF_DECODE_EXCEPTION = 4;
protected static final int AVIF_DECODE_FAIL = 1;
protected static final int AVIF_DECODE_FAIL_SO_FAIL = 2;
protected static final int AVIF_DECODE_FAIL_UNKNOWN = 6;
protected static final int AVIF_DECODE_FILETYPE_ERROR = 5;
protected static final int AVIF_DECODE_OOM = 3;
protected static final int AVIF_DECODE_RENAME_FAIL = 7;
protected static final int AVIF_DECODE_SUC = 0;
public static final String AVIF_FILE_SUFFIX = ".avif";
public static final int AVIF_REQ_APPRUNTIME_NULL = 12;
public static final int AVIF_REQ_CODEC_UNSURPPORT = 5;
protected static final int AVIF_REQ_DENSITY_UNSURPPORT = 10;
protected static final int AVIF_REQ_FLASH_PHOTO = 9;
protected static final int AVIF_REQ_HAS_TMP_AVIF = 7;
protected static final int AVIF_REQ_INVALID_MSG_RECORD = 2;
protected static final int AVIF_REQ_IS_RAW_PHOTO = 3;
protected static final int AVIF_REQ_OUTPUTSTREAM_UNSURPPORT = 11;
protected static final int AVIF_REQ_OVERSIZE = 6;
protected static final int AVIF_REQ_RETRY = 1;
public static final int AVIF_REQ_SO_DOWNLOAD_FAILED = 8;
protected static final int AVIF_REQ_SUC = 0;
public static final int AVIF_REQ_SWITCH_CLOSE = 4;
public static final String C2C_PIC_DOWNLOAD_ERROR_CODE = "C2CPicDownloadErrorCode";
static final int DOWNLOAD_ST_COMPLETE = 1;
static final int DOWNLOAD_ST_HEAD = 2;
static final int DOWNLOAD_ST_LEFT = 4;
static final int DOWNLOAD_ST_PART = 3;
private static final int ENCRYPT_APPID = 1600000226;
public static final String GROUP_PIC_DOWNLOAD_ERROR_CODE = "GroupPicDownloadErrorCode";
public static final String KEY_PIC_DOWNLOAD_ERROR_CODE = "param_detail_code";
protected static final int QUIC_FAIL_IP_LIST_EMPTY = 1;
protected static final int QUIC_FAIL_REQUEST_HTTPS = 3;
protected static final int QUIC_FAIL_REQUEST_QUIC = 2;
protected static final int QUIC_FAIL_SO_LOAD = 4;
public static final String REPORT_TAG_DIRECT_DOWNLOAD_FAIL = "report_direct_download_fail";
public static final String REQ_PARAM_AVIF = "tp=avif";

View File

@@ -0,0 +1,444 @@
```java
MsgConstant
int ARKSTRUCTELEMENTSUBTYPETENCENTDOCFROMMINIAPP = 1;
int ARKSTRUCTELEMENTSUBTYPETENCENTDOCFROMPLUSPANEL = 2;
int ARKSTRUCTELEMENTSUBTYPEUNKNOWN = 0;
int ATTYPEALL = 1;
int ATTYPECATEGORY = 512;
int ATTYPECHANNEL = 16;
int ATTYPEME = 4;
int ATTYPEONE = 2;
int ATTYPEONLINE = 64;
int ATTYPEROLE = 8;
int ATTYPESUMMON = 32;
int ATTYPESUMMONONLINE = 128;
int ATTYPESUMMONROLE = 256;
int ATTYPEUNKNOWN = 0;
int CALENDARELEMSUBTYPECOMMON = 3;
int CALENDARELEMSUBTYPESTRONG = 1;
int CALENDARELEMSUBTYPEUNKNOWN = 0;
int CALENDARELEMSUBTYPEWEAK = 2;
int FACEBUBBLEELEMSUBTYPENORMAL = 1;
int FACEBUBBLEELEMSUBTYPEUNKNOWN = 0;
int FETCHLONGMSGERRCODEMSGEXPIRED = 196;
int FILEELEMENTSUBTYPEAI = 16;
int FILEELEMENTSUBTYPEAPP = 11;
int FILEELEMENTSUBTYPEAUDIO = 3;
int FILEELEMENTSUBTYPEDOC = 4;
int FILEELEMENTSUBTYPEEMOTICON = 15;
int FILEELEMENTSUBTYPEEXCEL = 6;
int FILEELEMENTSUBTYPEFOLDER = 13;
int FILEELEMENTSUBTYPEHTML = 10;
int FILEELEMENTSUBTYPEIPA = 14;
int FILEELEMENTSUBTYPENORMAL = 0;
int FILEELEMENTSUBTYPEPDF = 7;
int FILEELEMENTSUBTYPEPIC = 1;
int FILEELEMENTSUBTYPEPPT = 5;
int FILEELEMENTSUBTYPEPSD = 12;
int FILEELEMENTSUBTYPETXT = 8;
int FILEELEMENTSUBTYPEVIDEO = 2;
int FILEELEMENTSUBTYPEZIP = 9;
int GRAYTIPELEMENTSUBTYPEAIOOP = 15;
int GRAYTIPELEMENTSUBTYPEBLOCK = 14;
int GRAYTIPELEMENTSUBTYPEBUDDY = 5;
int GRAYTIPELEMENTSUBTYPEBUDDYNOTIFY = 9;
int GRAYTIPELEMENTSUBTYPEEMOJIREPLY = 3;
int GRAYTIPELEMENTSUBTYPEESSENCE = 7;
int GRAYTIPELEMENTSUBTYPEFEED = 6;
int GRAYTIPELEMENTSUBTYPEFEEDCHANNELMSG = 11;
int GRAYTIPELEMENTSUBTYPEFILE = 10;
int GRAYTIPELEMENTSUBTYPEGROUP = 4;
int GRAYTIPELEMENTSUBTYPEGROUPNOTIFY = 8;
int GRAYTIPELEMENTSUBTYPEJSON = 17;
int GRAYTIPELEMENTSUBTYPELOCALMSG = 13;
int GRAYTIPELEMENTSUBTYPEPROCLAMATION = 2;
int GRAYTIPELEMENTSUBTYPEREVOKE = 1;
int GRAYTIPELEMENTSUBTYPEUNKNOWN = 0;
int GRAYTIPELEMENTSUBTYPEWALLET = 16;
int GRAYTIPELEMENTSUBTYPEXMLMSG = 12;
int INLINEKEYBOARDBUTTONRENDERSTYLEBLUEBLACKGROUND = 4;
int INLINEKEYBOARDBUTTONRENDERSTYLEBLUEBORDER = 1;
int INLINEKEYBOARDBUTTONRENDERSTYLEGRAYBORDER = 0;
int INLINEKEYBOARDBUTTONRENDERSTYLENOBORDER = 2;
int INLINEKEYBOARDBUTTONRENDERSTYLEREDCHARACTER = 3;
int INPUTSTATUSTYPECANCEL = 2;
int INPUTSTATUSTYPESPEAK = 3;
int INPUTSTATUSTYPETEXT = 1;
int KACTIVITYMSG = 22;
int KADDLOCALMSGEXTINFOTYPEPROLOGUEMSG = 1;
int KANONYMOUSATMEMSGTYPEINMSGBOX = 1001;
int KANONYMOUSFLAGFROMOTHERPEOPLE = 1;
int KANONYMOUSFLAGFROMOWN = 2;
int KANONYMOUSFLAGINVALID = 0;
int KAPPCHANNELMSG = 16;
int KATALLMSGTYPEINMSGBOX = 2000;
int KATMEMSGTYPEINMSGBOX = 1000;
int KATTRIBUTETYPEADELIEMSG = 16;
int KATTRIBUTETYPEEXTENDBUSINESS = 13;
int KATTRIBUTETYPEFEEDBACKSTATE = 17;
int KATTRIBUTETYPEGROUPHONOR = 2;
int KATTRIBUTETYPEKINGHONOR = 3;
int KATTRIBUTETYPELONGMSG = 8;
int KATTRIBUTETYPEMEMORYSTATEMSGINFO = 18;
int KATTRIBUTETYPEMSG = 0;
int KATTRIBUTETYPEMSGBOXEVENTTYPE = 14;
int KATTRIBUTETYPEPERSONAL = 1;
int KATTRIBUTETYPEPUBLICACCOUNT = 4;
int KATTRIBUTETYPEQQCONNECT = 12;
int KATTRIBUTETYPESENDMSGRSPTRANSSVRINFO = 15;
int KATTRIBUTETYPESHAREDMSGINFO = 5;
int KATTRIBUTETYPETEMPCHATGAMESESSION = 6;
int KATTRIBUTETYPETOROBOTMSG = 9;
int KATTRIBUTETYPEUININFO = 7;
int KATTRIBUTETYPEZPLAN = 11;
int KAUTOREPLYTEXTNONEINDEX = -1;
int KAVRECORDMSG = 19;
int KBUSINESSTYPGUILD = 1;
int KBUSINESSTYPNT = 0;
int KCHATTYPEADELIE = 42;
int KCHATTYPEBUDDYNOTIFY = 5;
int KCHATTYPEC2C = 1;
int KCHATTYPECIRCLE = 113;
int KCHATTYPEDATALINE = 8;
int KCHATTYPEDATALINEMQQ = 134;
int KCHATTYPEDISC = 3;
int KCHATTYPEFAV = 41;
int KCHATTYPEGAMEMESSAGE = 105;
int KCHATTYPEGAMEMESSAGEFOLDER = 116;
int KCHATTYPEGROUP = 2;
int KCHATTYPEGROUPBLESS = 133;
int KCHATTYPEGROUPGUILD = 9;
int KCHATTYPEGROUPHELPER = 7;
int KCHATTYPEGROUPNOTIFY = 6;
int KCHATTYPEGUILD = 4;
int KCHATTYPEGUILDMETA = 16;
int KCHATTYPEMATCHFRIEND = 104;
int KCHATTYPEMATCHFRIENDFOLDER = 109;
int KCHATTYPENEARBY = 106;
int KCHATTYPENEARBYASSISTANT = 107;
int KCHATTYPENEARBYFOLDER = 110;
int KCHATTYPENEARBYHELLOFOLDER = 112;
int KCHATTYPENEARBYINTERACT = 108;
int KCHATTYPEQQNOTIFY = 132;
int KCHATTYPERELATEACCOUNT = 131;
int KCHATTYPESERVICEASSISTANT = 118;
int KCHATTYPESERVICEASSISTANTSUB = 201;
int KCHATTYPESQUAREPUBLIC = 115;
int KCHATTYPESUBSCRIBEFOLDER = 30;
int KCHATTYPETEMPADDRESSBOOK = 111;
int KCHATTYPETEMPBUSSINESSCRM = 102;
int KCHATTYPETEMPC2CFROMGROUP = 100;
int KCHATTYPETEMPC2CFROMUNKNOWN = 99;
int KCHATTYPETEMPFRIENDVERIFY = 101;
int KCHATTYPETEMPNEARBYPRO = 119;
int KCHATTYPETEMPPUBLICACCOUNT = 103;
int KCHATTYPETEMPWPA = 117;
int KCHATTYPEUNKNOWN = 0;
int KCHATTYPEWEIYUN = 40;
int KCOMMONREDENVELOPEMSGTYPEINMSGBOX = 1007;
int KDOWNSOURCETYPEAIOINNER = 1;
int KDOWNSOURCETYPEBIGSCREEN = 2;
int KDOWNSOURCETYPEHISTORY = 3;
int KDOWNSOURCETYPEUNKNOWN = 0;
int KELEMTYPEACTIVITY = 25;
int KELEMTYPEACTIVITYSTATE = 41;
int KELEMTYPEACTIVITYSUBTYPECREATEMOBATEAM = 12;
int KELEMTYPEACTIVITYSUBTYPEDISBANDMOBATEAM = 11;
int KELEMTYPEACTIVITYSUBTYPEFEEDSQUARE = 10001;
int KELEMTYPEACTIVITYSUBTYPEFINISHGAME = 16;
int KELEMTYPEACTIVITYSUBTYPEFINISHMATCHTEAM = 14;
int KELEMTYPEACTIVITYSUBTYPEHOTCHAT = 10000;
int KELEMTYPEACTIVITYSUBTYPEMINIGAME = 18;
int KELEMTYPEACTIVITYSUBTYPEMUSICPLAY = 17;
int KELEMTYPEACTIVITYSUBTYPENEWSMOBA = 9;
int KELEMTYPEACTIVITYSUBTYPENOLIVE = 2;
int KELEMTYPEACTIVITYSUBTYPENOSCREENSHARE = 7;
int KELEMTYPEACTIVITYSUBTYPENOVOICE = 3;
int KELEMTYPEACTIVITYSUBTYPEONLIVE = 1;
int KELEMTYPEACTIVITYSUBTYPEONSCREENSHARE = 6;
int KELEMTYPEACTIVITYSUBTYPEONVOICE = 4;
int KELEMTYPEACTIVITYSUBTYPESTARTMATCHTEAM = 13;
int KELEMTYPEACTIVITYSUBTYPETARTGAME = 15;
int KELEMTYPEACTIVITYSUBTYPEUNKNOWN = 0;
int KELEMTYPEADELIEACTIONBAR = 44;
int KELEMTYPEADELIERECOMMENDEDMSG = 43;
int KELEMTYPEARKSTRUCT = 10;
int KELEMTYPEAVRECORD = 21;
int KELEMTYPECALENDAR = 19;
int KELEMTYPEFACE = 6;
int KELEMTYPEFACEBUBBLE = 27;
int KELEMTYPEFEED = 22;
int KELEMTYPEFILE = 3;
int KELEMTYPEGIPHY = 15;
int KELEMTYPEGRAYTIP = 8;
int KELEMTYPEINLINEKEYBOARD = 17;
int KELEMTYPEINTEXTGIFT = 18;
int KELEMTYPELIVEGIFT = 12;
int KELEMTYPEMARKDOWN = 14;
int KELEMTYPEMARKETFACE = 11;
int KELEMTYPEMULTIFORWARD = 16;
int KELEMTYPEONLINEFILE = 23;
int KELEMTYPEPIC = 2;
int KELEMTYPEPROLOGUE = 46;
int KELEMTYPEPTT = 4;
int KELEMTYPEREPLY = 7;
int KELEMTYPESHARELOCATION = 28;
int KELEMTYPESTRUCTLONGMSG = 13;
int KELEMTYPETASKTOPMSG = 29;
int KELEMTYPETEXT = 1;
int KELEMTYPETOFU = 26;
int KELEMTYPEUNKNOWN = 0;
int KELEMTYPEVIDEO = 5;
int KELEMTYPEWALLET = 9;
int KELEMTYPEYOLOGAMERESULT = 20;
int KENTERAIO = 1;
int KEXITAIO = 2;
int KFEEDBACKBUTTONTYPEDISLIKE = 2;
int KFEEDBACKBUTTONTYPELIKE = 1;
int KFEEDBACKBUTTONTYPEPROMPTCLICK = 5;
int KFEEDBACKBUTTONTYPEREGENERATE = 4;
int KFEEDBACKBUTTONTYPEUNKNOWN = 0;
int KFEEDBACKOPTLIKE = 1;
int KFEEDBACKOPTUNKNOWN = 0;
int KFEEDBACKOPTUNLIKE = 2;
int KFRIENDNEWADDEDMSGTYPEINMSGBOX = 1008;
int KGAMEBOXNEWMSGTYPEINMSGBOX = 3000;
int KGIFTATMEMSGTYPEINMSGBOX = 1005;
int KGROUPFILEATALLMSGTYPEINMSGBOX = 2001;
int KGROUPHOMEWORK = 20000;
int KGROUPHOMEWORKTASK = 20001;
int KGROUPKEYWORDMSGTYPEINMSGBOX = 2006;
int KGROUPMANNOUNCEATALLMSGTYPEINMSGBOX = 2004;
int KGROUPTASKATALLMSGTYPEINMSGBOX = 2003;
int KGROUPUNREADTYPEINMSGBOX = 2007;
int KGUILDCHANNELLIST = 10;
int KHIGHLIGHTWORDINTEMPCHATTYPEINMSGBOX = 1009;
int KHOMEWORKREMINDER = 10000;
int KLIKEORDISLIKESTATEDISLIKE = 2;
int KLIKEORDISLIKESTATELIKE = 1;
int KLIKEORDISLIKESTATENONESELECTED = 0;
int KMARKETFACE = 17;
int KMEMORYSTATEMSGTYPEADELIEWELCOME = 1;
int KMEMORYSTATEMSGTYPEUNKNOWN = 0;
int KMINIPROGRAMNOTICE = 114;
int KMSGSUBTYPEARKGROUPANNOUNCE = 3;
int KMSGSUBTYPEARKGROUPANNOUNCECONFIRMREQUIRED = 4;
int KMSGSUBTYPEARKGROUPGIFTATME = 5;
int KMSGSUBTYPEARKGROUPTASKATALL = 6;
int KMSGSUBTYPEARKMULTIMSG = 7;
int KMSGSUBTYPEARKNORMAL = 0;
int KMSGSUBTYPEARKTENCENTDOCFROMMINIAPP = 1;
int KMSGSUBTYPEARKTENCENTDOCFROMPLUSPANEL = 2;
int KMSGSUBTYPEEMOTICON = 15;
int KMSGSUBTYPEFILEAPP = 11;
int KMSGSUBTYPEFILEAUDIO = 3;
int KMSGSUBTYPEFILEDOC = 4;
int KMSGSUBTYPEFILEEXCEL = 6;
int KMSGSUBTYPEFILEFOLDER = 13;
int KMSGSUBTYPEFILEHTML = 10;
int KMSGSUBTYPEFILEIPA = 14;
int KMSGSUBTYPEFILENORMAL = 0;
int KMSGSUBTYPEFILEPDF = 7;
int KMSGSUBTYPEFILEPIC = 1;
int KMSGSUBTYPEFILEPPT = 5;
int KMSGSUBTYPEFILEPSD = 12;
int KMSGSUBTYPEFILETXT = 8;
int KMSGSUBTYPEFILEVIDEO = 2;
int KMSGSUBTYPEFILEZIP = 9;
int KMSGSUBTYPELINK = 5;
int KMSGSUBTYPEMARKETFACE = 1;
int KMSGSUBTYPEMIXEMOTICON = 7;
int KMSGSUBTYPEMIXFACE = 3;
int KMSGSUBTYPEMIXMARKETFACE = 2;
int KMSGSUBTYPEMIXPIC = 1;
int KMSGSUBTYPEMIXREPLY = 4;
int KMSGSUBTYPEMIXTEXT = 0;
int KMSGSUBTYPETENCENTDOC = 6;
int KMSGTYPEARKSTRUCT = 11;
int KMSGTYPEFACEBUBBLE = 24;
int KMSGTYPEFILE = 3;
int KMSGTYPEGIFT = 14;
int KMSGTYPEGIPHY = 13;
int KMSGTYPEGRAYTIPS = 5;
int KMSGTYPEMIX = 2;
int KMSGTYPEMULTIMSGFORWARD = 8;
int KMSGTYPENULL = 1;
int KMSGTYPEONLINEFILE = 21;
int KMSGTYPEONLINEFOLDER = 27;
int KMSGTYPEPROLOGUE = 29;
int KMSGTYPEPTT = 6;
int KMSGTYPEREPLY = 9;
int KMSGTYPESHARELOCATION = 25;
int KMSGTYPESTRUCT = 4;
int KMSGTYPESTRUCTLONGMSG = 12;
int KMSGTYPETEXTGIFT = 15;
int KMSGTYPEUNKNOWN = 0;
int KMSGTYPEVIDEO = 7;
int KMSGTYPEWALLET = 10;
int KNEEDCONFIRMGROUPMANNOUNCEATALLMSGTYPEINMSGBOX = 2005;
int KNOTPASSTHROUGHEVENTTYPEUPPERBOUNDARY = 9999;
int KPTTFORMATTYPEAMR = 0;
int KPTTFORMATTYPESILK = 1;
int KPTTTRANSLATESTATUSFAIL = 3;
int KPTTTRANSLATESTATUSSUC = 2;
int KPTTTRANSLATESTATUSTRANSLATING = 1;
int KPTTTRANSLATESTATUSUNKNOWN = 0;
int KPTTVIPLEVELTYPENONE = 0;
int KPTTVIPLEVELTYPEQQVIP = 0;
int KPTTVIPLEVELTYPESVIP = 0;
int KPTTVOICECHANGETYPEBEASTMACHINE = 7;
int KPTTVOICECHANGETYPEBOY = 2;
int KPTTVOICECHANGETYPECATCHCOLD = 13;
int KPTTVOICECHANGETYPEECHO = 5;
int KPTTVOICECHANGETYPEFATGUY = 16;
int KPTTVOICECHANGETYPEFLASHING = 9;
int KPTTVOICECHANGETYPEGIRL = 1;
int KPTTVOICECHANGETYPEHORRIBLE = 3;
int KPTTVOICECHANGETYPEKINDERGARTEN = 6;
int KPTTVOICECHANGETYPEMEDAROT = 15;
int KPTTVOICECHANGETYPENONE = 0;
int KPTTVOICECHANGETYPEOPTIMUSPRIME = 8;
int KPTTVOICECHANGETYPEOUTOFDATE = 14;
int KPTTVOICECHANGETYPEPAPI = 11;
int KPTTVOICECHANGETYPEQUICK = 4;
int KPTTVOICECHANGETYPESTUTTER = 10;
int KPTTVOICECHANGETYPETRAPPEDBEAST = 12;
int KPTTVOICETYPEINTERCOM = 1;
int KPTTVOICETYPESOUNDRECORD = 2;
int KPTTVOICETYPEUNKNOW = 0;
int KPTTVOICETYPEVOICECHANGE = 3;
int KPUBLICACCOUNTTIANSHUHIGHLIGHTWORDTYPEINMSGBOX = 1010;
int KREPLYABSELEMTYPEFACE = 2;
int KREPLYABSELEMTYPEPIC = 3;
int KREPLYABSELEMTYPETEXT = 1;
int KREPLYABSELEMTYPEUNKNOWN = 0;
int KREPLYATMEMSGTYPEINMSGBOX = 1002;
int KRMDOWNTYPEORIG = 1;
int KRMDOWNTYPETHUMB = 2;
int KRMDOWNTYPEUNKNOWN = 0;
int KRMFILETHUMBSIZE128 = 128;
int KRMFILETHUMBSIZE320 = 320;
int KRMFILETHUMBSIZE384 = 384;
int KRMFILETHUMBSIZE750 = 750;
int KRMPICAIOTHUMBSIZE = 0;
int KRMPICTHUMBSIZE198 = 198;
int KRMPICTHUMBSIZE720 = 720;
int KRMPICTYPEBMP = 3;
int KRMPICTYPECHECKOTHER = 900;
int KRMPICTYPEGIF = 2;
int KRMPICTYPEJPG = 0;
int KRMPICTYPENEWPICAPNG = 2001;
int KRMPICTYPENEWPICBMP = 1005;
int KRMPICTYPENEWPICGIF = 2000;
int KRMPICTYPENEWPICJPEG = 1000;
int KRMPICTYPENEWPICPNG = 1001;
int KRMPICTYPENEWPICPROGERSSIVJPEG = 1003;
int KRMPICTYPENEWPICSHARPP = 1004;
int KRMPICTYPENEWPICWEBP = 1002;
int KRMPICTYPEPNG = 1;
int KRMPICTYPEUNKOWN = 0;
int KRMTHUMBSIZEZERO = 0;
int KRMTRNASFERSTATUSDOWNLOADING = 3;
int KRMTRNASFERSTATUSFAIL = 5;
int KRMTRNASFERSTATUSINIT = 1;
int KRMTRNASFERSTATUSSUC = 4;
int KRMTRNASFERSTATUSUNKOW = 0;
int KRMTRNASFERSTATUSUPLOADING = 2;
int KRMTRNASFERSTATUSUSERCANCEL = 6;
int KSEEKINGPARTNERFLAGSEEKING = 1;
int KSEEKINGPARTNERFLAGUNKNOWN = 0;
int KSENDSTATUSFAILED = 0;
int KSENDSTATUSSENDING = 1;
int KSENDSTATUSSUCCESS = 2;
int KSENDSTATUSSUCCESSNOSEQ = 3;
int KSENDTYPEDROPPED = 6;
int KSENDTYPELOCAL = 3;
int KSENDTYPEOTHERDEVICE = 2;
int KSENDTYPERECV = 0;
int KSENDTYPESELF = 1;
int KSENDTYPESELFFORWARD = 4;
int KSENDTYPESELFMULTIFORWARD = 5;
int KSESSIONTYPEADDRESSBOOK = 5;
int KSESSIONTYPEC2C = 1;
int KSESSIONTYPEDISC = 3;
int KSESSIONTYPEFAV = 41;
int KSESSIONTYPEGROUP = 2;
int KSESSIONTYPEGROUPBLESS = 52;
int KSESSIONTYPEGUILD = 4;
int KSESSIONTYPEGUILDMETA = 16;
int KSESSIONTYPENEARBYPRO = 54;
int KSESSIONTYPEQQNOTIFY = 51;
int KSESSIONTYPERELATEACCOUNT = 50;
int KSESSIONTYPESERVICEASSISTANT = 19;
int KSESSIONTYPESUBSCRIBEFOLDER = 30;
int KSESSIONTYPETYPEBUDDYNOTIFY = 7;
int KSESSIONTYPETYPEGROUPHELPER = 9;
int KSESSIONTYPETYPEGROUPNOTIFY = 8;
int KSESSIONTYPEUNKNOWN = 0;
int KSESSIONTYPEWEIYUN = 40;
int KSPECIALCAREMSGTYPEINMSGBOX = 1006;
int KSPECIFIEDREDENVELOPEATMEMSGTYPEINMSGBOX = 1004;
int KSPECIFIEDREDENVELOPEATONEMSGTYPEINMSGBOX = 1003;
int KTENCENTDOCTYPEADDON = 110;
int KTENCENTDOCTYPEDOC = 0;
int KTENCENTDOCTYPEDRAWING = 89;
int KTENCENTDOCTYPEDRIVE = 101;
int KTENCENTDOCTYPEFILE = 100;
int KTENCENTDOCTYPEFLOWCHART = 91;
int KTENCENTDOCTYPEFOLDER = 3;
int KTENCENTDOCTYPEFORM = 2;
int KTENCENTDOCTYPEMIND = 90;
int KTENCENTDOCTYPENOTES = 5;
int KTENCENTDOCTYPEPDF = 6;
int KTENCENTDOCTYPEPROGRAM = 7;
int KTENCENTDOCTYPESHEET = 1;
int KTENCENTDOCTYPESLIDE = 4;
int KTENCENTDOCTYPESMARTCANVAS = 8;
int KTENCENTDOCTYPESMARTSHEET = 9;
int KTENCENTDOCTYPESPEECH = 102;
int KTENCENTDOCTYPEUNKNOWN = 10;
int KTOFURECORDMSG = 23;
int KTOPMSGTYPETASK = 1;
int KTOPMSGTYPEUNKNOWN = 0;
int KTRIGGERTYPEAUTO = 1;
int KTRIGGERTYPEMANUAL = 0;
int KUNKNOWN = 0;
int KUNKNOWNTYPEINMSGBOX = 0;
int KUNREADCNTUPTYPEALLDIRECTSESSION = 4;
int KUNREADCNTUPTYPEALLFEEDSINGUILD = 6;
int KUNREADCNTUPTYPEALLGUILD = 3;
int KUNREADCNTUPTYPECATEGORY = 5;
int KUNREADCNTUPTYPECHANNEL = 1;
int KUNREADCNTUPTYPECONTACT = 0;
int KUNREADCNTUPTYPEGUILD = 2;
int KUNREADCNTUPTYPEGUILDGROUP = 7;
int KUNREADSHOWTTYPEGRAYPOINT = 2;
int KUNREADSHOWTYPEREDPOINT = 1;
int KUNREADSHOWTYPESMALLGRAYPOINT = 4;
int KUNREADSHOWTYPESMALLREDPOINT = 3;
int KUNREADSHOWTYPEUNKNOWN = 0;
int KVASGIFTCOINTYPECOIN = 0;
int KVASGIFTCOINTYPEMARKETCOIN = 1;
int KYOLOGAMERESULTMSG = 18;
int PIC_800_RECOMMENDED = 7;
int PIC_AIGC_EMOJI = 14;
int PIC_ALBUM_GIF = 11;
int PIC_COMMERCIAL_ADVERTISING = 9;
int PIC_FIND = 10;
int PIC_HOT = 2;
int PIC_HOT_EMOJI = 13;
int PIC_NORMAL = 0;
int PIC_PK = 3;
int PIC_QQZONE = 5;
int PIC_SELFIE_GIF = 8;
int PIC_SEND_FROM_TAB_SEARCH_BOX = 12;
int PIC_USER = 1;
int PIC_WISDOM_FIGURE = 4;
int REPLYORIGINALMSGSTATEHASRECALL = 1;
int REPLYORIGINALMSGSTATEUNKNOWN = 0;
int SHARELOCATIONELEMSUBTYPENORMAL = 1;
int SHARELOCATIONELEMSUBTYPEUNKNOWN = 0;
int TEXTELEMENTSUBTYPELINK = 1;
int TEXTELEMENTSUBTYPETENCENTDOC = 2;
int TEXTELEMENTSUBTYPEUNKNOWN = 0;
```

View File

@@ -0,0 +1,24 @@
# 前排提示
由于Core未处于开源非组织人员无法参与Core开发此处为Core开发提示
# 准备工具
frida ida-pro jadx x64dbg ce 内部调试脚本
## ida-pro
1. 用于快速分析入参和返回类型
2. 通过静态QLog推测语义
3. 提取Listener与Service (常用)
## frida
1. 用于动态获取QLog推测语义
2. 捕捉Native函数 实际入参与数据 分析中间流程
## jadx
1. 通过其它平台实现 静态获取QLog推测语义
2. 提供部分未调用代码 参考
## x64dbg
1. 验证IDA的Hook点
## 内部脚本
1. 提取Listener与Service (不调用无类型 不推荐)
2. 获取NT调用流程

View File

@@ -0,0 +1 @@
getMsgUniqueId 传入时间 产出一个唯一ID 发送消息作为一个参数

View File

@@ -2,7 +2,7 @@
"name": "napcat",
"private": true,
"type": "module",
"version": "1.4.5",
"version": "1.6.3",
"scripts": {
"watch:dev": "vite --mode development",
"watch:prod": "vite --mode production",
@@ -18,7 +18,13 @@
"depend": "cd dist && npm install --omit=dev"
},
"devDependencies": {
"@babel/core": "^7.24.7",
"@babel/preset-typescript": "^7.24.7",
"vite-plugin-babel": "^1.2.0",
"@babel/plugin-proposal-class-properties": "^7.18.6",
"@babel/plugin-proposal-decorators": "^7.24.7",
"@log4js-node/log4js-api": "^1.0.2",
"@protobuf-ts/plugin": "^2.9.4",
"@rollup/plugin-node-resolve": "^15.2.3",
"@rollup/plugin-typescript": "^11.1.6",
"@types/cors": "^2.8.17",
@@ -27,7 +33,7 @@
"@types/fluent-ffmpeg": "^2.1.24",
"@types/node": "^20.11.30",
"@types/qrcode-terminal": "^0.12.2",
"@types/uuid": "^9.0.8",
"@types/uuid": "^10.0.0",
"@types/ws": "^8.5.10",
"@typescript-eslint/eslint-plugin": "^7.4.0",
"@typescript-eslint/parser": "^7.4.0",
@@ -43,11 +49,11 @@
"vite": "^5.2.6",
"vite-plugin-cp": "^4.0.8",
"vite-plugin-dts": "^3.8.2",
"vite-tsconfig-paths": "^4.3.2",
"@protobuf-ts/plugin": "^2.9.4"
"vite-tsconfig-paths": "^4.3.2"
},
"dependencies": {
"ajv": "^8.13.0",
"chalk": "^5.3.0",
"commander": "^12.0.0",
"cors": "^2.8.5",
"express": "^5.0.0-beta.2",
@@ -60,7 +66,7 @@
"qrcode-terminal": "^0.12.0",
"silk-wasm": "^3.3.4",
"sqlite3": "^5.1.7",
"uuid": "^9.0.1",
"uuid": "^10.0.0",
"ws": "^8.16.0"
}
}

View File

@@ -1,5 +1,5 @@
import { sleep } from '@/common/utils/helper';
import { logError } from './log';
type AsyncQueueTask = (() => void) | (()=>Promise<void>);
@@ -26,7 +26,8 @@ export class AsyncQueue {
await taskRet;
}
} catch (e) {
console.error(e);
// console.error(e);
logError(e);
}
this.tasks.shift();
await sleep(100);

View File

@@ -1,40 +1,63 @@
import { NodeIKernelMsgListener } from "@/core";
import { NodeIQQNTWrapperSession } from "@/core/wrapper";
import { randomUUID } from "crypto";
import { NodeIKernelMsgListener } from '@/core';
import { NodeIQQNTWrapperSession } from '@/core/wrapper';
import { randomUUID } from 'crypto';
interface Internal_MapKey {
timeout: number,
createtime: number,
func: Function
func: (...arg: any[]) => any,
}
export class ListenerClassBase {
[key: string]: string;
}
export interface ListenerIBase {
// eslint-disable-next-line @typescript-eslint/no-misused-new
new(listener: any): ListenerClassBase;
}
export class NTEventWrapper {
private ListenerMap: Map<string, typeof ListenerClassBase> | undefined;//ListenerName-Unique -> Listener构造函数
private ListenerMap: { [key: string]: ListenerIBase } | undefined;//ListenerName-Unique -> Listener构造函数
private WrapperSession: NodeIQQNTWrapperSession | undefined;//WrapperSession
private ListenerManger: Map<string, ListenerClassBase> = new Map<string, ListenerClassBase>(); //ListenerName-Unique -> Listener实例
private EventTask: Map<string, Map<string, Internal_MapKey>> = new Map<string, Map<string, Internal_MapKey>>();//tasks ListenerName -> uuid -> {timeout,createtime,func}
private ListenerInit: Map<string, boolean> = new Map<string, boolean>();
private EventTask = new Map<string, Map<string, Map<string, Internal_MapKey>>>();//tasks ListenerMainName -> ListenerSubName-> uuid -> {timeout,createtime,func}
constructor() {
}
init({ ListenerMap, WrapperSession }: { ListenerMap: Map<string, typeof ListenerClassBase>, WrapperSession: NodeIQQNTWrapperSession }) {
createProxyDispatch(ListenerMainName: string) {
// eslint-disable-next-line @typescript-eslint/no-this-alias
const current = this;
return new Proxy({}, {
get(target: any, prop: any, receiver: any) {
// console.log('get', prop, typeof target[prop]);
if (typeof target[prop] === 'undefined') {
// 如果方法不存在返回一个函数这个函数调用existentMethod
return (...args: any[]) => {
current.DispatcherListener.apply(current, [ListenerMainName, prop, ...args]).then();
};
}
// 如果方法存在,正常返回
return Reflect.get(target, prop, receiver);
}
});
}
init({ ListenerMap, WrapperSession }: { ListenerMap: { [key: string]: typeof ListenerClassBase }, WrapperSession: NodeIQQNTWrapperSession }) {
this.ListenerMap = ListenerMap;
this.WrapperSession = WrapperSession;
}
CreatEventFunction<T extends (...args: any) => any>(eventName: string): T | undefined {
let eventNameArr = eventName.split('/');
const eventNameArr = eventName.split('/');
type eventType = {
[key: string]: () => { [key: string]: (...params: Parameters<T>) => Promise<ReturnType<T>> }
}
if (eventNameArr.length > 1) {
let serviceName = 'get' + eventNameArr[0].replace('NodeIKernel', '');
let eventName = eventNameArr[1];
let services = (this.WrapperSession as unknown as eventType)[serviceName]();
const serviceName = 'get' + eventNameArr[0].replace('NodeIKernel', '');
const eventName = eventNameArr[1];
//getNodeIKernelGroupListener,GroupService
//console.log('2', eventName);
const services = (this.WrapperSession as unknown as eventType)[serviceName]();
let event = services[eventName];
//重新绑定this
event = event.bind(services);
@@ -45,101 +68,95 @@ export class NTEventWrapper {
}
}
// 获取某个Listener 存在返回 不存在创建
CreatListenerFunction<T>(listenerName: string, uniqueCode: string = ""): T {
let ListenerType = this.ListenerMap!.get(listenerName);
let Listener = this.ListenerManger.get(listenerName + uniqueCode);
CreatListenerFunction<T>(listenerMainName: string, uniqueCode: string = ''): T {
const ListenerType = this.ListenerMap![listenerMainName];
let Listener = this.ListenerManger.get(listenerMainName + uniqueCode);
if (!Listener && ListenerType) {
Listener = new ListenerType();
let ServiceSubName = listenerName.match(/^NodeIKernel(.*?)Listener$/);
let Service = "NodeIKernel" + ServiceSubName + "Service/addKernel" + ServiceSubName + "Listener";
let addfunc = this.CreatEventFunction<(listener: T) => number>(Service);
Listener = new ListenerType(this.createProxyDispatch(listenerMainName));
const ServiceSubName = listenerMainName.match(/^NodeIKernel(.*?)Listener$/)![1];
const Service = 'NodeIKernel' + ServiceSubName + 'Service/addKernel' + ServiceSubName + 'Listener';
const addfunc = this.CreatEventFunction<(listener: T) => number>(Service);
addfunc!(Listener as T);
this.ListenerManger.set(listenerName + uniqueCode, Listener);
//console.log(addfunc!(Listener as T));
this.ListenerManger.set(listenerMainName + uniqueCode, Listener);
}
return Listener as T;
}
// 如果存在覆盖注册 不存在则创建Listener
RigisterListener<T extends { [key: string]: (...args: any) => any }>(listenerName: string, uniqueCode: string = "NTEvent", cb: (...args: any) => any) {
let ListenerNameList = listenerName.split('/');
let ListenerMain = ListenerNameList[0];
let ListenerMethod = ListenerNameList[1];
let Listener = this.CreatListenerFunction<T>(ListenerMain, uniqueCode); //uniqueCode NTEvent
(Listener[ListenerMethod] as any) = cb;
}
//初始化Listener回调
initNTListener(ListenerName: string) {
if (this.ListenerInit.get(ListenerName)) {
return;
}
this.RigisterListener(ListenerName, "NTEvent", (...args) => {
console.log('wait... DispatcherListener');
this.DispatcherListener(ListenerName, ...args).then().catch();
})
this.ListenerInit.set(ListenerName, true);
}
//统一回调清理事件
async DispatcherListener(ListenerName: string, ...args: any[]) {
this.EventTask.get(ListenerName)?.forEach((task, uuid) => {
if (task.createtime + task.timeout > Date.now()) {
this.EventTask.get(ListenerName)?.delete(uuid);
async DispatcherListener(ListenerMainName: string, ListenerSubName: string, ...args: any[]) {
//console.log(ListenerMainName, this.EventTask.get(ListenerMainName), ListenerSubName, this.EventTask.get(ListenerMainName)?.get(ListenerSubName));
this.EventTask.get(ListenerMainName)?.get(ListenerSubName)?.forEach((task, uuid) => {
//console.log(task.func, uuid, task.createtime, task.timeout);
if (task.createtime + task.timeout < Date.now()) {
this.EventTask.get(ListenerMainName)?.get(ListenerSubName)?.delete(uuid);
return;
}
task.func(...args);
})
});
}
async CallNoListenerEvent<EventType extends (...args: any[]) => Promise<any>,>(EventName = '', timeout: number = 3000, ...args: Parameters<EventType>) {
return new Promise<ReturnType<EventType>>(async (resolve, reject) => {
let EventFunc = this.CreatEventFunction<EventType>(EventName);
return new Promise<Awaited<ReturnType<EventType>>>(async (resolve, reject) => {
const EventFunc = this.CreatEventFunction<EventType>(EventName);
let complete = false;
let Timeouter = setTimeout(() => {
const Timeouter = setTimeout(() => {
if (!complete) {
reject(new Error('NTEvent EventName:' + EventName + ' timeout'));
}
}, timeout);
let retData = await EventFunc!(...args);
const retData = await EventFunc!(...args);
complete = true;
resolve(retData);
});
}
async CallNormalEvent<EventType extends (...args: any[]) => Promise<any>, ListenerType extends (...args: any[]) => void>(EventName = '', ListenerName = '', waitTimes = 1, timeout: number = 3000, ...args: Parameters<EventType>) {
return new Promise<ArrayLike<Parameters<ListenerType>>>(async (resolve, reject) => {
return new Promise<[EventRet: Awaited<ReturnType<EventType>>, ...Parameters<ListenerType>]>(async (resolve, reject) => {
const id = randomUUID();
let complete = 0;
let retData: ArrayLike<Parameters<ListenerType>> | undefined = undefined;
let databack = () => {
let retData: Parameters<ListenerType> | undefined = undefined;
let retEvent: any = {};
const databack = () => {
if (complete < waitTimes) {
reject(new Error('NTEvent EventName:' + EventName + ' ListenerName:' + ListenerName + ' timeout'));
} else {
resolve(retData as ArrayLike<Parameters<ListenerType>>);
resolve([retEvent as Awaited<ReturnType<EventType>>, ...retData!]);
}
}
this.initNTListener(ListenerName);
let Timeouter = setTimeout(databack, timeout);
let ListenerNameList = ListenerName.split('/');
let ListenerMain = ListenerNameList[0];
let ListenerMethod = ListenerNameList[1];
};
const Timeouter = setTimeout(databack, timeout);
this.EventTask.get(ListenerMain)?.set(id, {
const ListenerNameList = ListenerName.split('/');
const ListenerMainName = ListenerNameList[0];
const ListenerSubName = ListenerNameList[1];
const eventCallbak = {
timeout: timeout,
createtime: Date.now(),
func: (...args: any[]) => {
complete++;
retData = args as ArrayLike<Parameters<ListenerType>>;
if (complete == waitTimes) {
//console.log('func', ...args);
retData = args as Parameters<ListenerType>;
if (complete >= waitTimes) {
clearTimeout(Timeouter);
databack();
}
}
});
let EventFunc = this.CreatEventFunction<EventType>(EventName);
await EventFunc!(...args);
};
if (!this.EventTask.get(ListenerMainName)) {
this.EventTask.set(ListenerMainName, new Map());
}
if (!(this.EventTask.get(ListenerMainName)?.get(ListenerSubName))) {
this.EventTask.get(ListenerMainName)?.set(ListenerSubName, new Map());
}
this.EventTask.get(ListenerMainName)?.get(ListenerSubName)?.set(id, eventCallbak);
this.CreatListenerFunction(ListenerMainName);
const EventFunc = this.CreatEventFunction<EventType>(EventName);
//console.log("测试打点", args);
retEvent = await EventFunc!(...(args as any[]));
});
}
}
export const NTEventDispatch = new NTEventWrapper();
// 示例代码 快速创建事件
//let NTEvent = new NTEventWrapper();
// let NTEvent = new NTEventWrapper();
// let TestEvent = NTEvent.CreatEventFunction<(force: boolean) => Promise<Number>>('NodeIKernelProfileLikeService/GetTest');
// if (TestEvent) {
// TestEvent(true);

View File

@@ -1,4 +1,4 @@
import { logError, logDebug } from "@/common/utils/log";
import { logError, logDebug } from '@/common/utils/log';
type group_id = number;
type user_id = number;
@@ -44,7 +44,7 @@ class LRU<T> {
// 移除LRU节点
private removeLRUNode(node: cacheNode<T>) {
logDebug(
"removeLRUNode",
'removeLRUNode',
node.groupId,
node.userId,
node.value,

View File

@@ -0,0 +1,53 @@
import crypto from 'crypto';
class LimitedHashTable<K, V> {
private keyToValue: Map<K, V> = new Map();
private valueToKey: Map<V, K> = new Map();
private maxSize: number;
private KeyQueneList: K[] = [];
private ValueQueneList: V[] = [];
constructor(maxSize: number) {
this.maxSize = maxSize;
}
set(key: K, value: V): void {
this.keyToValue.set(key, value);
this.valueToKey.set(value, key);
if (this.KeyQueneList.length >= this.maxSize || this.ValueQueneList.length >= this.maxSize) {
this.KeyQueneList.shift();
this.ValueQueneList.shift();
}
}
getValue(key: K): V | undefined {
return this.keyToValue.get(key);
}
getKey(value: V): K | undefined {
return this.valueToKey.get(value);
}
delete(key: K): void {
const value = this.keyToValue.get(key);
if (value !== undefined) {
this.keyToValue.delete(key);
this.valueToKey.delete(value);
}
}
}
class MessageUniqueWrapper {
private msgIdMap: LimitedHashTable<number, string> = new LimitedHashTable(1000);
createMsg(MsgId: string) {
const ShortId = parseInt(crypto.createHash('sha1').update('2345').digest('hex').slice(0, 8), 16);
this.msgIdMap.set(ShortId, MsgId);
return ShortId;
}
getMsgIdByShortId(ShortId: number) {
return this.msgIdMap.getValue(ShortId);
}
getShortIdByMsgId(MsgId: string) {
return this.msgIdMap.getKey(MsgId);
}
}
export const MessageUnique = new MessageUniqueWrapper();

View File

@@ -0,0 +1,17 @@
// 方案一 MiniApp发包方案
// 前置条件: 处于GUI环境 存在MiniApp
import { NTQQSystemApi } from '@/core';
// 前排提示: 开发验证仅Win平台开展
export class MiniAppUtil {
static async RunMiniAppWithGUI() {
//process.env.ELECTRON_RUN_AS_NODE = undefined;//没用还是得自己用cpp之类的语言写个程序转发参数
return NTQQSystemApi.BootMiniApp(process.execPath, 'miniapp://open/1007?url=https%3A%2F%2Fm.q.qq.com%2Fa%2Fs%2Fedd0a83d3b8afe233dfa07adaaf8033f%3Fscene%3D1007%26min_refer%3D10001');
}
}
// 方案二 MiniApp发包方案 替代MiniApp方案
// 前置条件: 无
export class MojoMiniAppUtil{
}

View File

@@ -2,6 +2,7 @@ import path from 'node:path';
import fs from 'node:fs';
import os from 'node:os';
import { systemPlatform } from '@/common/utils/system';
import { logError } from '@/common/utils/log';
export const exePath = process.execPath;
@@ -37,11 +38,11 @@ type QQVersionConfigInfo = {
}
let _qqVersionConfigInfo: QQVersionConfigInfo = {
'baseVersion': '9.9.9-23361',
'curVersion': '9.9.9-23361',
'baseVersion': '9.9.11-24568',
'curVersion': '9.9.11-24568',
'prevVersion': '',
'onErrorVersions': [],
'buildId': '23361'
'buildId': '24568'
};
if (fs.existsSync(configVersionInfoPath)) {
@@ -49,12 +50,12 @@ if (fs.existsSync(configVersionInfoPath)) {
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);
logError('Load QQ version config info failed, Use default version', e);
}
}
export const qqVersionConfigInfo: QQVersionConfigInfo = _qqVersionConfigInfo;
//V1_WIN_NQ_9.9.11_24568_GW_B
export const qqPkgInfo: QQPkgInfo = JSON.parse(fs.readFileSync(pkgInfoPath).toString());
// platform_type: 3,
// app_type: 4,
@@ -64,9 +65,13 @@ export const qqPkgInfo: QQPkgInfo = JSON.parse(fs.readFileSync(pkgInfoPath).toSt
// platVer: '10.0.26100',
// clientVer: '9.9.9-23159',
let _appid: string = '537213803'; // 默认为 Windows 平台的 appid
// Linux
// app_version: '3.2.9-24568',
// qua: 'V1_LNX_NQ_3.2.9_24568_GW_B',
let _appid: string = '537226369'; // 默认为 Windows 平台的 appid
if (systemPlatform === 'linux') {
_appid = '537213827';
_appid = '537226441';
}
// todo: mac 平台的 appid
export const appid = _appid;

View File

@@ -24,7 +24,7 @@ export async function encodeSilk(filePath: string) {
const fileHeader = buffer.toString('hex', 0, bytesToRead);
return fileHeader;
} catch (err) {
console.error('读取文件错误:', err);
logError('读取文件错误:', err);
return;
}
}

View File

@@ -4,7 +4,6 @@ import fs from 'fs';
import { dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
export function getModuleWithArchName(moduleName: string) {

View File

@@ -3,7 +3,7 @@ import { ElementType, FileElement, PicElement, PttElement, RawMessage, VideoElem
import sqlite3 from 'sqlite3';
import { log, logDebug, logError } from '@/common/utils/log';
import { NTQQMsgApi } from '@/core';
import LRU from "@/common/utils/LRUCache";
import LRU from '@/common/utils/LRUCache';
export interface IRember {
last_sent_time: number;
@@ -111,7 +111,7 @@ class DBUtil extends DBUtilBase {
// 初始化群缓存列表
this.db!.serialize(() => {
const sql = `SELECT * FROM sqlite_master WHERE type='table'`;
const sql = 'SELECT * FROM sqlite_master WHERE type=\'table\'';
this.db!.all(sql, [], (err, rows: { name: string }[]) => {
if (err) return logError(err);
rows.forEach((row) => this.groupIds.push(parseInt(row.name)));
@@ -123,22 +123,22 @@ class DBUtil extends DBUtilBase {
this.LURCache.on(async (node) => {
const { value: time, groupId, userId } = node;
logDebug("插入发言时间", userId, groupId);
logDebug('插入发言时间', userId, groupId);
await this.createGroupInfoTimeTableIfNotExist(groupId);
const method = await this.getDataSetMethod(groupId, userId);
logDebug("插入发言时间方法判断", userId, groupId, method);
logDebug('插入发言时间方法判断', userId, groupId, method);
const sql =
method == "update"
method == 'update'
? `UPDATE "${groupId}" SET last_sent_time = ? WHERE user_id = ?`
: `INSERT INTO "${groupId}" (last_sent_time, user_id) VALUES (?, ?)`;
this.db!.all(sql, [time, userId], (err) => {
if (err) {
return logError("插入/更新发言时间失败", userId, groupId);
return logError('插入/更新发言时间失败', userId, groupId);
}
logDebug("插入/更新发言时间成功", userId, groupId);
logDebug('插入/更新发言时间成功', userId, groupId);
});
});
@@ -146,28 +146,28 @@ class DBUtil extends DBUtilBase {
async getDataSetMethod(groupId: number, userId: number) {
// 缓存记录
if (this.LastSentCache.get(groupId, userId)) {
logDebug("缓存命中", userId, groupId);
return "update";
logDebug('缓存命中', userId, groupId);
return 'update';
}
// 数据库判断
return new Promise<"insert" | "update">((resolve, reject) => {
return new Promise<'insert' | 'update'>((resolve, reject) => {
this.db!.all(
`SELECT * FROM "${groupId}" WHERE user_id = ?`,
[userId],
(err, rows) => {
if (err) {
logError("查询发言时间存在失败", userId, groupId, err);
return logError("插入发言时间失败", userId, groupId, err);
logError('查询发言时间存在失败', userId, groupId, err);
return logError('插入发言时间失败', userId, groupId, err);
}
if (rows.length === 0) {
logDebug("查询发言时间不存在", userId, groupId);
return resolve("insert");
logDebug('查询发言时间不存在', userId, groupId);
return resolve('insert');
}
logDebug("查询发言时间存在", userId, groupId);
resolve("update");
logDebug('查询发言时间存在', userId, groupId);
resolve('update');
}
);
});
@@ -232,19 +232,6 @@ class DBUtil extends DBUtilBase {
logError('Could not create table files', err);
}
});
// 接收到的临时会话消息uid
const createTempUinTableSQL = `
CREATE TABLE IF NOT EXISTS temp_uins (
id INTEGER PRIMARY KEY AUTOINCREMENT,
uid TEXT,
uin TEXT
)`;
this.db!.run(createTempUinTableSQL, function (err) {
if (err) {
logError('Could not create table temp_uins', err);
}
});
}
private async getCurrentMaxShortId() {
@@ -415,64 +402,17 @@ class DBUtil extends DBUtilBase {
});
}
// 被动收到的临时会话消息uin->uid
async getReceivedTempUinMap() {
const stmt = 'SELECT * FROM temp_uins';
return new Promise<Record<string, string>>((resolve, reject) => {
this.db!.all(stmt, (err, rows: { uin: string, uid: string }[]) => {
if (err) {
logError('db could not get temp uin map', err);
reject(err);
}
const map: Record<string, string> = {};
rows.forEach(row => {
map[row.uin] = row.uid;
});
resolve(map);
});
});
}
// 通过uin获取临时会话消息uid
async getUidByTempUin(uid: string) {
const stmt = 'SELECT * FROM temp_uins WHERE uin = ?';
return new Promise<string>((resolve, reject) => {
this.db!.get(stmt, [uid], (err, row: { uin: string, uid: string }) => {
if (err) {
logError('db could not get temp uin map', err);
reject(err);
}
resolve(row?.uid);
});
});
}
async addTempUin(uin: string, uid: string) {
const existUid = await this.getUidByTempUin(uin);
if (!existUid) {
const stmt = this.db!.prepare('INSERT INTO temp_uins (uin, uid) VALUES (?, ?)');
return new Promise((resolve, reject) => {
stmt.run(uin, uid, function (err: any) {
if (err) {
logError('db could not add temp uin', err);
reject(err);
}
resolve(null);
});
});
}
}
async getLastSentTimeAndJoinTime(
groupId: number
): Promise<IRember[]> {
logDebug("读取发言时间", groupId);
logDebug('读取发言时间', groupId);
return new Promise<IRember[]>((resolve, reject) => {
this.db!.all(`SELECT * FROM "${groupId}" `, (err, rows: IRember[]) => {
if (err) {
logError("查询发言时间失败", groupId);
logError('查询发言时间失败', groupId);
return resolve([]);
}
logDebug("查询发言时间成功", groupId, rows);
logDebug('查询发言时间成功', groupId, rows);
resolve(rows);
});
});
@@ -483,7 +423,7 @@ class DBUtil extends DBUtilBase {
userId: number,
time: number
) {
this.LURCache.set(groupId, userId, time)
this.LURCache.set(groupId, userId, time);
}
async insertJoinTime(
groupId: number,
@@ -498,7 +438,7 @@ class DBUtil extends DBUtilBase {
if (err)
logError(err),
Promise.reject(),
console.log("插入入群时间失败", userId, groupId);
logError('插入入群时间失败', userId, groupId);
}
);

View File

@@ -1,9 +1,9 @@
import fs from 'fs';
import fsPromise from 'fs/promises';
import fsPromise, { stat } from 'fs/promises';
import crypto from 'crypto';
import util from 'util';
import path from 'node:path';
import { log } from './log';
import { log, logError } from './log';
import { dbUtil } from '@/common/utils/db';
import * as fileType from 'file-type';
import { v4 as uuidv4 } from 'uuid';
@@ -50,7 +50,40 @@ export function checkFileReceived(path: string, timeout: number = 3000): Promise
check();
});
}
// 定义一个异步函数来检查文件是否存在
export async function checkFileReceived2(path: string, timeout: number = 3000): Promise<void> {
// 使用 Promise.race 来同时进行文件状态检查和超时计时
// Promise.race 会返回第一个解决resolve或拒绝reject的 Promise
await Promise.race([
checkFile(path),
timeoutPromise(timeout, `文件不存在: ${path}`),
]);
}
// 转换超时时间至 Promise
function timeoutPromise(timeout: number, errorMsg: string): Promise<void> {
return new Promise((_, reject) => {
setTimeout(() => {
reject(new Error(errorMsg));
}, timeout);
});
}
// 异步检查文件是否存在
async function checkFile(path: string): Promise<void> {
try {
await stat(path);
} catch (error: any) {
if (error.code === 'ENOENT') {
// 如果文件不存在,则抛出一个错误
throw new Error(`文件不存在: ${path}`);
} else {
// 对于 stat 调用的其他错误,重新抛出
throw error;
}
}
// 如果文件存在则无需做任何事情Promise 解决resolve自身
}
export async function file2base64(path: string) {
const readFile = util.promisify(fs.readFile);
const result = {
@@ -262,12 +295,12 @@ export async function copyFolder(sourcePath: string, destPath: string) {
try {
await fsPromise.copyFile(srcPath, dstPath);
} catch (error) {
console.error(`无法复制文件 '${srcPath}' 到 '${dstPath}': ${error}`);
logError(`无法复制文件 '${srcPath}' 到 '${dstPath}': ${error}`);
// 这里可以决定是否要继续复制其他文件
}
}
}
} catch (error) {
console.error('复制文件夹时出错:', error);
logError('复制文件夹时出错:', error);
}
}

View File

@@ -4,7 +4,7 @@ import fs from 'fs/promises';
import { log, logDebug } from './log';
import { dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
import * as fsPromise from 'node:fs/promises';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
@@ -43,8 +43,88 @@ export function truncateString(obj: any, maxLength = 500) {
}
return obj;
}
export function simpleDecorator(target: any, context: any) {
}
// export function CacheClassFunc(ttl: number = 3600 * 1000, customKey: string = '') {
// const cache = new Map<string, { expiry: number; value: any }>();
// return function CacheClassFuncDecorator(originalMethod: Function, context: ClassMethodDecoratorContext) {
// async function CacheClassFuncDecoratorInternal(this: any, ...args: any[]) {
// const key = `${customKey}${String(context.name)}.(${args.map(arg => JSON.stringify(arg)).join(', ')})`;
// const cachedValue = cache.get(key);
// if (cachedValue && cachedValue.expiry > Date.now()) {
// return cachedValue.value;
// }
// const result = originalMethod.call(this, ...args);
// cache.set(key, { expiry: Date.now() + ttl, value: result });
// return result;
// }
// return CacheClassFuncDecoratorInternal;
// }
// }
export function CacheClassFuncAsync(ttl: number = 3600 * 1000, customKey: string = '') {
//console.log('CacheClassFuncAsync', ttl, customKey);
function logExecutionTime(target: any, methodName: string, descriptor: PropertyDescriptor) {
//console.log('logExecutionTime', target, methodName, descriptor);
const cache = new Map<string, { expiry: number; value: any }>();
const originalMethod = descriptor.value;
descriptor.value = async function (...args: any[]) {
const key = `${customKey}${String(methodName)}.(${args.map(arg => JSON.stringify(arg)).join(', ')})`;
cache.forEach((value, key) => {
if (value.expiry < Date.now()) {
cache.delete(key);
}
});
const cachedValue = cache.get(key);
if (cachedValue && cachedValue.expiry > Date.now()) {
return cachedValue.value;
}
// const start = Date.now();
const result = await originalMethod.apply(this, args);
// const end = Date.now();
// console.log(`Method ${methodName} executed in ${end - start} ms.`);
cache.set(key, { expiry: Date.now() + ttl, value: result });
return result;
};
}
return logExecutionTime;
}
// export function CacheClassFuncAsync(ttl: number = 3600 * 1000, customKey: string = ''): any {
// const cache = new Map<string, { expiry: number; value: any }>();
// // 注意在JavaScript装饰器中我们通常不直接处理ClassMethodDecoratorContext这样的类型
// // 因为装饰器的参数通常是目标类(对于类装饰器)、属性名(对于属性装饰器)等。
// // 对于方法装饰器,我们关注的是方法本身及其描述符。
// // 但这里我们维持原逻辑,假设有一个自定义的处理上下文的方式。
// return function (originalMethod: Function): any {
// console.log(originalMethod);
// // 由于JavaScript装饰器原生不支持异步直接定义我们保持async定义以便处理异步方法。
// async function decoratorWrapper(this: any, ...args: any[]): Promise<any> {
// console.log(...args);
// const key = `${customKey}${originalMethod.name}.(${args.map(arg => JSON.stringify(arg)).join(', ')})`;
// const cachedValue = cache.get(key);
// // 遍历cache 清除expiry内容
// cache.forEach((value, key) => {
// if (value.expiry < Date.now()) {
// cache.delete(key);
// }
// });
// if (cachedValue && cachedValue.expiry > Date.now()) {
// return cachedValue.value;
// }
// // 直接await异步方法的结果
// const result = await originalMethod.apply(this, args);
// cache.set(key, { expiry: Date.now() + ttl, value: result });
// return result;
// }
// // 返回装饰后的方法保持与原方法相同的名称和描述符如果需要更精细的控制可以考虑使用Object.getOwnPropertyDescriptor等
// return decoratorWrapper;
// };
// }
/**
* 函数缓存装饰器根据方法名、参数、自定义key生成缓存键在一定时间内返回缓存结果
@@ -182,3 +262,25 @@ export function isEqual(obj1: any, obj2: any) {
}
return true;
}
export async function deleteOldFiles(directoryPath: string, daysThreshold: number) {
try {
const files = await fsPromise.readdir(directoryPath);
for (const file of files) {
const filePath = path.join(directoryPath, file);
const stats = await fsPromise.stat(filePath);
const lastModifiedTime = stats.mtimeMs;
const currentTime = Date.now();
const timeDifference = currentTime - lastModifiedTime;
const daysDifference = timeDifference / (1000 * 60 * 60 * 24);
if (daysDifference > daysThreshold) {
await fsPromise.unlink(filePath); // Delete the file
//console.log(`Deleted: ${filePath}`);
}
}
} catch (error) {
//console.error('Error deleting files:', error);
}
}

View File

@@ -4,7 +4,7 @@ import path from 'node:path';
import { SelfInfo } from '@/core';
import { dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
import chalk from 'chalk';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
@@ -39,17 +39,17 @@ const logConfig: Configuration = {
FileAppender: { // 输出到文件的appender
type: 'file',
filename: logPath, // 指定日志文件的位置和文件名
maxLoogSize: 10485760, // 日志文件的最大大小单位字节这里设置为10MB
maxLogSize: 10485760, // 日志文件的最大大小单位字节这里设置为10MB
layout: {
type: 'pattern',
pattern: '%d{yyyy-MM-dd hh:mm:ss} [%p] - %m'
pattern: '%d{yyyy-MM-dd hh:mm:ss} [%p] %X{userInfo} | %m'
}
},
ConsoleAppender: { // 输出到控制台的appender
type: 'console',
layout: {
type: 'pattern',
pattern: '%d{yyyy-MM-dd hh:mm:ss} [%p] - %m'
pattern: `%d{yyyy-MM-dd hh:mm:ss} [%[%p%]] ${chalk.magenta('%X{userInfo}')} | %m`
}
}
},
@@ -61,7 +61,9 @@ const logConfig: Configuration = {
};
log4js.configure(logConfig);
const loggerConsole = log4js.getLogger('console');
const loggerFile = log4js.getLogger('file');
const loggerDefault = log4js.getLogger('default');
export function setLogLevel(fileLogLevel: LogLevel, consoleLogLevel: LogLevel) {
logConfig.categories.file.level = fileLogLevel;
@@ -70,12 +72,12 @@ export function setLogLevel(fileLogLevel: LogLevel, consoleLogLevel: LogLevel) {
}
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);
const userInfo = `${selfInfo.nick}(${selfInfo.uin})`;
loggerConsole.addContext('userInfo', userInfo);
loggerFile.addContext('userInfo', userInfo);
loggerDefault.addContext('userInfo', userInfo);
}
setLogSelfInfo({ nick: '', uin: '', uid: '' });
let fileLogEnabled = true;
let consoleLogEnabled = true;
@@ -86,7 +88,7 @@ export function enableConsoleLog(enable: boolean) {
consoleLogEnabled = enable;
}
function formatMsg(msg: any[]){
function formatMsg(msg: any[]) {
let logMsg = '';
for (const msgItem of msg) {
// 判断是否是对象
@@ -97,15 +99,18 @@ function formatMsg(msg: any[]){
}
logMsg += msgItem + ' ';
}
return '\n' + logMsg + '\n';
return logMsg;
}
function _log(level: LogLevel, ...args: any[]){
if (consoleLogEnabled){
log4js.getLogger('console')[level](formatMsg(args));
// eslint-disable-next-line no-control-regex
const colorEscape = /\x1B[@-_][0-?]*[ -/]*[@-~]/g;
function _log(level: LogLevel, ...args: any[]) {
if (consoleLogEnabled) {
loggerConsole[level](formatMsg(args));
}
if (fileLogEnabled){
log4js.getLogger('file')[level](formatMsg(args));
if (fileLogEnabled) {
loggerFile[level](formatMsg(args).replace(colorEscape, ''));
}
}
@@ -121,3 +126,11 @@ export function logDebug(...args: any[]) {
export function logError(...args: any[]) {
_log(LogLevel.ERROR, ...args);
}
export function logWarn(...args: any[]) {
_log(LogLevel.WARN, ...args);
}
export function logFatal(...args: any[]) {
_log(LogLevel.FATAL, ...args);
}

View File

@@ -1,12 +1,13 @@
import https from 'node:https';
import http from 'node:http';
import { readFileSync } from 'node:fs';
import { NTQQUserApi } from '@/core';
export class RequestUtil {
// 适用于获取服务器下发cookies时获取仅GET
static async HttpsGetCookies(url: string): Promise<{ [key: string]: string }> {
const client = url.startsWith('https') ? https : http;
return new Promise((resolve, reject) => {
client.get(url, (res) => {
let req = client.get(url, (res) => {
let cookies: { [key: string]: string } = {};
const handleRedirect = (res: http.IncomingMessage) => {
//console.log(res.headers.location);
@@ -17,6 +18,8 @@ export class RequestUtil {
// 合并重定向过程中的cookies
cookies = { ...cookies, ...redirectCookies };
resolve(cookies);
}).catch((err) => {
reject(err);
});
} else {
resolve(cookies);
@@ -40,8 +43,9 @@ export class RequestUtil {
}
});
}
}).on('error', (err) => {
reject(err);
});
req.on('error', (error: any) => {
reject(error);
});
});
}
@@ -49,7 +53,7 @@ export class RequestUtil {
// 请求和回复都是JSON data传原始内容 自动编码json
static async HttpGetJson<T>(url: string, method: string = 'GET', data?: any, headers: Record<string, string> = {}, isJsonRet: boolean = true, isArgJson: boolean = true): Promise<T> {
static async HttpGetJson<T>(url: string, method: string = 'GET', data?: any, headers: { [key: string]: string } = {}, isJsonRet: boolean = true, isArgJson: boolean = true): Promise<T> {
const option = new URL(url);
const protocol = url.startsWith('https://') ? https : http;
const options = {
@@ -59,6 +63,10 @@ export class RequestUtil {
method: method,
headers: headers
};
// headers: {
// 'Content-Type': 'application/json',
// 'Content-Length': Buffer.byteLength(postData),
// },
return new Promise((resolve, reject) => {
const req = protocol.request(options, (res: any) => {
let responseBody = '';
@@ -100,7 +108,86 @@ export class RequestUtil {
}
// 请求返回都是原始内容
static async HttpGetText(url: string, method: string = 'GET', data?: any, headers: Record<string, string> = {}) {
static async HttpGetText(url: string, method: string = 'GET', data?: any, headers: { [key: string]: string } = {}) {
return this.HttpGetJson<string>(url, method, data, headers, false, false);
}
static async createFormData(boundary: string, filePath: string): Promise<Buffer> {
let type = 'image/png';
if (filePath.endsWith('.jpg')) {
type = 'image/jpeg';
}
const formDataParts = [
`------${boundary}\r\n`,
`Content-Disposition: form-data; name="share_image"; filename="${filePath}"\r\n`,
'Content-Type: ' + type + '\r\n\r\n'
];
const fileContent = readFileSync(filePath);
const footer = `\r\n------${boundary}--`;
return Buffer.concat([
Buffer.from(formDataParts.join(''), 'utf8'),
fileContent,
Buffer.from(footer, 'utf8')
]);
}
static async uploadImageForOpenPlatform(filePath: string): Promise<string> {
return new Promise(async (resolve, reject) => {
type retType = { retcode: number, result?: { url: string } };
try {
const cookies = Object.entries(await NTQQUserApi.getCookies('connect.qq.com')).map(([key, value]) => `${key}=${value}`).join('; ');
const options = {
hostname: 'cgi.connect.qq.com',
port: 443,
path: '/qqconnectopen/upload_share_image',
method: 'POST',
headers: {
'Referer': 'https://cgi.connect.qq.com',
'Cookie': cookies,
'Accept': '*/*',
'Connection': 'keep-alive',
'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW'
}
};
const req = https.request(options, async (res) => {
let responseBody = '';
res.on('data', (chunk: string | Buffer) => {
responseBody += chunk.toString();
});
res.on('end', () => {
try {
if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
const responseJson = JSON.parse(responseBody) as retType;
resolve(responseJson.result!.url!);
} else {
reject(new Error(`Unexpected status code: ${res.statusCode}`));
}
} catch (parseError) {
reject(parseError);
}
});
});
req.on('error', (error) => {
reject(error);
console.error('Error during upload:', error);
});
const body = await RequestUtil.createFormData('WebKitFormBoundary7MA4YWxkTrZu0gW', filePath);
// req.setHeader('Content-Length', Buffer.byteLength(body));
// console.log(`Prepared data size: ${Buffer.byteLength(body)} bytes`);
req.write(body);
req.end();
return;
} catch (error) {
reject(error);
}
return undefined;
});
}
}

View File

@@ -1,17 +1,74 @@
import os from 'node:os';
import path from 'node:path';
import { networkInterfaces } from 'os';
import { v4 as uuidv4 } from 'uuid';
// 缓解Win7设备兼容性问题
let osName: string;
// 设备ID
let machineId: Promise<string>;
try {
osName = os.hostname();
} catch (e) {
osName = 'NapCat'; // + crypto.randomUUID().substring(0, 4);
}
const invalidMacAddresses = new Set([
'00:00:00:00:00:00',
'ff:ff:ff:ff:ff:ff',
'ac:de:48:00:11:22'
]);
function validateMacAddress(candidate: string): boolean {
// eslint-disable-next-line no-useless-escape
const tempCandidate = candidate.replace(/\-/g, ':').toLowerCase();
return !invalidMacAddresses.has(tempCandidate);
}
export async function getMachineId(): Promise<string> {
if (!machineId) {
machineId = (async () => {
const id = await getMacMachineId();
return id || uuidv4(); // fallback, generate a UUID
})();
}
return machineId;
}
export function getMac(): string {
const ifaces = networkInterfaces();
for (const name in ifaces) {
const networkInterface = ifaces[name];
if (networkInterface) {
for (const { mac } of networkInterface) {
if (validateMacAddress(mac)) {
return mac;
}
}
}
}
throw new Error('Unable to retrieve mac address (unexpected format)');
}
async function getMacMachineId(): Promise<string | undefined> {
try {
const crypto = await import('crypto');
const macAddress = getMac();
return crypto.createHash('sha256').update(macAddress, 'utf8').digest('hex');
} catch (err) {
return undefined;
}
}
const homeDir = os.homedir();
export const systemPlatform = os.platform();
export const cpuArch = os.arch();
export const systemVersion = os.release();
export const hostname = osName;
const homeDir = os.homedir();
export const downloadsPath = path.join(homeDir, 'Downloads');
export const systemName = os.type();

View File

@@ -14,7 +14,7 @@ export async function checkVersion(): Promise<string> {
try {
version = (await RequestUtil.HttpGetJson<{ version: string }>(url)).version;
} catch (e) {
logDebug("检测更新异常",e);
logDebug('检测更新异常',e);
}
if (version) {
resolve(version);

View File

@@ -24,7 +24,7 @@ export async function getVideoInfo(filePath: string) {
} else {
const videoStream = metadata.streams.find((s: { codec_type: string; }) => s.codec_type === 'video');
if (videoStream) {
console.log(`视频尺寸: ${videoStream.width}x${videoStream.height}`);
log(`视频尺寸: ${videoStream.width}x${videoStream.height}`);
} else {
return reject('未找到视频流信息。');
}

View File

@@ -1 +1 @@
var _0x4f8b54=_0x4f34;function _0x4f34(_0xbaed04,_0x4b53ad){var _0x4cc022=_0x4cc0();return _0x4f34=function(_0x4f349c,_0x9083e2){_0x4f349c=_0x4f349c-0x131;var _0x33410f=_0x4cc022[_0x4f349c];return _0x33410f;},_0x4f34(_0xbaed04,_0x4b53ad);}function _0x4cc0(){var _0x1d4b13=['477EyYLON','54UTQVQP','6vywxEB','326856HoPiQr','1859ZKXyOj','onMSFSsoError','250QjfjnE','139784xWKKzW','onMSFStatusChange','60qLkvMG','442211Jauitq','194770TWLKuK','97079vRHCFb','getGroupCode'];_0x4cc0=function(){return _0x1d4b13;};return _0x4cc0();}(function(_0x38fc1a,_0x101f93){var _0xb96e1c=_0x4f34,_0x35d74e=_0x38fc1a();while(!![]){try{var _0x468126=parseInt(_0xb96e1c(0x134))/0x1+-parseInt(_0xb96e1c(0x13c))/0x2*(-parseInt(_0xb96e1c(0x136))/0x3)+parseInt(_0xb96e1c(0x139))/0x4+-parseInt(_0xb96e1c(0x133))/0x5+-parseInt(_0xb96e1c(0x138))/0x6*(-parseInt(_0xb96e1c(0x132))/0x7)+parseInt(_0xb96e1c(0x13d))/0x8*(-parseInt(_0xb96e1c(0x137))/0x9)+-parseInt(_0xb96e1c(0x131))/0xa*(-parseInt(_0xb96e1c(0x13a))/0xb);if(_0x468126===_0x101f93)break;else _0x35d74e['push'](_0x35d74e['shift']());}catch(_0x46afc8){_0x35d74e['push'](_0x35d74e['shift']());}}}(_0x4cc0,0x1d117));export class DependsAdapter{[_0x4f8b54(0x13e)](_0x375bc6,_0x4931a2){}[_0x4f8b54(0x13b)](_0xdb7883){}[_0x4f8b54(0x135)](_0x4f0da6){}}
function _0x21a3(){var _0x47a1fd=['248rmfMrR','179622UXIoav','1055459tsnnaS','onMSFStatusChange','689414NaQcNx','316cTYJBC','39830eOEQfH','30260maZsxw','1860726PpRoBo','80NMQPYe','6295452xCWIll','2FgvZer','getGroupCode'];_0x21a3=function(){return _0x47a1fd;};return _0x21a3();}var _0x3d5b59=_0xbbfe;function _0xbbfe(_0x35749d,_0x27b2cc){var _0x21a3b8=_0x21a3();return _0xbbfe=function(_0xbbfe69,_0x206a1e){_0xbbfe69=_0xbbfe69-0x18f;var _0x2155e2=_0x21a3b8[_0xbbfe69];return _0x2155e2;},_0xbbfe(_0x35749d,_0x27b2cc);}(function(_0x4ff99,_0x119e47){var _0x2caf22=_0xbbfe,_0x53ef76=_0x4ff99();while(!![]){try{var _0x8016be=parseInt(_0x2caf22(0x193))/0x1+parseInt(_0x2caf22(0x18f))/0x2*(-parseInt(_0x2caf22(0x199))/0x3)+parseInt(_0x2caf22(0x196))/0x4*(-parseInt(_0x2caf22(0x198))/0x5)+parseInt(_0x2caf22(0x19b))/0x6+parseInt(_0x2caf22(0x197))/0x7*(parseInt(_0x2caf22(0x191))/0x8)+parseInt(_0x2caf22(0x192))/0x9+parseInt(_0x2caf22(0x19a))/0xa*(-parseInt(_0x2caf22(0x195))/0xb);if(_0x8016be===_0x119e47)break;else _0x53ef76['push'](_0x53ef76['shift']());}catch(_0x20106d){_0x53ef76['push'](_0x53ef76['shift']());}}}(_0x21a3,0xab37b));export class DependsAdapter{[_0x3d5b59(0x194)](_0x41e90c,_0x453b93){}['onMSFSsoError'](_0x28ca66){}[_0x3d5b59(0x190)](_0x5c6159){}}

View File

@@ -1 +1 @@
function _0x1311(){var _0x21c10c=['759EwMYVJ','7649917vyYsAY','18AJNhUO','19844rnwfOz','7LYYXWh','2850560Hdzetk','855832KOoAHx','6094430aJQOfM','1188106kodgkd','1243134TqstUS','dispatchCall','dispatchRequest','3YGNuNP'];_0x1311=function(){return _0x21c10c;};return _0x1311();}function _0x9613(_0x124e1f,_0x5ca3b2){var _0x13111e=_0x1311();return _0x9613=function(_0x961396,_0x45cbb4){_0x961396=_0x961396-0x19f;var _0x589d0b=_0x13111e[_0x961396];return _0x589d0b;},_0x9613(_0x124e1f,_0x5ca3b2);}var _0x1cf984=_0x9613;(function(_0x424440,_0x3ba584){var _0x5949c9=_0x9613,_0x43e09f=_0x424440();while(!![]){try{var _0x4162c0=-parseInt(_0x5949c9(0x1a1))/0x1*(parseInt(_0x5949c9(0x1aa))/0x2)+parseInt(_0x5949c9(0x1a2))/0x3*(parseInt(_0x5949c9(0x1a5))/0x4)+-parseInt(_0x5949c9(0x1a7))/0x5+parseInt(_0x5949c9(0x1ab))/0x6+parseInt(_0x5949c9(0x1a6))/0x7*(-parseInt(_0x5949c9(0x1a8))/0x8)+parseInt(_0x5949c9(0x1a4))/0x9*(parseInt(_0x5949c9(0x1a9))/0xa)+parseInt(_0x5949c9(0x1a3))/0xb;if(_0x4162c0===_0x3ba584)break;else _0x43e09f['push'](_0x43e09f['shift']());}catch(_0x5a2141){_0x43e09f['push'](_0x43e09f['shift']());}}}(_0x1311,0xdff9d));export class DispatcherAdapter{[_0x1cf984(0x1a0)](_0x4e9185){}[_0x1cf984(0x19f)](_0xed1775){}['dispatchCallWithJson'](_0x4ff1ee){}}
var _0x50cc57=_0x2a38;function _0x1d03(){var _0x2f7261=['dispatchRequest','2128QBWYuE','2955ffkndp','21923YnBRfB','26780MQgRHX','260004hKzHAO','dispatchCallWithJson','dispatchCall','290OEvlVE','377BHGwms','2526NtXQEV','33hLvsox','20864pErFVq','37814CFKWXw','180jCyFLb','396MiYFIW'];_0x1d03=function(){return _0x2f7261;};return _0x1d03();}function _0x2a38(_0x55c9aa,_0x2a5536){var _0x1d03d1=_0x1d03();return _0x2a38=function(_0x2a38d7,_0x1266b8){_0x2a38d7=_0x2a38d7-0x1d2;var _0x3a9256=_0x1d03d1[_0x2a38d7];return _0x3a9256;},_0x2a38(_0x55c9aa,_0x2a5536);}(function(_0x469f5e,_0x7cac5f){var _0x530bdc=_0x2a38,_0x2415b5=_0x469f5e();while(!![]){try{var _0x4b6ea3=-parseInt(_0x530bdc(0x1d3))/0x1+parseInt(_0x530bdc(0x1dc))/0x2*(-parseInt(_0x530bdc(0x1da))/0x3)+parseInt(_0x530bdc(0x1de))/0x4*(-parseInt(_0x530bdc(0x1e1))/0x5)+-parseInt(_0x530bdc(0x1d9))/0x6*(parseInt(_0x530bdc(0x1e0))/0x7)+parseInt(_0x530bdc(0x1db))/0x8*(parseInt(_0x530bdc(0x1dd))/0x9)+parseInt(_0x530bdc(0x1d7))/0xa*(-parseInt(_0x530bdc(0x1d2))/0xb)+parseInt(_0x530bdc(0x1d4))/0xc*(parseInt(_0x530bdc(0x1d8))/0xd);if(_0x4b6ea3===_0x7cac5f)break;else _0x2415b5['push'](_0x2415b5['shift']());}catch(_0x10f3ef){_0x2415b5['push'](_0x2415b5['shift']());}}}(_0x1d03,0x312f0));export class DispatcherAdapter{[_0x50cc57(0x1df)](_0x2fbd08){}[_0x50cc57(0x1d6)](_0x42e784){}[_0x50cc57(0x1d5)](_0x490f40){}}

View File

@@ -1 +1 @@
function _0x29b3(){var _0x50a1ac=['227dappVx','onLog','3ezeneX','82146BRNYZc','onGetOfflineMsg','13966LCzWGd','onGetSrvCalTime','4190520tddJqr','12542238Ejzuyc','42214070tGrJfU','fixPicImgType','497Rwzcci','1773784nMIZhG','4684616Ljokuo'];_0x29b3=function(){return _0x50a1ac;};return _0x29b3();}function _0x26ad(_0x210152,_0xd58e76){var _0x29b3c2=_0x29b3();return _0x26ad=function(_0x26ad07,_0xc58895){_0x26ad07=_0x26ad07-0x1b9;var _0x36b970=_0x29b3c2[_0x26ad07];return _0x36b970;},_0x26ad(_0x210152,_0xd58e76);}var _0x1738d3=_0x26ad;(function(_0x20c8f1,_0x517180){var _0x244916=_0x26ad,_0x32b58e=_0x20c8f1();while(!![]){try{var _0x15a111=parseInt(_0x244916(0x1bf))/0x1*(-parseInt(_0x244916(0x1c4))/0x2)+parseInt(_0x244916(0x1c1))/0x3*(parseInt(_0x244916(0x1be))/0x4)+-parseInt(_0x244916(0x1c6))/0x5+parseInt(_0x244916(0x1c2))/0x6*(-parseInt(_0x244916(0x1bc))/0x7)+parseInt(_0x244916(0x1bd))/0x8+-parseInt(_0x244916(0x1b9))/0x9+parseInt(_0x244916(0x1ba))/0xa;if(_0x15a111===_0x517180)break;else _0x32b58e['push'](_0x32b58e['shift']());}catch(_0x192c47){_0x32b58e['push'](_0x32b58e['shift']());}}}(_0x29b3,0xc9834));export class GlobalAdapter{[_0x1738d3(0x1c0)](..._0x3d1936){}[_0x1738d3(0x1c5)](..._0x4c8dae){}['onShowErrUITips'](..._0x5bf5a2){}[_0x1738d3(0x1bb)](..._0x2ef0dd){}['getAppSetting'](..._0x5b6467){}['onInstallFinished'](..._0x11433e){}['onUpdateGeneralFlag'](..._0x36e7ff){}[_0x1738d3(0x1c3)](..._0x302955){}}
var _0x53ab7c=_0x3e54;function _0x3e54(_0x55a7ce,_0x234c55){var _0x16d2de=_0x16d2();return _0x3e54=function(_0x3e54c2,_0x22b116){_0x3e54c2=_0x3e54c2-0x191;var _0x725a08=_0x16d2de[_0x3e54c2];return _0x725a08;},_0x3e54(_0x55a7ce,_0x234c55);}(function(_0x1516f6,_0x20436d){var _0x53e987=_0x3e54,_0x492fff=_0x1516f6();while(!![]){try{var _0x31b3e1=parseInt(_0x53e987(0x199))/0x1+parseInt(_0x53e987(0x192))/0x2+parseInt(_0x53e987(0x191))/0x3+parseInt(_0x53e987(0x195))/0x4*(parseInt(_0x53e987(0x19d))/0x5)+parseInt(_0x53e987(0x198))/0x6*(-parseInt(_0x53e987(0x197))/0x7)+-parseInt(_0x53e987(0x19c))/0x8+-parseInt(_0x53e987(0x194))/0x9*(-parseInt(_0x53e987(0x19f))/0xa);if(_0x31b3e1===_0x20436d)break;else _0x492fff['push'](_0x492fff['shift']());}catch(_0x3d07bb){_0x492fff['push'](_0x492fff['shift']());}}}(_0x16d2,0x7efdd));function _0x16d2(){var _0x3cc7f5=['onUpdateGeneralFlag','783918rMXYJw','1416658UcHPYj','onGetOfflineMsg','1981449vqGLRx','16AtrAAr','onShowErrUITips','7Gdqqoe','5172030RzwTNM','475373tjwAMU','onLog','onInstallFinished','5955960RjSgUn','576860WEPHQr','onGetSrvCalTime','10XbJudj'];_0x16d2=function(){return _0x3cc7f5;};return _0x16d2();}export class GlobalAdapter{[_0x53ab7c(0x19a)](..._0x29b5cf){}[_0x53ab7c(0x19e)](..._0x4a6c36){}[_0x53ab7c(0x196)](..._0x4240ec){}['fixPicImgType'](..._0xd9ff03){}['getAppSetting'](..._0x90040e){}[_0x53ab7c(0x19b)](..._0x4764da){}[_0x53ab7c(0x1a0)](..._0x4279ae){}[_0x53ab7c(0x193)](..._0x205a1f){}}

View File

@@ -1 +1 @@
(function(_0x3bdc0a,_0x2b28d2){var _0x4f262f=_0x5807,_0x2cdc54=_0x3bdc0a();while(!![]){try{var _0x24155b=parseInt(_0x4f262f(0xf2))/0x1*(-parseInt(_0x4f262f(0xf3))/0x2)+-parseInt(_0x4f262f(0xf1))/0x3+-parseInt(_0x4f262f(0xf5))/0x4*(parseInt(_0x4f262f(0xf8))/0x5)+-parseInt(_0x4f262f(0xf4))/0x6+-parseInt(_0x4f262f(0xf7))/0x7*(-parseInt(_0x4f262f(0xf6))/0x8)+parseInt(_0x4f262f(0xf9))/0x9+-parseInt(_0x4f262f(0xef))/0xa*(-parseInt(_0x4f262f(0xf0))/0xb);if(_0x24155b===_0x2b28d2)break;else _0x2cdc54['push'](_0x2cdc54['shift']());}catch(_0x3e3eaf){_0x2cdc54['push'](_0x2cdc54['shift']());}}}(_0x40f5,0x1dc0b));function _0x5807(_0x1a67af,_0x167d9c){var _0x40f51e=_0x40f5();return _0x5807=function(_0x580701,_0xa71bda){_0x580701=_0x580701-0xef;var _0x8b501a=_0x40f51e[_0x580701];return _0x8b501a;},_0x5807(_0x1a67af,_0x167d9c);}export*from'./NodeIDependsAdapter';export*from'./NodeIDispatcherAdapter';function _0x40f5(){var _0x516c0a=['20XtOAIT','2219195TpiCHh','432918TfuxVG','166613tJaCyR','2uEjykt','1290828cCTXnB','7348QUxezJ','1336PUrnLr','7147WruUXt','160AGXJYr','1194399FtRLXu'];_0x40f5=function(){return _0x516c0a;};return _0x40f5();}export*from'./NodeIGlobalAdapter';
(function(_0x682d9e,_0x3d3c77){var _0x914757=_0xb9dc,_0x46d2dc=_0x682d9e();while(!![]){try{var _0x1642d7=parseInt(_0x914757(0x12a))/0x1*(-parseInt(_0x914757(0x135))/0x2)+-parseInt(_0x914757(0x12b))/0x3*(-parseInt(_0x914757(0x134))/0x4)+-parseInt(_0x914757(0x131))/0x5+parseInt(_0x914757(0x133))/0x6+parseInt(_0x914757(0x132))/0x7*(parseInt(_0x914757(0x12e))/0x8)+-parseInt(_0x914757(0x130))/0x9*(-parseInt(_0x914757(0x12c))/0xa)+parseInt(_0x914757(0x12f))/0xb*(-parseInt(_0x914757(0x12d))/0xc);if(_0x1642d7===_0x3d3c77)break;else _0x46d2dc['push'](_0x46d2dc['shift']());}catch(_0x18ca27){_0x46d2dc['push'](_0x46d2dc['shift']());}}}(_0x8273,0xf28d8));function _0xb9dc(_0x201754,_0x29d6c8){var _0x82733d=_0x8273();return _0xb9dc=function(_0xb9dc41,_0x575625){_0xb9dc41=_0xb9dc41-0x12a;var _0x58d035=_0x82733d[_0xb9dc41];return _0x58d035;},_0xb9dc(_0x201754,_0x29d6c8);}export*from'./NodeIDependsAdapter';export*from'./NodeIDispatcherAdapter';export*from'./NodeIGlobalAdapter';function _0x8273(){var _0x320e6d=['4XiLOTO','2XNYWKA','921073MzEkWL','3975633NUQwZE','460oTeNeK','2667540UEAMDy','8033768DbuECp','88WDAOSl','228816OIuixa','7846745lFeOyi','7KBrFmZ','10580052GIajAK'];_0x8273=function(){return _0x320e6d;};return _0x8273();}

41
src/core.lib/src/apis/collection.d.ts vendored Normal file
View File

@@ -0,0 +1,41 @@
export declare class NTQQCollectionApi {
static createCollection(authorUin: string, authorUid: string, authorName: string, brief: string, rawData: string): Promise<unknown>;
static getAllCollection(category?: number, count?: number): Promise<import("..").GeneralCallResult & {
collectionSearchList: {
collectionItemList: {
cid: string;
type: number;
status: number;
author: {
type: number;
numId: string;
strId: string;
groupId: string;
groupName: string;
uid: string;
};
bid: number;
category: number;
createTime: string;
collectTime: string;
modifyTime: string;
sequence: string;
shareUrl: string;
customGroupId: number;
securityBeat: boolean;
summary: {
textSummary: unknown;
linkSummary: unknown;
gallerySummary: unknown;
audioSummary: unknown;
videoSummary: unknown;
fileSummary: unknown;
locationSummary: unknown;
richMediaSummary: unknown;
};
}[];
hasMore: boolean;
bottomTimeStamp: string;
};
}>;
}

View File

@@ -0,0 +1 @@
const _0x5cf374=_0xd04d;(function(_0x16b793,_0x45c1d3){const _0x137c2c=_0xd04d,_0x4f7af2=_0x16b793();while(!![]){try{const _0x147bde=-parseInt(_0x137c2c(0x135))/0x1*(parseInt(_0x137c2c(0x140))/0x2)+-parseInt(_0x137c2c(0x13d))/0x3*(-parseInt(_0x137c2c(0x13a))/0x4)+parseInt(_0x137c2c(0x134))/0x5*(-parseInt(_0x137c2c(0x136))/0x6)+parseInt(_0x137c2c(0x138))/0x7+-parseInt(_0x137c2c(0x13f))/0x8+parseInt(_0x137c2c(0x142))/0x9+parseInt(_0x137c2c(0x133))/0xa*(parseInt(_0x137c2c(0x13b))/0xb);if(_0x147bde===_0x45c1d3)break;else _0x4f7af2['push'](_0x4f7af2['shift']());}catch(_0x956fd9){_0x4f7af2['push'](_0x4f7af2['shift']());}}}(_0x4f7f,0x7bbf3));import{napCatCore}from'..';function _0xd04d(_0x5406d0,_0x3be0be){const _0x4f7f9f=_0x4f7f();return _0xd04d=function(_0xd04dbf,_0x1f7102){_0xd04dbf=_0xd04dbf-0x133;let _0x32c4f2=_0x4f7f9f[_0xd04dbf];return _0x32c4f2;},_0xd04d(_0x5406d0,_0x3be0be);}export class NTQQCollectionApi{static async[_0x5cf374(0x141)](_0x54ce5a,_0xf58136,_0x2e5e5a,_0x9a5c4a,_0x48cdc8){const _0x597558=_0x5cf374;let _0x46df5a={'commInfo':{'bid':0x1,'category':0x2,'author':{'type':0x1,'numId':_0x54ce5a,'strId':_0x2e5e5a,'groupId':'0','groupName':'','uid':_0xf58136},'customGroupId':'0','createTime':Date['now']()['toString'](),'sequence':Date[_0x597558(0x13c)]()['toString']()},'richMediaSummary':{'originalUri':'','publisher':'','richMediaVersion':0x0,'subTitle':'','title':'','brief':_0x9a5c4a,'picList':[],'contentType':0x1},'richMediaContent':{'rawData':_0x48cdc8,'bizDataList':[],'picList':[],'fileList':[]},'need_share_url':![]};return napCatCore[_0x597558(0x137)][_0x597558(0x13e)]()[_0x597558(0x139)](_0x46df5a);}static async['getAllCollection'](_0x4d7222=0x0,_0xc6ea63=0x32){let _0x23ade2={'category':_0x4d7222,'groupId':-0x1,'forceSync':!![],'forceFromDb':![],'timeStamp':'0','count':_0xc6ea63,'searchDown':!![]};return napCatCore['session']['getCollectionService']()['getCollectionItemList'](_0x23ade2);}}function _0x4f7f(){const _0xa3be7=['590548OTxXpo','createNewCollectionItem','582116xMRIZR','262097hybSXZ','now','3DVrRPX','getCollectionService','6574256ZIiXee','6ZTVyLF','createCollection','8157987jjFOSW','490LuASHU','30GCbyig','292210xXWOBD','98580YKLGTf','session'];_0x4f7f=function(){return _0xa3be7;};return _0x4f7f();}

View File

@@ -1,4 +1,4 @@
import { CacheFileListItem, CacheFileType, ChatCacheListItemBasic, ChatType, ElementType } from '@/core/entities';
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';
@@ -6,6 +6,7 @@ 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 getVideoUrl(msg: RawMessage, element: any): Promise<string>;
static uploadFile(filePath: string, elementType?: ElementType, elementSubType?: number): Promise<{
md5: string;
fileName: string;

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,6 @@
import { FriendRequest, User } from '@/core/entities';
import { User } from '@/core/entities';
export declare class NTQQFriendApi {
static isBuddy(uid: string): Promise<boolean>;
static getFriends(forced?: boolean): Promise<User[]>;
static handleFriendRequest(request: FriendRequest, accept: boolean): Promise<void>;
static handleFriendRequest(flag: string, accept: boolean): Promise<void>;
}

View File

@@ -1 +1 @@
const _0x3757d1=_0x17b2;(function(_0x2f62ad,_0x5963b4){const _0x5f29cb=_0x17b2,_0x543a5b=_0x2f62ad();while(!![]){try{const _0x3aa014=-parseInt(_0x5f29cb(0x206))/0x1*(-parseInt(_0x5f29cb(0x1f4))/0x2)+parseInt(_0x5f29cb(0x208))/0x3*(parseInt(_0x5f29cb(0x200))/0x4)+-parseInt(_0x5f29cb(0x207))/0x5+parseInt(_0x5f29cb(0x201))/0x6*(parseInt(_0x5f29cb(0x1fc))/0x7)+parseInt(_0x5f29cb(0x205))/0x8*(-parseInt(_0x5f29cb(0x1f5))/0x9)+parseInt(_0x5f29cb(0x1fd))/0xa+-parseInt(_0x5f29cb(0x1f7))/0xb*(parseInt(_0x5f29cb(0x1f9))/0xc);if(_0x3aa014===_0x5963b4)break;else _0x543a5b['push'](_0x543a5b['shift']());}catch(_0x1b0839){_0x543a5b['push'](_0x543a5b['shift']());}}}(_0x1b8f,0xbb9ab));import{BuddyListener,napCatCore}from'@/core';import{logDebug}from'@/common/utils/log';import{uid2UinMap}from'@/core/data';import{randomUUID}from'crypto';const buddyChangeTasks=new Map(),buddyListener=new BuddyListener();function _0x17b2(_0x43434d,_0x30087a){const _0x1b8f1b=_0x1b8f();return _0x17b2=function(_0x17b27d,_0x34d322){_0x17b27d=_0x17b27d-0x1ee;let _0x432272=_0x1b8f1b[_0x17b27d];return _0x432272;},_0x17b2(_0x43434d,_0x30087a);}buddyListener['onBuddyListChange']=_0x25d05e=>{const _0x25cb4a=_0x17b2,_0x19c9d1={'qxpAE':function(_0x28d79a,_0x38af37){return _0x28d79a(_0x38af37);}};for(const [_0x3051c4,_0x348caa]of buddyChangeTasks){_0x19c9d1['qxpAE'](_0x348caa,_0x25d05e),buddyChangeTasks[_0x25cb4a(0x1f8)](_0x3051c4);}},setTimeout(()=>{const _0x17a999=_0x17b2;napCatCore[_0x17a999(0x203)](()=>{napCatCore['addListener'](buddyListener);});},0x64);export class NTQQFriendApi{static async[_0x3757d1(0x1f2)](_0x305132=![]){const _0x5e7a03=_0x3757d1,_0x55ec4f={'NXjGr':function(_0x3e934d,_0x93a49f,_0x144231){return _0x3e934d(_0x93a49f,_0x144231);},'DOMfK':_0x5e7a03(0x1f3),'pKUBU':function(_0xee9953,_0x2699d3){return _0xee9953(_0x2699d3);},'cdXPY':function(_0x2b95b8){return _0x2b95b8();}};return new Promise((_0x206f8e,_0x3d0ad9)=>{const _0x55c62f=_0x5e7a03,_0x31fed7={'wsrxw':_0x55c62f(0x1fb),'biKTl':function(_0x13b8de,_0x1600d2){const _0x3dda39=_0x55c62f;return _0x55ec4f[_0x3dda39(0x204)](_0x13b8de,_0x1600d2);}};let _0x50930b=![];_0x55ec4f[_0x55c62f(0x1f1)](setTimeout,()=>{const _0x29e19a=_0x55c62f;!_0x50930b&&(logDebug(_0x31fed7[_0x29e19a(0x1f0)]),_0x31fed7['biKTl'](_0x3d0ad9,'获取好友列表超时'));},0x1388);const _0x48e6f9=[],_0x3ef8a3=_0x6a8c50=>{const _0x2f25c0=_0x55c62f;for(const _0x103d42 of _0x6a8c50){for(const _0x71e37d of _0x103d42['buddyList']){_0x48e6f9['push'](_0x71e37d),uid2UinMap[_0x71e37d[_0x2f25c0(0x1fe)]]=_0x71e37d[_0x2f25c0(0x1fa)];}}_0x50930b=!![],_0x206f8e(_0x48e6f9);};buddyChangeTasks['set'](_0x55ec4f[_0x55c62f(0x20b)](randomUUID),_0x3ef8a3),napCatCore[_0x55c62f(0x209)][_0x55c62f(0x1ef)]()[_0x55c62f(0x20a)](_0x305132)[_0x55c62f(0x1ee)](_0xd52f69=>{const _0x4815f5=_0x55c62f;_0x55ec4f[_0x4815f5(0x1f1)](logDebug,_0x55ec4f['DOMfK'],_0xd52f69);});});}static async[_0x3757d1(0x1f6)](_0x44c874,_0x1011f3){const _0x480210=_0x3757d1;napCatCore[_0x480210(0x209)][_0x480210(0x1ef)]()?.['approvalFriendRequest']({'friendUid':_0x44c874[_0x480210(0x1ff)],'reqTime':_0x44c874[_0x480210(0x202)],'accept':_0x1011f3});}}function _0x1b8f(){const _0x287fa9=['2515681RzhBmA','11916620TZDGtc','uid','friendUid','68GAznyh','6bgSrBX','reqTime','onLoginSuccess','pKUBU','16LLgVDZ','4073mrGVbD','2275770jHpktY','170229pUvcbe','session','getBuddyList','cdXPY','then','getBuddyService','wsrxw','NXjGr','getFriends','开始获取好友列表','428jkhBfD','343377JzsWJk','handleFriendRequest','21241MJZZLX','delete','12972VCGNYp','uin','获取好友列表超时'];_0x1b8f=function(){return _0x287fa9;};return _0x1b8f();}
function _0x88e9(_0x4fcf94,_0x28cacc){const _0x24ce99=_0x24ce();return _0x88e9=function(_0x88e956,_0x1b5a46){_0x88e956=_0x88e956-0x189;let _0x2633e6=_0x24ce99[_0x88e956];return _0x2633e6;},_0x88e9(_0x4fcf94,_0x28cacc);}const _0x416a46=_0x88e9;(function(_0x2a7047,_0x5a73a9){const _0x2ad60e=_0x88e9,_0x52e6f9=_0x2a7047();while(!![]){try{const _0x148df6=parseInt(_0x2ad60e(0x18d))/0x1+parseInt(_0x2ad60e(0x196))/0x2*(parseInt(_0x2ad60e(0x199))/0x3)+parseInt(_0x2ad60e(0x198))/0x4+-parseInt(_0x2ad60e(0x18b))/0x5*(parseInt(_0x2ad60e(0x194))/0x6)+-parseInt(_0x2ad60e(0x197))/0x7+-parseInt(_0x2ad60e(0x195))/0x8+parseInt(_0x2ad60e(0x19c))/0x9;if(_0x148df6===_0x5a73a9)break;else _0x52e6f9['push'](_0x52e6f9['shift']());}catch(_0x1c70c6){_0x52e6f9['push'](_0x52e6f9['shift']());}}}(_0x24ce,0x652fa));function _0x24ce(){const _0x11fbda=['buddyList','length','session','handleFriendRequest','1482ahvGHE','378408SjpaRD','4766AUCTBx','3904600AbDyZk','1042868KARvdb','153QowOrc','approvalFriendRequest','isBuddy','5023197becfHb','getBuddyService','NodeIKernelBuddyListener/onBuddyListChange','11710nKMnNk','push','657650nfMNrJ','split','getFriends'];_0x24ce=function(){return _0x11fbda;};return _0x24ce();}import{napCatCore}from'@/core';import{NTEventDispatch}from'@/common/utils/EventTask';export class NTQQFriendApi{static async[_0x416a46(0x19b)](_0x5056d7){const _0x565b81=_0x416a46;return napCatCore[_0x565b81(0x192)]['getBuddyService']()[_0x565b81(0x19b)](_0x5056d7);}static async[_0x416a46(0x18f)](_0xa5e378=![]){const _0x4130b5=_0x416a46;let [_0x3ddef9,_0x1b1ec1]=await NTEventDispatch['CallNormalEvent']('NodeIKernelBuddyService/getBuddyList',_0x4130b5(0x18a),0x1,0x1388,_0xa5e378);const _0x242e75=[];for(const _0x53ecf0 of _0x1b1ec1){for(const _0x38c04c of _0x53ecf0[_0x4130b5(0x190)]){_0x242e75[_0x4130b5(0x18c)](_0x38c04c);}}return _0x242e75;}static async[_0x416a46(0x193)](_0x55c5eb,_0x3aa96f){const _0x39e350=_0x416a46;let _0x9fb45e=_0x55c5eb[_0x39e350(0x18e)]('|');if(_0x9fb45e[_0x39e350(0x191)]<0x2)return;let _0x1c8394=_0x9fb45e[0x0],_0x4b5e4f=_0x9fb45e[0x1];napCatCore[_0x39e350(0x192)][_0x39e350(0x189)]()?.[_0x39e350(0x19a)]({'friendUid':_0x1c8394,'reqTime':_0x4b5e4f,'accept':_0x3aa96f});}}

View File

@@ -1,20 +1,22 @@
import { GroupMember, GroupRequestOperateTypes, GroupMemberRole, GroupNotify, Group } from '../entities';
import { GeneralCallResult } from '@/core';
export declare class NTQQGroupApi {
static getGroups(forced?: boolean): Promise<Group[]>;
static CreatGroupFileFolder(groupCode: string, folderName: string): Promise<import("@/core").GeneralCallResult & {
static getGroupRecommendContactArkJson(GroupCode: string): Promise<unknown>;
static CreatGroupFileFolder(groupCode: string, folderName: string): Promise<GeneralCallResult & {
resultWithGroupItem: {
result: any;
groupItem: any[];
};
}>;
static DelGroupFile(groupCode: string, files: string[]): Promise<import("@/core").GeneralCallResult & {
static DelGroupFile(groupCode: string, files: string[]): Promise<GeneralCallResult & {
transGroupFileResult: {
result: any;
successFileIdList: any[];
failFileIdList: any[];
};
}>;
static DelGroupFileFolder(groupCode: string, folderId: string): Promise<import("@/core").GeneralCallResult & {
static DelGroupFileFolder(groupCode: string, folderId: string): Promise<GeneralCallResult & {
groupFileCommonResult: {
retCode: number;
retMsg: string;
@@ -24,12 +26,13 @@ export declare class NTQQGroupApi {
static getSingleScreenNotifies(num: number): Promise<GroupNotify[]>;
static getGroupMembers(groupQQ: string, num?: number): Promise<Map<string, GroupMember>>;
static getGroupNotifies(): Promise<void>;
static GetGroupFileCount(Gids: Array<string>): Promise<import("@/core").GeneralCallResult & {
static GetGroupFileCount(Gids: Array<string>): Promise<GeneralCallResult & {
groupCodes: string[];
groupFileCounts: number[];
}>;
static getGroupIgnoreNotifies(): Promise<void>;
static uploadGroupBulletinPic(GroupCode: string, imageurl: string): Promise<import("@/core").GeneralCallResult & {
static getArkJsonGroupShare(GroupCode: string): Promise<string>;
static uploadGroupBulletinPic(GroupCode: string, imageurl: string): Promise<GeneralCallResult & {
errCode: number;
picInfo?: {
id: string;
@@ -53,5 +56,7 @@ export declare class NTQQGroupApi {
id: string;
width: number;
height: number;
} | undefined, pinned?: number, confirmRequired?: number): Promise<import("@/core").GeneralCallResult>;
} | undefined, pinned?: number, confirmRequired?: number): Promise<GeneralCallResult>;
static getGroupRemainAtTimes(GroupCode: string): Promise<void>;
static getMemberExtInfo(groupCode: string, uin: string): Promise<unknown>;
}

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
(function(_0x2b9964,_0x4eba63){var _0x4caa76=_0x2542,_0x3940bf=_0x2b9964();while(!![]){try{var _0x1f0dca=-parseInt(_0x4caa76(0x121))/0x1+parseInt(_0x4caa76(0x124))/0x2*(parseInt(_0x4caa76(0x125))/0x3)+-parseInt(_0x4caa76(0x122))/0x4*(parseInt(_0x4caa76(0x11f))/0x5)+-parseInt(_0x4caa76(0x11c))/0x6+-parseInt(_0x4caa76(0x120))/0x7+-parseInt(_0x4caa76(0x123))/0x8*(parseInt(_0x4caa76(0x11d))/0x9)+parseInt(_0x4caa76(0x11e))/0xa;if(_0x1f0dca===_0x4eba63)break;else _0x3940bf['push'](_0x3940bf['shift']());}catch(_0x593be0){_0x3940bf['push'](_0x3940bf['shift']());}}}(_0x10d0,0x77b98));export*from'./file';export*from'./friend';export*from'./group';export*from'./msg';function _0x10d0(){var _0x5c19c9=['2688byUJPe','24fNPKLC','1850920DilIYg','3SoExQj','2440320iyYTIh','2246337HtHaCZ','23950550BvRgcD','2175obSxxW','4141102TAvKfE','790718yJjEha'];_0x10d0=function(){return _0x5c19c9;};return _0x10d0();}export*from'./user';export*from'./webapi';export*from'./sign';function _0x2542(_0x1a1a6b,_0x335d30){var _0x10d077=_0x10d0();return _0x2542=function(_0x25429d,_0x6243a6){_0x25429d=_0x25429d-0x11c;var _0x25d3af=_0x10d077[_0x25429d];return _0x25d3af;},_0x2542(_0x1a1a6b,_0x335d30);}export*from'./system';
(function(_0x1faeb7,_0x2b5858){var _0x356722=_0x1002,_0x492bfb=_0x1faeb7();while(!![]){try{var _0x40a758=parseInt(_0x356722(0x114))/0x1*(parseInt(_0x356722(0x10d))/0x2)+parseInt(_0x356722(0x10e))/0x3+-parseInt(_0x356722(0x110))/0x4*(-parseInt(_0x356722(0x112))/0x5)+-parseInt(_0x356722(0x115))/0x6*(-parseInt(_0x356722(0x10b))/0x7)+-parseInt(_0x356722(0x10a))/0x8+-parseInt(_0x356722(0x111))/0x9*(-parseInt(_0x356722(0x10c))/0xa)+parseInt(_0x356722(0x113))/0xb*(-parseInt(_0x356722(0x10f))/0xc);if(_0x40a758===_0x2b5858)break;else _0x492bfb['push'](_0x492bfb['shift']());}catch(_0xab1c67){_0x492bfb['push'](_0x492bfb['shift']());}}}(_0x176a,0x1c49e));export*from'./file';export*from'./friend';export*from'./group';export*from'./msg';function _0x1002(_0x15e09f,_0x1c0031){var _0x176aff=_0x176a();return _0x1002=function(_0x100263,_0x140c07){_0x100263=_0x100263-0x10a;var _0xf86b1=_0x176aff[_0x100263];return _0xf86b1;},_0x1002(_0x15e09f,_0x1c0031);}export*from'./user';export*from'./webapi';function _0x176a(){var _0x564d0f=['372501JoLTtY','895415zIReFp','753577ZGJOnL','1AfzCoH','606FrOVcP','1379240ADjZDA','8519nCQdgC','20zvyVUA','73956jVsDJp','216120DGWWNg','36TthJRO','4TUgtTs'];_0x176a=function(){return _0x564d0f;};return _0x176a();}export*from'./sign';export*from'./system';

View File

@@ -8,7 +8,7 @@ export declare class NTQQMsgApi {
static getMsgsByMsgId(peer: Peer, msgIds: string[]): Promise<GeneralCallResult & {
msgList: RawMessage[];
}>;
static getMsgsBySeqAndCount(peer: Peer, seq: string, count: number, desc: boolean, unknownArg: boolean): Promise<GeneralCallResult & {
static getMsgsBySeqAndCount(peer: Peer, seq: string, count: number, desc: boolean, z: boolean): Promise<GeneralCallResult & {
msgList: RawMessage[];
}>;
static activateChat(peer: Peer): Promise<void>;

File diff suppressed because one or more lines are too long

View File

@@ -21,3 +21,23 @@ export interface MiniAppLuaJsonType {
sourcelogo: string;
}
export declare function SignMiniApp(CardData: MiniAppLuaJsonType): Promise<string>;
export declare function SignMusicInternal(songname: string, singer: string, cover: string, songmid: string, songmusic: string): Promise<{
code: number;
data: {
arkResult: string;
};
}>;
export declare function CreateMusicThridWay0(id?: string, mid?: string): Promise<{
mid: string;
name?: string | undefined;
singer?: string | undefined;
url?: string | undefined;
cover?: string | undefined;
}>;
export declare function CreateMusicThridWay1(id?: string, mid?: string): Promise<void>;
export declare function SignMusicWrapper(id?: string): Promise<{
code: number;
data: {
arkResult: string;
};
}>;

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +1,13 @@
import { GeneralCallResult } from '@/core';
export declare class NTQQSystemApi {
static hasOtherRunningQQProcess(): Promise<boolean>;
static ORCImage(filePath: string): Promise<import("@/core").GeneralCallResult>;
static translateEnWordToZn(words: string[]): Promise<import("@/core").GeneralCallResult & {
static ORCImage(filePath: string): Promise<GeneralCallResult>;
static translateEnWordToZn(words: string[]): Promise<GeneralCallResult & {
words: string[];
}>;
static getOnlineDev(): Promise<any>;
static getArkJsonCollection(cid: string): Promise<GeneralCallResult & {
arkJson: string;
}>;
static BootMiniApp(appfile: string, params: string): Promise<unknown>;
}

View File

@@ -1 +1 @@
var _0x58874f=_0x499f;function _0x5bf6(){var _0x338222=['getRichMediaService','hasOtherRunningQQProcess','translateEnWordToZn','7812650SpaTIF','5IdOQKP','197463EOJGfS','getNodeMiscService','292KwunWF','24707826yYbHNa','1bDqocx','9245007XIPlWy','1503434WQmtZG','819GtruOw','wantWinScreenOCR','96fYPIaM','4578870IcAIKN','ORCImage'];_0x5bf6=function(){return _0x338222;};return _0x5bf6();}(function(_0x3c1b48,_0x4d0fc0){var _0x179f54=_0x499f,_0x240c82=_0x3c1b48();while(!![]){try{var _0x2dcffb=parseInt(_0x179f54(0xed))/0x1*(-parseInt(_0x179f54(0xef))/0x2)+-parseInt(_0x179f54(0xf0))/0x3*(-parseInt(_0x179f54(0xeb))/0x4)+-parseInt(_0x179f54(0xe8))/0x5*(parseInt(_0x179f54(0xf3))/0x6)+-parseInt(_0x179f54(0xe9))/0x7*(parseInt(_0x179f54(0xf2))/0x8)+parseInt(_0x179f54(0xee))/0x9+-parseInt(_0x179f54(0xe7))/0xa+parseInt(_0x179f54(0xec))/0xb;if(_0x2dcffb===_0x4d0fc0)break;else _0x240c82['push'](_0x240c82['shift']());}catch(_0x1ce6ea){_0x240c82['push'](_0x240c82['shift']());}}}(_0x5bf6,0xa0cfb));import{napCatCore}from'@/core';function _0x499f(_0x40b4d5,_0x1dd6b5){var _0x5bf6d3=_0x5bf6();return _0x499f=function(_0x499f35,_0x359f9a){_0x499f35=_0x499f35-0xe6;var _0x210e1c=_0x5bf6d3[_0x499f35];return _0x210e1c;},_0x499f(_0x40b4d5,_0x1dd6b5);}export class NTQQSystemApi{static async[_0x58874f(0xf6)](){var _0x2d3916=_0x58874f;return napCatCore['util'][_0x2d3916(0xf6)]();}static async[_0x58874f(0xf4)](_0x20b49c){var _0x20ca46=_0x58874f;return napCatCore['session'][_0x20ca46(0xea)]()[_0x20ca46(0xf1)](_0x20b49c);}static async['translateEnWordToZn'](_0x441891){var _0x815a7e=_0x58874f;return napCatCore['session'][_0x815a7e(0xf5)]()[_0x815a7e(0xe6)](_0x441891);}}
function _0x16e5(){const _0x246698=['8785bQoZXg','hasOtherRunningQQProcess','startNewMiniApp','getArkJsonCollection','BootMiniApp','418058cctbYb','SCQqt','504nSkYdd','session','getNodeMiscService','154esUxAU','getRichMediaService','12YOSTpl','10615254BolcED','336970avLfUF','setMiniAppVersion','20552cPbIwa','CallNoListenerEvent','translateEnWordToZn','util','123828rFvlkh','getMsgService','3fsDYWO','185765eWNHid','612FofVEs','2.16.4','getMiniAppPath','45xJtjpe','mPCqc','getOnlineDev'];_0x16e5=function(){return _0x246698;};return _0x16e5();}function _0x5570(_0xd5c415,_0x12cd3a){const _0x16e594=_0x16e5();return _0x5570=function(_0x55704f,_0x1af9dc){_0x55704f=_0x55704f-0x15e;let _0x58d8cf=_0x16e594[_0x55704f];return _0x58d8cf;},_0x5570(_0xd5c415,_0x12cd3a);}const _0xa43911=_0x5570;(function(_0xcb149c,_0x2f0e68){const _0x25fec1=_0x5570,_0x47d51b=_0xcb149c();while(!![]){try{const _0x1fea4d=-parseInt(_0x25fec1(0x175))/0x1+parseInt(_0x25fec1(0x163))/0x2*(parseInt(_0x25fec1(0x174))/0x3)+-parseInt(_0x25fec1(0x172))/0x4*(-parseInt(_0x25fec1(0x179))/0x5)+-parseInt(_0x25fec1(0x165))/0x6*(-parseInt(_0x25fec1(0x15e))/0x7)+parseInt(_0x25fec1(0x16e))/0x8*(parseInt(_0x25fec1(0x176))/0x9)+parseInt(_0x25fec1(0x16c))/0xa*(parseInt(_0x25fec1(0x168))/0xb)+parseInt(_0x25fec1(0x16a))/0xc*(-parseInt(_0x25fec1(0x16b))/0xd);if(_0x1fea4d===_0x2f0e68)break;else _0x47d51b['push'](_0x47d51b['shift']());}catch(_0x2ccbf4){_0x47d51b['push'](_0x47d51b['shift']());}}}(_0x16e5,0x39e85));import{NTEventDispatch}from'@/common/utils/EventTask';import{napCatCore}from'@/core';export class NTQQSystemApi{static async[_0xa43911(0x15f)](){const _0x3684ab=_0xa43911;return napCatCore[_0x3684ab(0x171)][_0x3684ab(0x15f)]();}static async['ORCImage'](_0x5b3abc){const _0x2b44c3=_0xa43911;return napCatCore['session'][_0x2b44c3(0x167)]()['wantWinScreenOCR'](_0x5b3abc);}static async[_0xa43911(0x170)](_0x46b089){const _0x5c28f0=_0xa43911;return napCatCore[_0x5c28f0(0x166)][_0x5c28f0(0x169)]()[_0x5c28f0(0x170)](_0x46b089);}static async[_0xa43911(0x17b)](){const _0x4705d1=_0xa43911;return napCatCore[_0x4705d1(0x166)][_0x4705d1(0x173)]()['getOnLineDev']();}static async[_0xa43911(0x161)](_0x225a7f){const _0x25cac4=_0xa43911,_0x28efdf={'ALvZL':'NodeIKernelCollectionService/collectionArkShare','SCQqt':'1717662698058'};let _0xdb2601=await NTEventDispatch[_0x25cac4(0x16f)](_0x28efdf['ALvZL'],0x1388,_0x28efdf[_0x25cac4(0x164)]);return _0xdb2601;}static async[_0xa43911(0x162)](_0x2901a0,_0x2ca296){const _0x233eef=_0xa43911,_0x1cf1fa={'mPCqc':_0x233eef(0x177)};await napCatCore[_0x233eef(0x166)][_0x233eef(0x167)]()[_0x233eef(0x16d)](_0x1cf1fa[_0x233eef(0x17a)]);let _0x3c6d0a=await napCatCore['session'][_0x233eef(0x167)]()[_0x233eef(0x178)]();return console['log'](_0x3c6d0a),napCatCore[_0x233eef(0x166)][_0x233eef(0x167)]()[_0x233eef(0x160)](_0x2901a0,_0x2ca296);}}

View File

@@ -1,7 +1,9 @@
import { User } from '@/core/entities';
import { ModifyProfileParams, User, UserDetailInfoByUin } from '@/core/entities';
import { GeneralCallResult } from '@/core';
export declare class NTQQUserApi {
static setLongNick(longNick: string): Promise<unknown>;
static setSelfOnlineStatus(status: number, extStatus: number, batteryStatus: number): Promise<GeneralCallResult>;
static getBuddyRecommendContactArkJson(uin: string, sencenID?: string): Promise<unknown>;
static like(uid: string, count?: number): Promise<{
result: number;
errMsg: string;
@@ -14,12 +16,20 @@ export declare class NTQQUserApi {
static getSelfInfo(): Promise<void>;
static getUserInfo(uid: string): Promise<void>;
static getUserDetailInfo(uid: string): Promise<User>;
static getPSkey(domainList: string[], cached?: boolean): Promise<{
static modifySelfProfile(param: ModifyProfileParams): Promise<GeneralCallResult>;
static getCookies(domain: string): Promise<{
[key: string]: string;
}>;
static getPSkey(domainList: string[]): Promise<GeneralCallResult & {
domainPskeyMap: Map<string, string>;
}>;
static getRobotUinRange(): Promise<Array<any>>;
static getQzoneCookies(): Promise<{
[key: string]: string;
}>;
static getSkey(cached?: boolean): Promise<string | undefined>;
static getSkey(): Promise<string | undefined>;
static getUidByUin(Uin: string): Promise<string | undefined>;
static getUinByUid(Uid: string | undefined): Promise<string | undefined>;
static getUserDetailInfoByUin(Uin: string): Promise<UserDetailInfoByUin>;
static forceFetchClientKey(): Promise<import("@/core").forceFetchClientKeyRetType>;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,11 +0,0 @@
export interface NTQQWindow {
windowName: string;
windowUrlHash: string;
}
export declare class NTQQWindows {
static GroupHomeWorkWindow: NTQQWindow;
static GroupNotifyFilterWindow: NTQQWindow;
static GroupEssenceWindow: NTQQWindow;
}
export declare class NTQQWindowApi {
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,38 +1,14 @@
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;
Cookies: Map<string, string>;
ClientKey: string;
KeyIndex: string;
PskeyData: Map<string, string>;
PskeyTime: Map<string, number>;
};
export declare const WebGroupData: {
GroupData: Map<string, WebApiGroupMember[]>;
GroupTime: Map<string, number>;
};
import { type Friend, type Group, type GroupMember, GroupNotify, type SelfInfo, BuddyCategoryType } from './entities';
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 rawFriends: Array<BuddyCategoryType>;
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;

View File

@@ -1 +1 @@
const _0x2f143c=_0x4db3;(function(_0x6dcd91,_0x29429b){const _0x4a8a26=_0x4db3,_0x4fb3fa=_0x6dcd91();while(!![]){try{const _0x464690=parseInt(_0x4a8a26(0x180))/0x1*(-parseInt(_0x4a8a26(0x17f))/0x2)+parseInt(_0x4a8a26(0x18f))/0x3+-parseInt(_0x4a8a26(0x196))/0x4+parseInt(_0x4a8a26(0x184))/0x5*(-parseInt(_0x4a8a26(0x19a))/0x6)+-parseInt(_0x4a8a26(0x18d))/0x7+-parseInt(_0x4a8a26(0x190))/0x8*(-parseInt(_0x4a8a26(0x188))/0x9)+parseInt(_0x4a8a26(0x18b))/0xa*(parseInt(_0x4a8a26(0x187))/0xb);if(_0x464690===_0x29429b)break;else _0x4fb3fa['push'](_0x4fb3fa['shift']());}catch(_0x337e37){_0x4fb3fa['push'](_0x4fb3fa['shift']());}}}(_0x5784,0x5eba8));import{isNumeric}from'@/common/utils/helper';function _0x4db3(_0x48cfa0,_0x3a59e5){const _0x578412=_0x5784();return _0x4db3=function(_0x4db31f,_0x27eebd){_0x4db31f=_0x4db31f-0x17f;let _0x4f003c=_0x578412[_0x4db31f];return _0x4f003c;},_0x4db3(_0x48cfa0,_0x3a59e5);}import{NTQQGroupApi}from'@/core/apis';export const Credentials={'Skey':'','CreatTime':0x0,'Cookies':new Map(),'ClientKey':'','KeyIndex':'','PskeyData':new Map(),'PskeyTime':new Map()};export const WebGroupData={'GroupData':new Map(),'GroupTime':new Map()};export const selfInfo={'uid':'','uin':'','nick':'','online':!![]};function _0x5784(){const _0x42541c=['getGroups','groupCode','set','15765qlBhPu','get','delete','418RUuFVk','2107962BErqQv','forEach','length','459870rTLZoE','RJZnh','5085563AexJrI','uin','1060161rqBOtm','16ARissP','NapCat未能正常启动请检查日志查看错误','from','zdmFc','getGroupMembers','find','2468796ZDIKVR','values','BqMqQ','gEpWX','846MopRqQ','toString','9248sSCRwC','85WiAhpP'];_0x5784=function(){return _0x42541c;};return _0x5784();}export const groups=new Map();export function deleteGroup(_0x429f1e){const _0x4ef735=_0x4db3;groups['delete'](_0x429f1e),groupMembers[_0x4ef735(0x186)](_0x429f1e);}export const groupMembers=new Map();export const friends=new Map();export const friendRequests={};export const groupNotifies={};export const napCatError={'ffmpegError':'','httpServerError':'','wsServerError':'','otherError':_0x2f143c(0x191)};export async function getFriend(_0x2b2ada){const _0x568b3d=_0x2f143c,_0x376f2c={'BqMqQ':function(_0x29fa15,_0x4472a5){return _0x29fa15(_0x4472a5);}};_0x2b2ada=_0x2b2ada['toString']();if(_0x376f2c[_0x568b3d(0x198)](isNumeric,_0x2b2ada)){const _0x1614c3=Array[_0x568b3d(0x192)](friends[_0x568b3d(0x197)]());return _0x1614c3[_0x568b3d(0x195)](_0x372792=>_0x372792[_0x568b3d(0x18e)]===_0x2b2ada);}else return friends[_0x568b3d(0x185)](_0x2b2ada);}export async function getGroup(_0x308df6){const _0xb82bdc=_0x2f143c;let _0x482e6e=groups[_0xb82bdc(0x185)](_0x308df6[_0xb82bdc(0x19b)]());if(!_0x482e6e)try{const _0x3de901=await NTQQGroupApi[_0xb82bdc(0x181)]();_0x3de901[_0xb82bdc(0x18a)]&&_0x3de901[_0xb82bdc(0x189)](_0x3e0e1c=>{const _0x3933f4=_0xb82bdc;groups[_0x3933f4(0x183)](_0x3e0e1c[_0x3933f4(0x182)],_0x3e0e1c);});}catch(_0x52729b){return undefined;}return _0x482e6e=groups['get'](_0x308df6[_0xb82bdc(0x19b)]()),_0x482e6e;}export async function getGroupMember(_0x5dab24,_0x158535){const _0x33cfc0=_0x2f143c,_0x922ff7={'RJZnh':function(_0x3db2aa,_0x38db5b){return _0x3db2aa(_0x38db5b);},'zdmFc':function(_0x4a96cd){return _0x4a96cd();}};_0x5dab24=_0x5dab24['toString'](),_0x158535=_0x158535[_0x33cfc0(0x19b)]();let _0x34f961=groupMembers[_0x33cfc0(0x185)](_0x5dab24);if(!_0x34f961)try{_0x34f961=await NTQQGroupApi[_0x33cfc0(0x194)](_0x5dab24),groupMembers[_0x33cfc0(0x183)](_0x5dab24,_0x34f961);}catch(_0x4bd608){return null;}const _0x42a152=()=>{const _0x3790ee=_0x33cfc0;let _0x33f1de=undefined;return _0x922ff7[_0x3790ee(0x18c)](isNumeric,_0x158535)?_0x33f1de=Array[_0x3790ee(0x192)](_0x34f961[_0x3790ee(0x197)]())['find'](_0x91b924=>_0x91b924[_0x3790ee(0x18e)]===_0x158535):_0x33f1de=_0x34f961[_0x3790ee(0x185)](_0x158535),_0x33f1de;};let _0x5d9468=_0x42a152();return!_0x5d9468&&(_0x34f961=await NTQQGroupApi['getGroupMembers'](_0x5dab24),_0x5d9468=_0x922ff7[_0x33cfc0(0x193)](_0x42a152)),_0x5d9468;}export const uid2UinMap={};export function getUidByUin(_0x27ee8c){const _0x5cc43c=_0x2f143c,_0x1d3f59={'gEpWX':function(_0x3ceb76,_0xb8a37a){return _0x3ceb76===_0xb8a37a;}};for(const _0x1d348e in uid2UinMap){if(_0x1d3f59[_0x5cc43c(0x199)](uid2UinMap[_0x1d348e],_0x27ee8c))return _0x1d348e;}}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};
(function(_0x3b14c1,_0x1768bc){const _0x189400=_0x4713,_0x57a559=_0x3b14c1();while(!![]){try{const _0x5279ec=parseInt(_0x189400(0xaf))/0x1*(parseInt(_0x189400(0x9a))/0x2)+parseInt(_0x189400(0x9b))/0x3*(parseInt(_0x189400(0xa0))/0x4)+parseInt(_0x189400(0xa2))/0x5*(parseInt(_0x189400(0xb0))/0x6)+parseInt(_0x189400(0xa7))/0x7+parseInt(_0x189400(0xae))/0x8+-parseInt(_0x189400(0xaa))/0x9+parseInt(_0x189400(0xa9))/0xa*(-parseInt(_0x189400(0xa4))/0xb);if(_0x5279ec===_0x1768bc)break;else _0x57a559['push'](_0x57a559['shift']());}catch(_0x50656d){_0x57a559['push'](_0x57a559['shift']());}}}(_0x4b9a,0xb89ea));import{isNumeric}from'@/common/utils/helper';import{NTQQGroupApi}from'@/core/apis';export const selfInfo={'uid':'','uin':'','nick':'','online':!![]};export const groups=new Map();export function deleteGroup(_0x46facc){const _0x7b4c8b=_0x4713;groups[_0x7b4c8b(0xa3)](_0x46facc),groupMembers[_0x7b4c8b(0xa3)](_0x46facc);}function _0x4713(_0x1df58e,_0x5aefb){const _0x4b9a5b=_0x4b9a();return _0x4713=function(_0x471333,_0x10d7a0){_0x471333=_0x471333-0x9a;let _0x15555e=_0x4b9a5b[_0x471333];return _0x15555e;},_0x4713(_0x1df58e,_0x5aefb);}export const groupMembers=new Map();export const friends=new Map();export const rawFriends=[];export const groupNotifies={};export async function getGroup(_0x4a554a){const _0x1e47ec=_0x4713;let _0x30a80f=groups[_0x1e47ec(0xa8)](_0x4a554a[_0x1e47ec(0xa6)]());if(!_0x30a80f)try{const _0x3b9d7f=await NTQQGroupApi[_0x1e47ec(0x9d)]();_0x3b9d7f[_0x1e47ec(0xa5)]&&_0x3b9d7f[_0x1e47ec(0xb1)](_0x447b2c=>{const _0x27efb2=_0x1e47ec;groups[_0x27efb2(0x9e)](_0x447b2c[_0x27efb2(0xab)],_0x447b2c);});}catch(_0x39133e){return undefined;}return _0x30a80f=groups['get'](_0x4a554a[_0x1e47ec(0xa6)]()),_0x30a80f;}function _0x4b9a(){const _0x4cbfaa=['14234570wWXNFA','6358158hXtXpj','groupCode','from','values','7287952DZfvAx','38sTbqQT','41718nOxbOc','forEach','45838lZbRTB','24GFrmky','getGroupMembers','getGroups','set','AhfsK','251464kfstie','Wsnlu','45JQQKlK','delete','11BtobFS','length','toString','3770900oIlGlM','get'];_0x4b9a=function(){return _0x4cbfaa;};return _0x4b9a();}export async function getGroupMember(_0x2dc4bb,_0x1b379c){const _0x3e2adc=_0x4713,_0x4623d3={'AhfsK':function(_0x3c3fec,_0x4c3189){return _0x3c3fec(_0x4c3189);},'Wsnlu':function(_0x24c3cc){return _0x24c3cc();},'FYWdT':function(_0x54d39a){return _0x54d39a();}};_0x2dc4bb=_0x2dc4bb[_0x3e2adc(0xa6)](),_0x1b379c=_0x1b379c[_0x3e2adc(0xa6)]();let _0xf9633b=groupMembers['get'](_0x2dc4bb);if(!_0xf9633b)try{_0xf9633b=await NTQQGroupApi[_0x3e2adc(0x9c)](_0x2dc4bb),groupMembers[_0x3e2adc(0x9e)](_0x2dc4bb,_0xf9633b);}catch(_0x2f8ce5){return null;}const _0x40b3ee=()=>{const _0x1d054d=_0x3e2adc;let _0x176546=undefined;return _0x4623d3[_0x1d054d(0x9f)](isNumeric,_0x1b379c)?_0x176546=Array[_0x1d054d(0xac)](_0xf9633b[_0x1d054d(0xad)]())['find'](_0x57fc56=>_0x57fc56['uin']===_0x1b379c):_0x176546=_0xf9633b[_0x1d054d(0xa8)](_0x1b379c),_0x176546;};let _0x4fe8d5=_0x4623d3[_0x3e2adc(0xa1)](_0x40b3ee);return!_0x4fe8d5&&(_0xf9633b=await NTQQGroupApi[_0x3e2adc(0x9c)](_0x2dc4bb),_0x4fe8d5=_0x4623d3['FYWdT'](_0x40b3ee)),_0x4fe8d5;}export const tempGroupCodeMap={};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};

View File

@@ -1 +1 @@
(function(_0x4b175e,_0x452713){var _0x404486=_0x35b6,_0x4481cc=_0x4b175e();while(!![]){try{var _0x40b0ac=parseInt(_0x404486(0x1c9))/0x1+-parseInt(_0x404486(0x1ce))/0x2*(parseInt(_0x404486(0x1cb))/0x3)+-parseInt(_0x404486(0x1c5))/0x4+parseInt(_0x404486(0x1c3))/0x5*(parseInt(_0x404486(0x1ca))/0x6)+parseInt(_0x404486(0x1c7))/0x7*(parseInt(_0x404486(0x1bf))/0x8)+parseInt(_0x404486(0x1bb))/0x9*(-parseInt(_0x404486(0x1cf))/0xa)+parseInt(_0x404486(0x1bd))/0xb*(parseInt(_0x404486(0x1cd))/0xc);if(_0x40b0ac===_0x452713)break;else _0x4481cc['push'](_0x4481cc['shift']());}catch(_0x1e1964){_0x4481cc['push'](_0x4481cc['shift']());}}}(_0x1730,0x4cfc6));;function _0x1730(){var _0x386f4a=['27hhgRWY','sITvM','967087wLIDnb','split','8Auensn','qfLgq','AUDIO','VIDEO','10MCZkne','IMAGE','1574844WDzRid','DOCUMENT','349937NbFSsB','OTHER','386302HKiqRN','838368fymGmy','3fwpTnC','RjXbr','132AufSvg','737076fvznmL','2017510uDaNMA'];_0x1730=function(){return _0x386f4a;};return _0x1730();}function _0x35b6(_0x377741,_0x6f7eb5){var _0x1730f1=_0x1730();return _0x35b6=function(_0x35b67e,_0x23361f){_0x35b67e=_0x35b67e-0x1bb;var _0x427dc3=_0x1730f1[_0x35b67e];return _0x427dc3;},_0x35b6(_0x377741,_0x6f7eb5);}export var CacheFileType;(function(_0x4459eb){var _0xc5079e=_0x35b6,_0x1e9f17={'RjXbr':'1|2|4|3|0','qfLgq':_0xc5079e(0x1c8),'VHPiP':_0xc5079e(0x1c4),'sITvM':_0xc5079e(0x1c2),'ioWiG':_0xc5079e(0x1c6),'ytjzY':_0xc5079e(0x1c1)},_0x2549df=_0x1e9f17[_0xc5079e(0x1cc)][_0xc5079e(0x1be)]('|'),_0x5eedeb=0x0;while(!![]){switch(_0x2549df[_0x5eedeb++]){case'0':_0x4459eb[_0x4459eb[_0x1e9f17[_0xc5079e(0x1c0)]]=0x4]=_0x1e9f17['qfLgq'];continue;case'1':_0x4459eb[_0x4459eb[_0xc5079e(0x1c4)]=0x0]=_0x1e9f17['VHPiP'];continue;case'2':_0x4459eb[_0x4459eb[_0x1e9f17[_0xc5079e(0x1bc)]]=0x1]=_0x1e9f17[_0xc5079e(0x1bc)];continue;case'3':_0x4459eb[_0x4459eb[_0x1e9f17['ioWiG']]=0x3]=_0xc5079e(0x1c6);continue;case'4':_0x4459eb[_0x4459eb[_0x1e9f17['ytjzY']]=0x2]=_0x1e9f17['ytjzY'];continue;}break;}}(CacheFileType||(CacheFileType={})));
function _0x498f(){var _0x4b1f54=['397917KmwLkB','3343888FGviXF','0|3|4|1|2','33iQsAAm','296502YnPpYP','20quMuiO','149860GPWLQs','5MZpNTS','24NqpXcM','qwXaf','VIDEO','split','ClkDg','DOCUMENT','BUGNl','9051159EneILl','489016ILLbDj','655618wgyAah','IMAGE','AUDIO','1YUCHtX','7tvfbDU','anHJr'];_0x498f=function(){return _0x4b1f54;};return _0x498f();}(function(_0x502bdc,_0x49bb46){var _0x397499=_0x5f25,_0x2eb671=_0x502bdc();while(!![]){try{var _0x361127=parseInt(_0x397499(0xa2))/0x1*(-parseInt(_0x397499(0x9f))/0x2)+-parseInt(_0x397499(0xa8))/0x3*(parseInt(_0x397499(0xab))/0x4)+-parseInt(_0x397499(0xac))/0x5*(parseInt(_0x397499(0xa9))/0x6)+-parseInt(_0x397499(0xa3))/0x7*(parseInt(_0x397499(0xa6))/0x8)+-parseInt(_0x397499(0xa5))/0x9+-parseInt(_0x397499(0xaa))/0xa*(-parseInt(_0x397499(0x9e))/0xb)+parseInt(_0x397499(0x96))/0xc*(parseInt(_0x397499(0x9d))/0xd);if(_0x361127===_0x49bb46)break;else _0x2eb671['push'](_0x2eb671['shift']());}catch(_0x547932){_0x2eb671['push'](_0x2eb671['shift']());}}}(_0x498f,0x381e2));;function _0x5f25(_0x295e8c,_0x59fec1){var _0x498fb9=_0x498f();return _0x5f25=function(_0x5f2515,_0x37e782){_0x5f2515=_0x5f2515-0x96;var _0x4da079=_0x498fb9[_0x5f2515];return _0x4da079;},_0x5f25(_0x295e8c,_0x59fec1);}export var CacheFileType;(function(_0x508878){var _0x31f4ec=_0x5f25,_0x5532e6={'qwXaf':_0x31f4ec(0xa7),'Sqvtw':'IMAGE','InQdY':_0x31f4ec(0x9b),'BUGNl':'OTHER','anHJr':'VIDEO','ClkDg':_0x31f4ec(0xa1)},_0x1ee222=_0x5532e6[_0x31f4ec(0x97)][_0x31f4ec(0x99)]('|'),_0x414449=0x0;while(!![]){switch(_0x1ee222[_0x414449++]){case'0':_0x508878[_0x508878[_0x31f4ec(0xa0)]=0x0]=_0x5532e6['Sqvtw'];continue;case'1':_0x508878[_0x508878['DOCUMENT']=0x3]=_0x5532e6['InQdY'];continue;case'2':_0x508878[_0x508878[_0x5532e6[_0x31f4ec(0x9c)]]=0x4]=_0x5532e6['BUGNl'];continue;case'3':_0x508878[_0x508878[_0x5532e6[_0x31f4ec(0xa4)]]=0x1]=_0x31f4ec(0x98);continue;case'4':_0x508878[_0x508878[_0x5532e6[_0x31f4ec(0x9a)]]=0x2]=_0x5532e6[_0x31f4ec(0x9a)];continue;}break;}}(CacheFileType||(CacheFileType={})));

View File

@@ -5,7 +5,7 @@ export declare class SendMsgElementConstructor {
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 file(filePath: string, fileName?: string, folderId?: string): Promise<SendFileElement>;
static video(filePath: string, fileName?: string, diyThumbPath?: string): Promise<SendVideoElement>;
static ptt(pttPath: string): Promise<SendPttElement>;
static face(faceId: number): SendFaceElement;

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
(function(_0x2629d1,_0x1746d3){var _0x181451=_0x20bc,_0x108b02=_0x2629d1();while(!![]){try{var _0x1681bc=parseInt(_0x181451(0x7f))/0x1*(parseInt(_0x181451(0x85))/0x2)+-parseInt(_0x181451(0x80))/0x3+-parseInt(_0x181451(0x83))/0x4+parseInt(_0x181451(0x7a))/0x5+-parseInt(_0x181451(0x7e))/0x6+parseInt(_0x181451(0x81))/0x7*(parseInt(_0x181451(0x82))/0x8)+parseInt(_0x181451(0x7d))/0x9;if(_0x1681bc===_0x1746d3)break;else _0x108b02['push'](_0x108b02['shift']());}catch(_0x26cca1){_0x108b02['push'](_0x108b02['shift']());}}}(_0x73c7,0x29b06));export var GroupMemberRole;function _0x73c7(){var _0x41f620=['4655214RMHLAw','749034NyxcBU','1zXuUYy','998340vAazLm','28LhXqGW','431272UOyzjL','1123168iPPRvo','owner','6398sMMcyX','wRNWM','eUskL','normal','865440STWwdT','admin','kvlaV'];_0x73c7=function(){return _0x41f620;};return _0x73c7();}function _0x20bc(_0x46f0ba,_0x5d6a8d){var _0x73c76f=_0x73c7();return _0x20bc=function(_0x20bc9f,_0x39efe7){_0x20bc9f=_0x20bc9f-0x79;var _0x385b90=_0x73c76f[_0x20bc9f];return _0x385b90;},_0x20bc(_0x46f0ba,_0x5d6a8d);}(function(_0x1bdbef){var _0x32a4a3=_0x20bc,_0xff7650={'kvlaV':_0x32a4a3(0x79),'wRNWM':'admin','eUskL':_0x32a4a3(0x84)};_0x1bdbef[_0x1bdbef[_0x32a4a3(0x79)]=0x2]=_0xff7650[_0x32a4a3(0x7c)],_0x1bdbef[_0x1bdbef[_0x32a4a3(0x7b)]=0x3]=_0xff7650[_0x32a4a3(0x86)],_0x1bdbef[_0x1bdbef[_0x32a4a3(0x84)]=0x4]=_0xff7650[_0x32a4a3(0x87)];}(GroupMemberRole||(GroupMemberRole={})));
function _0xd0ba(){var _0x36db9f=['dsMSc','3662652sfZWWF','owner','admin','653040NFOTlW','ycBFe','7FgeyjU','2467605xxVgDE','120xmGgex','300958npdodm','832540gSwylc','TkRNT','normal','7394256Qefacs','608874DvuRbp','6KiFuAH'];_0xd0ba=function(){return _0x36db9f;};return _0xd0ba();}(function(_0x4784f0,_0x57e9cc){var _0x210e23=_0x3099,_0x1ffc1f=_0x4784f0();while(!![]){try{var _0x181b7a=-parseInt(_0x210e23(0xa5))/0x1*(-parseInt(_0x210e23(0xa8))/0x2)+-parseInt(_0x210e23(0x9e))/0x3*(-parseInt(_0x210e23(0xa9))/0x4)+-parseInt(_0x210e23(0xa6))/0x5+parseInt(_0x210e23(0x9d))/0x6+-parseInt(_0x210e23(0xa0))/0x7+parseInt(_0x210e23(0x9c))/0x8+-parseInt(_0x210e23(0xa3))/0x9*(parseInt(_0x210e23(0xa7))/0xa);if(_0x181b7a===_0x57e9cc)break;else _0x1ffc1f['push'](_0x1ffc1f['shift']());}catch(_0x90c7c){_0x1ffc1f['push'](_0x1ffc1f['shift']());}}}(_0xd0ba,0x946a3));function _0x3099(_0x251214,_0x35178e){var _0xd0bae9=_0xd0ba();return _0x3099=function(_0x3099f5,_0x5cb516){_0x3099f5=_0x3099f5-0x9a;var _0x56d168=_0xd0bae9[_0x3099f5];return _0x56d168;},_0x3099(_0x251214,_0x35178e);}export var GroupMemberRole;(function(_0x463087){var _0x5b45f6=_0x3099,_0x32e363={'ycBFe':_0x5b45f6(0x9b),'dsMSc':_0x5b45f6(0xa2),'TkRNT':_0x5b45f6(0xa1)};_0x463087[_0x463087['normal']=0x2]=_0x32e363[_0x5b45f6(0xa4)],_0x463087[_0x463087[_0x32e363[_0x5b45f6(0x9f)]]=0x3]=_0x32e363[_0x5b45f6(0x9f)],_0x463087[_0x463087[_0x32e363[_0x5b45f6(0x9a)]]=0x4]=_0x32e363[_0x5b45f6(0x9a)];}(GroupMemberRole||(GroupMemberRole={})));

View File

@@ -1 +1 @@
(function(_0x3eeb70,_0x20726b){var _0x4e0a62=_0x45ed,_0x5d24d3=_0x3eeb70();while(!![]){try{var _0x24a9a9=-parseInt(_0x4e0a62(0x1d1))/0x1*(-parseInt(_0x4e0a62(0x1d2))/0x2)+parseInt(_0x4e0a62(0x1d8))/0x3*(parseInt(_0x4e0a62(0x1d0))/0x4)+-parseInt(_0x4e0a62(0x1d5))/0x5+parseInt(_0x4e0a62(0x1d3))/0x6+-parseInt(_0x4e0a62(0x1cf))/0x7+-parseInt(_0x4e0a62(0x1d4))/0x8+parseInt(_0x4e0a62(0x1d6))/0x9*(-parseInt(_0x4e0a62(0x1d7))/0xa);if(_0x24a9a9===_0x20726b)break;else _0x5d24d3['push'](_0x5d24d3['shift']());}catch(_0x26adba){_0x5d24d3['push'](_0x5d24d3['shift']());}}}(_0x3535,0x2535d));export*from'./user';export*from'./group';export*from'./msg';export*from'./notify';function _0x3535(){var _0x205547=['1mmqEBQ','344224jhMupL','629478JzYVFn','1819312lOyRbI','339535cdzRkR','478917sgjIAV','10SSmTVa','15ZmGVnF','116291sPfHbC','192428Gfzgwg'];_0x3535=function(){return _0x205547;};return _0x3535();}export*from'./cache';function _0x45ed(_0xd044b6,_0x188143){var _0x3535da=_0x3535();return _0x45ed=function(_0x45ed5d,_0x3ad035){_0x45ed5d=_0x45ed5d-0x1cf;var _0x1a9f0b=_0x3535da[_0x45ed5d];return _0x1a9f0b;},_0x45ed(_0xd044b6,_0x188143);}export*from'./constructor';
(function(_0x5b45de,_0xbaa916){var _0x564d75=_0x5e29,_0x35f6f0=_0x5b45de();while(!![]){try{var _0x404409=parseInt(_0x564d75(0x1af))/0x1+parseInt(_0x564d75(0x1ae))/0x2*(-parseInt(_0x564d75(0x1ac))/0x3)+-parseInt(_0x564d75(0x1ad))/0x4+-parseInt(_0x564d75(0x1a9))/0x5*(parseInt(_0x564d75(0x1ab))/0x6)+parseInt(_0x564d75(0x1a8))/0x7+parseInt(_0x564d75(0x1b0))/0x8+parseInt(_0x564d75(0x1aa))/0x9;if(_0x404409===_0xbaa916)break;else _0x35f6f0['push'](_0x35f6f0['shift']());}catch(_0x241210){_0x35f6f0['push'](_0x35f6f0['shift']());}}}(_0x3ef1,0xd3e06));export*from'./user';function _0x5e29(_0x34fb10,_0x111f5a){var _0x3ef1b5=_0x3ef1();return _0x5e29=function(_0x5e2919,_0x2a30d6){_0x5e2919=_0x5e2919-0x1a8;var _0x1f5e1f=_0x3ef1b5[_0x5e2919];return _0x1f5e1f;},_0x5e29(_0x34fb10,_0x111f5a);}export*from'./group';function _0x3ef1(){var _0x415137=['15reHGfc','5926468JCBZbg','164476BIKuew','298622scvtzF','11068088mKGfwz','11974886isoMKx','25MQFsYR','3139353RUGaJU','1177194uNjcNZ'];_0x3ef1=function(){return _0x415137;};return _0x3ef1();}export*from'./msg';export*from'./notify';export*from'./cache';export*from'./constructor';

View File

@@ -115,6 +115,7 @@ export interface FileElement {
fileSize: string;
picHeight?: number;
picWidth?: number;
folderId?: string;
picThumbPath?: Map<number, string>;
file10MMd5?: string;
fileSha?: string;
@@ -156,6 +157,48 @@ export declare enum ChatType {
chatDevice = 8,//移动设备?
temp = 100
}
export declare enum ChatType2 {
KCHATTYPEADELIE = 42,
KCHATTYPEBUDDYNOTIFY = 5,
KCHATTYPEC2C = 1,
KCHATTYPECIRCLE = 113,
KCHATTYPEDATALINE = 8,
KCHATTYPEDATALINEMQQ = 134,
KCHATTYPEDISC = 3,
KCHATTYPEFAV = 41,
KCHATTYPEGAMEMESSAGE = 105,
KCHATTYPEGAMEMESSAGEFOLDER = 116,
KCHATTYPEGROUP = 2,
KCHATTYPEGROUPBLESS = 133,
KCHATTYPEGROUPGUILD = 9,
KCHATTYPEGROUPHELPER = 7,
KCHATTYPEGROUPNOTIFY = 6,
KCHATTYPEGUILD = 4,
KCHATTYPEGUILDMETA = 16,
KCHATTYPEMATCHFRIEND = 104,
KCHATTYPEMATCHFRIENDFOLDER = 109,
KCHATTYPENEARBY = 106,
KCHATTYPENEARBYASSISTANT = 107,
KCHATTYPENEARBYFOLDER = 110,
KCHATTYPENEARBYHELLOFOLDER = 112,
KCHATTYPENEARBYINTERACT = 108,
KCHATTYPEQQNOTIFY = 132,
KCHATTYPERELATEACCOUNT = 131,
KCHATTYPESERVICEASSISTANT = 118,
KCHATTYPESERVICEASSISTANTSUB = 201,
KCHATTYPESQUAREPUBLIC = 115,
KCHATTYPESUBSCRIBEFOLDER = 30,
KCHATTYPETEMPADDRESSBOOK = 111,
KCHATTYPETEMPBUSSINESSCRM = 102,
KCHATTYPETEMPC2CFROMGROUP = 100,
KCHATTYPETEMPC2CFROMUNKNOWN = 99,
KCHATTYPETEMPFRIENDVERIFY = 101,
KCHATTYPETEMPNEARBYPRO = 119,
KCHATTYPETEMPPUBLICACCOUNT = 103,
KCHATTYPETEMPWPA = 117,
KCHATTYPEUNKNOWN = 0,
KCHATTYPEWEIYUN = 40
}
export interface PttElement {
canConvert2Text: boolean;
duration: number;
@@ -186,6 +229,7 @@ export interface ArkElement {
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 {
picSubType?: number;
originImageUrl: string;
originImageMd5?: string;
sourcePath: string;
@@ -272,6 +316,19 @@ export interface VideoElement {
import_rich_media_context?: null;
sourceVideoCodecFormat?: number;
}
export declare enum viedo_type {
VIDEO_FORMAT_AFS = 7,
VIDEO_FORMAT_AVI = 1,
VIDEO_FORMAT_MKV = 4,
VIDEO_FORMAT_MOD = 9,
VIDEO_FORMAT_MOV = 8,
VIDEO_FORMAT_MP4 = 2,
VIDEO_FORMAT_MTS = 11,
VIDEO_FORMAT_RM = 6,
VIDEO_FORMAT_RMVB = 5,
VIDEO_FORMAT_TS = 10,
VIDEO_FORMAT_WMV = 3
}
export interface MarkdownElement {
content: string;
}

File diff suppressed because one or more lines are too long

View File

@@ -54,8 +54,26 @@ export declare enum GroupRequestOperateTypes {
approve = 1,
reject = 2
}
export declare enum BuddyReqType {
KMEINITIATOR = 0,
KPEERINITIATOR = 1,
KMEAGREED = 2,
KMEAGREEDANDADDED = 3,
KPEERAGREED = 4,
KPEERAGREEDANDADDED = 5,
KPEERREFUSED = 6,
KMEREFUSED = 7,
KMEIGNORED = 8,
KMEAGREEANYONE = 9,
KMESETQUESTION = 10,
KMEAGREEANDADDFAILED = 11,
KMSGINFO = 12,
KMEINITIATORWAITPEERCONFIRM = 13
}
export interface FriendRequest {
isDecide: boolean;
friendUid: string;
reqType: BuddyReqType;
reqTime: string;
extWords: string;
isUnread: boolean;
@@ -67,3 +85,39 @@ export interface FriendRequestNotify {
unreadNums: number;
buddyReqs: FriendRequest[];
}
export declare enum MemberExtSourceType {
DEFAULTTYPE = 0,
TITLETYPE = 1,
NEWGROUPTYPE = 2
}
export interface GroupExtParam {
groupCode: string;
seq: string;
beginUin: string;
dataTime: string;
uinList: Array<string>;
uinNum: string;
groupType: string;
richCardNameVer: string;
sourceType: MemberExtSourceType;
memberExtFilter: {
memberLevelInfoUin: number;
memberLevelInfoPoint: number;
memberLevelInfoActiveDay: number;
memberLevelInfoLevel: number;
memberLevelInfoName: number;
levelName: number;
dataTime: number;
userShowFlag: number;
sysShowFlag: number;
timeToUpdate: number;
nickName: number;
specialTitle: number;
levelNameNew: number;
userShowFlagNew: number;
msgNeedField: number;
cmdUinFlagExt3Grocery: number;
memberIcon: number;
memberInfoSeq: number;
};
}

File diff suppressed because one or more lines are too long

View File

@@ -9,6 +9,17 @@ export interface BuddyCategoryType {
categroyMbCount: number;
buddyList: User[];
}
export interface ModifyProfileParams {
nick: string;
longNick: string;
sex: Sex;
birthday: {
birthday_year: string;
birthday_month: string;
birthday_day: string;
};
location: any;
}
export interface BuddyProfileLikeReq {
friendUids: string[];
basic: number;
@@ -87,3 +98,76 @@ export interface SelfInfo extends User {
}
export interface Friend extends User {
}
export declare enum BizKey {
KPRIVILEGEICON = 0,
KPHOTOWALL = 1
}
export interface UserDetailInfoByUin {
result: number;
errMsg: string;
info: {
uid: string;
qid: string;
uin: string;
nick: string;
remark: string;
longNick: string;
avatarUrl: string;
birthday_year: number;
birthday_month: number;
birthday_day: number;
sex: 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;
termType: number;
labels: any[];
qqLevel: {
crownNum: number;
sunNum: number;
moonNum: number;
starNum: number;
};
isHideQQLevel: number;
privilegeIcon: {
jumpUrl: string;
openIconList: any[];
closeIconList: any[];
};
isHidePrivilegeIcon: number;
photoWall: {
picList: any[];
};
vipFlag: boolean;
yearVipFlag: boolean;
svipFlag: boolean;
vipLevel: number;
status: number;
qidianMasterFlag: number;
qidianCrewFlag: number;
qidianCrewFlag2: number;
extStatus: number;
recommendImgFlag: number;
disableEmojiShortCuts: number;
pendantId: string;
vipNameColorId: string;
};
}

View File

@@ -1 +1 @@
(function(_0x4f031d,_0x410210){var _0x43b4ee=_0x4444,_0x29e1a1=_0x4f031d();while(!![]){try{var _0x5ed45e=parseInt(_0x43b4ee(0xd8))/0x1+parseInt(_0x43b4ee(0xd0))/0x2+parseInt(_0x43b4ee(0xd7))/0x3*(parseInt(_0x43b4ee(0xd1))/0x4)+-parseInt(_0x43b4ee(0xda))/0x5+-parseInt(_0x43b4ee(0xd2))/0x6+parseInt(_0x43b4ee(0xdb))/0x7+parseInt(_0x43b4ee(0xd3))/0x8;if(_0x5ed45e===_0x410210)break;else _0x29e1a1['push'](_0x29e1a1['shift']());}catch(_0x958326){_0x29e1a1['push'](_0x29e1a1['shift']());}}}(_0x400d,0x2b8b3));export var Sex;function _0x4444(_0x7b19c0,_0x172564){var _0x400d85=_0x400d();return _0x4444=function(_0x4444e3,_0x15f9fe){_0x4444e3=_0x4444e3-0xd0;var _0xcb12d2=_0x400d85[_0x4444e3];return _0xcb12d2;},_0x4444(_0x7b19c0,_0x172564);}function _0x400d(){var _0x57a345=['385120dWHWxt','4gekAvI','2099052IEomQh','290712JqydLj','female','VbKQY','male','1009293TZqjns','205863Gxinbe','syKOq','1681840aGoUWU','653604wBMfBz'];_0x400d=function(){return _0x57a345;};return _0x400d();}(function(_0x3effcf){var _0x5a950e=_0x4444,_0xb8a219={'VbKQY':_0x5a950e(0xd6),'mDCFp':'female','syKOq':'unknown'};_0x3effcf[_0x3effcf[_0xb8a219[_0x5a950e(0xd5)]]=0x1]=_0xb8a219['VbKQY'],_0x3effcf[_0x3effcf[_0x5a950e(0xd4)]=0x2]=_0xb8a219['mDCFp'],_0x3effcf[_0x3effcf['unknown']=0xff]=_0xb8a219[_0x5a950e(0xd9)];}(Sex||(Sex={})));
(function(_0x2ad236,_0x523bb1){var _0x35a774=_0x31b7,_0x7b95b9=_0x2ad236();while(!![]){try{var _0x2b7715=-parseInt(_0x35a774(0x77))/0x1+-parseInt(_0x35a774(0x7d))/0x2+parseInt(_0x35a774(0x76))/0x3+-parseInt(_0x35a774(0x70))/0x4*(parseInt(_0x35a774(0x6d))/0x5)+parseInt(_0x35a774(0x7e))/0x6*(parseInt(_0x35a774(0x73))/0x7)+-parseInt(_0x35a774(0x7a))/0x8*(parseInt(_0x35a774(0x75))/0x9)+parseInt(_0x35a774(0x79))/0xa;if(_0x2b7715===_0x523bb1)break;else _0x7b95b9['push'](_0x7b95b9['shift']());}catch(_0x1ddedb){_0x7b95b9['push'](_0x7b95b9['shift']());}}}(_0x9e23,0xe78a6));export var Sex;function _0x31b7(_0x372cbd,_0x5760f9){var _0x9e2377=_0x9e23();return _0x31b7=function(_0x31b7cd,_0x10c400){_0x31b7cd=_0x31b7cd-0x6d;var _0xd3f03b=_0x9e2377[_0x31b7cd];return _0xd3f03b;},_0x31b7(_0x372cbd,_0x5760f9);}function _0x9e23(){var _0x51e118=['unknown','KPRIVILEGEICON','2918174aGauyu','6zcNeCl','4330fDopaP','male','KPHOTOWALL','5552fqQruL','ttoLX','OJYRw','1021769tOiowa','XuQqc','5483763cpVLNm','4526643LHcOsg','597381wvijvm','female','31613250ArPQwe','8MKTdyT'];_0x9e23=function(){return _0x51e118;};return _0x9e23();}(function(_0xb5ba63){var _0x5c6018=_0x31b7,_0x1303ee={'ttoLX':_0x5c6018(0x6e),'qMeDK':_0x5c6018(0x78)};_0xb5ba63[_0xb5ba63[_0x5c6018(0x6e)]=0x1]=_0x1303ee[_0x5c6018(0x71)],_0xb5ba63[_0xb5ba63[_0x5c6018(0x78)]=0x2]=_0x1303ee['qMeDK'],_0xb5ba63[_0xb5ba63[_0x5c6018(0x7b)]=0xff]=_0x5c6018(0x7b);}(Sex||(Sex={})));export var BizKey;(function(_0x3146e7){var _0x44c4b0=_0x31b7,_0x105698={'XuQqc':_0x44c4b0(0x7c),'OJYRw':_0x44c4b0(0x6f)};_0x3146e7[_0x3146e7[_0x105698[_0x44c4b0(0x74)]]=0x0]=_0x105698[_0x44c4b0(0x74)],_0x3146e7[_0x3146e7[_0x105698[_0x44c4b0(0x72)]]=0x1]=_0x105698[_0x44c4b0(0x72)];}(BizKey||(BizKey={})));

View File

@@ -1,8 +0,0 @@
declare class HookApi {
private readonly moeHook;
constructor();
getRKey(): string;
isAvailable(): boolean;
}
export declare const hookApi: HookApi;
export {};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
(function(_0x4d124c,_0x474f33){var _0x4c62e6=_0x5e05,_0x1eeba3=_0x4d124c();while(!![]){try{var _0x29af9c=parseInt(_0x4c62e6(0x190))/0x1*(-parseInt(_0x4c62e6(0x191))/0x2)+-parseInt(_0x4c62e6(0x199))/0x3+parseInt(_0x4c62e6(0x198))/0x4*(parseInt(_0x4c62e6(0x193))/0x5)+-parseInt(_0x4c62e6(0x196))/0x6+-parseInt(_0x4c62e6(0x194))/0x7+parseInt(_0x4c62e6(0x195))/0x8*(parseInt(_0x4c62e6(0x197))/0x9)+parseInt(_0x4c62e6(0x192))/0xa;if(_0x29af9c===_0x474f33)break;else _0x1eeba3['push'](_0x1eeba3['shift']());}catch(_0x190ba3){_0x1eeba3['push'](_0x1eeba3['shift']());}}}(_0xda19,0x7850c));import _0xfd6550 from'./wrapper';export*from'./adapters';export*from'./apis';export*from'./entities';export*from'./listeners';function _0xda19(){var _0x18b492=['1981728UEGHyb','1NoPsPG','514190NPMpxt','20522330LvRRCk','105ljKZlR','2270555EKZSMR','8IMMUsj','4368558LXyEtB','883863ZRQPYH','59524DSYIKB'];_0xda19=function(){return _0x18b492;};return _0xda19();}export*from'./services';export*as Adapters from'./adapters';export*as APIs from'./apis';export*as Entities from'./entities';function _0x5e05(_0xb3d80d,_0x260eac){var _0xda1981=_0xda19();return _0x5e05=function(_0x5e056c,_0x3c5518){_0x5e056c=_0x5e056c-0x190;var _0x2fd7f5=_0xda1981[_0x5e056c];return _0x2fd7f5;},_0x5e05(_0xb3d80d,_0x260eac);}export*as Listeners from'./listeners';export*as Services from'./services';export{_0xfd6550 as Wrapper};export*as WrapperInterface from'./wrapper';export*as SessionConfig from'./sessionConfig';export{napCatCore}from'./core';
(function(_0x5af152,_0x20bb14){var _0x4f14d7=_0xf2a8,_0x445300=_0x5af152();while(!![]){try{var _0x4e3ed7=-parseInt(_0x4f14d7(0x1a5))/0x1+parseInt(_0x4f14d7(0x1a7))/0x2+parseInt(_0x4f14d7(0x1a9))/0x3+parseInt(_0x4f14d7(0x1aa))/0x4+-parseInt(_0x4f14d7(0x1a2))/0x5+parseInt(_0x4f14d7(0x1a6))/0x6*(parseInt(_0x4f14d7(0x1a3))/0x7)+parseInt(_0x4f14d7(0x1a4))/0x8*(-parseInt(_0x4f14d7(0x1a8))/0x9);if(_0x4e3ed7===_0x20bb14)break;else _0x445300['push'](_0x445300['shift']());}catch(_0x5c22d5){_0x445300['push'](_0x445300['shift']());}}}(_0x10a7,0xb4f7d));import _0x337b77 from'./wrapper';export*from'./adapters';function _0x10a7(){var _0x33f79d=['48536fFhOXj','995880ZHWpPi','7760808pkfOZy','1669236CooyeT','2817FWyPHc','4303887FbbkWd','1288312tIeUyJ','1243485oCJKHJ','7WPUQZL'];_0x10a7=function(){return _0x33f79d;};return _0x10a7();}export*from'./apis';export*from'./entities';export*from'./listeners';function _0xf2a8(_0xd39da8,_0x23751c){var _0x10a72f=_0x10a7();return _0xf2a8=function(_0xf2a8f9,_0x467bf1){_0xf2a8f9=_0xf2a8f9-0x1a2;var _0x1720ce=_0x10a72f[_0xf2a8f9];return _0x1720ce;},_0xf2a8(_0xd39da8,_0x23751c);}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{_0x337b77 as Wrapper};export*as WrapperInterface from'./wrapper';export*as SessionConfig from'./sessionConfig';export{napCatCore}from'./core';

View File

@@ -1 +1 @@
function _0x53de(){var _0x5ac79e=['18297PSxiEG','onAddBuddyNeedVerify','onSmartInfos','onBuddyReqUnreadCntChange','onAvatarUrlUpdated','onDoubtBuddyReqUnreadNumChange','2546412FKcrRD','539235CLVuEp','onCheckBuddySettingResult','onDoubtBuddyReqChange','onBuddyDetailInfoChange','6368WCQDyn','469eGHfJe','25086LuRHEu','2488244InAoQq','4814028bSQLxE','onBuddyReqChange','7119820KauiLh','5EtDBSf','onBlockChanged','onDelBatchBuddyInfos'];_0x53de=function(){return _0x5ac79e;};return _0x53de();}var _0x52f379=_0x4b9d;(function(_0xba55a5,_0x13a47f){var _0x5e3cda=_0x4b9d,_0x3394f0=_0xba55a5();while(!![]){try{var _0x267e6f=parseInt(_0x5e3cda(0x1f2))/0x1+parseInt(_0x5e3cda(0x1f9))/0x2+-parseInt(_0x5e3cda(0x1f1))/0x3+-parseInt(_0x5e3cda(0x1fa))/0x4*(parseInt(_0x5e3cda(0x1fd))/0x5)+-parseInt(_0x5e3cda(0x1f8))/0x6*(-parseInt(_0x5e3cda(0x1f7))/0x7)+-parseInt(_0x5e3cda(0x1f6))/0x8*(-parseInt(_0x5e3cda(0x200))/0x9)+-parseInt(_0x5e3cda(0x1fc))/0xa;if(_0x267e6f===_0x13a47f)break;else _0x3394f0['push'](_0x3394f0['shift']());}catch(_0x391563){_0x3394f0['push'](_0x3394f0['shift']());}}}(_0x53de,0xdffd3));function _0x4b9d(_0x56f43d,_0x2ac6ce){var _0x53dec2=_0x53de();return _0x4b9d=function(_0x4b9d44,_0x12993a){_0x4b9d44=_0x4b9d44-0x1ee;var _0x335aa7=_0x53dec2[_0x4b9d44];return _0x335aa7;},_0x4b9d(_0x56f43d,_0x2ac6ce);}export class BuddyListener{[_0x52f379(0x201)](_0x556e4c){}['onAddMeSettingChanged'](_0x20b0b0){}[_0x52f379(0x1ef)](_0x36f5d6){}[_0x52f379(0x1fe)](_0x8942ad){}[_0x52f379(0x1f5)](_0x33ceb4){}['onBuddyInfoChange'](_0xde1189){}['onBuddyListChange'](_0x3e022d){}['onBuddyRemarkUpdated'](_0xfd0f31){}[_0x52f379(0x1fb)](_0x5a5c6e){}[_0x52f379(0x1ee)](_0x38020a){}[_0x52f379(0x1f3)](_0x2da935){}[_0x52f379(0x1ff)](_0x4c02ff){}[_0x52f379(0x1f4)](_0x29e9b7){}[_0x52f379(0x1f0)](_0x117df9){}['onNickUpdated'](_0x1a779d){}[_0x52f379(0x202)](_0x4d0b8e){}['onSpacePermissionInfos'](_0x6a0a33){}}
var _0x107aa6=_0x2d03;(function(_0x22ad02,_0x252c02){var _0x45abab=_0x2d03,_0x26d42b=_0x22ad02();while(!![]){try{var _0xe276d0=parseInt(_0x45abab(0xd9))/0x1+parseInt(_0x45abab(0xdf))/0x2*(-parseInt(_0x45abab(0xcf))/0x3)+parseInt(_0x45abab(0xe0))/0x4*(parseInt(_0x45abab(0xda))/0x5)+-parseInt(_0x45abab(0xca))/0x6+-parseInt(_0x45abab(0xd1))/0x7+parseInt(_0x45abab(0xcb))/0x8*(parseInt(_0x45abab(0xde))/0x9)+parseInt(_0x45abab(0xdb))/0xa*(-parseInt(_0x45abab(0xd8))/0xb);if(_0xe276d0===_0x252c02)break;else _0x26d42b['push'](_0x26d42b['shift']());}catch(_0x300382){_0x26d42b['push'](_0x26d42b['shift']());}}}(_0x53ad,0x94074));function _0x53ad(){var _0x75046a=['onAvatarUrlUpdated','onCheckBuddySettingResult','289289adWegU','1105343ozkxOM','49890KnZwvs','160SdqUAK','onDoubtBuddyReqUnreadNumChange','onBlockChanged','225gvMUlx','340ZUYLFi','404kaNAJq','onAddBuddyNeedVerify','onSmartInfos','3367584OvYUbT','230320TFMGvA','onBuddyInfoChange','onBuddyListChange','onDelBatchBuddyInfos','6297OQsuvJ','onBuddyDetailInfoChange','6213683gugWEu','onDoubtBuddyReqChange','onBuddyReqUnreadCntChange','onAddMeSettingChanged','onBuddyRemarkUpdated'];_0x53ad=function(){return _0x75046a;};return _0x53ad();}function _0x2d03(_0x157afb,_0x42391b){var _0x53ad11=_0x53ad();return _0x2d03=function(_0x2d0353,_0x53d295){_0x2d0353=_0x2d0353-0xc8;var _0x3cb7ca=_0x53ad11[_0x2d0353];return _0x3cb7ca;},_0x2d03(_0x157afb,_0x42391b);}export class BuddyListener{[_0x107aa6(0xc8)](_0x2faa93){}[_0x107aa6(0xd4)](_0x4f1203){}[_0x107aa6(0xd6)](_0x33ec2c){}[_0x107aa6(0xdd)](_0x28eedc){}[_0x107aa6(0xd0)](_0x4bd80a){}[_0x107aa6(0xcc)](_0x208a90){}[_0x107aa6(0xcd)](_0x576300){}[_0x107aa6(0xd5)](_0xc6042d){}['onBuddyReqChange'](_0x2ca07d){}[_0x107aa6(0xd3)](_0x564725){}[_0x107aa6(0xd7)](_0x385167){}[_0x107aa6(0xce)](_0x56204b){}[_0x107aa6(0xd2)](_0x3a5b2c){}[_0x107aa6(0xdc)](_0x34f373){}['onNickUpdated'](_0x58600d){}[_0x107aa6(0xc9)](_0x22e92b){}['onSpacePermissionInfos'](_0x47736e){}}

View File

@@ -1 +1 @@
function _0x2cfa(_0x440451,_0x195768){var _0x50cd1c=_0x50cd();return _0x2cfa=function(_0x2cfa36,_0x5cb074){_0x2cfa36=_0x2cfa36-0xc8;var _0x293bb5=_0x50cd1c[_0x2cfa36];return _0x293bb5;},_0x2cfa(_0x440451,_0x195768);}var _0x5721de=_0x2cfa;(function(_0x648cbb,_0x2a8a80){var _0x36f25e=_0x2cfa,_0x1333a0=_0x648cbb();while(!![]){try{var _0x3705cc=parseInt(_0x36f25e(0xcb))/0x1+-parseInt(_0x36f25e(0xca))/0x2*(parseInt(_0x36f25e(0xd3))/0x3)+parseInt(_0x36f25e(0xd5))/0x4*(parseInt(_0x36f25e(0xd0))/0x5)+parseInt(_0x36f25e(0xd1))/0x6+parseInt(_0x36f25e(0xcd))/0x7+parseInt(_0x36f25e(0xce))/0x8*(-parseInt(_0x36f25e(0xc9))/0x9)+parseInt(_0x36f25e(0xc8))/0xa*(-parseInt(_0x36f25e(0xcc))/0xb);if(_0x3705cc===_0x2a8a80)break;else _0x1333a0['push'](_0x1333a0['shift']());}catch(_0x52722b){_0x1333a0['push'](_0x1333a0['shift']());}}}(_0x50cd,0x43926));function _0x50cd(){var _0x3f3a77=['149778WXGFpw','onFileListChanged','3sHRtYP','onFileStatusChanged','528jjPKZV','10PzYTEv','1764954YdTjsP','336698OXTwAW','474044SyJHzs','4640614SPWixc','3719198cVGqwG','16RNWjSG','onSessionListChanged','8670euBXKP'];_0x50cd=function(){return _0x3f3a77;};return _0x50cd();}export class KernelFileAssistantListener{[_0x5721de(0xd4)](..._0x177aa8){}[_0x5721de(0xcf)](..._0x5116e5){}['onSessionChanged'](..._0xc58567){}[_0x5721de(0xd2)](..._0x5ea1d8){}['onFileSearch'](..._0x3f8388){}}
var _0x2b0a0e=_0x1ba2;(function(_0x16eea2,_0x56b860){var _0x13c856=_0x1ba2,_0x2a129b=_0x16eea2();while(!![]){try{var _0x18ebd3=-parseInt(_0x13c856(0x15b))/0x1+-parseInt(_0x13c856(0x157))/0x2+parseInt(_0x13c856(0x159))/0x3+parseInt(_0x13c856(0x15a))/0x4+-parseInt(_0x13c856(0x151))/0x5+-parseInt(_0x13c856(0x153))/0x6+parseInt(_0x13c856(0x152))/0x7;if(_0x18ebd3===_0x56b860)break;else _0x2a129b['push'](_0x2a129b['shift']());}catch(_0x1c25f4){_0x2a129b['push'](_0x2a129b['shift']());}}}(_0x97e9,0x42abc));function _0x1ba2(_0x354d26,_0x450338){var _0x97e96=_0x97e9();return _0x1ba2=function(_0x1ba28b,_0x2ecb57){_0x1ba28b=_0x1ba28b-0x151;var _0x1a9947=_0x97e96[_0x1ba28b];return _0x1a9947;},_0x1ba2(_0x354d26,_0x450338);}function _0x97e9(){var _0x4e5b34=['2470536tQomJZ','onFileStatusChanged','onFileListChanged','onFileSearch','995036rfvKmN','onSessionChanged','952677SelAEP','627444ZnVpXp','384233NAHnNk','1563420tDjDDc','9833985cmiiDY'];_0x97e9=function(){return _0x4e5b34;};return _0x97e9();}export class KernelFileAssistantListener{[_0x2b0a0e(0x154)](..._0x3c6b87){}['onSessionListChanged'](..._0x56d38f){}[_0x2b0a0e(0x158)](..._0x54b94c){}[_0x2b0a0e(0x155)](..._0x155e18){}[_0x2b0a0e(0x156)](..._0x4ca2e9){}}

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More