mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-07-19 12:03:37 +00:00
Compare commits
142 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
e53c37adc9 | ||
![]() |
c37539354c | ||
![]() |
ae0277f33c | ||
![]() |
b863896249 | ||
![]() |
5b42f8b743 | ||
![]() |
3883fab614 | ||
![]() |
61d6bcec4b | ||
![]() |
3b5902b033 | ||
![]() |
3a88c21a3b | ||
![]() |
91a5055dee | ||
![]() |
7befd1469f | ||
![]() |
c72ebe495c | ||
![]() |
19e06b97e6 | ||
![]() |
7519825303 | ||
![]() |
d9315bf309 | ||
![]() |
8c36c809a0 | ||
![]() |
8138aa3cb2 | ||
![]() |
87aef3ca78 | ||
![]() |
a3f1d26d6b | ||
![]() |
06cebc5670 | ||
![]() |
867fd62d77 | ||
![]() |
650cdf2916 | ||
![]() |
ebf461f2fd | ||
![]() |
27fa319b2a | ||
![]() |
d95ac894f4 | ||
![]() |
ae84a8dd11 | ||
![]() |
2fc963f986 | ||
![]() |
be1f938ebd | ||
![]() |
cccf4d503d | ||
![]() |
9dad2a8ac6 | ||
![]() |
75af104f07 | ||
![]() |
76ecba245b | ||
![]() |
3697c2ced8 | ||
![]() |
b9d1d84716 | ||
![]() |
64b2d547ce | ||
![]() |
d8d2ff7e4e | ||
![]() |
8aa5dc6482 | ||
![]() |
474ba20e61 | ||
![]() |
bdea2d02a9 | ||
![]() |
c4307481f1 | ||
![]() |
b8ac1b28bd | ||
![]() |
24038cda95 | ||
![]() |
86c82e9608 | ||
![]() |
daab5d150b | ||
![]() |
9ff82bdb90 | ||
![]() |
c6d70ef1cf | ||
![]() |
15d4bb3c76 | ||
![]() |
3e698981fd | ||
![]() |
9d45c934a5 | ||
![]() |
c2bf9cf93e | ||
![]() |
b3c6fd7f26 | ||
![]() |
ccd155de71 | ||
![]() |
1f90d2e46b | ||
![]() |
4c5d974c22 | ||
![]() |
392eda1cbc | ||
![]() |
a9da3279e8 | ||
![]() |
1ce8351180 | ||
![]() |
96c334478a | ||
![]() |
f1b0875b05 | ||
![]() |
cea9e11c83 | ||
![]() |
f098b39200 | ||
![]() |
012d948b59 | ||
![]() |
3334cd0a71 | ||
![]() |
d63d53fd88 | ||
![]() |
a7fa39b2fd | ||
![]() |
40bb42e193 | ||
![]() |
9c382c639b | ||
![]() |
a43cde38f1 | ||
![]() |
c35d2e08cd | ||
![]() |
3377c383c1 | ||
![]() |
c00e6d95cd | ||
![]() |
725fccf4ed | ||
![]() |
13129bd219 | ||
![]() |
4561977bcf | ||
![]() |
40be8a91f5 | ||
![]() |
2a04d5830b | ||
![]() |
82a38574f3 | ||
![]() |
fea3a33c2b | ||
![]() |
9a502cdf6f | ||
![]() |
4b616299cf | ||
![]() |
102243e064 | ||
![]() |
4b21ac5ebe | ||
![]() |
4dd7363dd3 | ||
![]() |
3d5e5ab78f | ||
![]() |
73045a1b21 | ||
![]() |
871173a7cf | ||
![]() |
0002313093 | ||
![]() |
948cf5cca6 | ||
![]() |
d40230879c | ||
![]() |
ab22b775f1 | ||
![]() |
42c85224ba | ||
![]() |
e57444a353 | ||
![]() |
3c6503d495 | ||
![]() |
149b518f48 | ||
![]() |
74621447ff | ||
![]() |
3280952931 | ||
![]() |
9e670e2736 | ||
![]() |
9fc6347a2f | ||
![]() |
ec7a15a192 | ||
![]() |
7f99982810 | ||
![]() |
935d83aaf8 | ||
![]() |
0ff6edd546 | ||
![]() |
94f629585a | ||
![]() |
89c04be02f | ||
![]() |
3151965ea8 | ||
![]() |
bdf5159be1 | ||
![]() |
0499ebbea3 | ||
![]() |
d5843b7236 | ||
![]() |
1c9c574a90 | ||
![]() |
39acf20e48 | ||
![]() |
52eb6ed5ab | ||
![]() |
ee78d2d59d | ||
![]() |
60dc5c4a38 | ||
![]() |
50a0dc0355 | ||
![]() |
3f681ec914 | ||
![]() |
0bf499f191 | ||
![]() |
389695a0d6 | ||
![]() |
07f1afb312 | ||
![]() |
ae91e61304 | ||
![]() |
6248991b01 | ||
![]() |
7f2d57ef62 | ||
![]() |
31f8f884f1 | ||
![]() |
4f4af5985a | ||
![]() |
a716fdf6d4 | ||
![]() |
9717f64abd | ||
![]() |
adf239183a | ||
![]() |
6cf209c79c | ||
![]() |
decc5fb3c0 | ||
![]() |
1e0820d613 | ||
![]() |
70124d5177 | ||
![]() |
269de65201 | ||
![]() |
1d11abbfb6 | ||
![]() |
700f308d6e | ||
![]() |
21b6928ca6 | ||
![]() |
998c67a649 | ||
![]() |
fb99e878b0 | ||
![]() |
1619adfc27 | ||
![]() |
5510fb473f | ||
![]() |
be1878cb2b | ||
![]() |
15ab121cbd | ||
![]() |
aa79b0e861 | ||
![]() |
b80e550bcd |
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
@@ -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
|
||||
|
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
@@ -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
|
||||
|
11
docs/changelogs/CHANGELOG.v1.6.0.md
Normal file
11
docs/changelogs/CHANGELOG.v1.6.0.md
Normal 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)
|
12
docs/changelogs/old/CHANGELOG.v1.4.2.md
Normal file
12
docs/changelogs/old/CHANGELOG.v1.4.2.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# v1.4.2
|
||||
|
||||
QQ Version: Windows 9.9.10-24108 / Linux 3.2.7-23361
|
||||
|
||||
## 修复与优化
|
||||
* 修复获取群文件列表Api
|
||||
* 修复退群通知问题
|
||||
|
||||
## 新增与调整
|
||||
|
||||
|
||||
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)
|
11
docs/changelogs/old/CHANGELOG.v1.4.3.md
Normal file
11
docs/changelogs/old/CHANGELOG.v1.4.3.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# v1.4.3
|
||||
|
||||
QQ Version: Windows 9.9.10-24108 / Linux 3.2.7-23361
|
||||
|
||||
## 修复与优化
|
||||
* 修复名片通知
|
||||
|
||||
## 新增与调整
|
||||
|
||||
|
||||
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)
|
10
docs/changelogs/old/CHANGELOG.v1.4.4.md
Normal file
10
docs/changelogs/old/CHANGELOG.v1.4.4.md
Normal 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)
|
||||
|
12
docs/changelogs/old/CHANGELOG.v1.4.5.md
Normal file
12
docs/changelogs/old/CHANGELOG.v1.4.5.md
Normal 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)
|
||||
|
12
docs/changelogs/old/CHANGELOG.v1.4.6.md
Normal file
12
docs/changelogs/old/CHANGELOG.v1.4.6.md
Normal 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)
|
||||
|
11
docs/changelogs/old/CHANGELOG.v1.4.7.md
Normal file
11
docs/changelogs/old/CHANGELOG.v1.4.7.md
Normal 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)
|
12
docs/changelogs/old/CHANGELOG.v1.4.8.md
Normal file
12
docs/changelogs/old/CHANGELOG.v1.4.8.md
Normal 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)
|
11
docs/changelogs/old/CHANGELOG.v1.4.9.md
Normal file
11
docs/changelogs/old/CHANGELOG.v1.4.9.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# v1.4.9
|
||||
|
||||
QQ Version: Windows 9.9.10-24108 / Linux 3.2.7-23361
|
||||
|
||||
## 修复与优化
|
||||
* 修复接口调用问题 接口标准化 API:set_group_add_request
|
||||
|
||||
## 新增与调整
|
||||
|
||||
|
||||
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)
|
11
docs/changelogs/old/CHANGELOG.v1.5.0.md
Normal file
11
docs/changelogs/old/CHANGELOG.v1.5.0.md
Normal 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)
|
12
docs/changelogs/old/CHANGELOG.v1.5.1.md
Normal file
12
docs/changelogs/old/CHANGELOG.v1.5.1.md
Normal 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)
|
13
docs/changelogs/old/CHANGELOG.v1.5.2.md
Normal file
13
docs/changelogs/old/CHANGELOG.v1.5.2.md
Normal 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)
|
15
docs/changelogs/old/CHANGELOG.v1.5.3.md
Normal file
15
docs/changelogs/old/CHANGELOG.v1.5.3.md
Normal 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)
|
11
docs/changelogs/old/CHANGELOG.v1.5.4.md
Normal file
11
docs/changelogs/old/CHANGELOG.v1.5.4.md
Normal 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)
|
11
docs/changelogs/old/CHANGELOG.v1.5.5.md
Normal file
11
docs/changelogs/old/CHANGELOG.v1.5.5.md
Normal 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)
|
11
docs/changelogs/old/CHANGELOG.v1.5.6.md
Normal file
11
docs/changelogs/old/CHANGELOG.v1.5.6.md
Normal 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)
|
11
docs/changelogs/old/CHANGELOG.v1.5.7.md
Normal file
11
docs/changelogs/old/CHANGELOG.v1.5.7.md
Normal 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)
|
14
docs/changelogs/old/CHANGELOG.v1.5.8.md
Normal file
14
docs/changelogs/old/CHANGELOG.v1.5.8.md
Normal 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)
|
12
docs/changelogs/old/CHANGELOG.v1.5.9.md
Normal file
12
docs/changelogs/old/CHANGELOG.v1.5.9.md
Normal 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
2
docs/develop/Android.md
Normal file
@@ -0,0 +1,2 @@
|
||||
# 开始
|
||||
jadx 跳转于 `com.tencent.qqnt.kernel.*`
|
42
docs/develop/GetMemberExt.md
Normal file
42
docs/develop/GetMemberExt.md
Normal 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
|
||||
```
|
48
docs/develop/Image.NTAndroid.md
Normal file
48
docs/develop/Image.NTAndroid.md
Normal 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";
|
444
docs/develop/Msg常量NTAndroid.md
Normal file
444
docs/develop/Msg常量NTAndroid.md
Normal 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;
|
||||
```
|
24
docs/develop/参与开发.md
Normal file
24
docs/develop/参与开发.md
Normal 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调用流程
|
14
package.json
14
package.json
@@ -2,7 +2,7 @@
|
||||
"name": "napcat",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"version": "1.4.1",
|
||||
"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"
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
|
182
src/common/utils/EventTask.ts
Normal file
182
src/common/utils/EventTask.ts
Normal 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) });
|
@@ -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;
|
||||
|
53
src/common/utils/MessageUnique.ts
Normal file
53
src/common/utils/MessageUnique.ts
Normal 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();
|
17
src/common/utils/Packet.ts
Normal file
17
src/common/utils/Packet.ts
Normal 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{
|
||||
|
||||
}
|
@@ -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;
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -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) {
|
||||
|
@@ -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();
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
@@ -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;
|
||||
});
|
||||
}
|
||||
}
|
@@ -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();
|
@@ -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);
|
||||
|
@@ -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('未找到视频流信息。');
|
||||
}
|
||||
|
2
src/core
2
src/core
Submodule src/core updated: 845f6d2a15...d70f9f5f5b
@@ -1 +1 @@
|
||||
var _0x53ad75=_0x4803;function _0xe478(){var _0x5596f4=['onMSFStatusChange','8478DSeblD','120CBHLmq','getGroupCode','8142540ClqKUq','12034690uHLFGZ','428571uSIPMn','338876izjvuv','233PrhtpI','18JfPLcz','4504910cOvOVi','onMSFSsoError','2284698NHCKkY'];_0xe478=function(){return _0x5596f4;};return _0xe478();}function _0x4803(_0x455fa5,_0x3374cc){var _0xe478fc=_0xe478();return _0x4803=function(_0x4803d1,_0x5c7d64){_0x4803d1=_0x4803d1-0x166;var _0x407b69=_0xe478fc[_0x4803d1];return _0x407b69;},_0x4803(_0x455fa5,_0x3374cc);}(function(_0xd52527,_0x276b3b){var _0x29e235=_0x4803,_0x318582=_0xd52527();while(!![]){try{var _0x4398a7=parseInt(_0x29e235(0x16d))/0x1*(-parseInt(_0x29e235(0x166))/0x2)+parseInt(_0x29e235(0x16e))/0x3*(parseInt(_0x29e235(0x16c))/0x4)+-parseInt(_0x29e235(0x16f))/0x5+parseInt(_0x29e235(0x171))/0x6+parseInt(_0x29e235(0x169))/0x7+parseInt(_0x29e235(0x167))/0x8*(-parseInt(_0x29e235(0x16b))/0x9)+parseInt(_0x29e235(0x16a))/0xa;if(_0x4398a7===_0x276b3b)break;else _0x318582['push'](_0x318582['shift']());}catch(_0x35cc58){_0x318582['push'](_0x318582['shift']());}}}(_0xe478,0x9f620));export class DependsAdapter{[_0x53ad75(0x172)](_0x5352ea,_0x25f40e){}[_0x53ad75(0x170)](_0x522fec){}[_0x53ad75(0x168)](_0x247a93){}}
|
||||
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){}}
|
@@ -1 +1 @@
|
||||
function _0x158b(){var _0x40fbd5=['3062871vunmFV','3zYOYxk','844044tpZmIc','749852nrnXeE','dispatchRequest','1290RHPCdr','10woqzDv','18728BYyKUV','dispatchCallWithJson','2442069YPAYtZ','dispatchCall','15945sSktrD','5819128TvdfDs'];_0x158b=function(){return _0x40fbd5;};return _0x158b();}var _0x43a50b=_0x1196;function _0x1196(_0x215c22,_0x3dcb48){var _0x158b1e=_0x158b();return _0x1196=function(_0x1196d1,_0x32c0b9){_0x1196d1=_0x1196d1-0x1c1;var _0x461c24=_0x158b1e[_0x1196d1];return _0x461c24;},_0x1196(_0x215c22,_0x3dcb48);}(function(_0xde87af,_0x11e6b0){var _0x4524e8=_0x1196,_0x2ac0b2=_0xde87af();while(!![]){try{var _0x14e82f=-parseInt(_0x4524e8(0x1c7))/0x1+-parseInt(_0x4524e8(0x1c6))/0x2*(-parseInt(_0x4524e8(0x1c5))/0x3)+-parseInt(_0x4524e8(0x1cb))/0x4+parseInt(_0x4524e8(0x1c2))/0x5*(parseInt(_0x4524e8(0x1c9))/0x6)+-parseInt(_0x4524e8(0x1cd))/0x7+parseInt(_0x4524e8(0x1c3))/0x8+-parseInt(_0x4524e8(0x1c4))/0x9*(parseInt(_0x4524e8(0x1ca))/0xa);if(_0x14e82f===_0x11e6b0)break;else _0x2ac0b2['push'](_0x2ac0b2['shift']());}catch(_0x1db3ad){_0x2ac0b2['push'](_0x2ac0b2['shift']());}}}(_0x158b,0x5f8a0));export class DispatcherAdapter{[_0x43a50b(0x1c8)](_0x663338){}[_0x43a50b(0x1c1)](_0x53028f){}[_0x43a50b(0x1cc)](_0x4257c9){}}
|
||||
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();}
|
@@ -1 +1 @@
|
||||
function _0x238a(){var _0x2f782d=['1000848yukvGL','onInstallFinished','5585885gLEaQu','4VYrsqU','onLog','2218657SXADhe','8271816fbxQav','1210040ynNaGd','167270boAwyT','1109100ybCVbQ','765byyBwI','onGetSrvCalTime','12bTBpih','onUpdateGeneralFlag','onShowErrUITips'];_0x238a=function(){return _0x2f782d;};return _0x238a();}var _0x54dfea=_0x46f2;function _0x46f2(_0x1c572b,_0x400d30){var _0x238a4f=_0x238a();return _0x46f2=function(_0x46f2c3,_0x1890a0){_0x46f2c3=_0x46f2c3-0x1cc;var _0x2dbfad=_0x238a4f[_0x46f2c3];return _0x2dbfad;},_0x46f2(_0x1c572b,_0x400d30);}(function(_0x268b2c,_0x2ea7c2){var _0x41b9cc=_0x46f2,_0x3d5952=_0x268b2c();while(!![]){try{var _0x513579=parseInt(_0x41b9cc(0x1ce))/0x1+-parseInt(_0x41b9cc(0x1d5))/0x2+-parseInt(_0x41b9cc(0x1d7))/0x3+-parseInt(_0x41b9cc(0x1d1))/0x4*(-parseInt(_0x41b9cc(0x1d0))/0x5)+-parseInt(_0x41b9cc(0x1da))/0x6*(parseInt(_0x41b9cc(0x1d3))/0x7)+-parseInt(_0x41b9cc(0x1d4))/0x8+-parseInt(_0x41b9cc(0x1d8))/0x9*(-parseInt(_0x41b9cc(0x1d6))/0xa);if(_0x513579===_0x2ea7c2)break;else _0x3d5952['push'](_0x3d5952['shift']());}catch(_0x1ffa66){_0x3d5952['push'](_0x3d5952['shift']());}}}(_0x238a,0xdb0c5));export class GlobalAdapter{[_0x54dfea(0x1d2)](..._0x23a9ba){}[_0x54dfea(0x1d9)](..._0xc9932c){}[_0x54dfea(0x1cd)](..._0x1c2c5e){}['fixPicImgType'](..._0x247bd1){}['getAppSetting'](..._0x4bfe6c){}[_0x54dfea(0x1cf)](..._0x29783c){}[_0x54dfea(0x1cc)](..._0x38d085){}['onGetOfflineMsg'](..._0x51024e){}}
|
||||
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();}
|
@@ -1 +1 @@
|
||||
(function(_0x4e675e,_0x33381c){var _0x149ce6=_0x5a58,_0x3870c1=_0x4e675e();while(!![]){try{var _0x1bfc29=parseInt(_0x149ce6(0x70))/0x1*(-parseInt(_0x149ce6(0x6e))/0x2)+-parseInt(_0x149ce6(0x73))/0x3*(-parseInt(_0x149ce6(0x71))/0x4)+-parseInt(_0x149ce6(0x72))/0x5+parseInt(_0x149ce6(0x75))/0x6+-parseInt(_0x149ce6(0x76))/0x7+parseInt(_0x149ce6(0x74))/0x8+parseInt(_0x149ce6(0x6f))/0x9;if(_0x1bfc29===_0x33381c)break;else _0x3870c1['push'](_0x3870c1['shift']());}catch(_0x557e6b){_0x3870c1['push'](_0x3870c1['shift']());}}}(_0x15ef,0xa25f5));function _0x5a58(_0x5859b3,_0x35f5bc){var _0x15ef17=_0x15ef();return _0x5a58=function(_0x5a58c0,_0x1337cb){_0x5a58c0=_0x5a58c0-0x6e;var _0x4ec18e=_0x15ef17[_0x5a58c0];return _0x4ec18e;},_0x5a58(_0x5859b3,_0x35f5bc);}function _0x15ef(){var _0x56c869=['2087340rclyQF','9plctPm','9984688aEkshO','854592heAZeF','5016291dEMrLe','5826EGMCIE','4201965RXVteZ','246KeDUoo','877804cXkxwW'];_0x15ef=function(){return _0x56c869;};return _0x15ef();}export*from'./NodeIDependsAdapter';export*from'./NodeIDispatcherAdapter';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
41
src/core.lib/src/apis/collection.d.ts
vendored
Normal 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;
|
||||
};
|
||||
}>;
|
||||
}
|
1
src/core.lib/src/apis/collection.js
Normal file
1
src/core.lib/src/apis/collection.js
Normal 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();}
|
3
src/core.lib/src/apis/file.d.ts
vendored
3
src/core.lib/src/apis/file.d.ts
vendored
@@ -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
5
src/core.lib/src/apis/friend.d.ts
vendored
5
src/core.lib/src/apis/friend.d.ts
vendored
@@ -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>;
|
||||
}
|
||||
|
@@ -1 +1 @@
|
||||
const _0xd4c679=_0x4272;(function(_0x496a3b,_0xb73cdd){const _0x1e4b08=_0x4272,_0x5a6bc5=_0x496a3b();while(!![]){try{const _0x288afd=parseInt(_0x1e4b08(0x1be))/0x1*(parseInt(_0x1e4b08(0x1b1))/0x2)+parseInt(_0x1e4b08(0x1ba))/0x3*(parseInt(_0x1e4b08(0x1bb))/0x4)+-parseInt(_0x1e4b08(0x1b4))/0x5+-parseInt(_0x1e4b08(0x1aa))/0x6*(parseInt(_0x1e4b08(0x1c1))/0x7)+-parseInt(_0x1e4b08(0x1a5))/0x8*(parseInt(_0x1e4b08(0x1b8))/0x9)+parseInt(_0x1e4b08(0x1a9))/0xa+parseInt(_0x1e4b08(0x1c0))/0xb;if(_0x288afd===_0xb73cdd)break;else _0x5a6bc5['push'](_0x5a6bc5['shift']());}catch(_0x34e642){_0x5a6bc5['push'](_0x5a6bc5['shift']());}}}(_0x5a33,0xa8480));import{BuddyListener,napCatCore}from'@/core';import{logDebug}from'@/common/utils/log';import{uid2UinMap}from'@/core/data';function _0x5a33(){const _0x281cfb=['459332UUuQfM','uid','16328070ExNyrh','7ktzxku','getBuddyService','WksIN','set','获取好友列表超时','delete','8GJFJeL','reqTime','XcrxL','friendUid','2853640wHvxGr','6450762meNpzT','session','handleFriendRequest','iclee','onLoginSuccess','push','approvalFriendRequest','2EPJvRC','onBuddyListChange','buddyList','445080rFelIA','uin','aSDoe','LfWBK','5875533aSnnxI','开始获取好友列表','18BXJLCi','184796tBuDBv','JsMRs','JxKJH'];_0x5a33=function(){return _0x281cfb;};return _0x5a33();}import{randomUUID}from'crypto';const buddyChangeTasks=new Map(),buddyListener=new BuddyListener();function _0x4272(_0x4f3826,_0x29a058){const _0x5a3375=_0x5a33();return _0x4272=function(_0x427267,_0x3643e1){_0x427267=_0x427267-0x1a0;let _0x33abc8=_0x5a3375[_0x427267];return _0x33abc8;},_0x4272(_0x4f3826,_0x29a058);}buddyListener[_0xd4c679(0x1b2)]=_0x590332=>{const _0x224a7a=_0xd4c679,_0x1d210f={'jjksZ':function(_0x41fb46,_0x4f5f29){return _0x41fb46(_0x4f5f29);}};for(const [_0x1a3d0f,_0xff7093]of buddyChangeTasks){_0x1d210f['jjksZ'](_0xff7093,_0x590332),buddyChangeTasks[_0x224a7a(0x1a4)](_0x1a3d0f);}},setTimeout(()=>{const _0x51828c=_0xd4c679;napCatCore[_0x51828c(0x1ae)](()=>{napCatCore['addListener'](buddyListener);});},0x64);export class NTQQFriendApi{static async['getFriends'](_0x2f4c84=![]){const _0xaf62f3=_0xd4c679,_0x32fb99={'JxKJH':function(_0x49e7d8,_0x3fb2b2){return _0x49e7d8(_0x3fb2b2);},'WksIN':_0xaf62f3(0x1a3),'LfWBK':function(_0x16b79a,_0x4cf5f9){return _0x16b79a(_0x4cf5f9);},'JsMRs':function(_0x45e55f,_0x3912f8){return _0x45e55f(_0x3912f8);},'AxTme':function(_0x384c13,_0x39c1b9,_0x2ef241){return _0x384c13(_0x39c1b9,_0x2ef241);},'iclee':function(_0x4e72f3){return _0x4e72f3();}};return new Promise((_0xf6b6df,_0xed31ba)=>{const _0x5d83fd=_0xaf62f3,_0x4ea5e1={'aSDoe':function(_0x45cfac,_0x55e521,_0x43ae7f){return _0x32fb99['AxTme'](_0x45cfac,_0x55e521,_0x43ae7f);},'XcrxL':_0x5d83fd(0x1b9)};let _0x548f69=![];setTimeout(()=>{const _0x132875=_0x5d83fd;!_0x548f69&&(_0x32fb99[_0x132875(0x1bd)](logDebug,_0x32fb99[_0x132875(0x1a1)]),_0x32fb99[_0x132875(0x1b7)](_0xed31ba,_0x32fb99[_0x132875(0x1a1)]));},0x1388);const _0x17d3e2=[],_0x32e5a0=_0x2da32a=>{const _0x4d3a2e=_0x5d83fd;for(const _0x8e01ff of _0x2da32a){for(const _0x457644 of _0x8e01ff[_0x4d3a2e(0x1b3)]){_0x17d3e2[_0x4d3a2e(0x1af)](_0x457644),uid2UinMap[_0x457644[_0x4d3a2e(0x1bf)]]=_0x457644[_0x4d3a2e(0x1b5)];}}_0x548f69=!![],_0x32fb99[_0x4d3a2e(0x1bc)](_0xf6b6df,_0x17d3e2);};buddyChangeTasks[_0x5d83fd(0x1a2)](_0x32fb99[_0x5d83fd(0x1ad)](randomUUID),_0x32e5a0),napCatCore['session'][_0x5d83fd(0x1a0)]()['getBuddyList'](_0x2f4c84)['then'](_0x50f2a9=>{const _0x39d904=_0x5d83fd;_0x4ea5e1[_0x39d904(0x1b6)](logDebug,_0x4ea5e1[_0x39d904(0x1a7)],_0x50f2a9);});});}static async[_0xd4c679(0x1ac)](_0x47c73f,_0x41bf22){const _0x436052=_0xd4c679;napCatCore[_0x436052(0x1ab)][_0x436052(0x1a0)]()?.[_0x436052(0x1b0)]({'friendUid':_0x47c73f[_0x436052(0x1a8)],'reqTime':_0x47c73f[_0x436052(0x1a6)],'accept':_0x41bf22});}}
|
||||
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});}}
|
17
src/core.lib/src/apis/group.d.ts
vendored
17
src/core.lib/src/apis/group.d.ts
vendored
@@ -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
@@ -1 +1 @@
|
||||
function _0x30de(){var _0x4dfdea=['30892fYcrRX','1978106FrErvJ','6017192UzyTuC','1143429tFSDZD','801784hQOjok','1050YkgOKc','32736447tmErVs','36awLbjC','1516245WndRLq'];_0x30de=function(){return _0x4dfdea;};return _0x30de();}(function(_0x1de97e,_0x53b6d7){var _0x5147ea=_0x3127,_0x10a0e3=_0x1de97e();while(!![]){try{var _0x49fe07=-parseInt(_0x5147ea(0xa3))/0x1+parseInt(_0x5147ea(0xa0))/0x2+parseInt(_0x5147ea(0x9e))/0x3+parseInt(_0x5147ea(0x9f))/0x4*(-parseInt(_0x5147ea(0xa4))/0x5)+-parseInt(_0x5147ea(0x9d))/0x6*(parseInt(_0x5147ea(0xa2))/0x7)+-parseInt(_0x5147ea(0xa1))/0x8+parseInt(_0x5147ea(0xa5))/0x9;if(_0x49fe07===_0x53b6d7)break;else _0x10a0e3['push'](_0x10a0e3['shift']());}catch(_0x3d504e){_0x10a0e3['push'](_0x10a0e3['shift']());}}}(_0x30de,0xee486));export*from'./file';export*from'./friend';export*from'./group';function _0x3127(_0x110d8c,_0x21de71){var _0x30de91=_0x30de();return _0x3127=function(_0x3127d4,_0x291243){_0x3127d4=_0x3127d4-0x9d;var _0x30a550=_0x30de91[_0x3127d4];return _0x30a550;},_0x3127(_0x110d8c,_0x21de71);}export*from'./msg';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';
|
9
src/core.lib/src/apis/msg.d.ts
vendored
9
src/core.lib/src/apis/msg.d.ts
vendored
@@ -8,18 +8,13 @@ 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>;
|
||||
static activateChatAndGetHistory(peer: Peer): Promise<void>;
|
||||
static setMsgRead(peer: Peer): Promise<GeneralCallResult>;
|
||||
static getGroupFileList(GroupCode: string, params: GetFileListParam): Promise<{
|
||||
FileList: Array<any>;
|
||||
totalSpace: number;
|
||||
usedSpace: number;
|
||||
allUpload: boolean;
|
||||
}>;
|
||||
static getGroupFileList(GroupCode: string, params: GetFileListParam): Promise<any[]>;
|
||||
static getMsgHistory(peer: Peer, msgId: string, count: number): Promise<GeneralCallResult & {
|
||||
msgList: RawMessage[];
|
||||
}>;
|
||||
|
File diff suppressed because one or more lines are too long
20
src/core.lib/src/apis/sign.d.ts
vendored
20
src/core.lib/src/apis/sign.d.ts
vendored
@@ -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
10
src/core.lib/src/apis/system.d.ts
vendored
10
src/core.lib/src/apis/system.d.ts
vendored
@@ -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>;
|
||||
}
|
||||
|
@@ -1 +1 @@
|
||||
var _0x3dc00c=_0x4e9e;(function(_0x46fb3f,_0x2f04e2){var _0x2cf4a2=_0x4e9e,_0x5aac15=_0x46fb3f();while(!![]){try{var _0x46fd5b=parseInt(_0x2cf4a2(0x1b2))/0x1+-parseInt(_0x2cf4a2(0x1ad))/0x2*(-parseInt(_0x2cf4a2(0x1ba))/0x3)+parseInt(_0x2cf4a2(0x1ae))/0x4*(-parseInt(_0x2cf4a2(0x1bb))/0x5)+parseInt(_0x2cf4a2(0x1b4))/0x6*(parseInt(_0x2cf4a2(0x1af))/0x7)+-parseInt(_0x2cf4a2(0x1ac))/0x8*(parseInt(_0x2cf4a2(0x1bc))/0x9)+-parseInt(_0x2cf4a2(0x1b8))/0xa*(-parseInt(_0x2cf4a2(0x1b7))/0xb)+-parseInt(_0x2cf4a2(0x1b3))/0xc;if(_0x46fd5b===_0x2f04e2)break;else _0x5aac15['push'](_0x5aac15['shift']());}catch(_0x955f77){_0x5aac15['push'](_0x5aac15['shift']());}}}(_0x1f9a,0xb28da));import{napCatCore}from'@/core';function _0x1f9a(){var _0x47a198=['hasOtherRunningQQProcess','ORCImage','4206213FkCUVC','30ZKSLmf','getNodeMiscService','3WXhsli','24515NJgMSU','39852OyufwS','util','560FjGvKF','2142714VPFzRs','616SNoHcU','24626KRooHD','session','wantWinScreenOCR','899562TokBzb','24599016FXjJJy','1242RlefLV'];_0x1f9a=function(){return _0x47a198;};return _0x1f9a();}function _0x4e9e(_0x37259c,_0x1cbff9){var _0x1f9a7c=_0x1f9a();return _0x4e9e=function(_0x4e9e97,_0x7bc1b0){_0x4e9e97=_0x4e9e97-0x1ab;var _0x5aad0d=_0x1f9a7c[_0x4e9e97];return _0x5aad0d;},_0x4e9e(_0x37259c,_0x1cbff9);}export class NTQQSystemApi{static async[_0x3dc00c(0x1b5)](){var _0x55cb72=_0x3dc00c;return napCatCore[_0x55cb72(0x1ab)]['hasOtherRunningQQProcess']();}static async[_0x3dc00c(0x1b6)](_0x4c71ab){var _0x1f31c6=_0x3dc00c;return napCatCore[_0x1f31c6(0x1b0)][_0x1f31c6(0x1b9)]()[_0x1f31c6(0x1b1)](_0x4c71ab);}static async['translateEnWordToZn'](_0x1b7b7e){return napCatCore['session']['getRichMediaService']()['translateEnWordToZn'](_0x1b7b7e);}}
|
||||
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);}}
|
16
src/core.lib/src/apis/user.d.ts
vendored
16
src/core.lib/src/apis/user.d.ts
vendored
@@ -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
11
src/core.lib/src/apis/window.d.ts
vendored
11
src/core.lib/src/apis/window.d.ts
vendored
@@ -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
28
src/core.lib/src/data.d.ts
vendored
28
src/core.lib/src/data.d.ts
vendored
@@ -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;
|
||||
|
@@ -1 +1 @@
|
||||
(function(_0x5a094b,_0x53bca0){const _0x3456d1=_0x31c6,_0x4f983c=_0x5a094b();while(!![]){try{const _0x4ae09a=parseInt(_0x3456d1(0x154))/0x1*(-parseInt(_0x3456d1(0x167))/0x2)+parseInt(_0x3456d1(0x15a))/0x3*(parseInt(_0x3456d1(0x16b))/0x4)+-parseInt(_0x3456d1(0x169))/0x5*(parseInt(_0x3456d1(0x163))/0x6)+-parseInt(_0x3456d1(0x16c))/0x7*(-parseInt(_0x3456d1(0x159))/0x8)+-parseInt(_0x3456d1(0x15f))/0x9*(-parseInt(_0x3456d1(0x15e))/0xa)+parseInt(_0x3456d1(0x16a))/0xb*(parseInt(_0x3456d1(0x153))/0xc)+-parseInt(_0x3456d1(0x161))/0xd*(parseInt(_0x3456d1(0x15d))/0xe);if(_0x4ae09a===_0x53bca0)break;else _0x4f983c['push'](_0x4f983c['shift']());}catch(_0x4caddb){_0x4f983c['push'](_0x4f983c['shift']());}}}(_0x59e3,0x8936e));import{isNumeric}from'@/common/utils/helper';import{NTQQGroupApi}from'@/core/apis';export const Credentials={'Skey':'','CreatTime':0x0,'Cookies':new Map(),'ClientKey':'','KeyIndex':'','PskeyData':new Map(),'PskeyTime':new Map()};function _0x31c6(_0x35d7d7,_0x2b617d){const _0x59e372=_0x59e3();return _0x31c6=function(_0x31c682,_0x1e4a6f){_0x31c682=_0x31c682-0x152;let _0x42b77b=_0x59e372[_0x31c682];return _0x42b77b;},_0x31c6(_0x35d7d7,_0x2b617d);}export const WebGroupData={'GroupData':new Map(),'GroupTime':new Map()};export const selfInfo={'uid':'','uin':'','nick':'','online':!![]};export const groups=new Map();export function deleteGroup(_0x38683a){const _0x5e820b=_0x31c6;groups[_0x5e820b(0x164)](_0x38683a),groupMembers[_0x5e820b(0x164)](_0x38683a);}export const groupMembers=new Map();export const friends=new Map();export const friendRequests={};function _0x59e3(){const _0xfa9a31=['forEach','values','from','47744NGjoxX','15lfbwQC','toString','wtogw','20818drtaZM','10ockpIG','7553727kuARYX','vLIBs','20059KEEnWe','set','441186NHzJPt','delete','getGroupMembers','find','12AeFSrV','get','45CpSUlf','71621suZMQH','713308iGUJgo','1036GmiFwy','uin','2064TjVpoN','35974zPmWzG','getGroups'];_0x59e3=function(){return _0xfa9a31;};return _0x59e3();}export const groupNotifies={};export const napCatError={'ffmpegError':'','httpServerError':'','wsServerError':'','otherError':'NapCat未能正常启动,请检查日志查看错误'};export async function getFriend(_0x241e6e){const _0x340a30=_0x31c6,_0x33670b={'wtogw':function(_0x33b955,_0x412eaa){return _0x33b955(_0x412eaa);}};_0x241e6e=_0x241e6e[_0x340a30(0x15b)]();if(_0x33670b[_0x340a30(0x15c)](isNumeric,_0x241e6e)){const _0x887b8a=Array[_0x340a30(0x158)](friends[_0x340a30(0x157)]());return _0x887b8a[_0x340a30(0x166)](_0x1e9b17=>_0x1e9b17['uin']===_0x241e6e);}else return friends[_0x340a30(0x168)](_0x241e6e);}export async function getGroup(_0xa20a5d){const _0x5ea1e2=_0x31c6;let _0x12a308=groups[_0x5ea1e2(0x168)](_0xa20a5d[_0x5ea1e2(0x15b)]());if(!_0x12a308)try{const _0x10a3e8=await NTQQGroupApi[_0x5ea1e2(0x155)]();_0x10a3e8['length']&&_0x10a3e8[_0x5ea1e2(0x156)](_0x3246a2=>{const _0x41b173=_0x5ea1e2;groups[_0x41b173(0x162)](_0x3246a2['groupCode'],_0x3246a2);});}catch(_0x5453c1){return undefined;}return _0x12a308=groups['get'](_0xa20a5d[_0x5ea1e2(0x15b)]()),_0x12a308;}export async function getGroupMember(_0x42d756,_0x4ebf44){const _0x28311c=_0x31c6,_0x1223dc={'vLIBs':function(_0x4eb939){return _0x4eb939();}};_0x42d756=_0x42d756[_0x28311c(0x15b)](),_0x4ebf44=_0x4ebf44['toString']();let _0x550c2d=groupMembers[_0x28311c(0x168)](_0x42d756);if(!_0x550c2d)try{_0x550c2d=await NTQQGroupApi['getGroupMembers'](_0x42d756),groupMembers['set'](_0x42d756,_0x550c2d);}catch(_0x4f4d31){return null;}const _0x1b91eb=()=>{const _0x430760=_0x28311c;let _0x481c1e=undefined;return isNumeric(_0x4ebf44)?_0x481c1e=Array[_0x430760(0x158)](_0x550c2d['values']())['find'](_0x34adef=>_0x34adef[_0x430760(0x152)]===_0x4ebf44):_0x481c1e=_0x550c2d[_0x430760(0x168)](_0x4ebf44),_0x481c1e;};let _0x5ce91f=_0x1223dc[_0x28311c(0x160)](_0x1b91eb);return!_0x5ce91f&&(_0x550c2d=await NTQQGroupApi[_0x28311c(0x165)](_0x42d756),_0x5ce91f=_0x1223dc['vLIBs'](_0x1b91eb)),_0x5ce91f;}export const uid2UinMap={};export function getUidByUin(_0xb040d4){for(const _0x235ea2 in uid2UinMap){if(uid2UinMap[_0x235ea2]===_0xb040d4)return _0x235ea2;}}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};
|
@@ -1 +1 @@
|
||||
function _0x5c31(){var _0x1db4e6=['42294ppkGbi','zGRyP','3076eaeMyR','4454028cTVHPk','103085wXZQBT','dQpho','9459828FMoOhf','AUDIO','378mgINbc','OTHER','IMAGE','329540lgQAeX','1203ukPxVd','116VYCWoS','144XuCJoS','402788rQsLKv','nSEAa','aYVHC','33BEEUPR','QRnTE'];_0x5c31=function(){return _0x1db4e6;};return _0x5c31();}(function(_0x147917,_0x1cff81){var _0x4e2075=_0x82aa,_0xd3b3a3=_0x147917();while(!![]){try{var _0x361792=parseInt(_0x4e2075(0x1c7))/0x1+-parseInt(_0x4e2075(0x1ba))/0x2*(parseInt(_0x4e2075(0x1c4))/0x3)+-parseInt(_0x4e2075(0x1c5))/0x4*(-parseInt(_0x4e2075(0x1bc))/0x5)+-parseInt(_0x4e2075(0x1bb))/0x6+-parseInt(_0x4e2075(0x1b8))/0x7*(-parseInt(_0x4e2075(0x1c6))/0x8)+parseInt(_0x4e2075(0x1c0))/0x9*(-parseInt(_0x4e2075(0x1c3))/0xa)+-parseInt(_0x4e2075(0x1b6))/0xb*(-parseInt(_0x4e2075(0x1be))/0xc);if(_0x361792===_0x1cff81)break;else _0xd3b3a3['push'](_0xd3b3a3['shift']());}catch(_0x628cb6){_0xd3b3a3['push'](_0xd3b3a3['shift']());}}}(_0x5c31,0xb2872));;function _0x82aa(_0x28f252,_0x2953f2){var _0x5c31ab=_0x5c31();return _0x82aa=function(_0x82aa27,_0x4e839c){_0x82aa27=_0x82aa27-0x1b4;var _0x116513=_0x5c31ab[_0x82aa27];return _0x116513;},_0x82aa(_0x28f252,_0x2953f2);}export var CacheFileType;(function(_0x55408e){var _0x5eaa9a=_0x82aa,_0x3be7a7={'zGRyP':_0x5eaa9a(0x1c2),'dQpho':'VIDEO','QRnTE':_0x5eaa9a(0x1bf),'aYVHC':'DOCUMENT','nSEAa':_0x5eaa9a(0x1c1)};_0x55408e[_0x55408e[_0x5eaa9a(0x1c2)]=0x0]=_0x3be7a7[_0x5eaa9a(0x1b9)],_0x55408e[_0x55408e[_0x3be7a7['dQpho']]=0x1]=_0x3be7a7[_0x5eaa9a(0x1bd)],_0x55408e[_0x55408e[_0x3be7a7[_0x5eaa9a(0x1b7)]]=0x2]=_0x3be7a7[_0x5eaa9a(0x1b7)],_0x55408e[_0x55408e[_0x3be7a7['aYVHC']]=0x3]=_0x3be7a7[_0x5eaa9a(0x1b5)],_0x55408e[_0x55408e[_0x3be7a7['nSEAa']]=0x4]=_0x3be7a7[_0x5eaa9a(0x1b4)];}(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={})));
|
2
src/core.lib/src/entities/constructor.d.ts
vendored
2
src/core.lib/src/entities/constructor.d.ts
vendored
@@ -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
@@ -1 +1 @@
|
||||
(function(_0x21e602,_0x20ce31){var _0x5070c1=_0x4f36,_0x24284f=_0x21e602();while(!![]){try{var _0x1b0065=-parseInt(_0x5070c1(0x18d))/0x1+-parseInt(_0x5070c1(0x192))/0x2+parseInt(_0x5070c1(0x18e))/0x3*(parseInt(_0x5070c1(0x190))/0x4)+parseInt(_0x5070c1(0x18b))/0x5*(-parseInt(_0x5070c1(0x195))/0x6)+parseInt(_0x5070c1(0x194))/0x7*(parseInt(_0x5070c1(0x193))/0x8)+-parseInt(_0x5070c1(0x189))/0x9*(-parseInt(_0x5070c1(0x198))/0xa)+-parseInt(_0x5070c1(0x197))/0xb*(-parseInt(_0x5070c1(0x18f))/0xc);if(_0x1b0065===_0x20ce31)break;else _0x24284f['push'](_0x24284f['shift']());}catch(_0x44ab1e){_0x24284f['push'](_0x24284f['shift']());}}}(_0x218f,0x5878d));export var GroupMemberRole;function _0x4f36(_0x932d05,_0x20b0b6){var _0x218f4f=_0x218f();return _0x4f36=function(_0x4f36fa,_0xdbf4ef){_0x4f36fa=_0x4f36fa-0x189;var _0x32705e=_0x218f4f[_0x4f36fa];return _0x32705e;},_0x4f36(_0x932d05,_0x20b0b6);}function _0x218f(){var _0x3b067f=['9264wBKBRJ','203NEPQSe','303882riRAbd','normal','11035706KLZHsO','475990ngzrJM','9CIdMsO','owner','15aqXlzA','yNiHR','426515ShFUZe','7965OZOQsy','12QHeqKR','308kQnQSR','zYAFj','696050mVQzqR'];_0x218f=function(){return _0x3b067f;};return _0x218f();}(function(_0x4d8d33){var _0x4a30fe=_0x4f36,_0x530a38={'yNiHR':_0x4a30fe(0x196),'zYAFj':'admin'};_0x4d8d33[_0x4d8d33[_0x530a38[_0x4a30fe(0x18c)]]=0x2]=_0x530a38['yNiHR'],_0x4d8d33[_0x4d8d33[_0x530a38[_0x4a30fe(0x191)]]=0x3]=_0x530a38[_0x4a30fe(0x191)],_0x4d8d33[_0x4d8d33[_0x4a30fe(0x18a)]=0x4]=_0x4a30fe(0x18a);}(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();}
|
@@ -1 +1 @@
|
||||
(function(_0x35a77f,_0x50495b){var _0x3c50eb=_0x5b6d,_0x27878c=_0x35a77f();while(!![]){try{var _0x4cad93=-parseInt(_0x3c50eb(0x1f0))/0x1*(parseInt(_0x3c50eb(0x1f2))/0x2)+-parseInt(_0x3c50eb(0x1e7))/0x3*(-parseInt(_0x3c50eb(0x1e8))/0x4)+-parseInt(_0x3c50eb(0x1eb))/0x5*(-parseInt(_0x3c50eb(0x1ed))/0x6)+-parseInt(_0x3c50eb(0x1ee))/0x7*(-parseInt(_0x3c50eb(0x1ec))/0x8)+-parseInt(_0x3c50eb(0x1e6))/0x9+parseInt(_0x3c50eb(0x1ef))/0xa*(parseInt(_0x3c50eb(0x1e9))/0xb)+parseInt(_0x3c50eb(0x1f1))/0xc*(parseInt(_0x3c50eb(0x1ea))/0xd);if(_0x4cad93===_0x50495b)break;else _0x27878c['push'](_0x27878c['shift']());}catch(_0x4824b8){_0x27878c['push'](_0x27878c['shift']());}}}(_0x4cd4,0x56fae));export*from'./user';export*from'./group';export*from'./msg';export*from'./notify';function _0x4cd4(){var _0x1a761d=['2kUbpqo','10658244eBHabY','608666GijGFn','6334884aJEHwE','3jaFJnT','961892Koqsex','22HxEwqH','13PgFnVN','5hATDtz','8oIJVNj','1001094ySLKGo','127771SiwLTQ','1775250DvwJvF'];_0x4cd4=function(){return _0x1a761d;};return _0x4cd4();}function _0x5b6d(_0x8a273c,_0x5e326a){var _0x4cd44d=_0x4cd4();return _0x5b6d=function(_0x5b6dfa,_0x26492b){_0x5b6dfa=_0x5b6dfa-0x1e6;var _0x18858e=_0x4cd44d[_0x5b6dfa];return _0x18858e;},_0x5b6d(_0x8a273c,_0x5e326a);}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';
|
57
src/core.lib/src/entities/msg.d.ts
vendored
57
src/core.lib/src/entities/msg.d.ts
vendored
@@ -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
54
src/core.lib/src/entities/notify.d.ts
vendored
54
src/core.lib/src/entities/notify.d.ts
vendored
@@ -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
84
src/core.lib/src/entities/user.d.ts
vendored
84
src/core.lib/src/entities/user.d.ts
vendored
@@ -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;
|
||||
};
|
||||
}
|
||||
|
@@ -1 +1 @@
|
||||
(function(_0x1034ff,_0x437d87){var _0xa85938=_0x5d28,_0x2551dc=_0x1034ff();while(!![]){try{var _0xff3bb=-parseInt(_0xa85938(0x1bf))/0x1*(-parseInt(_0xa85938(0x1c3))/0x2)+parseInt(_0xa85938(0x1c8))/0x3+parseInt(_0xa85938(0x1c9))/0x4+-parseInt(_0xa85938(0x1c6))/0x5*(parseInt(_0xa85938(0x1bd))/0x6)+-parseInt(_0xa85938(0x1c4))/0x7*(-parseInt(_0xa85938(0x1be))/0x8)+-parseInt(_0xa85938(0x1cb))/0x9*(parseInt(_0xa85938(0x1c1))/0xa)+-parseInt(_0xa85938(0x1c5))/0xb;if(_0xff3bb===_0x437d87)break;else _0x2551dc['push'](_0x2551dc['shift']());}catch(_0x43546b){_0x2551dc['push'](_0x2551dc['shift']());}}}(_0x2624,0x3e7a3));function _0x2624(){var _0x31bdcc=['13223dgNFcx','4653561zlAQbm','65jqAfiQ','Ugcxf','436839qdOoGB','1847256mpEiie','female','18otehHa','unknown','161898UZsnTy','1448WPTgpk','68945PBvTLp','APKJV','1321620MJHdkE','SmdcW','10RtWCVO'];_0x2624=function(){return _0x31bdcc;};return _0x2624();}export var Sex;function _0x5d28(_0x1e12fd,_0x3858e2){var _0x262404=_0x2624();return _0x5d28=function(_0x5d28df,_0x50c338){_0x5d28df=_0x5d28df-0x1bc;var _0x35f77d=_0x262404[_0x5d28df];return _0x35f77d;},_0x5d28(_0x1e12fd,_0x3858e2);}(function(_0x13bee5){var _0x5f579d=_0x5d28,_0x3915c9={'Ugcxf':'male','SmdcW':_0x5f579d(0x1ca),'APKJV':_0x5f579d(0x1bc)};_0x13bee5[_0x13bee5[_0x3915c9[_0x5f579d(0x1c7)]]=0x1]=_0x3915c9[_0x5f579d(0x1c7)],_0x13bee5[_0x13bee5[_0x3915c9[_0x5f579d(0x1c2)]]=0x2]=_0x3915c9[_0x5f579d(0x1c2)],_0x13bee5[_0x13bee5[_0x3915c9[_0x5f579d(0x1c0)]]=0xff]=_0x3915c9[_0x5f579d(0x1c0)];}(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={})));
|
8
src/core.lib/src/external/hook.d.ts
vendored
8
src/core.lib/src/external/hook.d.ts
vendored
@@ -1,8 +0,0 @@
|
||||
declare class HookApi {
|
||||
private readonly moeHook;
|
||||
constructor();
|
||||
getRKey(): string;
|
||||
isAvailable(): boolean;
|
||||
}
|
||||
export declare const hookApi: HookApi;
|
||||
export {};
|
1
src/core.lib/src/external/hook.js
vendored
1
src/core.lib/src/external/hook.js
vendored
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
(function(_0xe4179a,_0x193855){var _0xd06679=_0x3659,_0xa0f362=_0xe4179a();while(!![]){try{var _0x44a86f=parseInt(_0xd06679(0xa8))/0x1+-parseInt(_0xd06679(0xa7))/0x2+parseInt(_0xd06679(0xab))/0x3*(-parseInt(_0xd06679(0xa5))/0x4)+parseInt(_0xd06679(0xaa))/0x5+parseInt(_0xd06679(0xa6))/0x6+parseInt(_0xd06679(0xa9))/0x7*(-parseInt(_0xd06679(0xac))/0x8)+parseInt(_0xd06679(0xa4))/0x9;if(_0x44a86f===_0x193855)break;else _0xa0f362['push'](_0xa0f362['shift']());}catch(_0x58be6c){_0xa0f362['push'](_0xa0f362['shift']());}}}(_0x3570,0x320c4));import _0x1d9e80 from'./wrapper';export*from'./adapters';export*from'./apis';export*from'./entities';export*from'./listeners';export*from'./services';function _0x3570(){var _0x1343a8=['129nCcpVQ','8YWLing','1967427FhxpZQ','10756yWFVon','2251266QFbrHW','615556tOrWBa','279913YSkTeT','1755866yFAyvW','27560YejDHW'];_0x3570=function(){return _0x1343a8;};return _0x3570();}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{_0x1d9e80 as Wrapper};export*as WrapperInterface from'./wrapper';export*as SessionConfig from'./sessionConfig';function _0x3659(_0x4e2391,_0x352e00){var _0x3570f=_0x3570();return _0x3659=function(_0x365997,_0x368f2){_0x365997=_0x365997-0xa4;var _0x23a5cd=_0x3570f[_0x365997];return _0x23a5cd;},_0x3659(_0x4e2391,_0x352e00);}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();}
|
@@ -1 +1 @@
|
||||
function _0xd618(_0x2965c5,_0x439a17){var _0x1c89f8=_0x1c89();return _0xd618=function(_0xd618fd,_0xbd5f16){_0xd618fd=_0xd618fd-0x148;var _0x383c19=_0x1c89f8[_0xd618fd];return _0x383c19;},_0xd618(_0x2965c5,_0x439a17);}function _0x1c89(){var _0x1ee544=['onDoubtBuddyReqUnreadNumChange','4ViILKN','onSmartInfos','15kobibE','onCheckBuddySettingResult','2321xsOTsm','onBuddyInfoChange','4240494lkaqMQ','733754JFTEBI','onDoubtBuddyReqChange','onBlockChanged','onBuddyDetailInfoChange','889572ayUiFQ','onAddBuddyNeedVerify','28488kopNan','218721JIWIIY','20pepGFq','onAddMeSettingChanged','onBuddyRemarkUpdated','1190110GgXPxC','onAvatarUrlUpdated','onNickUpdated','onDelBatchBuddyInfos','217807ttXPNK','32TzGwIK'];_0x1c89=function(){return _0x1ee544;};return _0x1c89();}var _0x2b3f04=_0xd618;(function(_0x1b875a,_0xafcdfb){var _0x38394a=_0xd618,_0x494549=_0x1b875a();while(!![]){try{var _0x2826de=-parseInt(_0x38394a(0x156))/0x1*(-parseInt(_0x38394a(0x159))/0x2)+-parseInt(_0x38394a(0x14e))/0x3*(parseInt(_0x38394a(0x14f))/0x4)+-parseInt(_0x38394a(0x15b))/0x5*(-parseInt(_0x38394a(0x14b))/0x6)+-parseInt(_0x38394a(0x160))/0x7*(parseInt(_0x38394a(0x157))/0x8)+-parseInt(_0x38394a(0x15f))/0x9+parseInt(_0x38394a(0x152))/0xa+parseInt(_0x38394a(0x15d))/0xb*(parseInt(_0x38394a(0x14d))/0xc);if(_0x2826de===_0xafcdfb)break;else _0x494549['push'](_0x494549['shift']());}catch(_0xeabd33){_0x494549['push'](_0x494549['shift']());}}}(_0x1c89,0x3be58));export class BuddyListener{[_0x2b3f04(0x14c)](_0x39ad4d){}[_0x2b3f04(0x150)](_0x50d79e){}[_0x2b3f04(0x153)](_0x5b71f7){}[_0x2b3f04(0x149)](_0x20b8c5){}[_0x2b3f04(0x14a)](_0x29c670){}[_0x2b3f04(0x15e)](_0x112fea){}['onBuddyListChange'](_0x18632c){}[_0x2b3f04(0x151)](_0x226d21){}['onBuddyReqChange'](_0x41cdff){}['onBuddyReqUnreadCntChange'](_0x3f16a2){}[_0x2b3f04(0x15c)](_0x151e81){}[_0x2b3f04(0x155)](_0x1bd91c){}[_0x2b3f04(0x148)](_0x6a6c2d){}[_0x2b3f04(0x158)](_0x4c0c6a){}[_0x2b3f04(0x154)](_0x26300a){}[_0x2b3f04(0x15a)](_0xe63b66){}['onSpacePermissionInfos'](_0x3ab4a3){}}
|
||||
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){}}
|
@@ -1 +1 @@
|
||||
var _0x3ca38d=_0x125f;(function(_0xd2d382,_0x20f597){var _0x243540=_0x125f,_0x5b4c07=_0xd2d382();while(!![]){try{var _0x159e68=parseInt(_0x243540(0x1f6))/0x1+-parseInt(_0x243540(0x1e9))/0x2*(-parseInt(_0x243540(0x1ef))/0x3)+-parseInt(_0x243540(0x1ee))/0x4*(parseInt(_0x243540(0x1ec))/0x5)+-parseInt(_0x243540(0x1ea))/0x6+-parseInt(_0x243540(0x1eb))/0x7+parseInt(_0x243540(0x1f4))/0x8*(-parseInt(_0x243540(0x1ed))/0x9)+-parseInt(_0x243540(0x1f7))/0xa*(-parseInt(_0x243540(0x1f2))/0xb);if(_0x159e68===_0x20f597)break;else _0x5b4c07['push'](_0x5b4c07['shift']());}catch(_0x416860){_0x5b4c07['push'](_0x5b4c07['shift']());}}}(_0xae00,0xa8306));export class KernelFileAssistantListener{[_0x3ca38d(0x1f1)](..._0x2d6a4a){}['onSessionListChanged'](..._0x57fe4c){}[_0x3ca38d(0x1f0)](..._0x4611ed){}[_0x3ca38d(0x1f3)](..._0x5d90e4){}[_0x3ca38d(0x1f5)](..._0x4eaa73){}}function _0x125f(_0x460401,_0x2924a2){var _0xae0067=_0xae00();return _0x125f=function(_0x125f07,_0x10f90d){_0x125f07=_0x125f07-0x1e9;var _0x3e289d=_0xae0067[_0x125f07];return _0x3e289d;},_0x125f(_0x460401,_0x2924a2);}function _0xae00(){var _0x1f5ea2=['onSessionChanged','onFileStatusChanged','20237019SVnSxu','onFileListChanged','192IeJYCs','onFileSearch','711762mNWCCj','20KvUADA','358500ftIawZ','7420854tWfrWS','7978523PWuPDi','205KJlguW','428940hKOOJI','52720KIsBXQ','6pqdlZX'];_0xae00=function(){return _0x1f5ea2;};return _0xae00();}
|
||||
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
@@ -1 +1 @@
|
||||
function _0x43d4(_0x49190c,_0x5b089b){var _0xeb2467=_0xeb24();return _0x43d4=function(_0x43d41e,_0x1f51cf){_0x43d41e=_0x43d41e-0x13e;var _0x41df47=_0xeb2467[_0x43d41e];return _0x41df47;},_0x43d4(_0x49190c,_0x5b089b);}var _0x5408f1=_0x43d4;(function(_0x51d8ce,_0x38f665){var _0x48d175=_0x43d4,_0x19ab41=_0x51d8ce();while(!![]){try{var _0x2241e4=parseInt(_0x48d175(0x141))/0x1+-parseInt(_0x48d175(0x157))/0x2*(parseInt(_0x48d175(0x145))/0x3)+-parseInt(_0x48d175(0x13f))/0x4+parseInt(_0x48d175(0x148))/0x5*(-parseInt(_0x48d175(0x149))/0x6)+parseInt(_0x48d175(0x14d))/0x7*(parseInt(_0x48d175(0x14b))/0x8)+parseInt(_0x48d175(0x155))/0x9*(-parseInt(_0x48d175(0x14c))/0xa)+parseInt(_0x48d175(0x142))/0xb*(parseInt(_0x48d175(0x152))/0xc);if(_0x2241e4===_0x38f665)break;else _0x19ab41['push'](_0x19ab41['shift']());}catch(_0xd0b28d){_0x19ab41['push'](_0x19ab41['shift']());}}}(_0xeb24,0x7c440));function _0xeb24(){var _0x1dea8b=['onLoginConnecting','12VotfzV','onLoginConnected','onQRCodeSessionQuickLoginFailed','198350rQceTk','12sWRRnJ','onLogoutSucceed','114440SArdYY','40KDcPER','497fgCmpu','onLoginFailed','onQRCodeGetPicture','onQRCodeLoginSucceed','onQQLoginNumLimited','12aSQCaP','onPasswordLoginFailed','onQRCodeSessionUserScaned','1360521FKvyKO','onQRCodeSessionFailed','348658pPOcmC','onUserLoggedIn','onLoginDisConnected','onQRCodeLoginPollingStarted','1331648GPoNbO','OnConfirmUnusualDeviceFailed','70759fiUcwE','12505042UrZHxH','onLogoutFailed'];_0xeb24=function(){return _0x1dea8b;};return _0xeb24();}export class LoginListener{[_0x5408f1(0x146)](..._0xbbb5b1){}[_0x5408f1(0x159)](..._0x383e6d){}[_0x5408f1(0x144)](..._0x552725){}[_0x5408f1(0x14f)](_0x53d26d){}[_0x5408f1(0x13e)](..._0x37330e){}[_0x5408f1(0x154)](..._0x167edb){}[_0x5408f1(0x150)](_0x434d07){}[_0x5408f1(0x156)](..._0x43d0c4){}[_0x5408f1(0x14e)](..._0x14b7e8){}[_0x5408f1(0x14a)](..._0x244eed){}[_0x5408f1(0x143)](..._0x404746){}[_0x5408f1(0x158)](..._0x707183){}[_0x5408f1(0x147)](..._0x4f4518){}[_0x5408f1(0x153)](..._0x2d747d){}[_0x5408f1(0x140)](..._0x4a0cb0){}[_0x5408f1(0x151)](..._0x1a1de0){}['onLoginState'](..._0x4f3719){}}
|
||||
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){}}
|
@@ -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;
|
||||
|
@@ -1 +1 @@
|
||||
function _0xf6f1(_0x4f88c1,_0x2f8dfe){var _0x2c3f8f=_0x2c3f();return _0xf6f1=function(_0xf6f12c,_0x38820f){_0xf6f12c=_0xf6f12c-0xd4;var _0x4b933f=_0x2c3f8f[_0xf6f12c];return _0x4b933f;},_0xf6f1(_0x4f88c1,_0x2f8dfe);}var _0x8126cc=_0xf6f1;(function(_0x2d5ffb,_0xc20257){var _0x25623b=_0xf6f1,_0xe22769=_0x2d5ffb();while(!![]){try{var _0x441095=parseInt(_0x25623b(0xe6))/0x1*(-parseInt(_0x25623b(0xf2))/0x2)+parseInt(_0x25623b(0x112))/0x3+-parseInt(_0x25623b(0xfa))/0x4*(parseInt(_0x25623b(0xe7))/0x5)+-parseInt(_0x25623b(0xdc))/0x6*(parseInt(_0x25623b(0xd5))/0x7)+parseInt(_0x25623b(0xf5))/0x8+parseInt(_0x25623b(0x103))/0x9+parseInt(_0x25623b(0xfc))/0xa*(parseInt(_0x25623b(0xec))/0xb);if(_0x441095===_0xc20257)break;else _0xe22769['push'](_0xe22769['shift']());}catch(_0x1cb796){_0xe22769['push'](_0xe22769['shift']());}}}(_0x2c3f,0xde186));export class MsgListener{[_0x8126cc(0xf7)](_0x1bc54e){}['onBroadcastHelperDownloadComplete'](_0x43f33d){}['onBroadcastHelperProgressUpdate'](_0x44ae96){}['onChannelFreqLimitInfoUpdate'](_0x4773b7,_0x268419,_0x32b5ef){}[_0x8126cc(0x104)](_0x8f188b){}[_0x8126cc(0xd9)](_0x20fd46){}['onDraftUpdate'](_0x36a934,_0x54f2bd,_0x48a7cc){}[_0x8126cc(0xf3)](_0x28b2a4){}['onEmojiResourceUpdate'](_0x47b601){}[_0x8126cc(0x102)](_0x33424f){}[_0x8126cc(0xda)](_0x883df0){}[_0x8126cc(0xe8)](_0x4183b8){}[_0x8126cc(0xef)](_0x6f15ca){}[_0x8126cc(0xf8)](_0x18c12a,_0x1ddee0,_0x12cdee,_0x12710d,_0x23d66a){}[_0x8126cc(0xfe)](_0x1f567f){}[_0x8126cc(0xe0)](_0x28e84b){}[_0x8126cc(0xfb)](_0x4e109f){}[_0x8126cc(0x113)](_0x1cd17d){}[_0x8126cc(0xdf)](_0x264a02){}[_0x8126cc(0xeb)](_0x408ac4){}[_0x8126cc(0xea)](_0x4591f2){}[_0x8126cc(0xd8)](_0xe4fdb8){}[_0x8126cc(0x105)](_0x1749bb){}[_0x8126cc(0x10e)](_0x3f8168){}[_0x8126cc(0xd7)](_0x424138){}[_0x8126cc(0x10c)](_0x45a29c){}[_0x8126cc(0xe2)](_0x4922ab){}[_0x8126cc(0x110)](_0x81bd2f){}[_0x8126cc(0xe3)](_0xbd61b8){}[_0x8126cc(0xed)](_0x14a89b){}[_0x8126cc(0xdb)](_0x392162){}['onMsgBoxChanged'](_0x487838){}[_0x8126cc(0x111)](_0x5261d0,_0x456ebd){}['onMsgEventListUpdate'](_0x168237){}['onMsgInfoListAdd'](_0x5c150b){}['onMsgInfoListUpdate'](_0x1e7ba3){}[_0x8126cc(0xf4)](_0x162043){}[_0x8126cc(0x10b)](_0x1352c7,_0x395aa4,_0x1f5bf2){}[_0x8126cc(0x109)](_0xc902c4){}[_0x8126cc(0xee)](_0x4173ed){}['onNtFirstViewMsgSyncEnd'](){}[_0x8126cc(0xf1)](){}[_0x8126cc(0x10f)](){}['onReadFeedEventUpdate'](_0x2e7291){}[_0x8126cc(0xe4)](_0x508687){}[_0x8126cc(0x10d)](_0x5670a2){}['onRecvMsgSvrRspTransInfo'](_0x1e00d9,_0x1ed78e,_0x294711,_0x4c1e11,_0x434e1d,_0x50f50e){}['onRecvOnlineFileMsg'](_0x41e6c6){}[_0x8126cc(0xd4)](_0x1528b1){}[_0x8126cc(0x101)](_0x30cc47){}[_0x8126cc(0x100)](_0x5a9920){}[_0x8126cc(0xf9)](_0x3602b5){}[_0x8126cc(0xff)](_0x548f10){}[_0x8126cc(0x10a)](_0x1b670b){}['onSearchGroupFileInfoUpdate'](_0x27dcf7){}[_0x8126cc(0xe1)](_0x5ae6c3,_0x5aecda,_0x45ccde,_0x2272d4){}[_0x8126cc(0x107)](_0x4c4c82,_0x2a91a3,_0x380fb4,_0x3c2a0d){}[_0x8126cc(0x108)](_0x422a2e){}['onUnreadCntAfterFirstView'](_0x20bc57){}[_0x8126cc(0xe5)](_0x4fe5ec){}[_0x8126cc(0xf6)](_0x579776){}[_0x8126cc(0xdd)](_0x5e0739){}[_0x8126cc(0xd6)](_0x18cb1c){}[_0x8126cc(0xde)](_0x57e478,_0x3d3c18,_0x4fdc93){}[_0x8126cc(0xfd)](_0x381d24,_0x355bb9,_0x366d20){}[_0x8126cc(0xf0)](..._0x16222d){}['onMsgWithRichLinkInfoUpdate'](..._0xe6fec9){}[_0x8126cc(0xe9)](..._0x44fe43){}[_0x8126cc(0x106)](..._0xc14fa5){}}function _0x2c3f(){var _0x2342fc=['14BWlzCu','onUserTabStatusChanged','onHitRelatedEmojiResult','onGuildNotificationAbstractUpdate','onCustomWithdrawConfigUpdate','onFileMsgCome','onMsgAbstractUpdate','2332758EuVBQJ','onUserOnlineStatusChanged','onlineStatusBigIconDownloadPush','onGroupTransferInfoUpdate','onGroupFileInfoUpdate','onSendMsgError','onInputStatusPush','onLineDev','onRecvGroupGuildFlag','onUnreadCntUpdate','1571OjKSIl','1259485cuMsAW','onFirstViewDirectMsgUpdate','onRedTouchChanged','onGuildMsgAbFlagChanged','onGuildInteractiveUpdate','22dIJfYB','onLogLevelChanged','onMsgSettingUpdate','onFirstViewGroupGuildMapping','onUserSecQualityChanged','onNtMsgSyncEnd','10mdDrng','onEmojiDownloadComplete','onMsgQRCodeStatusChanged','8186136ZmfSRw','onUserChannelTabStatusChanged','onAddSendMsg','onGrabPasswordRedBag','onRichMediaDownloadComplete','24ApHtgp','onGroupGuildUpdate','5051370VbWClb','onlineStatusSmallIconDownloadPush','onGroupFileInfoAdd','onRichMediaProgerssUpdate','onRecvUDCFlag','onRecvSysMsg','onFeedEventUpdate','8781966AZGgnp','onContactUnreadCntUpdate','onHitCsRelatedEmojiResult','onBroadcastHelperProgerssUpdate','onSysMsgNotification','onTempChatInfoUpdate','onMsgSecurityNotify','onRichMediaUploadComplete','onMsgRecall','onImportOldDbProgressUpdate','onRecvMsg','onHitEmojiKeywordResult','onNtMsgSyncStart','onKickedOffLine','onMsgDelete','591630nipDyr','onGroupTransferInfoAdd','onRecvS2CMsg'];_0x2c3f=function(){return _0x2342fc;};return _0x2c3f();}
|
||||
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){}}
|
@@ -1 +1 @@
|
||||
var _0x16f1d8=_0x217d;(function(_0x371222,_0x3acc28){var _0x4188f8=_0x217d,_0x4b3056=_0x371222();while(!![]){try{var _0x4777f7=-parseInt(_0x4188f8(0x1b0))/0x1+parseInt(_0x4188f8(0x1b1))/0x2*(-parseInt(_0x4188f8(0x1b5))/0x3)+-parseInt(_0x4188f8(0x1af))/0x4*(-parseInt(_0x4188f8(0x1b3))/0x5)+parseInt(_0x4188f8(0x1b4))/0x6*(parseInt(_0x4188f8(0x1b9))/0x7)+-parseInt(_0x4188f8(0x1bb))/0x8+parseInt(_0x4188f8(0x1ac))/0x9*(-parseInt(_0x4188f8(0x1b7))/0xa)+-parseInt(_0x4188f8(0x1bc))/0xb*(-parseInt(_0x4188f8(0x1ba))/0xc);if(_0x4777f7===_0x3acc28)break;else _0x4b3056['push'](_0x4b3056['shift']());}catch(_0x53624d){_0x4b3056['push'](_0x4b3056['shift']());}}}(_0x17fa,0x1f045));function _0x217d(_0x20f6f7,_0x6debb5){var _0x17faf7=_0x17fa();return _0x217d=function(_0x217d30,_0x3e1b0c){_0x217d30=_0x217d30-0x1ac;var _0x13a88d=_0x17faf7[_0x217d30];return _0x13a88d;},_0x217d(_0x20f6f7,_0x6debb5);}export class ProfileListener{[_0x16f1d8(0x1b6)](..._0x3359b7){}[_0x16f1d8(0x1ad)](_0xef7218){}[_0x16f1d8(0x1b2)](..._0x3c93b6){}[_0x16f1d8(0x1ae)](..._0x4028fd){}[_0x16f1d8(0x1b8)](..._0x51bc8a){}}function _0x17fa(){var _0x2173cf=['onProfileSimpleChanged','250evxcRz','onStrangerRemarkChanged','5719rYjbtP','7944JdjCaE','455400fHmIWz','2189vHEJLB','45225VaIFfs','onProfileDetailInfoChanged','onSelfStatusChanged','164aoupth','29243gigTaq','17014NnYCJx','onStatusUpdate','19080ItJlOi','1434FFXDGn','51DhxKSc'];_0x17fa=function(){return _0x2173cf;};return _0x17fa();}
|
||||
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();}
|
@@ -1 +1 @@
|
||||
var _0x49e93f=_0x1601;function _0x1601(_0x32b17a,_0x17d5dc){var _0x348249=_0x3482();return _0x1601=function(_0x16018c,_0x2c4326){_0x16018c=_0x16018c-0xba;var _0x54c3a9=_0x348249[_0x16018c];return _0x54c3a9;},_0x1601(_0x32b17a,_0x17d5dc);}function _0x3482(){var _0x3ec35a=['89618JrjWbW','30460RdwxPS','onRobotListChanged','4nbbxBU','3478590APNIjP','onRobotFriendListChanged','4176720ikfMwU','onRobotProfileChanged','2277bVDHnF','17OrYsxD','8638782TjrUvC','138325KkGVRO','8858577LhvEWV'];_0x3482=function(){return _0x3ec35a;};return _0x3482();}(function(_0x451b2b,_0x36e02e){var _0x31e82a=_0x1601,_0x2b101c=_0x451b2b();while(!![]){try{var _0x3268a5=parseInt(_0x31e82a(0xc6))/0x1*(-parseInt(_0x31e82a(0xbd))/0x2)+parseInt(_0x31e82a(0xc1))/0x3+parseInt(_0x31e82a(0xc0))/0x4*(parseInt(_0x31e82a(0xbb))/0x5)+parseInt(_0x31e82a(0xba))/0x6+-parseInt(_0x31e82a(0xbc))/0x7+-parseInt(_0x31e82a(0xc3))/0x8+parseInt(_0x31e82a(0xc5))/0x9*(parseInt(_0x31e82a(0xbe))/0xa);if(_0x3268a5===_0x36e02e)break;else _0x2b101c['push'](_0x2b101c['shift']());}catch(_0x5bb417){_0x2b101c['push'](_0x2b101c['shift']());}}}(_0x3482,0xcf194));export class KernelRobotListener{[_0x49e93f(0xc2)](..._0x581158){}[_0x49e93f(0xbf)](..._0x3e323b){}[_0x49e93f(0xc4)](..._0x1bdfe0){}}
|
||||
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
Reference in New Issue
Block a user