Compare commits

...

134 Commits

Author SHA1 Message Date
手瓜一十雪
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
手瓜一十雪
389695a0d6 fix: 1.4.5 2024-05-31 21:22:17 +08:00
手瓜一十雪
07f1afb312 fix 2024-05-31 21:03:00 +08:00
手瓜一十雪
ae91e61304 refactor:NTEvent 2024-05-31 21:02:39 +08:00
手瓜一十雪
6248991b01 refactor: NTEvent 2024-05-31 20:38:31 +08:00
手瓜一十雪
7f2d57ef62 refactor: event 2024-05-31 20:29:01 +08:00
手瓜一十雪
31f8f884f1 refactor: NTEvent 2024-05-31 19:09:03 +08:00
手瓜一十雪
4f4af5985a fix: type check & type output 2024-05-31 18:55:18 +08:00
手瓜一十雪
a716fdf6d4 refactor:NTEventDispatch 2024-05-31 14:07:35 +08:00
手瓜一十雪
9717f64abd refactor:NTEvent 2024-05-31 13:55:28 +08:00
手瓜一十雪
adf239183a docs: change 2024-05-31 10:12:59 +08:00
手瓜一十雪
6cf209c79c release: v1.4.4 2024-05-30 22:45:57 +08:00
手瓜一十雪
decc5fb3c0 refactor: checkDate 2024-05-30 22:41:51 +08:00
手瓜一十雪
1e0820d613 refactor: send rate 2024-05-30 22:38:02 +08:00
手瓜一十雪
70124d5177 refactor: GoCQHTTPUploadGroupFile 2024-05-30 22:32:09 +08:00
手瓜一十雪
269de65201 fix: undel 2024-05-30 20:53:58 +08:00
手瓜一十雪
1d11abbfb6 refactor: NTEvent 2024-05-30 19:40:40 +08:00
手瓜一十雪
700f308d6e feat: wrap NT-Event 2024-05-30 17:28:08 +08:00
手瓜一十雪
21b6928ca6 chore: sync core 2024-05-30 16:24:09 +08:00
207 changed files with 4100 additions and 2152 deletions

View File

@@ -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

@@ -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

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,10 @@
# v1.4.4
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,12 @@
# v1.4.5
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,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)

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

@@ -2,7 +2,7 @@
"name": "napcat",
"private": true,
"type": "module",
"version": "1.4.3",
"version": "1.6.0",
"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",
@@ -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

@@ -0,0 +1,182 @@
import { NodeIKernelMsgListener } from '@/core';
import { NodeIQQNTWrapperSession } from '@/core/wrapper';
import { randomUUID } from 'crypto';
interface Internal_MapKey {
timeout: number,
createtime: number,
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: { [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 = new Map<string, Map<string, Map<string, Internal_MapKey>>>();//tasks ListenerMainName -> ListenerSubName-> uuid -> {timeout,createtime,func}
constructor() {
}
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 {
const eventNameArr = eventName.split('/');
type eventType = {
[key: string]: () => { [key: string]: (...params: Parameters<T>) => Promise<ReturnType<T>> }
}
if (eventNameArr.length > 1) {
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);
if (event) {
return event as T;
}
return undefined;
}
}
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(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);
//console.log(addfunc!(Listener as T));
this.ListenerManger.set(listenerMainName + uniqueCode, Listener);
}
return Listener as T;
}
//统一回调清理事件
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<Awaited<ReturnType<EventType>>>(async (resolve, reject) => {
const EventFunc = this.CreatEventFunction<EventType>(EventName);
let complete = false;
const Timeouter = setTimeout(() => {
if (!complete) {
reject(new Error('NTEvent EventName:' + EventName + ' timeout'));
}
}, timeout);
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<[EventRet: Awaited<ReturnType<EventType>>, ...Parameters<ListenerType>]>(async (resolve, reject) => {
const id = randomUUID();
let complete = 0;
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([retEvent as Awaited<ReturnType<EventType>>, ...retData!]);
}
};
const Timeouter = setTimeout(databack, timeout);
const ListenerNameList = ListenerName.split('/');
const ListenerMainName = ListenerNameList[0];
const ListenerSubName = ListenerNameList[1];
const eventCallbak = {
timeout: timeout,
createtime: Date.now(),
func: (...args: any[]) => {
complete++;
//console.log('func', ...args);
retData = args as Parameters<ListenerType>;
if (complete >= waitTimes) {
clearTimeout(Timeouter);
databack();
}
}
};
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 TestEvent = NTEvent.CreatEventFunction<(force: boolean) => Promise<Number>>('NodeIKernelProfileLikeService/GetTest');
// if (TestEvent) {
// TestEvent(true);
// }
// 示例代码 快速创建监听Listener类
// let NTEvent = new NTEventWrapper();
// NTEvent.CreatListenerFunction<NodeIKernelMsgListener>('NodeIKernelMsgListener', 'core')
// 调用接口
//let NTEvent = new NTEventWrapper();
//let ret = await NTEvent.CallNormalEvent<(force: boolean) => Promise<Number>, (data1: string, data2: number) => void>('NodeIKernelProfileLikeService/GetTest', 'NodeIKernelMsgListener/onAddSendMsg', 1, 3000, true);
// 注册监听 解除监听
// NTEventDispatch.RigisterListener('NodeIKernelMsgListener/onAddSendMsg','core',cb);
// NTEventDispatch.UnRigisterListener('NodeIKernelMsgListener/onAddSendMsg','core');
// let GetTest = NTEventDispatch.CreatEvent('NodeIKernelProfileLikeService/GetTest','NodeIKernelMsgListener/onAddSendMsg',Mode);
// GetTest('test');
// always模式
// NTEventDispatch.CreatEvent('NodeIKernelProfileLikeService/GetTest','NodeIKernelMsgListener/onAddSendMsg',Mode,(...args:any[])=>{ console.log(args) });

View File

@@ -1,145 +1,145 @@
import { logError, logDebug } from "@/common/utils/log";
type group_id = number;
type user_id = number;
class cacheNode<T> {
value: T;
groupId: group_id;
userId: user_id;
prev: cacheNode<T> | null;
next: cacheNode<T> | null;
timestamp: number;
constructor(groupId: group_id, userId: user_id, value: T) {
this.groupId = groupId;
this.userId = userId;
this.value = value;
this.prev = null;
this.next = null;
this.timestamp = Date.now();
}
}
type cache<T> = { [key: group_id]: { [key: user_id]: cacheNode<T> } };
class LRU<T> {
private maxAge: number;
private maxSize: number;
private currentSize: number;
private cache: cache<T>;
private head: cacheNode<T> | null = null;
private tail: cacheNode<T> | null = null;
private onFuncs: ((node: cacheNode<T>) => void)[] = [];
constructor(maxAge: number = 2e4, maxSize: number = 5e3) {
this.maxAge = maxAge;
this.maxSize = maxSize;
this.cache = Object.create(null);
this.currentSize = 0;
if (maxSize == 0) return;
setInterval(() => this.removeExpired(), this.maxAge);
}
// 移除LRU节点
private removeLRUNode(node: cacheNode<T>) {
logDebug(
"removeLRUNode",
node.groupId,
node.userId,
node.value,
this.currentSize
);
node.prev = node.next = null;
delete this.cache[node.groupId][node.userId];
this.removeNode(node);
this.onFuncs.forEach((func) => func(node));
this.currentSize--;
}
public on(func: (node: cacheNode<T>) => void) {
this.onFuncs.push(func);
}
private removeExpired() {
const now = Date.now();
let current = this.tail;
const nodesToRemove: cacheNode<T>[] = [];
let removedCount = 0;
// 收集需要删除的节点
while (current && now - current.timestamp > this.maxAge) {
nodesToRemove.push(current);
current = current.prev;
removedCount++;
if (removedCount >= 100) break;
}
// 更新链表指向
if (nodesToRemove.length > 0) {
const newTail = nodesToRemove[nodesToRemove.length - 1].prev;
if (newTail) {
newTail.next = null;
} else {
this.head = null;
}
this.tail = newTail;
}
nodesToRemove.forEach((node) => {
node.prev = node.next = null;
delete this.cache[node.groupId][node.userId];
this.currentSize--;
this.onFuncs.forEach((func) => func(node));
});
}
private addNode(node: cacheNode<T>) {
node.next = this.head;
if (this.head) this.head.prev = node;
if (!this.tail) this.tail = node;
this.head = node;
}
private removeNode(node: cacheNode<T>) {
if (node.prev) node.prev.next = node.next;
if (node.next) node.next.prev = node.prev;
if (node === this.head) this.head = node.next;
if (node === this.tail) this.tail = node.prev;
}
private moveToHead(node: cacheNode<T>) {
if (this.head === node) return;
this.removeNode(node);
this.addNode(node);
node.prev = null;
}
public set(groupId: group_id, userId: user_id, value: T) {
if (!this.cache[groupId]) {
this.cache[groupId] = Object.create(null);
}
const groupObject = this.cache[groupId];
if (groupObject[userId]) {
const node = groupObject[userId];
node.value = value;
node.timestamp = Date.now();
this.moveToHead(node);
} else {
const node = new cacheNode(groupId, userId, value);
groupObject[userId] = node;
this.currentSize++;
this.addNode(node);
if (this.currentSize > this.maxSize) {
const tail = this.tail!;
this.removeLRUNode(tail);
}
}
}
}
export default LRU;
import { logError, logDebug } from '@/common/utils/log';
type group_id = number;
type user_id = number;
class cacheNode<T> {
value: T;
groupId: group_id;
userId: user_id;
prev: cacheNode<T> | null;
next: cacheNode<T> | null;
timestamp: number;
constructor(groupId: group_id, userId: user_id, value: T) {
this.groupId = groupId;
this.userId = userId;
this.value = value;
this.prev = null;
this.next = null;
this.timestamp = Date.now();
}
}
type cache<T> = { [key: group_id]: { [key: user_id]: cacheNode<T> } };
class LRU<T> {
private maxAge: number;
private maxSize: number;
private currentSize: number;
private cache: cache<T>;
private head: cacheNode<T> | null = null;
private tail: cacheNode<T> | null = null;
private onFuncs: ((node: cacheNode<T>) => void)[] = [];
constructor(maxAge: number = 2e4, maxSize: number = 5e3) {
this.maxAge = maxAge;
this.maxSize = maxSize;
this.cache = Object.create(null);
this.currentSize = 0;
if (maxSize == 0) return;
setInterval(() => this.removeExpired(), this.maxAge);
}
// 移除LRU节点
private removeLRUNode(node: cacheNode<T>) {
logDebug(
'removeLRUNode',
node.groupId,
node.userId,
node.value,
this.currentSize
);
node.prev = node.next = null;
delete this.cache[node.groupId][node.userId];
this.removeNode(node);
this.onFuncs.forEach((func) => func(node));
this.currentSize--;
}
public on(func: (node: cacheNode<T>) => void) {
this.onFuncs.push(func);
}
private removeExpired() {
const now = Date.now();
let current = this.tail;
const nodesToRemove: cacheNode<T>[] = [];
let removedCount = 0;
// 收集需要删除的节点
while (current && now - current.timestamp > this.maxAge) {
nodesToRemove.push(current);
current = current.prev;
removedCount++;
if (removedCount >= 100) break;
}
// 更新链表指向
if (nodesToRemove.length > 0) {
const newTail = nodesToRemove[nodesToRemove.length - 1].prev;
if (newTail) {
newTail.next = null;
} else {
this.head = null;
}
this.tail = newTail;
}
nodesToRemove.forEach((node) => {
node.prev = node.next = null;
delete this.cache[node.groupId][node.userId];
this.currentSize--;
this.onFuncs.forEach((func) => func(node));
});
}
private addNode(node: cacheNode<T>) {
node.next = this.head;
if (this.head) this.head.prev = node;
if (!this.tail) this.tail = node;
this.head = node;
}
private removeNode(node: cacheNode<T>) {
if (node.prev) node.prev.next = node.next;
if (node.next) node.next.prev = node.prev;
if (node === this.head) this.head = node.next;
if (node === this.tail) this.tail = node.prev;
}
private moveToHead(node: cacheNode<T>) {
if (this.head === node) return;
this.removeNode(node);
this.addNode(node);
node.prev = null;
}
public set(groupId: group_id, userId: user_id, value: T) {
if (!this.cache[groupId]) {
this.cache[groupId] = Object.create(null);
}
const groupObject = this.cache[groupId];
if (groupObject[userId]) {
const node = groupObject[userId];
node.value = value;
node.timestamp = Date.now();
this.moveToHead(node);
} else {
const node = new cacheNode(groupId, userId, value);
groupObject[userId] = node;
this.currentSize++;
this.addNode(node);
if (this.currentSize > this.maxSize) {
const tail = this.tail!;
this.removeLRUNode(tail);
}
}
}
}
export default LRU;

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) {
let 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

@@ -1,509 +1,449 @@
import { ElementType, FileElement, PicElement, PttElement, RawMessage, VideoElement } from '../../core/src/entities';
import sqlite3 from 'sqlite3';
import { log, logDebug, logError } from '@/common/utils/log';
import { NTQQMsgApi } from '@/core';
import LRU from "@/common/utils/LRUCache";
export interface IRember {
last_sent_time: number;
join_time: number;
user_id: number;
}
type DBMsg = {
id: number,
shortId: number,
longId: string,
seq: number,
peerUid: string,
chatType: number,
}
type DBFile = {
name: string; // 文件名
path: string;
url: string;
size: number;
uuid: string;
msgId: string;
elementId: string;
element: PicElement | VideoElement | FileElement | PttElement;
elementType: ElementType.PIC | ElementType.VIDEO | ElementType.FILE | ElementType.PTT;
}
class DBUtilBase {
protected db: sqlite3.Database | undefined;
async init(dbPath: string) {
if (this.db) {
return;
}
return new Promise<void>((resolve, reject) => {
this.db = new sqlite3.Database(dbPath, sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, (err) => {
if (err) {
logError('Could not connect to database', err);
reject(err);
return;
}
this.createTable();
resolve();
});
});
}
protected createTable() {
throw new Error('Method not implemented.');
}
close() {
this.db?.close();
}
}
class DBUtil extends DBUtilBase {
private msgCache: Map<string | number, RawMessage> = new Map<string | number, RawMessage>();
private globalMsgShortId = -2147483640;
private groupIds: number[] = [];
private LURCache = new LRU<number>();
private LastSentCache = new (class {
private cache: { gid: number; uid: number }[] = [];
private maxSize: number;
constructor(maxSize: number = 5000) {
this.maxSize = maxSize;
}
get(gid: number, uid: number): boolean {
const exists = this.cache.some(
(entry) => entry.gid === gid && entry.uid === uid
);
if (!exists) {
this.cache.push({ gid, uid });
if (this.cache.length > this.maxSize) {
this.cache.shift();
}
}
return exists;
}
})();
constructor() {
super();
const interval = 1000 * 60 * 10; // 10分钟清理一次缓存
setInterval(() => {
logDebug('清理消息缓存');
this.msgCache.forEach((msg, key) => {
if ((Date.now() - parseInt(msg.msgTime) * 1000) > interval) {
this.msgCache.delete(key);
}
});
}, interval);
}
async init(dbPath: string) {
await super.init(dbPath);
this.globalMsgShortId = await this.getCurrentMaxShortId();
// 初始化群缓存列表
this.db!.serialize(() => {
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)));
//logDebug(`已加载 ${groupIds.length} 个群`);
});
});
this.LURCache.on(async (node) => {
const { value: time, groupId, userId } = node;
logDebug("插入发言时间", userId, groupId);
await this.createGroupInfoTimeTableIfNotExist(groupId);
const method = await this.getDataSetMethod(groupId, userId);
logDebug("插入发言时间方法判断", userId, groupId, method);
const sql =
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);
}
logDebug("插入/更新发言时间成功", userId, groupId);
});
});
}
async getDataSetMethod(groupId: number, userId: number) {
// 缓存记录
if (this.LastSentCache.get(groupId, userId)) {
logDebug("缓存命中", userId, groupId);
return "update";
}
// 数据库判断
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);
}
if (rows.length === 0) {
logDebug("查询发言时间不存在", userId, groupId);
return resolve("insert");
}
logDebug("查询发言时间存在", userId, groupId);
resolve("update");
}
);
});
}
async createGroupInfoTimeTableIfNotExist(groupId: number) {
const createTableSQL = (groupId: number) =>
`CREATE TABLE IF NOT EXISTS "${groupId}" (
user_id INTEGER,
last_sent_time INTEGER,
join_time INTEGER,
PRIMARY KEY (user_id)
);`;
if (this.groupIds.includes(groupId)) {
return;
}
return new Promise((resolve, reject) => {
const sql = createTableSQL(groupId);
this.db!.all(sql, (err) => {
if (err) {
reject(err);
return;
}
this.groupIds.push(groupId);
resolve(true);
});
});
}
protected createTable() {
// 消息记录
const createTableSQL = `
CREATE TABLE IF NOT EXISTS msgs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
shortId INTEGER NOT NULL UNIQUE,
longId TEXT NOT NULL UNIQUE,
seq INTEGER NOT NULL,
peerUid TEXT NOT NULL,
chatType INTEGER NOT NULL
)`;
this.db!.run(createTableSQL, function (err) {
if (err) {
logError('Could not create table msgs', err.stack);
}
});
// 文件缓存
const createFileTableSQL = `
CREATE TABLE IF NOT EXISTS files (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
path TEXT NOT NULL,
url TEXT,
size INTEGER NOT NULL,
uuid TEXT,
elementType INTEGER,
element TEXT NOT NULL,
elementId TEXT NOT NULL,
msgId TEXT NOT NULL
)`;
this.db!.run(createFileTableSQL, function (err) {
if (err) {
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() {
return new Promise<number>((resolve, reject) => {
this.db!.get('SELECT MAX(shortId) as maxId FROM msgs', (err, row: { maxId: number }) => {
if (err) {
logDebug('Could not get max short id, Use default -2147483640', err);
return resolve(-2147483640);
}
logDebug('数据库中消息最大短id', row?.maxId);
resolve(row?.maxId ?? -2147483640);
});
});
}
private async getMsg(query: string, params: any[]) {
const stmt = this.db!.prepare(query);
return new Promise<RawMessage | null>((resolve, reject) => {
stmt.get(...params, (err: any, row: DBMsg) => {
// log("getMsg", row, err);
if (err) {
logError('Could not get msg', err, query, params);
return resolve(null);
}
if (!row) {
// logDebug('不存在数据库中的消息,不进行处理', query, params);
resolve(null);
return;
}
const msgId = row.longId;
NTQQMsgApi.getMsgsByMsgId({ peerUid: row.peerUid, chatType: row.chatType }, [msgId]).then(res => {
const msg = res.msgList[0];
if (!msg) {
resolve(null);
return;
}
msg.id = row.shortId;
resolve(msg);
}).catch(e => {
resolve(null);
});
});
});
}
async getMsgByShortId(shortId: number): Promise<RawMessage | null> {
if (this.msgCache.has(shortId)) {
return this.msgCache.get(shortId)!;
}
const getStmt = 'SELECT * FROM msgs WHERE shortId = ?';
return this.getMsg(getStmt, [shortId]);
}
async getMsgByLongId(longId: string): Promise<RawMessage | null> {
if (this.msgCache.has(longId)) {
return this.msgCache.get(longId)!;
}
return this.getMsg('SELECT * FROM msgs WHERE longId = ?', [longId]);
}
async getMsgBySeq(peerUid: string, seq: string): Promise<RawMessage | null> {
const stmt = 'SELECT * FROM msgs WHERE peerUid = ? AND seq = ?';
return this.getMsg(stmt, [peerUid, seq]);
}
async addMsg(msg: RawMessage, update = true): Promise<number> {
const existMsg = await this.getMsgByLongId(msg.msgId);
if (existMsg) {
// logDebug('消息已存在,更新数据库', msg.msgId);
if (update) this.updateMsg(msg).then();
return existMsg.id!;
}
const stmt = this.db!.prepare('INSERT INTO msgs (shortId, longId, seq, peerUid, chatType) VALUES (?, ?, ?, ?, ?)');
// const runAsync = promisify(stmt.run.bind(stmt));
const shortId = ++this.globalMsgShortId;
msg.id = shortId;
//logDebug(`记录消息到数据库, 消息长id: ${msg.msgId}, 短id: ${msg.id}`);
this.msgCache.set(shortId, msg);
this.msgCache.set(msg.msgId, msg);
stmt.run(this.globalMsgShortId, msg.msgId, msg.msgSeq.toString(), msg.peerUid, msg.chatType, (err: any) => {
if (err) {
if (err.errno === 19) {
this.getMsgByLongId(msg.msgId).then((msg: RawMessage | null) => {
if (msg) {
this.msgCache.set(shortId, msg);
this.msgCache.set(msg.msgId, msg);
// logDebug('获取消息短id成功', msg.id);
} else {
logError('db could not get msg by long id', err);
}
}).catch(e => logError('db getMsgByLongId error', e));
} else {
logError('db could not add msg', err);
}
}
});
return shortId;
}
async updateMsg(msg: RawMessage) {
const existMsg = this.msgCache.get(msg.msgId);
if (existMsg) {
Object.assign(existMsg, msg);
}
//logDebug(`更新消息, shortId:${msg.id}, seq: ${msg.msgSeq}, msgId: ${msg.msgId}`);
const stmt = this.db!.prepare('UPDATE msgs SET seq=? WHERE longId=?');
stmt.run(msg.msgSeq, msg.msgId, (err: any) => {
if (err) {
logError('updateMsg db error', err);
}
});
}
async addFileCache(file: DBFile) {
const stmt = this.db!.prepare('INSERT INTO files (name, path, url, size, uuid, elementType ,element, elementId, msgId) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)');
return new Promise((resolve, reject) => {
stmt.run(file.name, file.path, file.url, file.size, file.uuid,
file.elementType,
JSON.stringify(file.element),
file.elementId,
file.msgId,
function (err: any) {
if (err) {
logError('db could not add file', err);
reject(err);
}
resolve(null);
});
});
}
private async getFileCache(query: string, params: any[]) {
const stmt = this.db!.prepare(query);
return new Promise<DBFile | null>((resolve, reject) => {
stmt.get(...params, (err: any, row: DBFile & { element: string }) => {
if (err) {
logError('db could not get file cache', err);
reject(err);
}
if (row) {
row.element = JSON.parse(row.element);
}
resolve(row);
});
});
}
async getFileCacheByName(name: string): Promise<DBFile | null> {
return this.getFileCache('SELECT * FROM files WHERE name = ?', [name]);
}
async getFileCacheByUuid(uuid: string): Promise<DBFile | null> {
return this.getFileCache('SELECT * FROM files WHERE uuid = ?', [uuid]);
}
// todo: 是否所有的文件都有uuid语音消息有没有uuid
async updateFileCache(file: DBFile) {
const stmt = this.db!.prepare('UPDATE files SET path = ?, url = ? WHERE uuid = ?');
return new Promise((resolve, reject) => {
stmt.run(file.path, file.url, file.uuid, function (err: any) {
if (err) {
logError('db could not update file cache', err);
reject(err);
}
resolve(null);
});
});
}
// 被动收到的临时会话消息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);
return new Promise<IRember[]>((resolve, reject) => {
this.db!.all(`SELECT * FROM "${groupId}" `, (err, rows: IRember[]) => {
if (err) {
logError("查询发言时间失败", groupId);
return resolve([]);
}
logDebug("查询发言时间成功", groupId, rows);
resolve(rows);
});
});
}
insertLastSentTime(
groupId: number,
userId: number,
time: number
) {
this.LURCache.set(groupId, userId, time)
}
async insertJoinTime(
groupId: number,
userId: number,
time: number
) {
await this.createGroupInfoTimeTableIfNotExist(groupId);
this.db!.all(
`INSERT OR REPLACE INTO "${groupId}" (user_id, last_sent_time, join_time) VALUES (?,?,?)`,
[userId, time, time],
(err) => {
if (err)
logError(err),
Promise.reject(),
console.log("插入入群时间失败", userId, groupId);
}
);
}
}
export const dbUtil = new DBUtil();
import { ElementType, FileElement, PicElement, PttElement, RawMessage, VideoElement } from '../../core/src/entities';
import sqlite3 from 'sqlite3';
import { log, logDebug, logError } from '@/common/utils/log';
import { NTQQMsgApi } from '@/core';
import LRU from '@/common/utils/LRUCache';
export interface IRember {
last_sent_time: number;
join_time: number;
user_id: number;
}
type DBMsg = {
id: number,
shortId: number,
longId: string,
seq: number,
peerUid: string,
chatType: number,
}
type DBFile = {
name: string; // 文件名
path: string;
url: string;
size: number;
uuid: string;
msgId: string;
elementId: string;
element: PicElement | VideoElement | FileElement | PttElement;
elementType: ElementType.PIC | ElementType.VIDEO | ElementType.FILE | ElementType.PTT;
}
class DBUtilBase {
protected db: sqlite3.Database | undefined;
async init(dbPath: string) {
if (this.db) {
return;
}
return new Promise<void>((resolve, reject) => {
this.db = new sqlite3.Database(dbPath, sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, (err) => {
if (err) {
logError('Could not connect to database', err);
reject(err);
return;
}
this.createTable();
resolve();
});
});
}
protected createTable() {
throw new Error('Method not implemented.');
}
close() {
this.db?.close();
}
}
class DBUtil extends DBUtilBase {
private msgCache: Map<string | number, RawMessage> = new Map<string | number, RawMessage>();
private globalMsgShortId = -2147483640;
private groupIds: number[] = [];
private LURCache = new LRU<number>();
private LastSentCache = new (class {
private cache: { gid: number; uid: number }[] = [];
private maxSize: number;
constructor(maxSize: number = 5000) {
this.maxSize = maxSize;
}
get(gid: number, uid: number): boolean {
const exists = this.cache.some(
(entry) => entry.gid === gid && entry.uid === uid
);
if (!exists) {
this.cache.push({ gid, uid });
if (this.cache.length > this.maxSize) {
this.cache.shift();
}
}
return exists;
}
})();
constructor() {
super();
const interval = 1000 * 60 * 10; // 10分钟清理一次缓存
setInterval(() => {
logDebug('清理消息缓存');
this.msgCache.forEach((msg, key) => {
if ((Date.now() - parseInt(msg.msgTime) * 1000) > interval) {
this.msgCache.delete(key);
}
});
}, interval);
}
async init(dbPath: string) {
await super.init(dbPath);
this.globalMsgShortId = await this.getCurrentMaxShortId();
// 初始化群缓存列表
this.db!.serialize(() => {
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)));
//logDebug(`已加载 ${groupIds.length} 个群`);
});
});
this.LURCache.on(async (node) => {
const { value: time, groupId, userId } = node;
logDebug('插入发言时间', userId, groupId);
await this.createGroupInfoTimeTableIfNotExist(groupId);
const method = await this.getDataSetMethod(groupId, userId);
logDebug('插入发言时间方法判断', userId, groupId, method);
const sql =
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);
}
logDebug('插入/更新发言时间成功', userId, groupId);
});
});
}
async getDataSetMethod(groupId: number, userId: number) {
// 缓存记录
if (this.LastSentCache.get(groupId, userId)) {
logDebug('缓存命中', userId, groupId);
return 'update';
}
// 数据库判断
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);
}
if (rows.length === 0) {
logDebug('查询发言时间不存在', userId, groupId);
return resolve('insert');
}
logDebug('查询发言时间存在', userId, groupId);
resolve('update');
}
);
});
}
async createGroupInfoTimeTableIfNotExist(groupId: number) {
const createTableSQL = (groupId: number) =>
`CREATE TABLE IF NOT EXISTS "${groupId}" (
user_id INTEGER,
last_sent_time INTEGER,
join_time INTEGER,
PRIMARY KEY (user_id)
);`;
if (this.groupIds.includes(groupId)) {
return;
}
return new Promise((resolve, reject) => {
const sql = createTableSQL(groupId);
this.db!.all(sql, (err) => {
if (err) {
reject(err);
return;
}
this.groupIds.push(groupId);
resolve(true);
});
});
}
protected createTable() {
// 消息记录
const createTableSQL = `
CREATE TABLE IF NOT EXISTS msgs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
shortId INTEGER NOT NULL UNIQUE,
longId TEXT NOT NULL UNIQUE,
seq INTEGER NOT NULL,
peerUid TEXT NOT NULL,
chatType INTEGER NOT NULL
)`;
this.db!.run(createTableSQL, function (err) {
if (err) {
logError('Could not create table msgs', err.stack);
}
});
// 文件缓存
const createFileTableSQL = `
CREATE TABLE IF NOT EXISTS files (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
path TEXT NOT NULL,
url TEXT,
size INTEGER NOT NULL,
uuid TEXT,
elementType INTEGER,
element TEXT NOT NULL,
elementId TEXT NOT NULL,
msgId TEXT NOT NULL
)`;
this.db!.run(createFileTableSQL, function (err) {
if (err) {
logError('Could not create table files', err);
}
});
}
private async getCurrentMaxShortId() {
return new Promise<number>((resolve, reject) => {
this.db!.get('SELECT MAX(shortId) as maxId FROM msgs', (err, row: { maxId: number }) => {
if (err) {
logDebug('Could not get max short id, Use default -2147483640', err);
return resolve(-2147483640);
}
logDebug('数据库中消息最大短id', row?.maxId);
resolve(row?.maxId ?? -2147483640);
});
});
}
private async getMsg(query: string, params: any[]) {
const stmt = this.db!.prepare(query);
return new Promise<RawMessage | null>((resolve, reject) => {
stmt.get(...params, (err: any, row: DBMsg) => {
// log("getMsg", row, err);
if (err) {
logError('Could not get msg', err, query, params);
return resolve(null);
}
if (!row) {
// logDebug('不存在数据库中的消息,不进行处理', query, params);
resolve(null);
return;
}
const msgId = row.longId;
NTQQMsgApi.getMsgsByMsgId({ peerUid: row.peerUid, chatType: row.chatType }, [msgId]).then(res => {
const msg = res.msgList[0];
if (!msg) {
resolve(null);
return;
}
msg.id = row.shortId;
resolve(msg);
}).catch(e => {
resolve(null);
});
});
});
}
async getMsgByShortId(shortId: number): Promise<RawMessage | null> {
if (this.msgCache.has(shortId)) {
return this.msgCache.get(shortId)!;
}
const getStmt = 'SELECT * FROM msgs WHERE shortId = ?';
return this.getMsg(getStmt, [shortId]);
}
async getMsgByLongId(longId: string): Promise<RawMessage | null> {
if (this.msgCache.has(longId)) {
return this.msgCache.get(longId)!;
}
return this.getMsg('SELECT * FROM msgs WHERE longId = ?', [longId]);
}
async getMsgBySeq(peerUid: string, seq: string): Promise<RawMessage | null> {
const stmt = 'SELECT * FROM msgs WHERE peerUid = ? AND seq = ?';
return this.getMsg(stmt, [peerUid, seq]);
}
async addMsg(msg: RawMessage, update = true): Promise<number> {
const existMsg = await this.getMsgByLongId(msg.msgId);
if (existMsg) {
// logDebug('消息已存在,更新数据库', msg.msgId);
if (update) this.updateMsg(msg).then();
return existMsg.id!;
}
const stmt = this.db!.prepare('INSERT INTO msgs (shortId, longId, seq, peerUid, chatType) VALUES (?, ?, ?, ?, ?)');
// const runAsync = promisify(stmt.run.bind(stmt));
const shortId = ++this.globalMsgShortId;
msg.id = shortId;
//logDebug(`记录消息到数据库, 消息长id: ${msg.msgId}, 短id: ${msg.id}`);
this.msgCache.set(shortId, msg);
this.msgCache.set(msg.msgId, msg);
stmt.run(this.globalMsgShortId, msg.msgId, msg.msgSeq.toString(), msg.peerUid, msg.chatType, (err: any) => {
if (err) {
if (err.errno === 19) {
this.getMsgByLongId(msg.msgId).then((msg: RawMessage | null) => {
if (msg) {
this.msgCache.set(shortId, msg);
this.msgCache.set(msg.msgId, msg);
// logDebug('获取消息短id成功', msg.id);
} else {
logError('db could not get msg by long id', err);
}
}).catch(e => logError('db getMsgByLongId error', e));
} else {
logError('db could not add msg', err);
}
}
});
return shortId;
}
async updateMsg(msg: RawMessage) {
const existMsg = this.msgCache.get(msg.msgId);
if (existMsg) {
Object.assign(existMsg, msg);
}
//logDebug(`更新消息, shortId:${msg.id}, seq: ${msg.msgSeq}, msgId: ${msg.msgId}`);
const stmt = this.db!.prepare('UPDATE msgs SET seq=? WHERE longId=?');
stmt.run(msg.msgSeq, msg.msgId, (err: any) => {
if (err) {
logError('updateMsg db error', err);
}
});
}
async addFileCache(file: DBFile) {
const stmt = this.db!.prepare('INSERT INTO files (name, path, url, size, uuid, elementType ,element, elementId, msgId) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)');
return new Promise((resolve, reject) => {
stmt.run(file.name, file.path, file.url, file.size, file.uuid,
file.elementType,
JSON.stringify(file.element),
file.elementId,
file.msgId,
function (err: any) {
if (err) {
logError('db could not add file', err);
reject(err);
}
resolve(null);
});
});
}
private async getFileCache(query: string, params: any[]) {
const stmt = this.db!.prepare(query);
return new Promise<DBFile | null>((resolve, reject) => {
stmt.get(...params, (err: any, row: DBFile & { element: string }) => {
if (err) {
logError('db could not get file cache', err);
reject(err);
}
if (row) {
row.element = JSON.parse(row.element);
}
resolve(row);
});
});
}
async getFileCacheByName(name: string): Promise<DBFile | null> {
return this.getFileCache('SELECT * FROM files WHERE name = ?', [name]);
}
async getFileCacheByUuid(uuid: string): Promise<DBFile | null> {
return this.getFileCache('SELECT * FROM files WHERE uuid = ?', [uuid]);
}
// todo: 是否所有的文件都有uuid语音消息有没有uuid
async updateFileCache(file: DBFile) {
const stmt = this.db!.prepare('UPDATE files SET path = ?, url = ? WHERE uuid = ?');
return new Promise((resolve, reject) => {
stmt.run(file.path, file.url, file.uuid, function (err: any) {
if (err) {
logError('db could not update file cache', err);
reject(err);
}
resolve(null);
});
});
}
async getLastSentTimeAndJoinTime(
groupId: number
): Promise<IRember[]> {
logDebug('读取发言时间', groupId);
return new Promise<IRember[]>((resolve, reject) => {
this.db!.all(`SELECT * FROM "${groupId}" `, (err, rows: IRember[]) => {
if (err) {
logError('查询发言时间失败', groupId);
return resolve([]);
}
logDebug('查询发言时间成功', groupId, rows);
resolve(rows);
});
});
}
insertLastSentTime(
groupId: number,
userId: number,
time: number
) {
this.LURCache.set(groupId, userId, time);
}
async insertJoinTime(
groupId: number,
userId: number,
time: number
) {
await this.createGroupInfoTimeTableIfNotExist(groupId);
this.db!.all(
`INSERT OR REPLACE INTO "${groupId}" (user_id, last_sent_time, join_time) VALUES (?,?,?)`,
[userId, time, time],
(err) => {
if (err)
logError(err),
Promise.reject(),
logError('插入入群时间失败', userId, groupId);
}
);
}
}
export const dbUtil = new DBUtil();

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生成缓存键在一定时间内返回缓存结果
@@ -181,4 +261,26 @@ export function isEqual(obj1: any, obj2: any) {
if (!isEqual(obj1[key], obj2[key])) return false;
}
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,6 +1,9 @@
import https from 'node:https';
import http from 'node:http';
import fs, { readFileSync } from 'node:fs';
import { NTQQUserApi } from '@/core';
import path from 'node:path';
import { request } from 'node:http';
export class RequestUtil {
// 适用于获取服务器下发cookies时获取仅GET
static async HttpsGetCookies(url: string): Promise<{ [key: string]: string }> {
@@ -49,7 +52,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 +62,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 +107,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) => {
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();
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 @@
function _0x25a6(){var _0xdd7643=['171480fTSZGd','13mTAWhM','212UxsLaG','218104NjVwMP','176PerDSv','6gTIyto','999355ASHHIg','4114uTcLFG','getGroupCode','188488EaPnYY','11621736UKRGew','35SooqVm','onMSFSsoError','157848LdBgRG','45VADGBR'];_0x25a6=function(){return _0xdd7643;};return _0x25a6();}var _0x4edd10=_0x5825;function _0x5825(_0x3ca2ee,_0x2ea4bb){var _0x25a61d=_0x25a6();return _0x5825=function(_0x58250a,_0x450460){_0x58250a=_0x58250a-0x18b;var _0x304a6d=_0x25a61d[_0x58250a];return _0x304a6d;},_0x5825(_0x3ca2ee,_0x2ea4bb);}(function(_0x34a7e7,_0x28e4cb){var _0x5cd101=_0x5825,_0xfe3b98=_0x34a7e7();while(!![]){try{var _0x48368d=-parseInt(_0x5cd101(0x18f))/0x1*(parseInt(_0x5cd101(0x199))/0x2)+parseInt(_0x5cd101(0x18d))/0x3*(-parseInt(_0x5cd101(0x191))/0x4)+-parseInt(_0x5cd101(0x18e))/0x5+-parseInt(_0x5cd101(0x195))/0x6*(parseInt(_0x5cd101(0x193))/0x7)+-parseInt(_0x5cd101(0x18b))/0x8*(parseInt(_0x5cd101(0x196))/0x9)+parseInt(_0x5cd101(0x197))/0xa*(parseInt(_0x5cd101(0x18c))/0xb)+-parseInt(_0x5cd101(0x192))/0xc*(-parseInt(_0x5cd101(0x198))/0xd);if(_0x48368d===_0x28e4cb)break;else _0xfe3b98['push'](_0xfe3b98['shift']());}catch(_0x2b3d8b){_0xfe3b98['push'](_0xfe3b98['shift']());}}}(_0x25a6,0x3bc38));export class DependsAdapter{['onMSFStatusChange'](_0x3c4517,_0x2bacbb){}[_0x4edd10(0x194)](_0x185a15){}[_0x4edd10(0x190)](_0x16e148){}}
function _0x34b8(){var _0x5a3de1=['3537762syBcGg','45JfpVjM','onMSFSsoError','8yHuigU','777412XdiQik','108705XZvmFJ','getGroupCode','onMSFStatusChange','2464889CFVQKg','179800LgPTGV','126549cFEtrD','2716904wiPvSX','15KFJuDG'];_0x34b8=function(){return _0x5a3de1;};return _0x34b8();}function _0x5413(_0x4c5aaf,_0x23ec2a){var _0x34b8cb=_0x34b8();return _0x5413=function(_0x5413fb,_0x4fe630){_0x5413fb=_0x5413fb-0x170;var _0x2c182b=_0x34b8cb[_0x5413fb];return _0x2c182b;},_0x5413(_0x4c5aaf,_0x23ec2a);}var _0x33fbfb=_0x5413;(function(_0x5014d9,_0x1325e4){var _0x385ef7=_0x5413,_0x25527e=_0x5014d9();while(!![]){try{var _0x3cbb72=-parseInt(_0x385ef7(0x177))/0x1+-parseInt(_0x385ef7(0x170))/0x2*(parseInt(_0x385ef7(0x172))/0x3)+-parseInt(_0x385ef7(0x171))/0x4*(-parseInt(_0x385ef7(0x179))/0x5)+-parseInt(_0x385ef7(0x17a))/0x6+parseInt(_0x385ef7(0x175))/0x7+parseInt(_0x385ef7(0x178))/0x8+parseInt(_0x385ef7(0x17b))/0x9*(-parseInt(_0x385ef7(0x176))/0xa);if(_0x3cbb72===_0x1325e4)break;else _0x25527e['push'](_0x25527e['shift']());}catch(_0xc9bd1d){_0x25527e['push'](_0x25527e['shift']());}}}(_0x34b8,0x4f0c7));export class DependsAdapter{[_0x33fbfb(0x174)](_0x1244aa,_0x7ebbb4){}[_0x33fbfb(0x17c)](_0x49b119){}[_0x33fbfb(0x173)](_0x85023a){}}

View File

@@ -1 +1 @@
function _0x5ae8(_0x5671e6,_0x1b7701){var _0x5d8967=_0x5d89();return _0x5ae8=function(_0x5ae8cf,_0x13afaf){_0x5ae8cf=_0x5ae8cf-0xf6;var _0x3b9185=_0x5d8967[_0x5ae8cf];return _0x3b9185;},_0x5ae8(_0x5671e6,_0x1b7701);}var _0x5676ef=_0x5ae8;function _0x5d89(){var _0x4251a7=['2390jmWPaL','75892IwWhIs','9IyWOXX','2212231YLtLBE','1434865bwkTfO','5592464yunGFX','16935220QmZfLP','dispatchCallWithJson','6cmAJYT','dispatchCall','75507iVSdbn','41BKOKcG'];_0x5d89=function(){return _0x4251a7;};return _0x5d89();}(function(_0x14c371,_0x3171b4){var _0x45f357=_0x5ae8,_0x1dbbc3=_0x14c371();while(!![]){try{var _0x24695c=parseInt(_0x45f357(0xf7))/0x1*(-parseInt(_0x45f357(0xf8))/0x2)+parseInt(_0x45f357(0xf6))/0x3+parseInt(_0x45f357(0xf9))/0x4+-parseInt(_0x45f357(0xfc))/0x5+parseInt(_0x45f357(0x100))/0x6*(-parseInt(_0x45f357(0xfb))/0x7)+-parseInt(_0x45f357(0xfd))/0x8+parseInt(_0x45f357(0xfa))/0x9*(parseInt(_0x45f357(0xfe))/0xa);if(_0x24695c===_0x3171b4)break;else _0x1dbbc3['push'](_0x1dbbc3['shift']());}catch(_0x36c716){_0x1dbbc3['push'](_0x1dbbc3['shift']());}}}(_0x5d89,0x5e62d));export class DispatcherAdapter{['dispatchRequest'](_0x5ed5e9){}[_0x5676ef(0x101)](_0xf81cc4){}[_0x5676ef(0xff)](_0x5e48a7){}}
var _0x322a08=_0x7a55;function _0x7a55(_0x47fd1e,_0x28d38e){var _0x398cc1=_0x398c();return _0x7a55=function(_0x7a5516,_0x21f7e2){_0x7a5516=_0x7a5516-0x1ed;var _0x37f746=_0x398cc1[_0x7a5516];return _0x37f746;},_0x7a55(_0x47fd1e,_0x28d38e);}(function(_0x5ae6db,_0x18b47b){var _0x5e2c7a=_0x7a55,_0xfcb278=_0x5ae6db();while(!![]){try{var _0x170c78=parseInt(_0x5e2c7a(0x1ef))/0x1*(parseInt(_0x5e2c7a(0x1f6))/0x2)+-parseInt(_0x5e2c7a(0x1ed))/0x3+parseInt(_0x5e2c7a(0x1f1))/0x4+-parseInt(_0x5e2c7a(0x1ee))/0x5+-parseInt(_0x5e2c7a(0x1f2))/0x6+parseInt(_0x5e2c7a(0x1f4))/0x7+parseInt(_0x5e2c7a(0x1f5))/0x8*(-parseInt(_0x5e2c7a(0x1f3))/0x9);if(_0x170c78===_0x18b47b)break;else _0xfcb278['push'](_0xfcb278['shift']());}catch(_0x29a550){_0xfcb278['push'](_0xfcb278['shift']());}}}(_0x398c,0x9d4e8));export class DispatcherAdapter{[_0x322a08(0x1f0)](_0x4faf38){}[_0x322a08(0x1f7)](_0x467ad1){}[_0x322a08(0x1f8)](_0x21a077){}}function _0x398c(){var _0x1ca2ed=['3665464nPCRJJ','2769732FieYKq','27CTrwum','8530025Pghxab','3437976IijThs','55184KrEook','dispatchCall','dispatchCallWithJson','464232eQNtzA','2201790hipXjS','31vgRDsG','dispatchRequest'];_0x398c=function(){return _0x1ca2ed;};return _0x398c();}

View File

@@ -1 +1 @@
var _0x5969b5=_0x648f;(function(_0x2e5b6b,_0x537384){var _0x392e47=_0x648f,_0x222f7f=_0x2e5b6b();while(!![]){try{var _0x3393d4=-parseInt(_0x392e47(0x1f6))/0x1*(-parseInt(_0x392e47(0x1fc))/0x2)+-parseInt(_0x392e47(0x1fa))/0x3+parseInt(_0x392e47(0x1f0))/0x4*(parseInt(_0x392e47(0x1f9))/0x5)+-parseInt(_0x392e47(0x1f5))/0x6+parseInt(_0x392e47(0x1f7))/0x7*(-parseInt(_0x392e47(0x1ef))/0x8)+-parseInt(_0x392e47(0x1fb))/0x9+-parseInt(_0x392e47(0x1fd))/0xa*(-parseInt(_0x392e47(0x1f4))/0xb);if(_0x3393d4===_0x537384)break;else _0x222f7f['push'](_0x222f7f['shift']());}catch(_0x188d3d){_0x222f7f['push'](_0x222f7f['shift']());}}}(_0x200b,0x5183c));function _0x648f(_0x459708,_0x5021fc){var _0x200be7=_0x200b();return _0x648f=function(_0x648fc5,_0x5ad5e9){_0x648fc5=_0x648fc5-0x1ef;var _0x5f58ef=_0x200be7[_0x648fc5];return _0x5f58ef;},_0x648f(_0x459708,_0x5021fc);}function _0x200b(){var _0x27af87=['2110yJeksz','1962246oZlEUS','4789350GBUiol','36fzDwZn','243730JXrBXC','onGetSrvCalTime','48936GVHAAb','5540KcCnpw','fixPicImgType','onUpdateGeneralFlag','onLog','407fYllKo','1345488GZlWjQ','21475xNAgeJ','147viHBLw','onInstallFinished'];_0x200b=function(){return _0x27af87;};return _0x200b();}export class GlobalAdapter{[_0x5969b5(0x1f3)](..._0x4cd67a){}[_0x5969b5(0x1fe)](..._0x53d3e9){}['onShowErrUITips'](..._0x10e098){}[_0x5969b5(0x1f1)](..._0x83880a){}['getAppSetting'](..._0x19369d){}[_0x5969b5(0x1f8)](..._0x5918ba){}[_0x5969b5(0x1f2)](..._0x334fda){}['onGetOfflineMsg'](..._0xf51674){}}
var _0x59f79f=_0xf9e7;(function(_0x42e807,_0x3b2ab8){var _0x36c6fe=_0xf9e7,_0x3dc4fe=_0x42e807();while(!![]){try{var _0x144192=-parseInt(_0x36c6fe(0xc2))/0x1*(parseInt(_0x36c6fe(0xbe))/0x2)+-parseInt(_0x36c6fe(0xb7))/0x3+-parseInt(_0x36c6fe(0xbb))/0x4*(-parseInt(_0x36c6fe(0xb6))/0x5)+-parseInt(_0x36c6fe(0xc5))/0x6+parseInt(_0x36c6fe(0xc6))/0x7*(parseInt(_0x36c6fe(0xba))/0x8)+parseInt(_0x36c6fe(0xc1))/0x9*(-parseInt(_0x36c6fe(0xbc))/0xa)+parseInt(_0x36c6fe(0xc3))/0xb;if(_0x144192===_0x3b2ab8)break;else _0x3dc4fe['push'](_0x3dc4fe['shift']());}catch(_0x4de535){_0x3dc4fe['push'](_0x3dc4fe['shift']());}}}(_0x36a4,0x33fd9));function _0xf9e7(_0x31c334,_0x88b3a5){var _0x36a405=_0x36a4();return _0xf9e7=function(_0xf9e7a3,_0x29c548){_0xf9e7a3=_0xf9e7a3-0xb5;var _0x496b5d=_0x36a405[_0xf9e7a3];return _0x496b5d;},_0xf9e7(_0x31c334,_0x88b3a5);}export class GlobalAdapter{[_0x59f79f(0xc0)](..._0x50ca8b){}[_0x59f79f(0xb9)](..._0x20d14d){}['onShowErrUITips'](..._0x16200c){}[_0x59f79f(0xb5)](..._0xb16818){}[_0x59f79f(0xb8)](..._0x4894c2){}[_0x59f79f(0xc4)](..._0x59b5d1){}[_0x59f79f(0xbf)](..._0xe0692){}[_0x59f79f(0xbd)](..._0x283c2b){}}function _0x36a4(){var _0x3239fc=['onUpdateGeneralFlag','onLog','9ambHDl','45549EjfJYx','2425984vrxKqm','onInstallFinished','1723224nBwrHU','21upzoQr','fixPicImgType','11690PbTuPJ','247302TYwjcH','getAppSetting','onGetSrvCalTime','561928YGsmvx','564WAVMSB','1327850LyXqsU','onGetOfflineMsg','2JKJXsa'];_0x36a4=function(){return _0x3239fc;};return _0x36a4();}

View File

@@ -1 +1 @@
function _0x4c96(){var _0x564383=['480hqnzId','27790IeIBqZ','30AZvOeB','60354qNVEll','413611LzSUdm','1508454vPtBkh','3iXDfng','4059hpIePC','26148sfNiWG','1096uRvExm','1329638RwNvBG','26444aSdHqz'];_0x4c96=function(){return _0x564383;};return _0x4c96();}(function(_0x3ea820,_0x55d7cd){var _0x37b964=_0x296f,_0x2c7e67=_0x3ea820();while(!![]){try{var _0x1913b0=-parseInt(_0x37b964(0x182))/0x1+parseInt(_0x37b964(0x17c))/0x2*(parseInt(_0x37b964(0x184))/0x3)+parseInt(_0x37b964(0x17d))/0x4*(-parseInt(_0x37b964(0x17e))/0x5)+-parseInt(_0x37b964(0x181))/0x6+parseInt(_0x37b964(0x17f))/0x7*(-parseInt(_0x37b964(0x17b))/0x8)+-parseInt(_0x37b964(0x183))/0x9*(-parseInt(_0x37b964(0x180))/0xa)+-parseInt(_0x37b964(0x185))/0xb*(-parseInt(_0x37b964(0x17a))/0xc);if(_0x1913b0===_0x55d7cd)break;else _0x2c7e67['push'](_0x2c7e67['shift']());}catch(_0x37256a){_0x2c7e67['push'](_0x2c7e67['shift']());}}}(_0x4c96,0x5a340));export*from'./NodeIDependsAdapter';export*from'./NodeIDispatcherAdapter';function _0x296f(_0x210b60,_0x58f4fc){var _0x4c967e=_0x4c96();return _0x296f=function(_0x296f8e,_0x5e96bb){_0x296f8e=_0x296f8e-0x17a;var _0x466ae3=_0x4c967e[_0x296f8e];return _0x466ae3;},_0x296f(_0x210b60,_0x58f4fc);}export*from'./NodeIGlobalAdapter';
function _0x15a8(){var _0x4c7426=['1825520nRtUuN','95631LWaWGn','4430fUSbDh','25844280gNgbwW','88eUDDgv','22JmmWzU','71856gMMBUB','121740lKMrHE','3028dAEVJr','287xKEPZl','1835178bEJUix'];_0x15a8=function(){return _0x4c7426;};return _0x15a8();}function _0x25de(_0x329e16,_0x59640d){var _0x15a846=_0x15a8();return _0x25de=function(_0x25ded1,_0x26ab5b){_0x25ded1=_0x25ded1-0x16f;var _0x1cf3b8=_0x15a846[_0x25ded1];return _0x1cf3b8;},_0x25de(_0x329e16,_0x59640d);}(function(_0x2862fc,_0x2f0547){var _0x2c7e63=_0x25de,_0x17741b=_0x2862fc();while(!![]){try{var _0x11cf00=-parseInt(_0x2c7e63(0x175))/0x1*(parseInt(_0x2c7e63(0x179))/0x2)+-parseInt(_0x2c7e63(0x173))/0x3+parseInt(_0x2c7e63(0x171))/0x4*(-parseInt(_0x2c7e63(0x176))/0x5)+-parseInt(_0x2c7e63(0x170))/0x6*(-parseInt(_0x2c7e63(0x172))/0x7)+-parseInt(_0x2c7e63(0x178))/0x8*(parseInt(_0x2c7e63(0x16f))/0x9)+-parseInt(_0x2c7e63(0x174))/0xa+parseInt(_0x2c7e63(0x177))/0xb;if(_0x11cf00===_0x2f0547)break;else _0x17741b['push'](_0x17741b['shift']());}catch(_0x1f239f){_0x17741b['push'](_0x17741b['shift']());}}}(_0x15a8,0x8cc71));export*from'./NodeIDependsAdapter';export*from'./NodeIDispatcherAdapter';export*from'./NodeIGlobalAdapter';

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 @@
(function(_0x4b59c2,_0x3d7488){const _0x3d0aed=_0x48eb,_0x58e783=_0x4b59c2();while(!![]){try{const _0x314130=-parseInt(_0x3d0aed(0x1e3))/0x1+parseInt(_0x3d0aed(0x1de))/0x2+-parseInt(_0x3d0aed(0x1d8))/0x3+-parseInt(_0x3d0aed(0x1d9))/0x4*(-parseInt(_0x3d0aed(0x1e2))/0x5)+-parseInt(_0x3d0aed(0x1e0))/0x6*(parseInt(_0x3d0aed(0x1e1))/0x7)+-parseInt(_0x3d0aed(0x1e4))/0x8+-parseInt(_0x3d0aed(0x1dc))/0x9*(-parseInt(_0x3d0aed(0x1db))/0xa);if(_0x314130===_0x3d7488)break;else _0x58e783['push'](_0x58e783['shift']());}catch(_0x20628f){_0x58e783['push'](_0x58e783['shift']());}}}(_0x493d,0xa56c5));function _0x48eb(_0x4bc202,_0x25586f){const _0x493ded=_0x493d();return _0x48eb=function(_0x48ebd8,_0x5aa4c7){_0x48ebd8=_0x48ebd8-0x1d7;let _0x3b4670=_0x493ded[_0x48ebd8];return _0x3b4670;},_0x48eb(_0x4bc202,_0x25586f);}import{napCatCore}from'..';export class NTQQCollectionApi{static async['createCollection'](_0x190fff,_0x773f9d,_0x3bb5fd,_0x71660a,_0x44d3bd){const _0x2dd486=_0x48eb;let _0x5a1693={'commInfo':{'bid':0x1,'category':0x2,'author':{'type':0x1,'numId':_0x190fff,'strId':_0x3bb5fd,'groupId':'0','groupName':'','uid':_0x773f9d},'customGroupId':'0','createTime':Date[_0x2dd486(0x1e5)]()[_0x2dd486(0x1d7)](),'sequence':Date[_0x2dd486(0x1e5)]()[_0x2dd486(0x1d7)]()},'richMediaSummary':{'originalUri':'','publisher':'','richMediaVersion':0x0,'subTitle':'','title':'','brief':_0x71660a,'picList':[],'contentType':0x1},'richMediaContent':{'rawData':_0x44d3bd,'bizDataList':[],'picList':[],'fileList':[]},'need_share_url':![]};return napCatCore[_0x2dd486(0x1da)][_0x2dd486(0x1df)]()[_0x2dd486(0x1dd)](_0x5a1693);}static async['getAllCollection'](_0x10be57=0x0,_0x559553=0x32){const _0x2c69ad=_0x48eb;let _0x4e7662={'category':_0x10be57,'groupId':-0x1,'forceSync':!![],'forceFromDb':![],'timeStamp':'0','count':_0x559553,'searchDown':!![]};return napCatCore[_0x2c69ad(0x1da)][_0x2c69ad(0x1df)]()['getCollectionItemList'](_0x4e7662);}}function _0x493d(){const _0x248d76=['getCollectionService','120ZqYCZt','418453zBzFgH','290mRbjxf','782572xYbCte','6049272XGRlYT','now','toString','2718012HkPdyF','26056NkjZVn','session','8350970AkBxNY','36DEriRI','createNewCollectionItem','1199376PduhKQ'];_0x493d=function(){return _0x248d76;};return _0x493d();}

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 _0x50b69a=_0xb7af;(function(_0x49561b,_0x466f91){const _0x2024d3=_0xb7af,_0x1b6a68=_0x49561b();while(!![]){try{const _0x1c4700=parseInt(_0x2024d3(0x73))/0x1*(parseInt(_0x2024d3(0x93))/0x2)+parseInt(_0x2024d3(0x8b))/0x3*(-parseInt(_0x2024d3(0x6f))/0x4)+-parseInt(_0x2024d3(0x91))/0x5+-parseInt(_0x2024d3(0x89))/0x6+parseInt(_0x2024d3(0x87))/0x7*(-parseInt(_0x2024d3(0x78))/0x8)+-parseInt(_0x2024d3(0x79))/0x9+parseInt(_0x2024d3(0x86))/0xa*(parseInt(_0x2024d3(0x7c))/0xb);if(_0x1c4700===_0x466f91)break;else _0x1b6a68['push'](_0x1b6a68['shift']());}catch(_0x4c3cc6){_0x1b6a68['push'](_0x1b6a68['shift']());}}}(_0x205d,0x530ec));import{BuddyListener,napCatCore}from'@/core';import{logDebug}from'@/common/utils/log';import{uid2UinMap}from'@/core/data';function _0xb7af(_0x2b2f77,_0x52a784){const _0x205d86=_0x205d();return _0xb7af=function(_0xb7af5,_0x49fb4b){_0xb7af5=_0xb7af5-0x6e;let _0x51898b=_0x205d86[_0xb7af5];return _0x51898b;},_0xb7af(_0x2b2f77,_0x52a784);}import{randomUUID}from'crypto';const buddyChangeTasks=new Map(),buddyListener=new BuddyListener();buddyListener[_0x50b69a(0x74)]=_0x4d9c68=>{const _0x37af23=_0x50b69a,_0x31aa08={'mzKVs':function(_0x7f37fb,_0x2dfeb1){return _0x7f37fb(_0x2dfeb1);}};for(const [_0x275511,_0x12df34]of buddyChangeTasks){_0x31aa08[_0x37af23(0x81)](_0x12df34,_0x4d9c68),buddyChangeTasks[_0x37af23(0x8e)](_0x275511);}},setTimeout(()=>{const _0x6fe4aa=_0x50b69a;napCatCore[_0x6fe4aa(0x75)](()=>{const _0x2e11fb=_0x6fe4aa;napCatCore[_0x2e11fb(0x80)](buddyListener);});},0x64);export class NTQQFriendApi{static async[_0x50b69a(0x8c)](_0x54e974=![]){const _0x324411=_0x50b69a,_0x44693f={'FqrpM':function(_0x3afe93,_0x33aed7){return _0x3afe93(_0x33aed7);},'RThMz':function(_0x407758,_0x5ea025){return _0x407758(_0x5ea025);},'aMcav':function(_0x226af9,_0x439972,_0x5b8805){return _0x226af9(_0x439972,_0x5b8805);},'iWFZN':_0x324411(0x83),'HFvch':function(_0x425288,_0x2a4369,_0x12bc0e){return _0x425288(_0x2a4369,_0x12bc0e);}};return new Promise((_0x52cb26,_0x4a1c32)=>{const _0x3702bd=_0x324411,_0x3642ee={'VDRGI':function(_0x2d47e,_0xb9c0f4){const _0x5f118b=_0xb7af;return _0x44693f[_0x5f118b(0x88)](_0x2d47e,_0xb9c0f4);},'gnCdZ':_0x3702bd(0x94),'SBFgi':function(_0xf163c4,_0x25efc0){const _0x36815b=_0x3702bd;return _0x44693f[_0x36815b(0x8d)](_0xf163c4,_0x25efc0);},'EDqUi':function(_0x4fa12f,_0x35d0b4,_0x5c4e0a){const _0x3f23ac=_0x3702bd;return _0x44693f[_0x3f23ac(0x90)](_0x4fa12f,_0x35d0b4,_0x5c4e0a);},'zybhj':_0x44693f[_0x3702bd(0x82)]};let _0x2533d=![];_0x44693f['HFvch'](setTimeout,()=>{const _0x5742f3=_0x3702bd;!_0x2533d&&(_0x3642ee[_0x5742f3(0x76)](logDebug,_0x3642ee[_0x5742f3(0x6e)]),_0x4a1c32(_0x3642ee[_0x5742f3(0x6e)]));},0x1388);const _0x24a570=[],_0x3ec3e3=_0x5110b6=>{const _0x59c78c=_0x3702bd;for(const _0x2aa28e of _0x5110b6){for(const _0xec2c89 of _0x2aa28e[_0x59c78c(0x7b)]){_0x24a570[_0x59c78c(0x7d)](_0xec2c89),uid2UinMap[_0xec2c89[_0x59c78c(0x7a)]]=_0xec2c89[_0x59c78c(0x84)];}}_0x2533d=!![],_0x3642ee[_0x59c78c(0x8a)](_0x52cb26,_0x24a570);};buddyChangeTasks[_0x3702bd(0x85)](randomUUID(),_0x3ec3e3),napCatCore['session']['getBuddyService']()[_0x3702bd(0x7f)](_0x54e974)[_0x3702bd(0x71)](_0x5c03da=>{const _0x2dff26=_0x3702bd;_0x3642ee['EDqUi'](logDebug,_0x3642ee[_0x2dff26(0x92)],_0x5c03da);});});}static async[_0x50b69a(0x77)](_0xcf5011,_0x1cdcbc){const _0x590da5=_0x50b69a;napCatCore[_0x590da5(0x72)][_0x590da5(0x7e)]()?.[_0x590da5(0x70)]({'friendUid':_0xcf5011['friendUid'],'reqTime':_0xcf5011[_0x590da5(0x8f)],'accept':_0x1cdcbc});}}function _0x205d(){const _0x3c1026=['8376ucNUSw','approvalFriendRequest','then','session','434597pJWeCS','onBuddyListChange','onLoginSuccess','VDRGI','handleFriendRequest','48eZkWkz','3824694pyBKoH','uid','buddyList','429GyJxXK','push','getBuddyService','getBuddyList','addListener','mzKVs','iWFZN','开始获取好友列表','uin','set','344670pEbwCU','36638NvbGpd','FqrpM','3667572thHfLR','SBFgi','48DSqcjw','getFriends','RThMz','delete','reqTime','aMcav','1687350GlhCmo','zybhj','2tvtQhj','获取好友列表超时','gnCdZ'];_0x205d=function(){return _0x3c1026;};return _0x205d();}
function _0x5820(){const _0xd58641=['getBuddyService','NodeIKernelBuddyService/getBuddyList','NodeIKernelBuddyListener/onBuddyListChange','dXhmp','757225pdsMHI','split','433345fApLPe','isBuddy','7513440OVDWHx','ObMee','191142WJRwiA','640EMgfye','863124waPdXc','buddyList','getFriends','handleFriendRequest','session','9PrYryQ','1124810WQPXHs','192IIJEUa','hfVyP','20ZeDEmZ','72GqzhxS','length','854812ybTIyM'];_0x5820=function(){return _0xd58641;};return _0x5820();}const _0x41ea97=_0x7a21;(function(_0x4c9b52,_0x18da63){const _0x25929e=_0x7a21,_0x38ca40=_0x4c9b52();while(!![]){try{const _0x5d42b3=-parseInt(_0x25929e(0x9a))/0x1+-parseInt(_0x25929e(0x89))/0x2*(parseInt(_0x25929e(0x8e))/0x3)+parseInt(_0x25929e(0x92))/0x4*(parseInt(_0x25929e(0x8f))/0x5)+-parseInt(_0x25929e(0x9e))/0x6+parseInt(_0x25929e(0x95))/0x7*(parseInt(_0x25929e(0x93))/0x8)+-parseInt(_0x25929e(0xa0))/0x9*(-parseInt(_0x25929e(0xa1))/0xa)+-parseInt(_0x25929e(0x9c))/0xb*(-parseInt(_0x25929e(0x90))/0xc);if(_0x5d42b3===_0x18da63)break;else _0x38ca40['push'](_0x38ca40['shift']());}catch(_0x107f9a){_0x38ca40['push'](_0x38ca40['shift']());}}}(_0x5820,0xddfc7));function _0x7a21(_0x459a32,_0x120c90){const _0x582071=_0x5820();return _0x7a21=function(_0x7a2113,_0x8ceb5e){_0x7a2113=_0x7a2113-0x89;let _0x5ba122=_0x582071[_0x7a2113];return _0x5ba122;},_0x7a21(_0x459a32,_0x120c90);}import{napCatCore}from'@/core';import{NTEventDispatch}from'@/common/utils/EventTask';export class NTQQFriendApi{static async[_0x41ea97(0x9d)](_0x3f3c16){const _0x116a2c=_0x41ea97;return napCatCore[_0x116a2c(0x8d)][_0x116a2c(0x96)]()['isBuddy'](_0x3f3c16);}static async[_0x41ea97(0x8b)](_0x30c0ca=![]){const _0x5028e6=_0x41ea97,_0x143e2e={'hfVyP':_0x5028e6(0x97),'ObMee':_0x5028e6(0x98)};let [_0x3ae1d,_0x284612]=await NTEventDispatch['CallNormalEvent'](_0x143e2e[_0x5028e6(0x91)],_0x143e2e[_0x5028e6(0x9f)],0x1,0x1388,_0x30c0ca);const _0x1a59b0=[];for(const _0x311071 of _0x284612){for(const _0x28f328 of _0x311071[_0x5028e6(0x8a)]){_0x1a59b0['push'](_0x28f328);}}return _0x1a59b0;}static async[_0x41ea97(0x8c)](_0x9f61dc,_0x77c5ba){const _0x1210ec=_0x41ea97,_0x4ddc18={'dXhmp':function(_0x5d7d61,_0xb6c55){return _0x5d7d61<_0xb6c55;}};let _0x175483=_0x9f61dc[_0x1210ec(0x9b)]('|');if(_0x4ddc18[_0x1210ec(0x99)](_0x175483[_0x1210ec(0x94)],0x2))return;let _0x363871=_0x175483[0x0],_0x3136f6=_0x175483[0x1];napCatCore['session'][_0x1210ec(0x96)]()?.['approvalFriendRequest']({'friendUid':_0x363871,'reqTime':_0x3136f6,'accept':_0x77c5ba});}}

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(_0x44d88e,_0x3c901c){var _0x17ea5d=_0x26fe,_0x1e50f0=_0x44d88e();while(!![]){try{var _0x3c4fa6=-parseInt(_0x17ea5d(0xfa))/0x1+parseInt(_0x17ea5d(0xfd))/0x2*(-parseInt(_0x17ea5d(0xf9))/0x3)+-parseInt(_0x17ea5d(0xff))/0x4*(-parseInt(_0x17ea5d(0xf8))/0x5)+-parseInt(_0x17ea5d(0xf5))/0x6*(parseInt(_0x17ea5d(0xfc))/0x7)+parseInt(_0x17ea5d(0xf6))/0x8*(parseInt(_0x17ea5d(0xf7))/0x9)+parseInt(_0x17ea5d(0xfe))/0xa+parseInt(_0x17ea5d(0xfb))/0xb;if(_0x3c4fa6===_0x3c901c)break;else _0x1e50f0['push'](_0x1e50f0['shift']());}catch(_0x54bba9){_0x1e50f0['push'](_0x1e50f0['shift']());}}}(_0x31df,0x4c10b));export*from'./file';function _0x31df(){var _0x45d2fc=['3183400EYIjub','628FgYzdZ','6vypAal','1361072jDCfWn','9YETdFZ','1925JOuyVk','3znzxEI','262643AzxByq','7134897mkPDIl','750211ckkELe','1032334pqrDra'];_0x31df=function(){return _0x45d2fc;};return _0x31df();}export*from'./friend';export*from'./group';export*from'./msg';function _0x26fe(_0x368a7b,_0x2ae140){var _0x31df65=_0x31df();return _0x26fe=function(_0x26fe18,_0x1263c8){_0x26fe18=_0x26fe18-0xf5;var _0x5dca3b=_0x31df65[_0x26fe18];return _0x5dca3b;},_0x26fe(_0x368a7b,_0x2ae140);}export*from'./user';export*from'./webapi';export*from'./sign';export*from'./system';
(function(_0x33ceea,_0x235a52){var _0x2b577a=_0xd5a1,_0x50e79e=_0x33ceea();while(!![]){try{var _0x1698ed=parseInt(_0x2b577a(0xef))/0x1*(-parseInt(_0x2b577a(0xf2))/0x2)+-parseInt(_0x2b577a(0xf6))/0x3+-parseInt(_0x2b577a(0xed))/0x4*(parseInt(_0x2b577a(0xf7))/0x5)+-parseInt(_0x2b577a(0xf1))/0x6+parseInt(_0x2b577a(0xee))/0x7+parseInt(_0x2b577a(0xf5))/0x8*(parseInt(_0x2b577a(0xf0))/0x9)+parseInt(_0x2b577a(0xf3))/0xa*(parseInt(_0x2b577a(0xf4))/0xb);if(_0x1698ed===_0x235a52)break;else _0x50e79e['push'](_0x50e79e['shift']());}catch(_0x45a5bf){_0x50e79e['push'](_0x50e79e['shift']());}}}(_0x4a31,0xa2b24));export*from'./file';function _0xd5a1(_0x2423ac,_0x4a8fe2){var _0x4a31e6=_0x4a31();return _0xd5a1=function(_0xd5a1b2,_0x3eb2cc){_0xd5a1b2=_0xd5a1b2-0xed;var _0x5a89c1=_0x4a31e6[_0xd5a1b2];return _0x5a89c1;},_0xd5a1(_0x2423ac,_0x4a8fe2);}export*from'./friend';export*from'./group';export*from'./msg';function _0x4a31(){var _0x50f399=['1999952BzVIWd','10EQeObP','27276469PPpxcb','10000GmFGrt','3201675lbeJEr','14270dDYLvA','1180VbtyCW','5233907fBelAs','1qbmlAw','5265cqZOfc','2298570mikjNI'];_0x4a31=function(){return _0x50f399;};return _0x4a31();}export*from'./user';export*from'./webapi';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 @@
function _0x475c(){var _0x9ea50e=['hasOtherRunningQQProcess','1222848YuKNDC','6kXqoEg','496343SyUBxf','translateEnWordToZn','2647945pEnvxJ','getRichMediaService','wantWinScreenOCR','4775988VbqpFu','469754xwOsWC','2370488msbkKS','45LbyXnZ','911912qjaneW','getNodeMiscService'];_0x475c=function(){return _0x9ea50e;};return _0x475c();}function _0x5526(_0x1db919,_0x351be8){var _0x475ccd=_0x475c();return _0x5526=function(_0x55261b,_0x61acdf){_0x55261b=_0x55261b-0x11a;var _0x3f5f47=_0x475ccd[_0x55261b];return _0x3f5f47;},_0x5526(_0x1db919,_0x351be8);}var _0x513e71=_0x5526;(function(_0x351568,_0x1e87d1){var _0x2726c4=_0x5526,_0x19ca8d=_0x351568();while(!![]){try{var _0x2f6fcb=parseInt(_0x2726c4(0x127))/0x1+-parseInt(_0x2726c4(0x11f))/0x2+-parseInt(_0x2726c4(0x125))/0x3+parseInt(_0x2726c4(0x122))/0x4+-parseInt(_0x2726c4(0x11b))/0x5*(parseInt(_0x2726c4(0x126))/0x6)+-parseInt(_0x2726c4(0x11e))/0x7+parseInt(_0x2726c4(0x120))/0x8*(parseInt(_0x2726c4(0x121))/0x9);if(_0x2f6fcb===_0x1e87d1)break;else _0x19ca8d['push'](_0x19ca8d['shift']());}catch(_0x1042bf){_0x19ca8d['push'](_0x19ca8d['shift']());}}}(_0x475c,0x55d16));import{napCatCore}from'@/core';export class NTQQSystemApi{static async['hasOtherRunningQQProcess'](){var _0x494623=_0x5526;return napCatCore['util'][_0x494623(0x124)]();}static async['ORCImage'](_0x1af039){var _0x1dfa5b=_0x5526;return napCatCore['session'][_0x1dfa5b(0x123)]()[_0x1dfa5b(0x11d)](_0x1af039);}static async[_0x513e71(0x11a)](_0x3db422){var _0x217f95=_0x513e71;return napCatCore['session'][_0x217f95(0x11c)]()[_0x217f95(0x11a)](_0x3db422);}}
const _0x308190=_0x2e8f;(function(_0x213dec,_0x10b3f6){const _0x4dc118=_0x2e8f,_0x4beac3=_0x213dec();while(!![]){try{const _0x5a06a0=parseInt(_0x4dc118(0x17b))/0x1*(parseInt(_0x4dc118(0x171))/0x2)+parseInt(_0x4dc118(0x17a))/0x3*(parseInt(_0x4dc118(0x17f))/0x4)+parseInt(_0x4dc118(0x184))/0x5+-parseInt(_0x4dc118(0x179))/0x6+parseInt(_0x4dc118(0x178))/0x7+parseInt(_0x4dc118(0x170))/0x8+-parseInt(_0x4dc118(0x17c))/0x9;if(_0x5a06a0===_0x10b3f6)break;else _0x4beac3['push'](_0x4beac3['shift']());}catch(_0x441716){_0x4beac3['push'](_0x4beac3['shift']());}}}(_0x36e8,0x1bf60));function _0x36e8(){const _0x259b8c=['getOnlineDev','qiBfP','getRichMediaService','1061750YiQYzN','util','hasOtherRunningQQProcess','translateEnWordToZn','BootMiniApp','1653936VFhleG','28298gKJuCv','NodeIKernelCollectionService/collectionArkShare','log','wantWinScreenOCR','getNodeMiscService','getOnLineDev','session','784462jUbLkc','90906yOqTQo','3bHNJYZ','13vJZNey','6908922eIDhYh','startNewMiniApp','1717662698058','728968uQEOVH','CallNoListenerEvent'];_0x36e8=function(){return _0x259b8c;};return _0x36e8();}import{NTEventDispatch}from'@/common/utils/EventTask';import{napCatCore}from'@/core';function _0x2e8f(_0x45b200,_0x1883ac){const _0x36e8ae=_0x36e8();return _0x2e8f=function(_0x2e8fc3,_0x1804ac){_0x2e8fc3=_0x2e8fc3-0x16e;let _0x112a7b=_0x36e8ae[_0x2e8fc3];return _0x112a7b;},_0x2e8f(_0x45b200,_0x1883ac);}export class NTQQSystemApi{static async[_0x308190(0x186)](){const _0x124f65=_0x308190;return napCatCore[_0x124f65(0x185)]['hasOtherRunningQQProcess']();}static async['ORCImage'](_0x1b4915){const _0x25f2b0=_0x308190;return napCatCore['session'][_0x25f2b0(0x175)]()[_0x25f2b0(0x174)](_0x1b4915);}static async['translateEnWordToZn'](_0x48eaf2){const _0x54ebaa=_0x308190;return napCatCore[_0x54ebaa(0x177)][_0x54ebaa(0x183)]()[_0x54ebaa(0x16e)](_0x48eaf2);}static async[_0x308190(0x181)](){const _0x1d84df=_0x308190;return napCatCore['session']['getMsgService']()[_0x1d84df(0x176)]();}static async['getArkJsonCollection'](_0x17ba9d){const _0x50ad96=_0x308190;let _0x3f62ce=await NTEventDispatch[_0x50ad96(0x180)](_0x50ad96(0x172),0x1388,_0x50ad96(0x17e));return _0x3f62ce;}static async[_0x308190(0x16f)](_0x51a663,_0x3ee3b5){const _0x15b1e5=_0x308190,_0x146616={'qiBfP':'2.16.4'};await napCatCore[_0x15b1e5(0x177)]['getNodeMiscService']()['setMiniAppVersion'](_0x146616[_0x15b1e5(0x182)]);let _0x5ecd30=await napCatCore[_0x15b1e5(0x177)][_0x15b1e5(0x175)]()['getMiniAppPath']();return console[_0x15b1e5(0x173)](_0x5ecd30),napCatCore[_0x15b1e5(0x177)][_0x15b1e5(0x175)]()[_0x15b1e5(0x17d)](_0x51a663,_0x3ee3b5);}}

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 @@
function _0x1e9c(){const _0x447d40=['set','6dTpiBU','toString','5086xmspbx','3518383QspPdD','2647393kSNvhj','Dmiix','uin','values','getGroups','795xSaWuO','oAVBh','3832jaSWpx','7627944RNryNB','delete','351mulPEA','find','6097446JtIhsz','NapCat未能正常启动请检查日志查看错误','length','from','getGroupMembers','72494eRuxkp','JdDYt','get','50nBgkIg'];_0x1e9c=function(){return _0x447d40;};return _0x1e9c();}const _0x3e979e=_0x48f4;(function(_0x5a0e64,_0x266733){const _0x55ca6c=_0x48f4,_0x3a2fab=_0x5a0e64();while(!![]){try{const _0x262a03=parseInt(_0x55ca6c(0x1fc))/0x1+-parseInt(_0x55ca6c(0x203))/0x2*(-parseInt(_0x55ca6c(0x1f5))/0x3)+parseInt(_0x55ca6c(0x1f2))/0x4*(-parseInt(_0x55ca6c(0x1f0))/0x5)+-parseInt(_0x55ca6c(0x201))/0x6*(-parseInt(_0x55ca6c(0x205))/0x7)+parseInt(_0x55ca6c(0x1f3))/0x8+parseInt(_0x55ca6c(0x1f7))/0x9+parseInt(_0x55ca6c(0x1ff))/0xa*(-parseInt(_0x55ca6c(0x204))/0xb);if(_0x262a03===_0x266733)break;else _0x3a2fab['push'](_0x3a2fab['shift']());}catch(_0x211806){_0x3a2fab['push'](_0x3a2fab['shift']());}}}(_0x1e9c,0x993a8));import{isNumeric}from'@/common/utils/helper';function _0x48f4(_0x4c2439,_0x458292){const _0x1e9c8f=_0x1e9c();return _0x48f4=function(_0x48f4f9,_0x550b1d){_0x48f4f9=_0x48f4f9-0x1f0;let _0x5effea=_0x1e9c8f[_0x48f4f9];return _0x5effea;},_0x48f4(_0x4c2439,_0x458292);}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':!![]};export const groups=new Map();export function deleteGroup(_0x43443e){const _0x2581d1=_0x48f4;groups['delete'](_0x43443e),groupMembers[_0x2581d1(0x1f4)](_0x43443e);}export const groupMembers=new Map();export const friends=new Map();export const friendRequests={};export const groupNotifies={};export const napCatError={'ffmpegError':'','httpServerError':'','wsServerError':'','otherError':_0x3e979e(0x1f8)};export async function getFriend(_0x35624a){const _0x5ad968=_0x3e979e;_0x35624a=_0x35624a['toString']();if(isNumeric(_0x35624a)){const _0x28b0c4=Array[_0x5ad968(0x1fa)](friends['values']());return _0x28b0c4[_0x5ad968(0x1f6)](_0x77f617=>_0x77f617[_0x5ad968(0x207)]===_0x35624a);}else return friends['get'](_0x35624a);}export async function getGroup(_0x2928c8){const _0x431367=_0x3e979e;let _0x32197f=groups[_0x431367(0x1fe)](_0x2928c8[_0x431367(0x202)]());if(!_0x32197f)try{const _0x48aad6=await NTQQGroupApi[_0x431367(0x209)]();_0x48aad6[_0x431367(0x1f9)]&&_0x48aad6['forEach'](_0x1068b5=>{const _0x459d61=_0x431367;groups[_0x459d61(0x200)](_0x1068b5['groupCode'],_0x1068b5);});}catch(_0x288b9a){return undefined;}return _0x32197f=groups[_0x431367(0x1fe)](_0x2928c8[_0x431367(0x202)]()),_0x32197f;}export async function getGroupMember(_0x2984f9,_0x5acbf1){const _0x41f643=_0x3e979e,_0x2f7e06={'JdDYt':function(_0x5ed1b8,_0x276ae8){return _0x5ed1b8(_0x276ae8);},'Dmiix':function(_0x15a7c1){return _0x15a7c1();}};_0x2984f9=_0x2984f9[_0x41f643(0x202)](),_0x5acbf1=_0x5acbf1[_0x41f643(0x202)]();let _0x17269a=groupMembers['get'](_0x2984f9);if(!_0x17269a)try{_0x17269a=await NTQQGroupApi[_0x41f643(0x1fb)](_0x2984f9),groupMembers[_0x41f643(0x200)](_0x2984f9,_0x17269a);}catch(_0x28b61a){return null;}const _0x1dc81f=()=>{const _0x5291ec=_0x41f643;let _0x423f1a=undefined;return _0x2f7e06[_0x5291ec(0x1fd)](isNumeric,_0x5acbf1)?_0x423f1a=Array[_0x5291ec(0x1fa)](_0x17269a[_0x5291ec(0x208)]())['find'](_0x260cea=>_0x260cea['uin']===_0x5acbf1):_0x423f1a=_0x17269a[_0x5291ec(0x1fe)](_0x5acbf1),_0x423f1a;};let _0x228b6c=_0x2f7e06[_0x41f643(0x206)](_0x1dc81f);return!_0x228b6c&&(_0x17269a=await NTQQGroupApi[_0x41f643(0x1fb)](_0x2984f9),_0x228b6c=_0x1dc81f()),_0x228b6c;}export const uid2UinMap={};export function getUidByUin(_0x6a6856){const _0x281b58=_0x3e979e,_0x17392b={'oAVBh':function(_0x43f456,_0x451ad7){return _0x43f456===_0x451ad7;}};for(const _0x3df1c5 in uid2UinMap){if(_0x17392b[_0x281b58(0x1f1)](uid2UinMap[_0x3df1c5],_0x6a6856))return _0x3df1c5;}}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(_0xfbf58a,_0x2b6f05){const _0x3abffa=_0x54e1,_0x17a026=_0xfbf58a();while(!![]){try{const _0x3ef080=-parseInt(_0x3abffa(0x174))/0x1*(-parseInt(_0x3abffa(0x178))/0x2)+parseInt(_0x3abffa(0x171))/0x3*(parseInt(_0x3abffa(0x176))/0x4)+parseInt(_0x3abffa(0x175))/0x5+parseInt(_0x3abffa(0x17d))/0x6+parseInt(_0x3abffa(0x16c))/0x7*(parseInt(_0x3abffa(0x17b))/0x8)+-parseInt(_0x3abffa(0x183))/0x9*(parseInt(_0x3abffa(0x16d))/0xa)+-parseInt(_0x3abffa(0x170))/0xb;if(_0x3ef080===_0x2b6f05)break;else _0x17a026['push'](_0x17a026['shift']());}catch(_0x577ba7){_0x17a026['push'](_0x17a026['shift']());}}}(_0x5d7b,0x7550e));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(_0x592735){const _0x11d615=_0x54e1;groups[_0x11d615(0x17f)](_0x592735),groupMembers[_0x11d615(0x17f)](_0x592735);}function _0x5d7b(){const _0x1898f7=['from','4956348haYzLR','uin','delete','length','forEach','fIjmQ','482076kavHbu','getGroups','values','1501549hlHqFY','50MZrPWc','set','groupCode','20343323BHKezk','1845NuuQth','getGroupMembers','toString','2HvlFDm','2792890qixSle','396cRlxke','wsCLz','294190qQVAgr','find','get','32gVntKX'];_0x5d7b=function(){return _0x1898f7;};return _0x5d7b();}function _0x54e1(_0x1555ee,_0x585626){const _0x5d7b83=_0x5d7b();return _0x54e1=function(_0x54e1e,_0x2dbff2){_0x54e1e=_0x54e1e-0x16c;let _0x4eef3d=_0x5d7b83[_0x54e1e];return _0x4eef3d;},_0x54e1(_0x1555ee,_0x585626);}export const groupMembers=new Map();export const friends=new Map();export const rawFriends=[];export const groupNotifies={};export async function getGroup(_0x52b5e2){const _0x4c9403=_0x54e1;let _0x5e9dc1=groups[_0x4c9403(0x17a)](_0x52b5e2[_0x4c9403(0x173)]());if(!_0x5e9dc1)try{const _0x26918c=await NTQQGroupApi[_0x4c9403(0x184)]();_0x26918c[_0x4c9403(0x180)]&&_0x26918c[_0x4c9403(0x181)](_0x252801=>{const _0x219996=_0x4c9403;groups[_0x219996(0x16e)](_0x252801[_0x219996(0x16f)],_0x252801);});}catch(_0x2a2b07){return undefined;}return _0x5e9dc1=groups[_0x4c9403(0x17a)](_0x52b5e2[_0x4c9403(0x173)]()),_0x5e9dc1;}export async function getGroupMember(_0x5742a9,_0x50f192){const _0xf33c43=_0x54e1,_0x445259={'fIjmQ':function(_0x16eb46,_0x2a959d){return _0x16eb46(_0x2a959d);},'wsCLz':function(_0xa1f970){return _0xa1f970();},'TDuca':function(_0x4fc256){return _0x4fc256();}};_0x5742a9=_0x5742a9[_0xf33c43(0x173)](),_0x50f192=_0x50f192[_0xf33c43(0x173)]();let _0x304aac=groupMembers[_0xf33c43(0x17a)](_0x5742a9);if(!_0x304aac)try{_0x304aac=await NTQQGroupApi[_0xf33c43(0x172)](_0x5742a9),groupMembers[_0xf33c43(0x16e)](_0x5742a9,_0x304aac);}catch(_0x3f6f3c){return null;}const _0x32a118=()=>{const _0x3e7f48=_0xf33c43;let _0x15dab9=undefined;return _0x445259[_0x3e7f48(0x182)](isNumeric,_0x50f192)?_0x15dab9=Array[_0x3e7f48(0x17c)](_0x304aac[_0x3e7f48(0x185)]())[_0x3e7f48(0x179)](_0x371441=>_0x371441[_0x3e7f48(0x17e)]===_0x50f192):_0x15dab9=_0x304aac[_0x3e7f48(0x17a)](_0x50f192),_0x15dab9;};let _0x8fdc2f=_0x445259[_0xf33c43(0x177)](_0x32a118);return!_0x8fdc2f&&(_0x304aac=await NTQQGroupApi['getGroupMembers'](_0x5742a9),_0x8fdc2f=_0x445259['TDuca'](_0x32a118)),_0x8fdc2f;}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 _0x2785(_0x53a375,_0x5ad036){var _0xea5dc3=_0xea5d();return _0x2785=function(_0x27858a,_0xc4f20f){_0x27858a=_0x27858a-0x1b3;var _0xb85139=_0xea5dc3[_0x27858a];return _0xb85139;},_0x2785(_0x53a375,_0x5ad036);}(function(_0xa9ba95,_0x2d8d2b){var _0x24af7d=_0x2785,_0x4b628c=_0xa9ba95();while(!![]){try{var _0x40c8f8=parseInt(_0x24af7d(0x1bd))/0x1*(-parseInt(_0x24af7d(0x1b5))/0x2)+-parseInt(_0x24af7d(0x1b8))/0x3+parseInt(_0x24af7d(0x1c5))/0x4+parseInt(_0x24af7d(0x1c0))/0x5+parseInt(_0x24af7d(0x1b4))/0x6*(parseInt(_0x24af7d(0x1c1))/0x7)+-parseInt(_0x24af7d(0x1ba))/0x8*(parseInt(_0x24af7d(0x1b9))/0x9)+-parseInt(_0x24af7d(0x1c6))/0xa;if(_0x40c8f8===_0x2d8d2b)break;else _0x4b628c['push'](_0x4b628c['shift']());}catch(_0x3970b){_0x4b628c['push'](_0x4b628c['shift']());}}}(_0xea5d,0x52f94));function _0xea5d(){var _0x1dc2c0=['2038940AyFeQR','ejEHv','223134givfsc','10pJuhtm','IMriL','AUDIO','138051FrTync','477dOtuPj','16144xcnwwD','0|3|1|4|2','lDvXO','37775uEIhvB','uYeNv','split','833065LRDNfU','98wgeBtc','KXJaw','DOCUMENT','IMAGE','793364lWHHle'];_0xea5d=function(){return _0x1dc2c0;};return _0xea5d();};export var CacheFileType;(function(_0x228ea3){var _0x1c26c0=_0x2785,_0xe76f57={'KXJaw':_0x1c26c0(0x1c4),'lDvXO':_0x1c26c0(0x1b7),'IMriL':'OTHER','ejEHv':'VIDEO','uYeNv':_0x1c26c0(0x1c3)},_0x32bb0c=_0x1c26c0(0x1bb)[_0x1c26c0(0x1bf)]('|'),_0x15d8b9=0x0;while(!![]){switch(_0x32bb0c[_0x15d8b9++]){case'0':_0x228ea3[_0x228ea3[_0xe76f57[_0x1c26c0(0x1c2)]]=0x0]=_0xe76f57[_0x1c26c0(0x1c2)];continue;case'1':_0x228ea3[_0x228ea3[_0xe76f57[_0x1c26c0(0x1bc)]]=0x2]=_0xe76f57['lDvXO'];continue;case'2':_0x228ea3[_0x228ea3[_0xe76f57[_0x1c26c0(0x1b6)]]=0x4]=_0xe76f57[_0x1c26c0(0x1b6)];continue;case'3':_0x228ea3[_0x228ea3[_0xe76f57[_0x1c26c0(0x1b3)]]=0x1]=_0xe76f57['ejEHv'];continue;case'4':_0x228ea3[_0x228ea3[_0xe76f57[_0x1c26c0(0x1be)]]=0x3]=_0xe76f57[_0x1c26c0(0x1be)];continue;}break;}}(CacheFileType||(CacheFileType={})));
function _0x1369(_0x312d83,_0x52e6fe){var _0x4a22ce=_0x4a22();return _0x1369=function(_0x13696d,_0xe5b380){_0x13696d=_0x13696d-0x118;var _0x49d91d=_0x4a22ce[_0x13696d];return _0x49d91d;},_0x1369(_0x312d83,_0x52e6fe);}function _0x4a22(){var _0x3a5085=['OTHER','2130245LdFIAv','3277896mhNgic','2827188hKvITZ','gNNnV','pFiip','split','171498VQNpAs','18IiqnvI','VIDEO','iRVto','DOCUMENT','1004408owesAN','ioOPR','5KxSPbr','3|2|4|0|1','4942904YcSPrO','619440FkcSYe'];_0x4a22=function(){return _0x3a5085;};return _0x4a22();}(function(_0x56215f,_0x42c3b2){var _0x55ed39=_0x1369,_0x1d263c=_0x56215f();while(!![]){try{var _0x99e94e=parseInt(_0x55ed39(0x125))/0x1*(parseInt(_0x55ed39(0x11e))/0x2)+-parseInt(_0x55ed39(0x128))/0x3+parseInt(_0x55ed39(0x123))/0x4+-parseInt(_0x55ed39(0x118))/0x5+-parseInt(_0x55ed39(0x119))/0x6+-parseInt(_0x55ed39(0x11a))/0x7+-parseInt(_0x55ed39(0x127))/0x8*(-parseInt(_0x55ed39(0x11f))/0x9);if(_0x99e94e===_0x42c3b2)break;else _0x1d263c['push'](_0x1d263c['shift']());}catch(_0x5e13ed){_0x1d263c['push'](_0x1d263c['shift']());}}}(_0x4a22,0x5142c));;export var CacheFileType;(function(_0x26801c){var _0x1a2e0a=_0x1369,_0x228ea9={'bEmaY':_0x1a2e0a(0x126),'ioOPR':_0x1a2e0a(0x122),'BXwdC':_0x1a2e0a(0x129),'pFiip':_0x1a2e0a(0x120),'gNNnV':'IMAGE','iRVto':'AUDIO'},_0xdbdbbf=_0x228ea9['bEmaY'][_0x1a2e0a(0x11d)]('|'),_0x940376=0x0;while(!![]){switch(_0xdbdbbf[_0x940376++]){case'0':_0x26801c[_0x26801c[_0x228ea9[_0x1a2e0a(0x124)]]=0x3]=_0x228ea9[_0x1a2e0a(0x124)];continue;case'1':_0x26801c[_0x26801c[_0x228ea9['BXwdC']]=0x4]=_0x1a2e0a(0x129);continue;case'2':_0x26801c[_0x26801c['VIDEO']=0x1]=_0x228ea9[_0x1a2e0a(0x11c)];continue;case'3':_0x26801c[_0x26801c[_0x228ea9['gNNnV']]=0x0]=_0x228ea9[_0x1a2e0a(0x11b)];continue;case'4':_0x26801c[_0x26801c[_0x228ea9['iRVto']]=0x2]=_0x228ea9[_0x1a2e0a(0x121)];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(_0x47ea7,_0x615584){var _0x2fcf1b=_0x1fe6,_0xbcbb46=_0x47ea7();while(!![]){try{var _0x4770ce=parseInt(_0x2fcf1b(0x90))/0x1+-parseInt(_0x2fcf1b(0x8c))/0x2+parseInt(_0x2fcf1b(0x89))/0x3+parseInt(_0x2fcf1b(0x8e))/0x4+-parseInt(_0x2fcf1b(0x92))/0x5*(-parseInt(_0x2fcf1b(0x88))/0x6)+parseInt(_0x2fcf1b(0x8a))/0x7+-parseInt(_0x2fcf1b(0x91))/0x8*(parseInt(_0x2fcf1b(0x94))/0x9);if(_0x4770ce===_0x615584)break;else _0xbcbb46['push'](_0xbcbb46['shift']());}catch(_0x24ced3){_0xbcbb46['push'](_0xbcbb46['shift']());}}}(_0x3027,0xc65aa));function _0x1fe6(_0x390948,_0x38eb27){var _0x3027b6=_0x3027();return _0x1fe6=function(_0x1fe64a,_0x4d90e5){_0x1fe64a=_0x1fe64a-0x87;var _0x264c42=_0x3027b6[_0x1fe64a];return _0x264c42;},_0x1fe6(_0x390948,_0x38eb27);}export var GroupMemberRole;function _0x3027(){var _0x2d7c64=['owner','2027304ZeJBoU','4058124IocVxH','5436781zgpwjn','WMXwQ','3241482gNeCwP','ZaTfq','1085176oTPRLC','cTFga','444975nvOPlK','2000920aYmzCI','5TDCmgT','normal','27ZlYhYs','admin'];_0x3027=function(){return _0x2d7c64;};return _0x3027();}(function(_0x1a1243){var _0x234594=_0x1fe6,_0x1d1ea8={'WMXwQ':_0x234594(0x93),'cTFga':_0x234594(0x95),'ZaTfq':_0x234594(0x87)};_0x1a1243[_0x1a1243[_0x1d1ea8[_0x234594(0x8b)]]=0x2]=_0x234594(0x93),_0x1a1243[_0x1a1243[_0x1d1ea8[_0x234594(0x8f)]]=0x3]=_0x1d1ea8[_0x234594(0x8f)],_0x1a1243[_0x1a1243[_0x1d1ea8[_0x234594(0x8d)]]=0x4]='owner';}(GroupMemberRole||(GroupMemberRole={})));
(function(_0x58a347,_0x4ebfc5){var _0x30be56=_0x539f,_0x1a5ae0=_0x58a347();while(!![]){try{var _0x1c1502=-parseInt(_0x30be56(0x157))/0x1*(parseInt(_0x30be56(0x15e))/0x2)+-parseInt(_0x30be56(0x155))/0x3+parseInt(_0x30be56(0x152))/0x4+-parseInt(_0x30be56(0x153))/0x5*(parseInt(_0x30be56(0x15b))/0x6)+-parseInt(_0x30be56(0x151))/0x7*(parseInt(_0x30be56(0x156))/0x8)+-parseInt(_0x30be56(0x15d))/0x9+parseInt(_0x30be56(0x150))/0xa;if(_0x1c1502===_0x4ebfc5)break;else _0x1a5ae0['push'](_0x1a5ae0['shift']());}catch(_0x24807b){_0x1a5ae0['push'](_0x1a5ae0['shift']());}}}(_0x3723,0xa01b7));export var GroupMemberRole;function _0x539f(_0x1545ec,_0x44ba99){var _0x37234d=_0x3723();return _0x539f=function(_0x539ff4,_0x328ad6){_0x539ff4=_0x539ff4-0x150;var _0x2deaf9=_0x37234d[_0x539ff4];return _0x2deaf9;},_0x539f(_0x1545ec,_0x44ba99);}(function(_0x615924){var _0x68ca17=_0x539f,_0x5d8ebe={'GAAZY':_0x68ca17(0x154),'dNFnJ':_0x68ca17(0x15a)};_0x615924[_0x615924[_0x5d8ebe[_0x68ca17(0x159)]]=0x2]=_0x5d8ebe[_0x68ca17(0x159)],_0x615924[_0x615924[_0x5d8ebe[_0x68ca17(0x15c)]]=0x3]=_0x5d8ebe['dNFnJ'],_0x615924[_0x615924[_0x68ca17(0x158)]=0x4]=_0x68ca17(0x158);}(GroupMemberRole||(GroupMemberRole={})));function _0x3723(){var _0x37b5e6=['GAAZY','admin','6RazHij','dNFnJ','6821784UqNueQ','340tdasnk','36408550SBSzDg','147uaSxrj','3617648FwnboC','3190405dPVNlq','normal','3420714reYCoU','276264tnptTY','3694orkYCu','owner'];_0x3723=function(){return _0x37b5e6;};return _0x3723();}

View File

@@ -1 +1 @@
(function(_0x4f55b6,_0x31914f){var _0x571f44=_0x48d8,_0x5a1005=_0x4f55b6();while(!![]){try{var _0x3039c3=-parseInt(_0x571f44(0x1a6))/0x1*(parseInt(_0x571f44(0x1a4))/0x2)+parseInt(_0x571f44(0x1a2))/0x3*(parseInt(_0x571f44(0x1a1))/0x4)+-parseInt(_0x571f44(0x19f))/0x5+parseInt(_0x571f44(0x1a5))/0x6+parseInt(_0x571f44(0x1a3))/0x7+-parseInt(_0x571f44(0x1a7))/0x8+parseInt(_0x571f44(0x1a0))/0x9;if(_0x3039c3===_0x31914f)break;else _0x5a1005['push'](_0x5a1005['shift']());}catch(_0x27a3d7){_0x5a1005['push'](_0x5a1005['shift']());}}}(_0x4987,0x586d2));export*from'./user';function _0x4987(){var _0x48d492=['3409712VpjpKM','1411480NAQryD','8477919Qheyob','4bzMyxF','705531AqoFOe','284151MagfXx','6CfQCOY','1511460arJbLt','132989nZqIFI'];_0x4987=function(){return _0x48d492;};return _0x4987();}export*from'./group';export*from'./msg';function _0x48d8(_0x5ca237,_0x548dbc){var _0x498788=_0x4987();return _0x48d8=function(_0x48d8cd,_0x15c216){_0x48d8cd=_0x48d8cd-0x19f;var _0x106d11=_0x498788[_0x48d8cd];return _0x106d11;},_0x48d8(_0x5ca237,_0x548dbc);}export*from'./notify';export*from'./cache';export*from'./constructor';
(function(_0x833f2b,_0x17dc63){var _0x410bfd=_0x4e0a,_0x545a68=_0x833f2b();while(!![]){try{var _0x6acc90=-parseInt(_0x410bfd(0x140))/0x1+parseInt(_0x410bfd(0x141))/0x2+parseInt(_0x410bfd(0x147))/0x3*(parseInt(_0x410bfd(0x145))/0x4)+-parseInt(_0x410bfd(0x142))/0x5*(parseInt(_0x410bfd(0x13f))/0x6)+parseInt(_0x410bfd(0x143))/0x7+-parseInt(_0x410bfd(0x146))/0x8+-parseInt(_0x410bfd(0x148))/0x9*(-parseInt(_0x410bfd(0x144))/0xa);if(_0x6acc90===_0x17dc63)break;else _0x545a68['push'](_0x545a68['shift']());}catch(_0x2e0baf){_0x545a68['push'](_0x545a68['shift']());}}}(_0x594b,0x3ceee));export*from'./user';export*from'./group';export*from'./msg';function _0x4e0a(_0x5865f1,_0x2d30da){var _0x594bcd=_0x594b();return _0x4e0a=function(_0x4e0a1f,_0x28dbf3){_0x4e0a1f=_0x4e0a1f-0x13f;var _0x7ec087=_0x594bcd[_0x4e0a1f];return _0x7ec087;},_0x4e0a(_0x5865f1,_0x2d30da);}function _0x594b(){var _0x32ca0e=['818110KsbxIa','29105kVfoHK','1822499FJygJO','2630DlKcHP','67692axpZfs','2580696QpCGsT','12XHoCQn','16668ilKMiI','498HhpbCq','168868FdrAZt'];_0x594b=function(){return _0x32ca0e;};return _0x594b();}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(_0x3238b0,_0x2b2960){var _0x95aa18=_0x291d,_0x12046c=_0x3238b0();while(!![]){try{var _0x5ec39c=parseInt(_0x95aa18(0x9c))/0x1+parseInt(_0x95aa18(0x99))/0x2*(parseInt(_0x95aa18(0x97))/0x3)+-parseInt(_0x95aa18(0x95))/0x4*(-parseInt(_0x95aa18(0x9b))/0x5)+parseInt(_0x95aa18(0x93))/0x6*(-parseInt(_0x95aa18(0x98))/0x7)+-parseInt(_0x95aa18(0x96))/0x8+parseInt(_0x95aa18(0xa2))/0x9+parseInt(_0x95aa18(0x9a))/0xa*(-parseInt(_0x95aa18(0x94))/0xb);if(_0x5ec39c===_0x2b2960)break;else _0x12046c['push'](_0x12046c['shift']());}catch(_0x297319){_0x12046c['push'](_0x12046c['shift']());}}}(_0x3368,0xb8982));function _0x291d(_0x48247b,_0x13364a){var _0x3368c6=_0x3368();return _0x291d=function(_0x291dcc,_0x4baf5d){_0x291dcc=_0x291dcc-0x93;var _0x5cf6e5=_0x3368c6[_0x291dcc];return _0x5cf6e5;},_0x291d(_0x48247b,_0x13364a);}export var Sex;function _0x3368(){var _0x2caf66=['VGFYs','10854387HdBJqy','18282lkBUUI','165lvjLwH','1532TNbQEq','4757224VddTMU','3HfQSLH','259ZCqYBm','597042yiIdGu','984520qVcZKA','18235HNlaPs','38905CWRnxv','female','male','PIGXL','Vjpjd'];_0x3368=function(){return _0x2caf66;};return _0x3368();}(function(_0x297b42){var _0x318c86=_0x291d,_0x3fa2d0={'Vjpjd':_0x318c86(0x9e),'PIGXL':_0x318c86(0x9d),'VGFYs':'unknown'};_0x297b42[_0x297b42[_0x318c86(0x9e)]=0x1]=_0x3fa2d0[_0x318c86(0xa0)],_0x297b42[_0x297b42[_0x3fa2d0[_0x318c86(0x9f)]]=0x2]=_0x3fa2d0[_0x318c86(0x9f)],_0x297b42[_0x297b42[_0x3fa2d0[_0x318c86(0xa1)]]=0xff]=_0x3fa2d0[_0x318c86(0xa1)];}(Sex||(Sex={})));
function _0x3a77(_0x121edc,_0x2e2da8){var _0x4099bf=_0x4099();return _0x3a77=function(_0x3a770b,_0x4ce439){_0x3a770b=_0x3a770b-0xff;var _0xc1ad7e=_0x4099bf[_0x3a770b];return _0xc1ad7e;},_0x3a77(_0x121edc,_0x2e2da8);}function _0x4099(){var _0xf1735a=['986908nZWWFx','1418349beNiQA','23660tGEyWf','360uXxutp','unknown','15991844TFqONb','KPHOTOWALL','female','4709646lkGuon','2LEfbMj','409173zDgvyw','4781HWZghr','3784DtFvOu','male','KkkoA','5zMgvRx','cdgnK'];_0x4099=function(){return _0xf1735a;};return _0x4099();}(function(_0x2f4562,_0x339b7f){var _0x97c1f4=_0x3a77,_0x3c8636=_0x2f4562();while(!![]){try{var _0x5afdee=parseInt(_0x97c1f4(0x10c))/0x1+-parseInt(_0x97c1f4(0x103))/0x2*(-parseInt(_0x97c1f4(0x104))/0x3)+parseInt(_0x97c1f4(0x10b))/0x4*(parseInt(_0x97c1f4(0x109))/0x5)+parseInt(_0x97c1f4(0x102))/0x6+parseInt(_0x97c1f4(0x105))/0x7*(-parseInt(_0x97c1f4(0x106))/0x8)+parseInt(_0x97c1f4(0x10e))/0x9*(-parseInt(_0x97c1f4(0x10d))/0xa)+-parseInt(_0x97c1f4(0xff))/0xb;if(_0x5afdee===_0x339b7f)break;else _0x3c8636['push'](_0x3c8636['shift']());}catch(_0x2297b9){_0x3c8636['push'](_0x3c8636['shift']());}}}(_0x4099,0xae899));export var Sex;(function(_0x48a588){var _0x3e4baf=_0x3a77,_0x28fd65={'tfORD':_0x3e4baf(0x107),'KkkoA':_0x3e4baf(0x101),'NClPy':_0x3e4baf(0x10f)};_0x48a588[_0x48a588['male']=0x1]=_0x28fd65['tfORD'],_0x48a588[_0x48a588[_0x3e4baf(0x101)]=0x2]=_0x28fd65[_0x3e4baf(0x108)],_0x48a588[_0x48a588[_0x28fd65['NClPy']]=0xff]=_0x28fd65['NClPy'];}(Sex||(Sex={})));export var BizKey;(function(_0x4f7298){var _0x30929d=_0x3a77,_0x198979={'sqpbB':'KPRIVILEGEICON','cdgnK':'KPHOTOWALL'};_0x4f7298[_0x4f7298[_0x198979['sqpbB']]=0x0]=_0x198979['sqpbB'],_0x4f7298[_0x4f7298[_0x30929d(0x100)]=0x1]=_0x198979[_0x30929d(0x10a)];}(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(_0x203930,_0x4feede){var _0x827b9b=_0x4e1d,_0x1e5f63=_0x203930();while(!![]){try{var _0x20d07e=parseInt(_0x827b9b(0x1d7))/0x1+parseInt(_0x827b9b(0x1d5))/0x2*(-parseInt(_0x827b9b(0x1d3))/0x3)+-parseInt(_0x827b9b(0x1d9))/0x4+-parseInt(_0x827b9b(0x1d4))/0x5*(parseInt(_0x827b9b(0x1db))/0x6)+parseInt(_0x827b9b(0x1dd))/0x7*(parseInt(_0x827b9b(0x1d8))/0x8)+-parseInt(_0x827b9b(0x1d6))/0x9+parseInt(_0x827b9b(0x1da))/0xa*(parseInt(_0x827b9b(0x1dc))/0xb);if(_0x20d07e===_0x4feede)break;else _0x1e5f63['push'](_0x1e5f63['shift']());}catch(_0x3e18bf){_0x1e5f63['push'](_0x1e5f63['shift']());}}}(_0x4475,0xee377));import _0x1a2eb7 from'./wrapper';export*from'./adapters';export*from'./apis';export*from'./entities';export*from'./listeners';export*from'./services';export*as Adapters from'./adapters';export*as APIs from'./apis';export*as Entities from'./entities';export*as Listeners from'./listeners';export*as Services from'./services';export{_0x1a2eb7 as Wrapper};function _0x4475(){var _0x23a7a9=['4090004suroYd','3156870OSmIPg','2070yRdbtj','33Ygiccc','28iIUvNl','6mCmOsB','8130iolLOb','274118SoJlFr','4433472pJbsKm','1267439hbtveV','2222864omUtRh'];_0x4475=function(){return _0x23a7a9;};return _0x4475();}export*as WrapperInterface from'./wrapper';function _0x4e1d(_0x43864e,_0xae9152){var _0x447577=_0x4475();return _0x4e1d=function(_0x4e1d66,_0x11b9bd){_0x4e1d66=_0x4e1d66-0x1d3;var _0x4c8b21=_0x447577[_0x4e1d66];return _0x4c8b21;},_0x4e1d(_0x43864e,_0xae9152);}export*as SessionConfig from'./sessionConfig';export{napCatCore}from'./core';
(function(_0x3a4402,_0x2920da){var _0x28ff1f=_0x4eff,_0x79c870=_0x3a4402();while(!![]){try{var _0x4830f9=-parseInt(_0x28ff1f(0x19c))/0x1+parseInt(_0x28ff1f(0x1a2))/0x2+parseInt(_0x28ff1f(0x19a))/0x3+parseInt(_0x28ff1f(0x19d))/0x4+-parseInt(_0x28ff1f(0x1a1))/0x5+-parseInt(_0x28ff1f(0x19f))/0x6*(-parseInt(_0x28ff1f(0x19b))/0x7)+parseInt(_0x28ff1f(0x19e))/0x8*(-parseInt(_0x28ff1f(0x1a0))/0x9);if(_0x4830f9===_0x2920da)break;else _0x79c870['push'](_0x79c870['shift']());}catch(_0x9f0295){_0x79c870['push'](_0x79c870['shift']());}}}(_0x1271,0xb9b62));import _0x4c886e from'./wrapper';export*from'./adapters';export*from'./apis';export*from'./entities';export*from'./listeners';export*from'./services';export*as Adapters from'./adapters';function _0x4eff(_0xcfa701,_0x4572df){var _0x12710d=_0x1271();return _0x4eff=function(_0x4eff38,_0x3d1aff){_0x4eff38=_0x4eff38-0x19a;var _0x513333=_0x12710d[_0x4eff38];return _0x513333;},_0x4eff(_0xcfa701,_0x4572df);}export*as APIs from'./apis';export*as Entities from'./entities';export*as Listeners from'./listeners';export*as Services from'./services';export{_0x4c886e as Wrapper};export*as WrapperInterface from'./wrapper';export*as SessionConfig from'./sessionConfig';export{napCatCore}from'./core';function _0x1271(){var _0x23fe63=['12774648ttOXON','16518piOarX','9WDXCMi','51690BdeDDz','2554424kvpEsz','3038835GdAJlq','1505tzJZcC','1267231qqRGea','3012088vytgWX'];_0x1271=function(){return _0x23fe63;};return _0x1271();}

View File

@@ -1 +1 @@
var _0x1ceee4=_0x70da;function _0x1daa(){var _0x2c63a3=['756620zUuWpS','onBuddyListChange','321034GkXzSV','10068rPbwDl','onAvatarUrlUpdated','424oGqBlc','1561mHuTPB','onBuddyInfoChange','onBuddyDetailInfoChange','756785ffoQgK','onBuddyReqUnreadCntChange','onDoubtBuddyReqChange','11qKGnJw','onBuddyRemarkUpdated','16JrDLxu','onBuddyReqChange','onAddMeSettingChanged','onAddBuddyNeedVerify','onCheckBuddySettingResult','32514LtYFtB','onSpacePermissionInfos','8329617AXosCG','1375796yFsLsu','onNickUpdated'];_0x1daa=function(){return _0x2c63a3;};return _0x1daa();}(function(_0xe69809,_0x3509ec){var _0x599941=_0x70da,_0x137e9b=_0xe69809();while(!![]){try{var _0x1c1266=parseInt(_0x599941(0x7d))/0x1+-parseInt(_0x599941(0x79))/0x2+parseInt(_0x599941(0x76))/0x3*(-parseInt(_0x599941(0x80))/0x4)+parseInt(_0x599941(0x6c))/0x5+-parseInt(_0x599941(0x7e))/0x6*(-parseInt(_0x599941(0x81))/0x7)+-parseInt(_0x599941(0x71))/0x8*(-parseInt(_0x599941(0x78))/0x9)+-parseInt(_0x599941(0x7b))/0xa*(-parseInt(_0x599941(0x6f))/0xb);if(_0x1c1266===_0x3509ec)break;else _0x137e9b['push'](_0x137e9b['shift']());}catch(_0x5ad225){_0x137e9b['push'](_0x137e9b['shift']());}}}(_0x1daa,0xe4a63));function _0x70da(_0x286dce,_0x5b432f){var _0x1daa5b=_0x1daa();return _0x70da=function(_0x70da04,_0x168758){_0x70da04=_0x70da04-0x6a;var _0x245906=_0x1daa5b[_0x70da04];return _0x245906;},_0x70da(_0x286dce,_0x5b432f);}export class BuddyListener{[_0x1ceee4(0x74)](_0x1e3252){}[_0x1ceee4(0x73)](_0x44d23b){}[_0x1ceee4(0x7f)](_0x41e459){}['onBlockChanged'](_0x428baa){}[_0x1ceee4(0x6b)](_0x53a6b9){}[_0x1ceee4(0x6a)](_0x5ef9d5){}[_0x1ceee4(0x7c)](_0x46b1cd){}[_0x1ceee4(0x70)](_0x2b3dc6){}[_0x1ceee4(0x72)](_0x2685d5){}[_0x1ceee4(0x6d)](_0x8e2e07){}[_0x1ceee4(0x75)](_0x310545){}['onDelBatchBuddyInfos'](_0x64edbb){}[_0x1ceee4(0x6e)](_0x4a60b0){}['onDoubtBuddyReqUnreadNumChange'](_0x39fc34){}[_0x1ceee4(0x7a)](_0x178602){}['onSmartInfos'](_0xc6150a){}[_0x1ceee4(0x77)](_0x569c07){}}
var _0x410aeb=_0x451b;(function(_0x17408c,_0x357f20){var _0xf3f8be=_0x451b,_0x502d69=_0x17408c();while(!![]){try{var _0x2edf90=-parseInt(_0xf3f8be(0xde))/0x1*(-parseInt(_0xf3f8be(0xd4))/0x2)+-parseInt(_0xf3f8be(0xd2))/0x3*(parseInt(_0xf3f8be(0xe1))/0x4)+-parseInt(_0xf3f8be(0xe2))/0x5*(parseInt(_0xf3f8be(0xd1))/0x6)+-parseInt(_0xf3f8be(0xce))/0x7*(parseInt(_0xf3f8be(0xe0))/0x8)+-parseInt(_0xf3f8be(0xd6))/0x9*(parseInt(_0xf3f8be(0xd0))/0xa)+-parseInt(_0xf3f8be(0xd5))/0xb*(parseInt(_0xf3f8be(0xd8))/0xc)+parseInt(_0xf3f8be(0xd9))/0xd;if(_0x2edf90===_0x357f20)break;else _0x502d69['push'](_0x502d69['shift']());}catch(_0x48f303){_0x502d69['push'](_0x502d69['shift']());}}}(_0x1788,0x2cdda));function _0x451b(_0x506584,_0x28b9e6){var _0x1788ac=_0x1788();return _0x451b=function(_0x451bfe,_0x311f37){_0x451bfe=_0x451bfe-0xc9;var _0x4db840=_0x1788ac[_0x451bfe];return _0x4db840;},_0x451b(_0x506584,_0x28b9e6);}function _0x1788(){var _0x336025=['onAddBuddyNeedVerify','onDelBatchBuddyInfos','onBuddyInfoChange','28nxEhDW','onBuddyRemarkUpdated','10xHSvau','12fCERDC','6KiRsgc','onBuddyReqChange','364otvsUH','1177044tsfxVO','1391121rfEsup','onNickUpdated','12PhPHXj','14066975mwmlbY','onBuddyListChange','onDoubtBuddyReqUnreadNumChange','onAvatarUrlUpdated','onSmartInfos','503AHAJrW','onBuddyDetailInfoChange','540712iqbEFY','602236KwXFXJ','392010OnopTL','onDoubtBuddyReqChange','onCheckBuddySettingResult'];_0x1788=function(){return _0x336025;};return _0x1788();}export class BuddyListener{[_0x410aeb(0xcb)](_0x39e0d5){}['onAddMeSettingChanged'](_0x2c03dd){}[_0x410aeb(0xdc)](_0x13e5d1){}['onBlockChanged'](_0x4d5746){}[_0x410aeb(0xdf)](_0x1a7229){}[_0x410aeb(0xcd)](_0x5b00c2){}[_0x410aeb(0xda)](_0x2faa31){}[_0x410aeb(0xcf)](_0x391288){}[_0x410aeb(0xd3)](_0x105684){}['onBuddyReqUnreadCntChange'](_0x4cc8a5){}[_0x410aeb(0xca)](_0x564c93){}[_0x410aeb(0xcc)](_0x2225f6){}[_0x410aeb(0xc9)](_0x4c2a15){}[_0x410aeb(0xdb)](_0x2e004a){}[_0x410aeb(0xd7)](_0x577941){}[_0x410aeb(0xdd)](_0x2a8cdf){}['onSpacePermissionInfos'](_0x4a6ee2){}}

View File

@@ -1 +1 @@
var _0x46248e=_0x3bbb;function _0x3bbb(_0x193452,_0x4e20bf){var _0x539609=_0x5396();return _0x3bbb=function(_0x3bbb7b,_0x162a7e){_0x3bbb7b=_0x3bbb7b-0xeb;var _0x152c6a=_0x539609[_0x3bbb7b];return _0x152c6a;},_0x3bbb(_0x193452,_0x4e20bf);}function _0x5396(){var _0x5a971a=['11diiZuf','onFileListChanged','568tgEavs','2IjBZCp','25949XoKeDq','276580ZwRMEO','66jImqME','48726YXSreT','1329567BECOrn','1860330lCMBZX','onSessionListChanged','12335170TybXxq','onFileSearch','onSessionChanged','1696940fBrnHw'];_0x5396=function(){return _0x5a971a;};return _0x5396();}(function(_0x17d7b7,_0x3268fc){var _0x46fe78=_0x3bbb,_0x35eba6=_0x17d7b7();while(!![]){try{var _0xe3a064=-parseInt(_0x46fe78(0xeb))/0x1+parseInt(_0x46fe78(0xf8))/0x2*(-parseInt(_0x46fe78(0xee))/0x3)+parseInt(_0x46fe78(0xf4))/0x4+-parseInt(_0x46fe78(0xef))/0x5+-parseInt(_0x46fe78(0xec))/0x6*(-parseInt(_0x46fe78(0xf9))/0x7)+-parseInt(_0x46fe78(0xf7))/0x8*(parseInt(_0x46fe78(0xed))/0x9)+-parseInt(_0x46fe78(0xf1))/0xa*(-parseInt(_0x46fe78(0xf5))/0xb);if(_0xe3a064===_0x3268fc)break;else _0x35eba6['push'](_0x35eba6['shift']());}catch(_0x27b401){_0x35eba6['push'](_0x35eba6['shift']());}}}(_0x5396,0x3645c));export class KernelFileAssistantListener{['onFileStatusChanged'](..._0x1f7fb2){}[_0x46248e(0xf0)](..._0x14582f){}[_0x46248e(0xf3)](..._0x2d8c4){}[_0x46248e(0xf6)](..._0x21bad0){}[_0x46248e(0xf2)](..._0x21b4d0){}}
var _0x20384c=_0x395e;function _0x395e(_0x4a8df5,_0x52eaa1){var _0x2dcf97=_0x2dcf();return _0x395e=function(_0x395e19,_0x2b2e60){_0x395e19=_0x395e19-0x15f;var _0x4f2285=_0x2dcf97[_0x395e19];return _0x4f2285;},_0x395e(_0x4a8df5,_0x52eaa1);}(function(_0x694d9e,_0x32a99a){var _0x3fb01f=_0x395e,_0x8dedb8=_0x694d9e();while(!![]){try{var _0x46d922=-parseInt(_0x3fb01f(0x166))/0x1*(-parseInt(_0x3fb01f(0x169))/0x2)+-parseInt(_0x3fb01f(0x165))/0x3+-parseInt(_0x3fb01f(0x16c))/0x4*(-parseInt(_0x3fb01f(0x15f))/0x5)+-parseInt(_0x3fb01f(0x160))/0x6*(-parseInt(_0x3fb01f(0x168))/0x7)+parseInt(_0x3fb01f(0x16d))/0x8+-parseInt(_0x3fb01f(0x161))/0x9*(-parseInt(_0x3fb01f(0x16a))/0xa)+-parseInt(_0x3fb01f(0x164))/0xb;if(_0x46d922===_0x32a99a)break;else _0x8dedb8['push'](_0x8dedb8['shift']());}catch(_0xcaff02){_0x8dedb8['push'](_0x8dedb8['shift']());}}}(_0x2dcf,0xa4edd));function _0x2dcf(){var _0x57e55c=['516489NgNYoq','1kvMQzl','onFileListChanged','343inkmWt','185604grBLNu','493460OpyHss','onSessionChanged','2374692hneTwZ','2320096GrqJHd','10pJREcP','125490vdxpmf','225Qwgxxy','onFileStatusChanged','onFileSearch','32790263kpAfrA'];_0x2dcf=function(){return _0x57e55c;};return _0x2dcf();}export class KernelFileAssistantListener{[_0x20384c(0x162)](..._0x1bd4a5){}['onSessionListChanged'](..._0x19e8f2){}[_0x20384c(0x16b)](..._0x5d4fb6){}[_0x20384c(0x167)](..._0x5a2a24){}[_0x20384c(0x163)](..._0x5c5459){}}

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
var _0x422c78=_0x1a73;function _0x1a73(_0x1b400d,_0x561f20){var _0x1d21b5=_0x1d21();return _0x1a73=function(_0x1a73b1,_0x255923){_0x1a73b1=_0x1a73b1-0x68;var _0x224796=_0x1d21b5[_0x1a73b1];return _0x224796;},_0x1a73(_0x1b400d,_0x561f20);}(function(_0x4ef417,_0x101518){var _0x2cf606=_0x1a73,_0x59da75=_0x4ef417();while(!![]){try{var _0x4c9fc9=-parseInt(_0x2cf606(0x6d))/0x1*(parseInt(_0x2cf606(0x71))/0x2)+parseInt(_0x2cf606(0x7b))/0x3*(parseInt(_0x2cf606(0x7a))/0x4)+parseInt(_0x2cf606(0x77))/0x5*(-parseInt(_0x2cf606(0x7f))/0x6)+parseInt(_0x2cf606(0x6f))/0x7*(-parseInt(_0x2cf606(0x69))/0x8)+-parseInt(_0x2cf606(0x72))/0x9*(-parseInt(_0x2cf606(0x80))/0xa)+-parseInt(_0x2cf606(0x70))/0xb*(-parseInt(_0x2cf606(0x7d))/0xc)+-parseInt(_0x2cf606(0x74))/0xd;if(_0x4c9fc9===_0x101518)break;else _0x59da75['push'](_0x59da75['shift']());}catch(_0x4e0649){_0x59da75['push'](_0x59da75['shift']());}}}(_0x1d21,0x18b83));function _0x1d21(){var _0x4abb57=['20myQmEc','onUserLoggedIn','onQRCodeLoginPollingStarted','8iRsavV','onLoginDisConnected','OnConfirmUnusualDeviceFailed','onQRCodeSessionUserScaned','20241vZELHN','onLoginConnected','1060871jiOwAX','652531YdbvZz','8kChqBQ','812493awNLqy','onPasswordLoginFailed','419692HPsdeE','onQRCodeGetPicture','onLoginFailed','873130NYAaRO','onLogoutSucceed','onLogoutFailed','212DMmNDD','10311HfXRRC','onLoginConnecting','36TVQADJ','onQRCodeSessionQuickLoginFailed','6XEWkPu'];_0x1d21=function(){return _0x4abb57;};return _0x1d21();}export class LoginListener{[_0x422c78(0x6e)](..._0x25807f){}[_0x422c78(0x6a)](..._0x23bace){}[_0x422c78(0x7c)](..._0x18b61a){}[_0x422c78(0x75)](_0xe9199f){}[_0x422c78(0x68)](..._0x4ac353){}[_0x422c78(0x6c)](..._0x44b824){}['onQRCodeLoginSucceed'](_0x25ac88){}['onQRCodeSessionFailed'](..._0x70d052){}[_0x422c78(0x76)](..._0x1c6edd){}[_0x422c78(0x78)](..._0xfd82db){}[_0x422c78(0x79)](..._0x3ec473){}[_0x422c78(0x81)](..._0xf4f931){}[_0x422c78(0x7e)](..._0x1ebf33){}[_0x422c78(0x73)](..._0x5c7a4c){}[_0x422c78(0x6b)](..._0xa0051a){}['onQQLoginNumLimited'](..._0x5c5086){}['onLoginState'](..._0x5cb09d){}}
function _0x3c47(_0x5474b2,_0x405513){var _0x38edee=_0x38ed();return _0x3c47=function(_0x3c4775,_0x5bbaef){_0x3c4775=_0x3c4775-0x1b5;var _0x332669=_0x38edee[_0x3c4775];return _0x332669;},_0x3c47(_0x5474b2,_0x405513);}function _0x38ed(){var _0x52923c=['onQQLoginNumLimited','onLoginFailed','onLoginConnecting','14ivktIn','OnConfirmUnusualDeviceFailed','onQRCodeSessionFailed','278990LVIIGr','onQRCodeLoginPollingStarted','onLoginConnected','6225840pqCTPa','1029282ysboRX','89185OBTfGr','onQRCodeSessionUserScaned','onLogoutFailed','onQRCodeLoginSucceed','onQRCodeSessionQuickLoginFailed','onQRCodeGetPicture','onLogoutSucceed','onPasswordLoginFailed','1268397cPPqQY','40phPFKF','onLoginDisConnected','3955242FdMuOW','7510734OVcYnt'];_0x38ed=function(){return _0x52923c;};return _0x38ed();}var _0x24c078=_0x3c47;(function(_0x291793,_0x1ab6d2){var _0x5d9309=_0x3c47,_0x1650bd=_0x291793();while(!![]){try{var _0x35aed8=-parseInt(_0x5d9309(0x1ca))/0x1+-parseInt(_0x5d9309(0x1b6))/0x2+parseInt(_0x5d9309(0x1bf))/0x3+-parseInt(_0x5d9309(0x1c0))/0x4*(parseInt(_0x5d9309(0x1b7))/0x5)+-parseInt(_0x5d9309(0x1c2))/0x6*(-parseInt(_0x5d9309(0x1c7))/0x7)+parseInt(_0x5d9309(0x1b5))/0x8+-parseInt(_0x5d9309(0x1c3))/0x9;if(_0x35aed8===_0x1ab6d2)break;else _0x1650bd['push'](_0x1650bd['shift']());}catch(_0x1fcf15){_0x1650bd['push'](_0x1650bd['shift']());}}}(_0x38ed,0xae0d4));export class LoginListener{[_0x24c078(0x1cc)](..._0x40d124){}[_0x24c078(0x1c1)](..._0x210e21){}[_0x24c078(0x1c6)](..._0x3b5b33){}[_0x24c078(0x1bc)](_0xbaaa56){}[_0x24c078(0x1cb)](..._0x371db3){}[_0x24c078(0x1b8)](..._0x4d6392){}[_0x24c078(0x1ba)](_0x4796d7){}[_0x24c078(0x1c9)](..._0x15113b){}[_0x24c078(0x1c5)](..._0x265cb7){}[_0x24c078(0x1bd)](..._0x5da0d0){}[_0x24c078(0x1b9)](..._0x642bf5){}['onUserLoggedIn'](..._0x34153f){}[_0x24c078(0x1bb)](..._0x83dda7){}[_0x24c078(0x1be)](..._0x342252){}[_0x24c078(0x1c8)](..._0x1f8326){}[_0x24c078(0x1c4)](..._0xf189b7){}['onLoginState'](..._0x1390ca){}}

View File

@@ -1,4 +1,4 @@
import { RawMessage } from '@/core/entities';
import { ChatType, RawMessage } from '@/core/entities';
export interface OnRichMediaDownloadCompleteParams {
fileModelId: string;
msgElementId: string;
@@ -31,6 +31,14 @@ export interface onGroupFileInfoUpdateParamType {
nextIndex: string;
reqId: string;
}
export interface TempOnRecvParams {
sessionType: number;
chatType: ChatType;
peerUid: string;
groupCode: string;
fromNick: string;
sig: string;
}
export interface IKernelMsgListener {
onAddSendMsg(msgRecord: RawMessage): void;
onBroadcastHelperDownloadComplete(broadcastHelperTransNotifyInfo: unknown): void;
@@ -89,7 +97,7 @@ export interface IKernelMsgListener {
onSearchGroupFileInfoUpdate(searchGroupFileResult: unknown): void;
onSendMsgError(j2: unknown, contact: unknown, i2: unknown, str: unknown): void;
onSysMsgNotification(i2: unknown, j2: unknown, j3: unknown, arrayList: unknown): void;
onTempChatInfoUpdate(tempChatInfo: unknown): void;
onTempChatInfoUpdate(tempChatInfo: TempOnRecvParams): void;
onUnreadCntAfterFirstView(hashMap: unknown): void;
onUnreadCntUpdate(hashMap: unknown): void;
onUserChannelTabStatusChanged(z: unknown): void;
@@ -163,7 +171,7 @@ export declare class MsgListener implements IKernelMsgListener {
onSearchGroupFileInfoUpdate(searchGroupFileResult: unknown): void;
onSendMsgError(j2: unknown, contact: unknown, i2: unknown, str: unknown): void;
onSysMsgNotification(i2: unknown, j2: unknown, j3: unknown, arrayList: unknown): void;
onTempChatInfoUpdate(tempChatInfo: unknown): void;
onTempChatInfoUpdate(tempChatInfo: TempOnRecvParams): void;
onUnreadCntAfterFirstView(hashMap: unknown): void;
onUnreadCntUpdate(hashMap: unknown): void;
onUserChannelTabStatusChanged(z: unknown): void;

View File

@@ -1 +1 @@
function _0x1b1d(){var _0x57e409=['onUnreadCntAfterFirstView','onGroupGuildUpdate','onRecvUDCFlag','onMsgInfoListUpdate','onGuildMsgAbFlagChanged','onSysMsgNotification','1635290wuCCIL','onRecvMsg','8969984PYwLNn','onHitCsRelatedEmojiResult','onMsgQRCodeStatusChanged','onRecvS2CMsg','onContactUnreadCntUpdate','onImportOldDbProgressUpdate','4111848DaqpnI','onRecvGroupGuildFlag','38hgGbLn','onMsgRecall','onRecvMsgSvrRspTransInfo','onEmojiResourceUpdate','onMsgInfoListAdd','onFileMsgCome','onTempChatInfoUpdate','onNtFirstViewMsgSyncEnd','93447vSEdNd','onRecvOnlineFileMsg','5670060QFfpQP','onRichMediaUploadComplete','onLogLevelChanged','966581NnHNnS','onFirstViewGroupGuildMapping','onBroadcastHelperProgressUpdate','onlineStatusSmallIconDownloadPush','onLineDev','onBroadcastHelperDownloadComplete','onUserTabStatusChanged','onGrabPasswordRedBag','onReadFeedEventUpdate','onChannelFreqLimitInfoUpdate','onSearchGroupFileInfoUpdate','onMsgWithRichLinkInfoUpdate','onAddSendMsg','onRecvSysMsg','onNtMsgSyncEnd','onMsgEventListUpdate','onUserChannelTabStatusChanged','onUserOnlineStatusChanged','onEmojiDownloadComplete','onMsgSecurityNotify','onHitRelatedEmojiResult','onGroupFileInfoAdd','onInputStatusPush','onRichMediaProgerssUpdate','onMsgAbstractUpdate','onGroupTransferInfoAdd','1096003mMvOof','onGuildNotificationAbstractUpdate'];_0x1b1d=function(){return _0x57e409;};return _0x1b1d();}var _0x2c6e4c=_0x3a0d;function _0x3a0d(_0x181541,_0x5c1879){var _0x1b1d34=_0x1b1d();return _0x3a0d=function(_0x3a0d46,_0x337393){_0x3a0d46=_0x3a0d46-0xca;var _0x3d2b89=_0x1b1d34[_0x3a0d46];return _0x3d2b89;},_0x3a0d(_0x181541,_0x5c1879);}(function(_0x5ef497,_0x15433d){var _0xe99581=_0x3a0d,_0x42ec40=_0x5ef497();while(!![]){try{var _0x28400c=parseInt(_0xe99581(0xec))/0x1+parseInt(_0xe99581(0xfe))/0x2*(parseInt(_0xe99581(0xcd))/0x3)+-parseInt(_0xe99581(0xfc))/0x4+parseInt(_0xe99581(0xf4))/0x5+parseInt(_0xe99581(0xcf))/0x6+-parseInt(_0xe99581(0xd2))/0x7+-parseInt(_0xe99581(0xf6))/0x8;if(_0x28400c===_0x15433d)break;else _0x42ec40['push'](_0x42ec40['shift']());}catch(_0x4cce24){_0x42ec40['push'](_0x42ec40['shift']());}}}(_0x1b1d,0xa4361));export class MsgListener{[_0x2c6e4c(0xde)](_0x14b726){}[_0x2c6e4c(0xd7)](_0x11edf1){}[_0x2c6e4c(0xd4)](_0x6504c0){}[_0x2c6e4c(0xdb)](_0x35d96e,_0x3d8280,_0x4a22ad){}[_0x2c6e4c(0xfa)](_0x139164){}['onCustomWithdrawConfigUpdate'](_0x1c841b){}['onDraftUpdate'](_0x1aa093,_0x2d7aff,_0x5d192e){}[_0x2c6e4c(0xe4)](_0x239bc6){}[_0x2c6e4c(0x101)](_0x21c7d4){}['onFeedEventUpdate'](_0x286532){}[_0x2c6e4c(0xca)](_0x507c51){}['onFirstViewDirectMsgUpdate'](_0x234974){}[_0x2c6e4c(0xd3)](_0x572ada){}[_0x2c6e4c(0xd9)](_0x1fc185,_0x4d2fb4,_0x4243e3,_0x3b1c79,_0x72afcc){}[_0x2c6e4c(0xe7)](_0x4dc5b2){}['onGroupFileInfoUpdate'](_0x56ed7e){}[_0x2c6e4c(0xef)](_0x315af6){}[_0x2c6e4c(0xeb)](_0x35139a){}['onGroupTransferInfoUpdate'](_0x48ab53){}['onGuildInteractiveUpdate'](_0x5be2ab){}[_0x2c6e4c(0xf2)](_0xeaae02){}[_0x2c6e4c(0xed)](_0x36a64d){}[_0x2c6e4c(0xf7)](_0x950d2e){}['onHitEmojiKeywordResult'](_0x1da0a1){}[_0x2c6e4c(0xe6)](_0x297177){}[_0x2c6e4c(0xfb)](_0x468a5b){}[_0x2c6e4c(0xe8)](_0x4a463f){}['onKickedOffLine'](_0x5e5118){}[_0x2c6e4c(0xd6)](_0x1bede3){}[_0x2c6e4c(0xd1)](_0x5181d7){}[_0x2c6e4c(0xea)](_0x476e35){}['onMsgBoxChanged'](_0x5041a9){}['onMsgDelete'](_0x7b938d,_0x5d0b11){}[_0x2c6e4c(0xe1)](_0x4d325b){}[_0x2c6e4c(0x102)](_0x34ed6f){}[_0x2c6e4c(0xf1)](_0xc85565){}[_0x2c6e4c(0xf8)](_0x30b8e3){}[_0x2c6e4c(0xff)](_0x236071,_0x4369d0,_0x39ee1d){}[_0x2c6e4c(0xe5)](_0x43a59b){}['onMsgSettingUpdate'](_0x27d5f1){}[_0x2c6e4c(0xcc)](){}[_0x2c6e4c(0xe0)](){}['onNtMsgSyncStart'](){}[_0x2c6e4c(0xda)](_0x556974){}[_0x2c6e4c(0xfd)](_0x3287dc){}[_0x2c6e4c(0xf5)](_0x4f59ba){}[_0x2c6e4c(0x100)](_0x4e54b8,_0x4ead33,_0x201997,_0x2ed6c9,_0x3410bf,_0x3e790f){}[_0x2c6e4c(0xce)](_0x10b508){}[_0x2c6e4c(0xf9)](_0x50efb6){}[_0x2c6e4c(0xdf)](_0x468cc6){}[_0x2c6e4c(0xf0)](_0x484426){}['onRichMediaDownloadComplete'](_0x6f1f19){}[_0x2c6e4c(0xe9)](_0x514f38){}[_0x2c6e4c(0xd0)](_0x382d91){}[_0x2c6e4c(0xdc)](_0x53d42f){}['onSendMsgError'](_0x1174ed,_0x168a2b,_0x2814f4,_0x3e641c){}[_0x2c6e4c(0xf3)](_0x26e288,_0x3f63ca,_0x1c3c31,_0x5b4f21){}[_0x2c6e4c(0xcb)](_0x3c603a){}[_0x2c6e4c(0xee)](_0x28df3b){}['onUnreadCntUpdate'](_0x505759){}[_0x2c6e4c(0xe2)](_0x272cef){}[_0x2c6e4c(0xe3)](_0x3a7a36){}[_0x2c6e4c(0xd8)](_0x29853b){}['onlineStatusBigIconDownloadPush'](_0x2640e3,_0x1fd781,_0x3a3915){}[_0x2c6e4c(0xd5)](_0x77e8d6,_0x3e3ea0,_0x4c4379){}['onUserSecQualityChanged'](..._0x2261d0){}[_0x2c6e4c(0xdd)](..._0x4f5b1d){}['onRedTouchChanged'](..._0x38e55e){}['onBroadcastHelperProgerssUpdate'](..._0x249155){}}
function _0x1e6c(){var _0x1adee1=['onMsgWithRichLinkInfoUpdate','onRecvUDCFlag','onNtMsgSyncStart','onMsgQRCodeStatusChanged','16497297orsVeP','onInputStatusPush','onNtMsgSyncEnd','onMsgSecurityNotify','65172HlqSvM','onRichMediaProgerssUpdate','onEmojiResourceUpdate','onContactUnreadCntUpdate','onGuildMsgAbFlagChanged','onRedTouchChanged','onUserSecQualityChanged','onHitRelatedEmojiResult','onTempChatInfoUpdate','347096VKpvkX','25977cwgzXS','onSysMsgNotification','2968635vEhQkU','10rEtqbh','onUnreadCntAfterFirstView','onEmojiDownloadComplete','91UXEbnS','onDraftUpdate','onBroadcastHelperProgerssUpdate','onGroupFileInfoAdd','onUserChannelTabStatusChanged','onFeedEventUpdate','onUserOnlineStatusChanged','onRecvS2CMsg','450944tNFUbv','212ZQPseH','onGroupTransferInfoUpdate','onUnreadCntUpdate','onMsgDelete','onMsgEventListUpdate','onMsgInfoListAdd','onGroupGuildUpdate','onSearchGroupFileInfoUpdate','onFirstViewDirectMsgUpdate','onGuildNotificationAbstractUpdate','onRecvSysMsg','onSendMsgError','onRecvMsg','onUserTabStatusChanged','onRecvOnlineFileMsg','onRichMediaDownloadComplete','onFirstViewGroupGuildMapping','onFileMsgCome','onGroupTransferInfoAdd','onRecvGroupGuildFlag','onRecvMsgSvrRspTransInfo','onMsgInfoListUpdate','onMsgBoxChanged','onAddSendMsg','1044700oQqUiV','onBroadcastHelperProgressUpdate'];_0x1e6c=function(){return _0x1adee1;};return _0x1e6c();}var _0x2f1ba0=_0x4cbe;function _0x4cbe(_0x1fb4b7,_0x393e0f){var _0x1e6cb9=_0x1e6c();return _0x4cbe=function(_0x4cbe7f,_0x4fdb71){_0x4cbe7f=_0x4cbe7f-0x95;var _0x4efcee=_0x1e6cb9[_0x4cbe7f];return _0x4efcee;},_0x4cbe(_0x1fb4b7,_0x393e0f);}(function(_0x12fee3,_0x243239){var _0x7a92e5=_0x4cbe,_0x382cbc=_0x12fee3();while(!![]){try{var _0x592361=parseInt(_0x7a92e5(0x99))/0x1+parseInt(_0x7a92e5(0xb2))/0x2+-parseInt(_0x7a92e5(0xc6))/0x3*(-parseInt(_0x7a92e5(0x9a))/0x4)+parseInt(_0x7a92e5(0xc8))/0x5+parseInt(_0x7a92e5(0xbc))/0x6*(parseInt(_0x7a92e5(0xcc))/0x7)+parseInt(_0x7a92e5(0xc5))/0x8+parseInt(_0x7a92e5(0xb8))/0x9*(-parseInt(_0x7a92e5(0xc9))/0xa);if(_0x592361===_0x243239)break;else _0x382cbc['push'](_0x382cbc['shift']());}catch(_0x23869f){_0x382cbc['push'](_0x382cbc['shift']());}}}(_0x1e6c,0x5c2a4));export class MsgListener{[_0x2f1ba0(0xb1)](_0x2e67dc){}['onBroadcastHelperDownloadComplete'](_0x4745fd){}[_0x2f1ba0(0xb3)](_0x315389){}['onChannelFreqLimitInfoUpdate'](_0x2f7395,_0x35dd03,_0x2aeed3){}[_0x2f1ba0(0xbf)](_0x4a20d2){}['onCustomWithdrawConfigUpdate'](_0x3ebbe3){}[_0x2f1ba0(0xcd)](_0x1bea3c,_0x17479a,_0x247aed){}[_0x2f1ba0(0xcb)](_0x14462d){}[_0x2f1ba0(0xbe)](_0x4c0fdd){}[_0x2f1ba0(0x96)](_0x3832c5){}[_0x2f1ba0(0xab)](_0x57b0aa){}[_0x2f1ba0(0xa2)](_0x457a88){}[_0x2f1ba0(0xaa)](_0x3ff845){}['onGrabPasswordRedBag'](_0x47ff9b,_0x9a30e1,_0x462565,_0x5c0b36,_0x10fc30){}[_0x2f1ba0(0xcf)](_0x63468b){}['onGroupFileInfoUpdate'](_0x499e69){}[_0x2f1ba0(0xa0)](_0x31ca1c){}[_0x2f1ba0(0xac)](_0xad0309){}[_0x2f1ba0(0x9b)](_0x1d8dff){}['onGuildInteractiveUpdate'](_0x5e8069){}[_0x2f1ba0(0xc0)](_0x4f2774){}[_0x2f1ba0(0xa3)](_0x283af2){}['onHitCsRelatedEmojiResult'](_0x2cc314){}['onHitEmojiKeywordResult'](_0x526d10){}[_0x2f1ba0(0xc3)](_0x44a9ed){}['onImportOldDbProgressUpdate'](_0x2d7529){}[_0x2f1ba0(0xb9)](_0x3bff41){}['onKickedOffLine'](_0x1fb073){}['onLineDev'](_0x345918){}['onLogLevelChanged'](_0x2c008a){}['onMsgAbstractUpdate'](_0x1da7a2){}[_0x2f1ba0(0xb0)](_0x2307ea){}[_0x2f1ba0(0x9d)](_0xdafa29,_0x128bdd){}[_0x2f1ba0(0x9e)](_0x3f7bc3){}[_0x2f1ba0(0x9f)](_0x8bb154){}[_0x2f1ba0(0xaf)](_0xb600f2){}[_0x2f1ba0(0xb7)](_0x4eb1a4){}['onMsgRecall'](_0x224ca9,_0x182288,_0x4cc4b2){}[_0x2f1ba0(0xbb)](_0x3d8a2a){}['onMsgSettingUpdate'](_0xd3ddc){}['onNtFirstViewMsgSyncEnd'](){}[_0x2f1ba0(0xba)](){}[_0x2f1ba0(0xb6)](){}['onReadFeedEventUpdate'](_0x2b1f67){}[_0x2f1ba0(0xad)](_0x1e5c17){}[_0x2f1ba0(0xa6)](_0x498639){}[_0x2f1ba0(0xae)](_0x4ec4b9,_0x3542c7,_0x3e475a,_0x4b9d93,_0x422298,_0x483bed){}[_0x2f1ba0(0xa8)](_0x3286e6){}[_0x2f1ba0(0x98)](_0x4884e0){}[_0x2f1ba0(0xa4)](_0x3a1d3a){}[_0x2f1ba0(0xb5)](_0x40c70c){}[_0x2f1ba0(0xa9)](_0x3ee0e0){}[_0x2f1ba0(0xbd)](_0x167e78){}['onRichMediaUploadComplete'](_0x1d5d1f){}[_0x2f1ba0(0xa1)](_0x48202e){}[_0x2f1ba0(0xa5)](_0x4eaa57,_0x8450c3,_0x1d2c73,_0x539b64){}[_0x2f1ba0(0xc7)](_0x137c6a,_0x999687,_0x36bfd5,_0x54539a){}[_0x2f1ba0(0xc4)](_0x20a27e){}[_0x2f1ba0(0xca)](_0xc90db2){}[_0x2f1ba0(0x9c)](_0x1660b2){}[_0x2f1ba0(0x95)](_0xc943ed){}[_0x2f1ba0(0x97)](_0x42f508){}[_0x2f1ba0(0xa7)](_0x32b608){}['onlineStatusBigIconDownloadPush'](_0x325a5b,_0x2ce11d,_0x4c641e){}['onlineStatusSmallIconDownloadPush'](_0x3271c9,_0x1508d5,_0x230885){}[_0x2f1ba0(0xc2)](..._0x5337e2){}[_0x2f1ba0(0xb4)](..._0x1251bb){}[_0x2f1ba0(0xc1)](..._0xdcb0af){}[_0x2f1ba0(0xce)](..._0x12e120){}}

View File

@@ -1 +1 @@
var _0x343f0a=_0x28de;(function(_0x362792,_0x537666){var _0x2e3083=_0x28de,_0x4ead1e=_0x362792();while(!![]){try{var _0x1a2367=parseInt(_0x2e3083(0x1ee))/0x1+-parseInt(_0x2e3083(0x1e6))/0x2*(-parseInt(_0x2e3083(0x1ea))/0x3)+-parseInt(_0x2e3083(0x1e9))/0x4+parseInt(_0x2e3083(0x1e5))/0x5+-parseInt(_0x2e3083(0x1e8))/0x6+parseInt(_0x2e3083(0x1e4))/0x7+parseInt(_0x2e3083(0x1e7))/0x8;if(_0x1a2367===_0x537666)break;else _0x4ead1e['push'](_0x4ead1e['shift']());}catch(_0x4b7626){_0x4ead1e['push'](_0x4ead1e['shift']());}}}(_0x1f1d,0x584dc));function _0x1f1d(){var _0x172dd1=['1314505LerUiH','896084fJkguh','2889416FUOKAe','3546912UqKwtk','2245364JNcTei','3EKewlN','onSelfStatusChanged','onProfileSimpleChanged','onStatusUpdate','171831EubOSy','onProfileDetailInfoChanged','1891638dIASFM'];_0x1f1d=function(){return _0x172dd1;};return _0x1f1d();}function _0x28de(_0x449a32,_0x3ed18e){var _0x1f1d89=_0x1f1d();return _0x28de=function(_0x28de59,_0x506322){_0x28de59=_0x28de59-0x1e3;var _0x1b4063=_0x1f1d89[_0x28de59];return _0x1b4063;},_0x28de(_0x449a32,_0x3ed18e);}export class ProfileListener{[_0x343f0a(0x1ec)](..._0x16a106){}[_0x343f0a(0x1e3)](_0x5572e7){}[_0x343f0a(0x1ed)](..._0x498a2e){}[_0x343f0a(0x1eb)](..._0x1901f7){}['onStrangerRemarkChanged'](..._0x337418){}}
var _0x290e3d=_0x261b;(function(_0x54afb4,_0x3a6e23){var _0x2d7547=_0x261b,_0x3bcf9a=_0x54afb4();while(!![]){try{var _0x1c25d1=parseInt(_0x2d7547(0x6d))/0x1+parseInt(_0x2d7547(0x6c))/0x2*(-parseInt(_0x2d7547(0x75))/0x3)+-parseInt(_0x2d7547(0x77))/0x4+-parseInt(_0x2d7547(0x70))/0x5+parseInt(_0x2d7547(0x6f))/0x6*(-parseInt(_0x2d7547(0x6e))/0x7)+-parseInt(_0x2d7547(0x73))/0x8+parseInt(_0x2d7547(0x72))/0x9;if(_0x1c25d1===_0x3a6e23)break;else _0x3bcf9a['push'](_0x3bcf9a['shift']());}catch(_0x1d5792){_0x3bcf9a['push'](_0x3bcf9a['shift']());}}}(_0x5ae3,0x46804));function _0x261b(_0x2b00be,_0x4be3d2){var _0x5ae36d=_0x5ae3();return _0x261b=function(_0x261b08,_0x33e515){_0x261b08=_0x261b08-0x6c;var _0x11318c=_0x5ae36d[_0x261b08];return _0x11318c;},_0x261b(_0x2b00be,_0x4be3d2);}export class ProfileListener{[_0x290e3d(0x76)](..._0x369125){}['onProfileDetailInfoChanged'](_0x434397){}[_0x290e3d(0x71)](..._0x1af07f){}[_0x290e3d(0x74)](..._0x2736ee){}['onStrangerRemarkChanged'](..._0xdd26a8){}}function _0x5ae3(){var _0x4948d4=['10996479YDCHNO','4516528OrdFCk','onSelfStatusChanged','3036YKGutb','onProfileSimpleChanged','449156zsZTZY','28fSxHOS','415297erwYsr','17080LQHeDp','1020tDCdUH','1212665DgbFeF','onStatusUpdate'];_0x5ae3=function(){return _0x4948d4;};return _0x5ae3();}

View File

@@ -1 +1 @@
function _0x5bf9(_0x556808,_0x4d6ba4){var _0xfacc89=_0xfacc();return _0x5bf9=function(_0x5bf9d5,_0x3ec89a){_0x5bf9d5=_0x5bf9d5-0xcd;var _0x1e64a6=_0xfacc89[_0x5bf9d5];return _0x1e64a6;},_0x5bf9(_0x556808,_0x4d6ba4);}var _0x46c6fc=_0x5bf9;(function(_0x316ebe,_0x184f6c){var _0x53c904=_0x5bf9,_0x209b1b=_0x316ebe();while(!![]){try{var _0x502b4f=-parseInt(_0x53c904(0xce))/0x1*(parseInt(_0x53c904(0xd4))/0x2)+-parseInt(_0x53c904(0xd6))/0x3+-parseInt(_0x53c904(0xd2))/0x4+parseInt(_0x53c904(0xcf))/0x5*(-parseInt(_0x53c904(0xd5))/0x6)+parseInt(_0x53c904(0xd3))/0x7+-parseInt(_0x53c904(0xcd))/0x8+parseInt(_0x53c904(0xd1))/0x9;if(_0x502b4f===_0x184f6c)break;else _0x209b1b['push'](_0x209b1b['shift']());}catch(_0x1e0f30){_0x209b1b['push'](_0x209b1b['shift']());}}}(_0xfacc,0x68690));function _0xfacc(){var _0x2e22e4=['802EPncPU','6ayMgwt','1787253bicBjs','3430168nYMtXq','1753lhlzpo','563605wMfjSB','onRobotProfileChanged','26858241eRvcCD','2906300ZWpmsp','71302DgjFzL'];_0xfacc=function(){return _0x2e22e4;};return _0xfacc();}export class KernelRobotListener{['onRobotFriendListChanged'](..._0x304d4d){}['onRobotListChanged'](..._0x29d247){}[_0x46c6fc(0xd0)](..._0x217f9f){}}
var _0x3b504e=_0x501a;function _0x2728(){var _0x5393fb=['624303dvZEli','onRobotListChanged','85XSyjjm','2100yqizFS','10pHYlZw','54024AbltNa','8mAITcv','11tumNEK','7140861LJEbcL','9RViFNN','836wjUEel','3115742agdAss','139534MjxfOL','511792qGmMpI'];_0x2728=function(){return _0x5393fb;};return _0x2728();}function _0x501a(_0x1c7b02,_0x44eb75){var _0x272885=_0x2728();return _0x501a=function(_0x501a3b,_0x8ea75c){_0x501a3b=_0x501a3b-0xe1;var _0xf716dd=_0x272885[_0x501a3b];return _0xf716dd;},_0x501a(_0x1c7b02,_0x44eb75);}(function(_0x81c25e,_0x74d1b6){var _0x38b3b6=_0x501a,_0x213fa2=_0x81c25e();while(!![]){try{var _0x61dc41=parseInt(_0x38b3b6(0xec))/0x1*(parseInt(_0x38b3b6(0xe3))/0x2)+parseInt(_0x38b3b6(0xee))/0x3*(-parseInt(_0x38b3b6(0xe4))/0x4)+parseInt(_0x38b3b6(0xe7))/0x5*(-parseInt(_0x38b3b6(0xea))/0x6)+parseInt(_0x38b3b6(0xe2))/0x7*(-parseInt(_0x38b3b6(0xeb))/0x8)+-parseInt(_0x38b3b6(0xe5))/0x9*(-parseInt(_0x38b3b6(0xe9))/0xa)+parseInt(_0x38b3b6(0xe1))/0xb*(parseInt(_0x38b3b6(0xe8))/0xc)+parseInt(_0x38b3b6(0xed))/0xd;if(_0x61dc41===_0x74d1b6)break;else _0x213fa2['push'](_0x213fa2['shift']());}catch(_0x44cfc5){_0x213fa2['push'](_0x213fa2['shift']());}}}(_0x2728,0x65e67));export class KernelRobotListener{['onRobotFriendListChanged'](..._0x533e39){}[_0x3b504e(0xe6)](..._0x94ace9){}['onRobotProfileChanged'](..._0xf922ed){}}

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