mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-07-19 12:03:37 +00:00
Compare commits
125 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
3da1659c8d | ||
![]() |
9aa4cd319c | ||
![]() |
5af866cdca | ||
![]() |
2b421fa447 | ||
![]() |
30ec964325 | ||
![]() |
714d7d72eb | ||
![]() |
687aa0f363 | ||
![]() |
8363ab07a7 | ||
![]() |
c46a757339 | ||
![]() |
557864395b | ||
![]() |
3f7a85d80b | ||
![]() |
8d18d2ce1f | ||
![]() |
7141ba1587 | ||
![]() |
44d350a225 | ||
![]() |
239b8e72d9 | ||
![]() |
279bdb6fb1 | ||
![]() |
a0cea819da | ||
![]() |
9ab7f60544 | ||
![]() |
aaf7191bf3 | ||
![]() |
628c9be0c8 | ||
![]() |
733052720c | ||
![]() |
a10f007194 | ||
![]() |
6fa50c58d3 | ||
![]() |
c54a58d6e4 | ||
![]() |
34cb1ea3fd | ||
![]() |
f640b0ca91 | ||
![]() |
60e16da42e | ||
![]() |
0cdceb95d6 | ||
![]() |
70bd22d925 | ||
![]() |
82462dd647 | ||
![]() |
c0466e943d | ||
![]() |
b187b4695d | ||
![]() |
b1956d2a37 | ||
![]() |
590b622e5f | ||
![]() |
3d8174396a | ||
![]() |
b8dc6e9bd9 | ||
![]() |
8ee99109dc | ||
![]() |
902041d4ee | ||
![]() |
cc34aef47e | ||
![]() |
0afbbe7c7a | ||
![]() |
8004553ba7 | ||
![]() |
0023b2846a | ||
![]() |
34775c1816 | ||
![]() |
e0759e704b | ||
![]() |
0aa225ca78 | ||
![]() |
b43b4ee5c0 | ||
![]() |
0cdb8cecbf | ||
![]() |
fd6a306742 | ||
![]() |
7f3b3d2277 | ||
![]() |
8be5b977bf | ||
![]() |
d7ddb15f9c | ||
![]() |
9a6a1798d0 | ||
![]() |
14196fd349 | ||
![]() |
941b89a523 | ||
![]() |
a5f9e5f8c0 | ||
![]() |
80c3356c8f | ||
![]() |
914136b750 | ||
![]() |
f9a60795f5 | ||
![]() |
19640927c7 | ||
![]() |
22faac7e36 | ||
![]() |
30d260ab32 | ||
![]() |
115120d066 | ||
![]() |
1327844736 | ||
![]() |
29904f3cb7 | ||
![]() |
50395594b7 | ||
![]() |
9360af88b3 | ||
![]() |
376370336c | ||
![]() |
70df6e3302 | ||
![]() |
0a1fc2dc12 | ||
![]() |
9857f6e437 | ||
![]() |
56d6ebe916 | ||
![]() |
81134ea2d4 | ||
![]() |
a9f3e7fc54 | ||
![]() |
eb84e2f8c9 | ||
![]() |
61cfa0e86d | ||
![]() |
0a01b8ade9 | ||
![]() |
1457efa9a4 | ||
![]() |
fa5c7add7a | ||
![]() |
d644eba4d1 | ||
![]() |
9c422c1a8f | ||
![]() |
b6db37202f | ||
![]() |
4ca3891089 | ||
![]() |
4c7ed01776 | ||
![]() |
45c922c377 | ||
![]() |
f854c258bd | ||
![]() |
a643fac073 | ||
![]() |
861f105bea | ||
![]() |
bf10ce9f1e | ||
![]() |
ccf521d0a8 | ||
![]() |
6075d98eaa | ||
![]() |
a3801fc243 | ||
![]() |
a1f0c05f3a | ||
![]() |
a568c96929 | ||
![]() |
d58bcf3c0e | ||
![]() |
985f2e6436 | ||
![]() |
ad441fa793 | ||
![]() |
316300cc86 | ||
![]() |
5c4f37b234 | ||
![]() |
77b51a072d | ||
![]() |
2536e1ae6a | ||
![]() |
14822c9599 | ||
![]() |
e53c37adc9 | ||
![]() |
c37539354c | ||
![]() |
ae0277f33c | ||
![]() |
b863896249 | ||
![]() |
5b42f8b743 | ||
![]() |
3883fab614 | ||
![]() |
61d6bcec4b | ||
![]() |
3b5902b033 | ||
![]() |
3a88c21a3b | ||
![]() |
91a5055dee | ||
![]() |
7befd1469f | ||
![]() |
c72ebe495c | ||
![]() |
19e06b97e6 | ||
![]() |
7519825303 | ||
![]() |
d9315bf309 | ||
![]() |
8c36c809a0 | ||
![]() |
8138aa3cb2 | ||
![]() |
87aef3ca78 | ||
![]() |
a3f1d26d6b | ||
![]() |
06cebc5670 | ||
![]() |
867fd62d77 | ||
![]() |
650cdf2916 | ||
![]() |
ebf461f2fd | ||
![]() |
27fa319b2a |
@@ -1,21 +1,21 @@
|
||||
# EditorConfig is awesome: https://EditorConfig.org
|
||||
|
||||
# top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
# Unix-style newlines with a newline ending every file
|
||||
[*]
|
||||
end_of_line = lf|crlf
|
||||
insert_final_newline = true
|
||||
|
||||
# Matches multiple files with brace expansion notation
|
||||
# Set default charset
|
||||
charset = utf-8
|
||||
|
||||
# 2 space indentation
|
||||
[*.{cjs,mjs,js,jsx,ts,tsx,css,scss,sass,html,json}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
# Unfortunately, EditorConfig doesn't support space configuration inside import braces directly.
|
||||
# You'll need to rely on your linter/formatter like ESLint or Prettier for that.
|
||||
# EditorConfig is awesome: https://EditorConfig.org
|
||||
|
||||
# top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
# Unix-style newlines with a newline ending every file
|
||||
[*]
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
|
||||
# Matches multiple files with brace expansion notation
|
||||
# Set default charset
|
||||
charset = utf-8
|
||||
|
||||
# 2 space indentation
|
||||
[*.{cjs,mjs,js,jsx,ts,tsx,css,scss,sass,html,json}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
# Unfortunately, EditorConfig doesn't support space configuration inside import braces directly.
|
||||
# You'll need to rely on your linter/formatter like ESLint or Prettier for that.
|
||||
|
4
.github/workflows/build.yml
vendored
4
.github/workflows/build.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: "Build"
|
||||
name: "Build Action"
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
@@ -47,7 +47,7 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
target_platform: [win32]
|
||||
target_arch: [x64]
|
||||
target_arch: [x64,ia32]
|
||||
steps:
|
||||
- name: Clone Main Repository
|
||||
uses: actions/checkout@v4
|
||||
|
5
.github/workflows/release.yml
vendored
5
.github/workflows/release.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: "release"
|
||||
name: "Build Release"
|
||||
|
||||
on:
|
||||
push:
|
||||
@@ -72,7 +72,7 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
target_platform: [win32]
|
||||
target_arch: [x64]
|
||||
target_arch: [x64,ia32]
|
||||
steps:
|
||||
- name: Clone Main Repository
|
||||
uses: actions/checkout@v4
|
||||
@@ -130,6 +130,7 @@ jobs:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
body_path: CHANGELOG.md
|
||||
files: |
|
||||
NapCat.win32.ia32.zip
|
||||
NapCat.win32.x64.zip
|
||||
NapCat.linux.x64.zip
|
||||
NapCat.linux.arm64.zip
|
||||
|
69
.github/workflows/test.yml
vendored
Normal file
69
.github/workflows/test.yml
vendored
Normal file
@@ -0,0 +1,69 @@
|
||||
name: "Build Test"
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
permissions: write-all
|
||||
|
||||
jobs:
|
||||
build-linux:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
target_platform: [linux]
|
||||
target_arch: [x64, arm64]
|
||||
steps:
|
||||
- name: Clone Main Repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: 'NapNeko/NapCatQQ'
|
||||
submodules: true
|
||||
ref: main
|
||||
token: ${{ secrets.NAPCAT_BUILD }}
|
||||
- name: Use Node.js 20.X
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20.x
|
||||
- name: Build NuCat Linux
|
||||
run: |
|
||||
npm i --arch=${{ matrix.target_arch }} --platform=${{ matrix.target_platform }}
|
||||
npm run build:prod
|
||||
cd dist
|
||||
npm i --omit=dev --arch=${{ matrix.target_arch }} --platform=${{ matrix.target_platform }}
|
||||
cd ..
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: NapCat.${{ matrix.target_platform }}.${{ matrix.target_arch }}
|
||||
path: dist
|
||||
build-win32:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
target_platform: [win32]
|
||||
target_arch: [x64,ia32]
|
||||
steps:
|
||||
- name: Clone Main Repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: 'NapNeko/NapCatQQ'
|
||||
submodules: true
|
||||
ref: main
|
||||
token: ${{ secrets.NAPCAT_BUILD }}
|
||||
- name: Use Node.js 20.X
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20.x
|
||||
- name: Build NuCat Linux
|
||||
run: |
|
||||
npm i --arch=${{ matrix.target_arch }} --platform=${{ matrix.target_platform }}
|
||||
npm run build:prod
|
||||
cd dist
|
||||
npm i --omit=dev --arch=${{ matrix.target_arch }} --platform=${{ matrix.target_platform }}
|
||||
cd ..
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: NapCat.${{ matrix.target_platform }}.${{ matrix.target_arch }}
|
||||
path: dist
|
3
.gitignore
vendored
3
.gitignore
vendored
@@ -14,4 +14,5 @@ dist/
|
||||
|
||||
# Build
|
||||
*.db
|
||||
checkVersion.sh
|
||||
checkVersion.sh
|
||||
bun.lockb
|
||||
|
4
.gitmodules
vendored
4
.gitmodules
vendored
@@ -1,4 +0,0 @@
|
||||
[submodule "src/core"]
|
||||
path = src/core
|
||||
url = https://github.com/NapNeko/core.git
|
||||
branch = master
|
25
docs/changelogs/CHANGELOG.v1.6.7.md
Normal file
25
docs/changelogs/CHANGELOG.v1.6.7.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# v1.6.7
|
||||
|
||||
QQ Version: Windows 9.9.12-26000 / Linux 3.2.9-26000
|
||||
## 使用前警告
|
||||
1. 在最近版本由于QQ本体大幅变动,为了保证NapCat可用性,NapCat近期启动与安装方式将将大幅变动,请关注文档和社群获取。
|
||||
2. 在Core上完全执行开源,请不要用于违法用途,如此可能造成NapCat完全停止更新。
|
||||
3. 针对原启动方式的围堵,NapCat研发了多种方式,除此其余理论与扩展的分析和思路将部分展示于Docs,以便各位参与开发与维护NapCat。
|
||||
## 其余·备注
|
||||
启动方式: WayBoot.03 (Electron Main进程为Node 直接注入代码 同理项目: LiteLoader)
|
||||
|
||||
## 修复与优化
|
||||
1. 尝试 修复 卡顿问题
|
||||
2. 尝试 修复 精华消息被设置/一起听 接收时的报错
|
||||
3. 优化 Uin与Uid 转换速度
|
||||
4. 修复CQCode可能存在的解码问题
|
||||
|
||||
## 新增与调整
|
||||
1. 戳一戳上报raw
|
||||
2. 精华消息设置通知事件
|
||||
3. 新增设置/删除群精华API
|
||||
4. 新增最近联系列表API(RAW 不稳定)
|
||||
5. 新增设置所有消息已读API(非标准)
|
||||
6. 新增获取点赞信息获取API(非标准)
|
||||
|
||||
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)
|
@@ -1,6 +1,6 @@
|
||||
# v1.5.6
|
||||
|
||||
QQ Version: Windows 9.9.11-24568 / Linux 3.2.9-23568
|
||||
QQ Version: Windows 9.9.11-24568 / Linux 3.2.9-24568
|
||||
|
||||
## 修复与优化
|
||||
* 修复一些问题
|
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)
|
11
docs/changelogs/old/CHANGELOG.v1.6.0.md
Normal file
11
docs/changelogs/old/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)
|
11
docs/changelogs/old/CHANGELOG.v1.6.1.md
Normal file
11
docs/changelogs/old/CHANGELOG.v1.6.1.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# v1.6.1
|
||||
|
||||
QQ Version: Windows 9.9.11-24815 / Linux 3.2.9-24815
|
||||
|
||||
## 修复与优化
|
||||
|
||||
|
||||
## 新增与调整
|
||||
* 修复poke异常事件
|
||||
|
||||
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)
|
13
docs/changelogs/old/CHANGELOG.v1.6.2.md
Normal file
13
docs/changelogs/old/CHANGELOG.v1.6.2.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# v1.6.2
|
||||
|
||||
QQ Version: Windows 9.9.11-24815 / Linux 3.2.9-24815
|
||||
|
||||
## 修复与优化
|
||||
* 修复获取Cookies异常崩溃问题
|
||||
* 尝试修复成员退群缓存问题
|
||||
* 修复自身退群后群缓存清理问题
|
||||
|
||||
## 新增与调整
|
||||
|
||||
|
||||
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)
|
13
docs/changelogs/old/CHANGELOG.v1.6.3.md
Normal file
13
docs/changelogs/old/CHANGELOG.v1.6.3.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# v1.6.3
|
||||
|
||||
QQ Version: Windows 9.9.11-24815 / Linux 3.2.9-24815
|
||||
|
||||
## 修复与优化
|
||||
* 修复带有groupid的私聊消息异常发送到群聊消息
|
||||
* 尝试修复rws热重载失效问题
|
||||
* 尝试修复进群事件无法正常获取uin
|
||||
|
||||
## 新增与调整
|
||||
|
||||
|
||||
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)
|
18
docs/changelogs/old/CHANGELOG.v1.6.4.md
Normal file
18
docs/changelogs/old/CHANGELOG.v1.6.4.md
Normal file
@@ -0,0 +1,18 @@
|
||||
# v1.6.4
|
||||
|
||||
QQ Version: Windows 9.9.12-26000 / Linux 3.2.9-26000
|
||||
## 使用前警告
|
||||
1. 在最近版本由于QQ本体大幅变动,为了保证NapCat可用性,NapCat近期启动与安装方式将将大幅变动,请关注文档和社群获取。
|
||||
2. 在Core上完全执行开源,请不要用于违法用途,如此可能造成NapCat完全停止更新。
|
||||
3. 针对原启动方式的围堵,NapCat研发了多种方式,除此其余理论与扩展的分析和思路将部分展示于Docs,以便各位参与开发与维护NapCat。
|
||||
## 其余·备注
|
||||
启动方式: WayBoot.03 (Electron Main进程为Node 直接注入代码 同理项目: LiteLoader)
|
||||
|
||||
## 修复与优化
|
||||
1. 支持Win平台 9.9.12
|
||||
2. 修复部分发送图片下载异常情况
|
||||
|
||||
## 新增与调整
|
||||
没有哦
|
||||
|
||||
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)
|
18
docs/changelogs/old/CHANGELOG.v1.6.5.md
Normal file
18
docs/changelogs/old/CHANGELOG.v1.6.5.md
Normal file
@@ -0,0 +1,18 @@
|
||||
# v1.6.5
|
||||
|
||||
QQ Version: Windows 9.9.12-26000 / Linux 3.2.9-26000
|
||||
## 使用前警告
|
||||
1. 在最近版本由于QQ本体大幅变动,为了保证NapCat可用性,NapCat近期启动与安装方式将将大幅变动,请关注文档和社群获取。
|
||||
2. 在Core上完全执行开源,请不要用于违法用途,如此可能造成NapCat完全停止更新。
|
||||
3. 针对原启动方式的围堵,NapCat研发了多种方式,除此其余理论与扩展的分析和思路将部分展示于Docs,以便各位参与开发与维护NapCat。
|
||||
## 其余·备注
|
||||
启动方式: WayBoot.03 (Electron Main进程为Node 直接注入代码 同理项目: LiteLoader)
|
||||
|
||||
## 修复与优化
|
||||
1. 优化了WrapperNative载入代码
|
||||
2. 优化缓存
|
||||
|
||||
## 新增与调整
|
||||
没有哦
|
||||
|
||||
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)
|
17
docs/changelogs/old/CHANGELOG.v1.6.6.md
Normal file
17
docs/changelogs/old/CHANGELOG.v1.6.6.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# v1.6.6
|
||||
|
||||
QQ Version: Windows 9.9.12-26000 / Linux 3.2.9-26000
|
||||
## 使用前警告
|
||||
1. 在最近版本由于QQ本体大幅变动,为了保证NapCat可用性,NapCat近期启动与安装方式将将大幅变动,请关注文档和社群获取。
|
||||
2. 在Core上完全执行开源,请不要用于违法用途,如此可能造成NapCat完全停止更新。
|
||||
3. 针对原启动方式的围堵,NapCat研发了多种方式,除此其余理论与扩展的分析和思路将部分展示于Docs,以便各位参与开发与维护NapCat。
|
||||
## 其余·备注
|
||||
启动方式: WayBoot.03 (Electron Main进程为Node 直接注入代码 同理项目: LiteLoader)
|
||||
|
||||
## 修复与优化
|
||||
1. 修复了一些问题
|
||||
|
||||
## 新增与调整
|
||||
没有哦
|
||||
|
||||
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)
|
@@ -1,2 +0,0 @@
|
||||
# 开始
|
||||
jadx 跳转于 `com.tencent.qqnt.kernel.*`
|
@@ -1,42 +0,0 @@
|
||||
# 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
|
||||
```
|
16
docs/develop/NC 1.6.X的计划.md
Normal file
16
docs/develop/NC 1.6.X的计划.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# 开发方向
|
||||
方向一 NativeCall/Hook:
|
||||
1. 崩溃检测机制的实现
|
||||
2. Api_Caller 的Hook 可以拿到Event/Handler 进一步提升NC 即时的拦截与处理一些事件比如ReCall拦截
|
||||
3. Node包装层 进一步分析,拿到脱离自带Listener/Adapter,可以拿到一些更加底层的数据变动 或许包括更多二进制数据
|
||||
|
||||
方向二 全新的无头启动 Way01
|
||||
1. 基于Node启动原理,借助导出符号获取函数地址 再次还原NodeMain
|
||||
|
||||
方向三 发包与收包
|
||||
1. 参考 方向一/3 大概可以收包
|
||||
2. 发包 (暂时没有计划)
|
||||
|
||||
方向四 版本控制
|
||||
1. 根据不同版本进行逻辑控制
|
||||
2. 某些参数的自动提取
|
@@ -1,24 +0,0 @@
|
||||
# 前排提示
|
||||
由于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调用流程
|
1
docs/develop/碎碎的研究记录.md
Normal file
1
docs/develop/碎碎的研究记录.md
Normal file
@@ -0,0 +1 @@
|
||||
getMsgUniqueId 传入时间 产出一个唯一ID 发送消息作为一个参数
|
11
package.json
11
package.json
@@ -2,7 +2,7 @@
|
||||
"name": "napcat",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"version": "1.5.6",
|
||||
"version": "1.6.7",
|
||||
"scripts": {
|
||||
"watch:dev": "vite --mode development",
|
||||
"watch:prod": "vite --mode production",
|
||||
@@ -18,6 +18,11 @@
|
||||
"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",
|
||||
@@ -28,7 +33,7 @@
|
||||
"@types/fluent-ffmpeg": "^2.1.24",
|
||||
"@types/node": "^20.11.30",
|
||||
"@types/qrcode-terminal": "^0.12.2",
|
||||
"@types/uuid": "^9.0.8",
|
||||
"@types/uuid": "^10.0.0",
|
||||
"@types/ws": "^8.5.10",
|
||||
"@typescript-eslint/eslint-plugin": "^7.4.0",
|
||||
"@typescript-eslint/parser": "^7.4.0",
|
||||
@@ -59,7 +64,7 @@
|
||||
"json-schema-to-ts": "^3.1.0",
|
||||
"log4js": "^6.9.1",
|
||||
"qrcode-terminal": "^0.12.0",
|
||||
"silk-wasm": "^3.3.4",
|
||||
"silk-wasm": "^3.6.1",
|
||||
"sqlite3": "^5.1.7",
|
||||
"uuid": "^10.0.0",
|
||||
"ws": "^8.16.0"
|
||||
|
45
script/BootWay.03.ps1
Normal file
45
script/BootWay.03.ps1
Normal file
@@ -0,0 +1,45 @@
|
||||
# Dont Use This Script
|
||||
# 2024.7.3
|
||||
function Get-QQpath {
|
||||
try {
|
||||
$key = Get-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ"
|
||||
$uninstallString = $key.UninstallString
|
||||
return [System.IO.Path]::GetDirectoryName($uninstallString) + "\QQ.exe"
|
||||
}
|
||||
catch {
|
||||
throw "get QQ path error: $_"
|
||||
}
|
||||
}
|
||||
function Select-QQPath {
|
||||
Add-Type -AssemblyName System.Windows.Forms
|
||||
[System.Windows.Forms.Application]::EnableVisualStyles()
|
||||
|
||||
$dialogTitle = "Select QQ.exe"
|
||||
|
||||
$filePicker = New-Object System.Windows.Forms.OpenFileDialog
|
||||
$filePicker.Title = $dialogTitle
|
||||
$filePicker.Filter = "Executable Files (*.exe)|*.exe|All Files (*.*)|*.*"
|
||||
$filePicker.FilterIndex = 1
|
||||
$null = $filePicker.ShowDialog()
|
||||
if (-not ($filePicker.FileName)) {
|
||||
throw "User did not select an .exe file."
|
||||
}
|
||||
return $filePicker.FileName
|
||||
}
|
||||
|
||||
$params = $args -join " "
|
||||
Try {
|
||||
$QQpath = Get-QQpath
|
||||
}
|
||||
Catch {
|
||||
$QQpath = Select-QQPath
|
||||
}
|
||||
|
||||
if (!(Test-Path $QQpath)) {
|
||||
throw "provided QQ path is invalid: $QQpath"
|
||||
}
|
||||
|
||||
$Bootfile = Join-Path $PSScriptRoot "napcat.mjs"
|
||||
$env:ELECTRON_RUN_AS_NODE = 1
|
||||
$commandInfo = Get-Command $QQpath -ErrorAction Stop
|
||||
Start-Process powershell -ArgumentList "-noexit", "-noprofile", "-command &{& chcp 65001;& '$($commandInfo.Path)' --enable-logging $params}"
|
28
script/NapCat.164.bat
Normal file
28
script/NapCat.164.bat
Normal file
@@ -0,0 +1,28 @@
|
||||
@echo off
|
||||
chcp 65001
|
||||
:: 检查是否有管理员权限
|
||||
net session >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo 请求管理员权限...
|
||||
powershell -Command "Start-Process '%~f0' -Verb runAs"
|
||||
exit /b
|
||||
)
|
||||
:: 如果有管理员权限,继续执行
|
||||
setlocal enabledelayedexpansion
|
||||
:loop_read
|
||||
for /f "tokens=2*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ" /v "UninstallString"') do (
|
||||
set "RetString=%%b"
|
||||
goto :napcat_boot
|
||||
)
|
||||
|
||||
:napcat_boot
|
||||
for %%a in ("!RetString!") do (
|
||||
set "pathWithoutUninstall=%%~dpa"
|
||||
)
|
||||
|
||||
set "QQPath=!pathWithoutUninstall!QQ.exe"
|
||||
|
||||
echo !QQPath!
|
||||
"!QQPath!" --enable-logging %*
|
||||
|
||||
pause
|
3
script/NapCat.Way01.bat
Normal file
3
script/NapCat.Way01.bat
Normal file
@@ -0,0 +1,3 @@
|
||||
REM 全新启动脚本 基于 Hook Native 预计版本1.6.0左右发布
|
||||
@echo off
|
||||
pause
|
20
script/index.js
Normal file
20
script/index.js
Normal file
@@ -0,0 +1,20 @@
|
||||
// --------------------
|
||||
// 2024.7.3 9.9.12 BootWay.03 其余方法暂不公开(此方案为临时方案 Win平台已验证)
|
||||
// 缺陷 (已知)
|
||||
// 1.与非入侵式不同 现在破坏本体代码
|
||||
// 2.重启代码与正常启动代码失效
|
||||
// 3.Win需要补丁
|
||||
// 4.更新后丢失内容 需要重写此文件
|
||||
// 5.安装难度上升与周围基础设施失效
|
||||
// --------------------
|
||||
|
||||
const path = require('path');
|
||||
const CurrentPath = path.dirname(__filename)
|
||||
const hasNapcatParam = process.argv.includes('--enable-logging');
|
||||
if (hasNapcatParam) {
|
||||
(async () => {
|
||||
await import("file://" + path.join(CurrentPath, './napcat/napcat.mjs'));
|
||||
})();
|
||||
} else {
|
||||
require('./launcher.node').load('external_index', module);
|
||||
}
|
18
script/napcat-9912-utf8.bat
Normal file
18
script/napcat-9912-utf8.bat
Normal file
@@ -0,0 +1,18 @@
|
||||
@echo off
|
||||
setlocal enabledelayedexpansion
|
||||
chcp 65001
|
||||
:loop_read
|
||||
for /f "tokens=2*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ" /v "UninstallString"') do (
|
||||
set "RetString=%%b"
|
||||
goto :napcat_boot
|
||||
)
|
||||
|
||||
:napcat_boot
|
||||
for %%a in ("!RetString!") do (
|
||||
set "pathWithoutUninstall=%%~dpa"
|
||||
)
|
||||
|
||||
set "QQPath=!pathWithoutUninstall!"
|
||||
cd /d !QQPath!
|
||||
echo !QQPath!
|
||||
QQ.exe --enable-logging %*
|
41
script/napcat-9912-utf8.ps1
Normal file
41
script/napcat-9912-utf8.ps1
Normal file
@@ -0,0 +1,41 @@
|
||||
function Get-QQpath {
|
||||
try {
|
||||
$key = Get-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ"
|
||||
$uninstallString = $key.UninstallString
|
||||
return [System.IO.Path]::GetDirectoryName($uninstallString) + "\"
|
||||
}
|
||||
catch {
|
||||
throw "get QQ path error: $_"
|
||||
}
|
||||
}
|
||||
function Select-QQPath {
|
||||
Add-Type -AssemblyName System.Windows.Forms
|
||||
[System.Windows.Forms.Application]::EnableVisualStyles()
|
||||
|
||||
$dialogTitle = "Select QQ.exe"
|
||||
|
||||
$filePicker = New-Object System.Windows.Forms.OpenFileDialog
|
||||
$filePicker.Title = $dialogTitle
|
||||
$filePicker.Filter = "Executable Files (*.exe)|*.exe|All Files (*.*)|*.*"
|
||||
$filePicker.FilterIndex = 1
|
||||
$null = $filePicker.ShowDialog()
|
||||
if (-not ($filePicker.FileName)) {
|
||||
throw "User did not select an .exe file."
|
||||
}
|
||||
return $filePicker.FileName
|
||||
}
|
||||
|
||||
$params = $args -join " "
|
||||
Try {
|
||||
$QQpath = Get-QQpath
|
||||
}
|
||||
Catch {
|
||||
$QQpath = Select-QQPath
|
||||
}
|
||||
|
||||
if (!(Test-Path $QQpath)) {
|
||||
throw "provided QQ path is invalid: $QQpath"
|
||||
}
|
||||
|
||||
Set-Location -Path $QQpath
|
||||
Start-Process powershell -ArgumentList "-noexit", "-noprofile", "-command &{& chcp 65001;& ./QQ.exe --enable-logging $params}"
|
17
script/napcat-9912.bat
Normal file
17
script/napcat-9912.bat
Normal file
@@ -0,0 +1,17 @@
|
||||
@echo off
|
||||
setlocal enabledelayedexpansion
|
||||
:loop_read
|
||||
for /f "tokens=2*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ" /v "UninstallString"') do (
|
||||
set "RetString=%%b"
|
||||
goto :napcat_boot
|
||||
)
|
||||
|
||||
:napcat_boot
|
||||
for %%a in ("!RetString!") do (
|
||||
set "pathWithoutUninstall=%%~dpa"
|
||||
)
|
||||
|
||||
set QQPath=!pathWithoutUninstall!
|
||||
cd /d !QQPath!
|
||||
echo !QQPath!
|
||||
QQ.exe --enable-logging %*
|
41
script/napcat-9912.ps1
Normal file
41
script/napcat-9912.ps1
Normal file
@@ -0,0 +1,41 @@
|
||||
function Get-QQpath {
|
||||
try {
|
||||
$key = Get-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ"
|
||||
$uninstallString = $key.UninstallString
|
||||
return [System.IO.Path]::GetDirectoryName($uninstallString) + "\"
|
||||
}
|
||||
catch {
|
||||
throw "get QQ path error: $_"
|
||||
}
|
||||
}
|
||||
function Select-QQPath {
|
||||
Add-Type -AssemblyName System.Windows.Forms
|
||||
[System.Windows.Forms.Application]::EnableVisualStyles()
|
||||
|
||||
$dialogTitle = "Select QQ.exe"
|
||||
|
||||
$filePicker = New-Object System.Windows.Forms.OpenFileDialog
|
||||
$filePicker.Title = $dialogTitle
|
||||
$filePicker.Filter = "Executable Files (*.exe)|*.exe|All Files (*.*)|*.*"
|
||||
$filePicker.FilterIndex = 1
|
||||
$null = $filePicker.ShowDialog()
|
||||
if (-not ($filePicker.FileName)) {
|
||||
throw "User did not select an .exe file."
|
||||
}
|
||||
return $filePicker.FileName
|
||||
}
|
||||
|
||||
$params = $args -join " "
|
||||
Try {
|
||||
$QQpath = Get-QQpath
|
||||
}
|
||||
Catch {
|
||||
$QQpath = Select-QQPath
|
||||
}
|
||||
|
||||
if (!(Test-Path $QQpath)) {
|
||||
throw "provided QQ path is invalid: $QQpath"
|
||||
}
|
||||
|
||||
Set-Location -Path $QQpath
|
||||
Start-Process powershell -ArgumentList "-noexit", "-noprofile", "-command &{& ./QQ.exe --enable-logging $params}"
|
@@ -1,7 +1,7 @@
|
||||
import { sleep } from '@/common/utils/helper';
|
||||
import { logError } from './log';
|
||||
type AsyncQueueTask = (() => void) | (()=>Promise<void>);
|
||||
|
||||
// 2024.7.13 废弃
|
||||
|
||||
export class AsyncQueue {
|
||||
private tasks: (AsyncQueueTask)[] = [];
|
||||
|
@@ -1,4 +1,3 @@
|
||||
import { NodeIKernelMsgListener } from '@/core';
|
||||
import { NodeIQQNTWrapperSession } from '@/core/wrapper';
|
||||
import { randomUUID } from 'crypto';
|
||||
|
||||
|
@@ -21,7 +21,8 @@ class cacheNode<T> {
|
||||
}
|
||||
}
|
||||
|
||||
type cache<T> = { [key: group_id]: { [key: user_id]: cacheNode<T> } };
|
||||
type cache<T, K = { [key: user_id]: cacheNode<T> }> = { [key: group_id]: K };
|
||||
type removeObject<T> = cache<T, { userId: user_id, value: T }[]>
|
||||
class LRU<T> {
|
||||
private maxAge: number;
|
||||
private maxSize: number;
|
||||
@@ -29,9 +30,9 @@ class LRU<T> {
|
||||
private cache: cache<T>;
|
||||
private head: cacheNode<T> | null = null;
|
||||
private tail: cacheNode<T> | null = null;
|
||||
private onFuncs: ((node: cacheNode<T>) => void)[] = [];
|
||||
private onFuncs: ((node: removeObject<T>) => void)[] = [];
|
||||
|
||||
constructor(maxAge: number = 2e4, maxSize: number = 5e3) {
|
||||
constructor(maxAge: number = 6e4 * 3, maxSize: number = 1e4) {
|
||||
this.maxAge = maxAge;
|
||||
this.maxSize = maxSize;
|
||||
this.cache = Object.create(null);
|
||||
@@ -53,46 +54,39 @@ class LRU<T> {
|
||||
node.prev = node.next = null;
|
||||
delete this.cache[node.groupId][node.userId];
|
||||
this.removeNode(node);
|
||||
this.onFuncs.forEach((func) => func(node));
|
||||
this.onFuncs.forEach((func) => func({ [node.groupId]: [node] }));
|
||||
this.currentSize--;
|
||||
}
|
||||
|
||||
public on(func: (node: cacheNode<T>) => void) {
|
||||
public on(func: (node: removeObject<T>) => void) {
|
||||
this.onFuncs.push(func);
|
||||
}
|
||||
|
||||
private removeExpired() {
|
||||
const now = Date.now();
|
||||
let current = this.tail;
|
||||
const nodesToRemove: cacheNode<T>[] = [];
|
||||
let removedCount = 0;
|
||||
let totalNodeNum = 0;
|
||||
|
||||
const removeObject: cache<T, { userId: user_id, value: T }[]> = {};
|
||||
|
||||
// 收集需要删除的节点
|
||||
while (current && now - current.timestamp > this.maxAge) {
|
||||
nodesToRemove.push(current);
|
||||
// 收集节点
|
||||
if (!removeObject[current.groupId]) removeObject[current.groupId] = [];
|
||||
removeObject[current.groupId].push({ userId: current.userId, value: current.value });
|
||||
// 删除LRU节点
|
||||
delete this.cache[current.groupId][current.userId];
|
||||
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];
|
||||
|
||||
totalNodeNum++;
|
||||
this.currentSize--;
|
||||
this.onFuncs.forEach((func) => func(node));
|
||||
});
|
||||
}
|
||||
|
||||
if (!totalNodeNum) return;
|
||||
|
||||
// 跟新链表指向
|
||||
if (current) { current.next = null; } else { this.head = null; }
|
||||
this.tail = current;
|
||||
|
||||
this.onFuncs.forEach(func => func(removeObject));
|
||||
}
|
||||
|
||||
private addNode(node: cacheNode<T>) {
|
||||
@@ -140,6 +134,28 @@ class LRU<T> {
|
||||
}
|
||||
}
|
||||
}
|
||||
public get(groupId: group_id): { userId: user_id; value: T }[];
|
||||
public get(groupId: group_id, userId: user_id): null | { userId: user_id; value: T };
|
||||
public get(groupId: group_id, userId?: user_id): any {
|
||||
const groupObject = this.cache[groupId];
|
||||
if (!groupObject) return userId === undefined ? [] : null;
|
||||
|
||||
if (userId === undefined) {
|
||||
return Object.entries(groupObject).map(([userId, { value }]) => ({
|
||||
userId: Number(userId),
|
||||
value,
|
||||
}));
|
||||
}
|
||||
|
||||
if (groupObject[userId]) {
|
||||
return { userId, value: groupObject[userId].value };
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
export default LRU;
|
||||
|
@@ -1,53 +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();
|
||||
}
|
||||
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);
|
||||
}
|
||||
getValue(key: K): V | undefined {
|
||||
return this.keyToValue.get(key);
|
||||
}
|
||||
|
||||
getKey(value: V): K | undefined {
|
||||
return this.valueToKey.get(value);
|
||||
}
|
||||
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);
|
||||
}
|
||||
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);
|
||||
}
|
||||
private msgIdMap: LimitedHashTable<number, string> = new LimitedHashTable(1000);
|
||||
createMsg(MsgId: string) {
|
||||
const ShortId = parseInt(crypto.createHash('sha1').update('2345').digest('hex').slice(0, 8), 16);
|
||||
this.msgIdMap.set(ShortId, MsgId);
|
||||
return ShortId;
|
||||
}
|
||||
getMsgIdByShortId(ShortId: number) {
|
||||
return this.msgIdMap.getValue(ShortId);
|
||||
}
|
||||
getShortIdByMsgId(MsgId: string) {
|
||||
return this.msgIdMap.getKey(MsgId);
|
||||
}
|
||||
}
|
||||
|
||||
export const MessageUnique = new MessageUniqueWrapper();
|
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{
|
||||
|
||||
}
|
@@ -38,11 +38,11 @@ type QQVersionConfigInfo = {
|
||||
}
|
||||
|
||||
let _qqVersionConfigInfo: QQVersionConfigInfo = {
|
||||
'baseVersion': '9.9.11-24568',
|
||||
'curVersion': '9.9.11-24568',
|
||||
'baseVersion': '9.9.12-25765',
|
||||
'curVersion': '9.9.12-25765',
|
||||
'prevVersion': '',
|
||||
'onErrorVersions': [],
|
||||
'buildId': '24568'
|
||||
'buildId': '25765'
|
||||
};
|
||||
|
||||
if (fs.existsSync(configVersionInfoPath)) {
|
||||
@@ -55,19 +55,23 @@ if (fs.existsSync(configVersionInfoPath)) {
|
||||
}
|
||||
|
||||
export const qqVersionConfigInfo: QQVersionConfigInfo = _qqVersionConfigInfo;
|
||||
//V1_WIN_NQ_9.9.11_24568_GW_B
|
||||
//V1_WIN_NQ_9.9.12_25765_GW_B
|
||||
export const qqPkgInfo: QQPkgInfo = JSON.parse(fs.readFileSync(pkgInfoPath).toString());
|
||||
// platform_type: 3,
|
||||
// app_type: 4,
|
||||
// app_version: '9.9.9-23159',
|
||||
// qua: 'V1_WIN_NQ_9.9.9_23159_GW_B',
|
||||
// appid: '537213764',
|
||||
// app_version: '9.9.12-25765',
|
||||
// qua: 'V1_WIN_NQ_9.9.12_25765_GW_B',
|
||||
// appid: '537234702',
|
||||
// platVer: '10.0.26100',
|
||||
// clientVer: '9.9.9-23159',
|
||||
// clientVer: '9.9.9-25765',
|
||||
|
||||
let _appid: string = '537226369'; // 默认为 Windows 平台的 appid
|
||||
// Linux
|
||||
// app_version: '3.2.9-25765',
|
||||
// qua: 'V1_LNX_NQ_3.2.10_25765_GW_B',
|
||||
|
||||
let _appid: string = '537234702'; // 默认为 Windows 平台的 appid
|
||||
if (systemPlatform === 'linux') {
|
||||
_appid = '537213827';
|
||||
_appid = '537234773';
|
||||
}
|
||||
// todo: mac 平台的 appid
|
||||
export const appid = _appid;
|
||||
export const appid = _appid;
|
@@ -1,5 +1,5 @@
|
||||
import fs from 'fs';
|
||||
import { encode, getDuration, getWavFileInfo, isWav } from 'silk-wasm';
|
||||
import { encode, getDuration, getWavFileInfo, isWav, isSilk } from 'silk-wasm';
|
||||
import fsPromise from 'fs/promises';
|
||||
import { log, logError } from './log';
|
||||
import path from 'node:path';
|
||||
@@ -63,10 +63,11 @@ export async function encodeSilk(filePath: string) {
|
||||
// }
|
||||
|
||||
try {
|
||||
const file = await fsPromise.readFile(filePath);
|
||||
const pttPath = path.join(TEMP_DIR, uuidv4());
|
||||
if (getFileHeader(filePath) !== '02232153494c4b') {
|
||||
if (!isSilk(file)) {
|
||||
log(`语音文件${filePath}需要转换成silk`);
|
||||
const _isWav = await isWavFile(filePath);
|
||||
const _isWav = isWav(file);
|
||||
const pcmPath = pttPath + '.pcm';
|
||||
let sampleRate = 0;
|
||||
const convert = () => {
|
||||
@@ -96,7 +97,7 @@ export async function encodeSilk(filePath: string) {
|
||||
if (!_isWav) {
|
||||
input = await convert();
|
||||
} else {
|
||||
input = fs.readFileSync(filePath);
|
||||
input = file;
|
||||
const allowSampleRate = [8000, 12000, 16000, 24000, 32000, 44100, 48000];
|
||||
const { fmt } = getWavFileInfo(input);
|
||||
// log(`wav文件信息`, fmt)
|
||||
@@ -113,7 +114,7 @@ export async function encodeSilk(filePath: string) {
|
||||
duration: silk.duration / 1000
|
||||
};
|
||||
} else {
|
||||
const silk = fs.readFileSync(filePath);
|
||||
const silk = file;
|
||||
let duration = 0;
|
||||
try {
|
||||
duration = getDuration(silk) / 1000;
|
||||
|
@@ -72,7 +72,7 @@ class DBUtil extends DBUtilBase {
|
||||
private cache: { gid: number; uid: number }[] = [];
|
||||
private maxSize: number;
|
||||
|
||||
constructor(maxSize: number = 5000) {
|
||||
constructor(maxSize: number = 50000) {
|
||||
this.maxSize = maxSize;
|
||||
}
|
||||
|
||||
@@ -120,57 +120,83 @@ class DBUtil extends DBUtilBase {
|
||||
});
|
||||
|
||||
|
||||
this.LURCache.on(async (node) => {
|
||||
const { value: time, groupId, userId } = node;
|
||||
this.LURCache.on(async (nodeObject) => {
|
||||
|
||||
logDebug('插入发言时间', userId, groupId);
|
||||
await this.createGroupInfoTimeTableIfNotExist(groupId);
|
||||
Object.entries(nodeObject).forEach(async ([_groupId, datas]) => {
|
||||
const userIds = datas.map(v => v.userId);
|
||||
const groupId = Number(_groupId);
|
||||
logDebug('插入发言时间', _groupId);
|
||||
|
||||
const method = await this.getDataSetMethod(groupId, userId);
|
||||
logDebug('插入发言时间方法判断', userId, groupId, method);
|
||||
await this.createGroupInfoTimeTableIfNotExist(groupId);
|
||||
|
||||
const sql =
|
||||
method == 'update'
|
||||
? `UPDATE "${groupId}" SET last_sent_time = ? WHERE user_id = ?`
|
||||
: `INSERT INTO "${groupId}" (last_sent_time, user_id) VALUES (?, ?)`;
|
||||
const needCreatUsers = await this.getNeedCreatList(groupId, userIds);
|
||||
const updateList = needCreatUsers.length > 0 ? datas.filter(user => !needCreatUsers.includes(user.userId)) : datas;
|
||||
const insertList = needCreatUsers.map(userId => datas.find(e => userId == e.userId)!);
|
||||
|
||||
this.db!.all(sql, [time, userId], (err) => {
|
||||
if (err) {
|
||||
return logError('插入/更新发言时间失败', userId, groupId);
|
||||
logDebug('updateList', updateList);
|
||||
logDebug('insertList', insertList);
|
||||
|
||||
if (insertList.length) {
|
||||
const insertSql = `INSERT INTO "${groupId}" (last_sent_time, user_id) VALUES ${insertList.map(() => '(?, ?)').join(', ')};`;
|
||||
|
||||
this.db!.all(insertSql, insertList.map(v => [v.value, v.userId]).flat(), err => {
|
||||
if (err) {
|
||||
logError(`群 ${groupId} 插入失败`);
|
||||
logError(`更新Sql : ${insertSql}`);
|
||||
}
|
||||
});
|
||||
}
|
||||
logDebug('插入/更新发言时间成功', userId, groupId);
|
||||
|
||||
if (updateList.length) {
|
||||
const updateSql =
|
||||
`UPDATE "${groupId}" SET last_sent_time = CASE ` +
|
||||
updateList.map(v => `WHEN user_id = ${v.userId} THEN ${v.value}`).join(' ') +
|
||||
' ELSE last_sent_time END WHERE user_id IN ' +
|
||||
`(${updateList.map(v => v.userId).join(', ')});`;
|
||||
|
||||
this.db!.all(updateSql, [], err => {
|
||||
if (err) {
|
||||
logError(`群 ${groupId} 跟新失败`);
|
||||
logError(`更新Sql : ${updateSql}`);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
}
|
||||
async getDataSetMethod(groupId: number, userId: number) {
|
||||
// 缓存记录
|
||||
if (this.LastSentCache.get(groupId, userId)) {
|
||||
logDebug('缓存命中', userId, groupId);
|
||||
return 'update';
|
||||
async getNeedCreatList(groupId: number, userIds: number[]) {
|
||||
|
||||
// 获取缓存中没有的
|
||||
const unhas = userIds.filter(userId => !this.LastSentCache.get(groupId, userId));
|
||||
|
||||
if (unhas.length == 0) {
|
||||
logDebug('缓存全部命中');
|
||||
return [];
|
||||
}
|
||||
|
||||
// 数据库判断
|
||||
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);
|
||||
}
|
||||
logDebug('缓存未全部命中');
|
||||
|
||||
if (rows.length === 0) {
|
||||
logDebug('查询发言时间不存在', userId, groupId);
|
||||
return resolve('insert');
|
||||
}
|
||||
const sql = `SELECT * FROM "${groupId}" WHERE user_id IN (${unhas.map(() => '?').join(',')})`;
|
||||
|
||||
logDebug('查询发言时间存在', userId, groupId);
|
||||
resolve('update');
|
||||
return new Promise<number[]>((resolve) => {
|
||||
this.db!.all(sql, unhas, (err, rows: { user_id: number }[]) => {
|
||||
const has = rows.map(v => v.user_id);
|
||||
const needCreatUsers = unhas.filter(userId => !has.includes(userId));
|
||||
|
||||
if (needCreatUsers.length == 0) {
|
||||
logDebug('数据库全部命中');
|
||||
} else {
|
||||
logDebug('数据库未全部命中');
|
||||
}
|
||||
);
|
||||
|
||||
resolve(needCreatUsers);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
async createGroupInfoTimeTableIfNotExist(groupId: number) {
|
||||
const createTableSQL = (groupId: number) =>
|
||||
@@ -408,10 +434,12 @@ class DBUtil extends DBUtilBase {
|
||||
logDebug('读取发言时间', groupId);
|
||||
return new Promise<IRember[]>((resolve, reject) => {
|
||||
this.db!.all(`SELECT * FROM "${groupId}" `, (err, rows: IRember[]) => {
|
||||
const cache = this.LURCache.get(groupId).map(e => ({ user_id: e.userId, last_sent_time: e.value }));
|
||||
if (err) {
|
||||
logError('查询发言时间失败', groupId);
|
||||
return resolve([]);
|
||||
return resolve(cache.map(e => ({ ...e, join_time: 0 })));
|
||||
}
|
||||
Object.assign(rows, cache);
|
||||
logDebug('查询发言时间成功', groupId, rows);
|
||||
resolve(rows);
|
||||
});
|
||||
|
@@ -1,5 +1,5 @@
|
||||
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';
|
||||
@@ -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 = {
|
||||
@@ -115,6 +148,8 @@ export async function httpDownload(options: string | HttpDownloadOptions): Promi
|
||||
};
|
||||
if (typeof options === 'string') {
|
||||
url = options;
|
||||
const host = new URL(url).hostname;
|
||||
headers['Host'] = host;
|
||||
} else {
|
||||
url = options.url;
|
||||
if (options.headers) {
|
||||
@@ -125,7 +160,12 @@ export async function httpDownload(options: string | HttpDownloadOptions): Promi
|
||||
}
|
||||
}
|
||||
}
|
||||
const fetchRes = await fetch(url, { headers });
|
||||
const fetchRes = await fetch(url, { headers }).catch((err) => {
|
||||
if (err.cause) {
|
||||
throw err.cause;
|
||||
}
|
||||
throw err;
|
||||
});
|
||||
if (!fetchRes.ok) throw new Error(`下载文件失败: ${fetchRes.statusText}`);
|
||||
|
||||
const blob = await fetchRes.blob();
|
||||
|
@@ -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,117 @@ 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 CacheClassFuncAsyncExtend(ttl: number = 3600 * 1000, customKey: string = '', checker: any = (...data: any[]) => { return true; }) {
|
||||
//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);
|
||||
if (!checker(...args, result)) {
|
||||
return result;//丢弃缓存
|
||||
}
|
||||
// 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 +290,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);
|
||||
}
|
||||
}
|
||||
|
@@ -39,7 +39,7 @@ 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] %X{userInfo} | %m'
|
||||
|
@@ -1,12 +1,13 @@
|
||||
import https from 'node:https';
|
||||
import http from 'node:http';
|
||||
|
||||
import { readFileSync } from 'node:fs';
|
||||
import { NTQQUserApi } from '@/core';
|
||||
export class RequestUtil {
|
||||
// 适用于获取服务器下发cookies时获取,仅GET
|
||||
static async HttpsGetCookies(url: string): Promise<{ [key: string]: string }> {
|
||||
const client = url.startsWith('https') ? https : http;
|
||||
return new Promise((resolve, reject) => {
|
||||
client.get(url, (res) => {
|
||||
const req = client.get(url, (res) => {
|
||||
let cookies: { [key: string]: string } = {};
|
||||
const handleRedirect = (res: http.IncomingMessage) => {
|
||||
//console.log(res.headers.location);
|
||||
@@ -17,6 +18,8 @@ export class RequestUtil {
|
||||
// 合并重定向过程中的cookies
|
||||
cookies = { ...cookies, ...redirectCookies };
|
||||
resolve(cookies);
|
||||
}).catch((err) => {
|
||||
reject(err);
|
||||
});
|
||||
} else {
|
||||
resolve(cookies);
|
||||
@@ -40,16 +43,17 @@ export class RequestUtil {
|
||||
}
|
||||
});
|
||||
}
|
||||
}).on('error', (err) => {
|
||||
reject(err);
|
||||
});
|
||||
req.on('error', (error: any) => {
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 请求和回复都是JSON data传原始内容 自动编码json
|
||||
static async HttpGetJson<T>(url: string, method: string = 'GET', data?: any, headers: Record<string, string> = {}, isJsonRet: boolean = true, isArgJson: boolean = true): Promise<T> {
|
||||
static async HttpGetJson<T>(url: string, method: string = 'GET', data?: any, headers: { [key: string]: string } = {}, isJsonRet: boolean = true, isArgJson: boolean = true): Promise<T> {
|
||||
const option = new URL(url);
|
||||
const protocol = url.startsWith('https://') ? https : http;
|
||||
const options = {
|
||||
@@ -59,6 +63,10 @@ export class RequestUtil {
|
||||
method: method,
|
||||
headers: headers
|
||||
};
|
||||
// headers: {
|
||||
// 'Content-Type': 'application/json',
|
||||
// 'Content-Length': Buffer.byteLength(postData),
|
||||
// },
|
||||
return new Promise((resolve, reject) => {
|
||||
const req = protocol.request(options, (res: any) => {
|
||||
let responseBody = '';
|
||||
@@ -100,7 +108,86 @@ export class RequestUtil {
|
||||
}
|
||||
|
||||
// 请求返回都是原始内容
|
||||
static async HttpGetText(url: string, method: string = 'GET', data?: any, headers: Record<string, string> = {}) {
|
||||
static async HttpGetText(url: string, method: string = 'GET', data?: any, headers: { [key: string]: string } = {}) {
|
||||
return this.HttpGetJson<string>(url, method, data, headers, false, false);
|
||||
}
|
||||
}
|
||||
|
||||
static async createFormData(boundary: string, filePath: string): Promise<Buffer> {
|
||||
let type = 'image/png';
|
||||
if (filePath.endsWith('.jpg')) {
|
||||
type = 'image/jpeg';
|
||||
}
|
||||
const formDataParts = [
|
||||
`------${boundary}\r\n`,
|
||||
`Content-Disposition: form-data; name="share_image"; filename="${filePath}"\r\n`,
|
||||
'Content-Type: ' + type + '\r\n\r\n'
|
||||
];
|
||||
|
||||
const fileContent = readFileSync(filePath);
|
||||
const footer = `\r\n------${boundary}--`;
|
||||
return Buffer.concat([
|
||||
Buffer.from(formDataParts.join(''), 'utf8'),
|
||||
fileContent,
|
||||
Buffer.from(footer, 'utf8')
|
||||
]);
|
||||
}
|
||||
|
||||
static async uploadImageForOpenPlatform(filePath: string): Promise<string> {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
type retType = { retcode: number, result?: { url: string } };
|
||||
try {
|
||||
const cookies = Object.entries(await NTQQUserApi.getCookies('connect.qq.com')).map(([key, value]) => `${key}=${value}`).join('; ');
|
||||
const options = {
|
||||
hostname: 'cgi.connect.qq.com',
|
||||
port: 443,
|
||||
path: '/qqconnectopen/upload_share_image',
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Referer': 'https://cgi.connect.qq.com',
|
||||
'Cookie': cookies,
|
||||
'Accept': '*/*',
|
||||
'Connection': 'keep-alive',
|
||||
'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW'
|
||||
}
|
||||
};
|
||||
const req = https.request(options, async (res) => {
|
||||
let responseBody = '';
|
||||
|
||||
res.on('data', (chunk: string | Buffer) => {
|
||||
responseBody += chunk.toString();
|
||||
});
|
||||
|
||||
res.on('end', () => {
|
||||
try {
|
||||
if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
|
||||
const responseJson = JSON.parse(responseBody) as retType;
|
||||
resolve(responseJson.result!.url!);
|
||||
} else {
|
||||
reject(new Error(`Unexpected status code: ${res.statusCode}`));
|
||||
}
|
||||
} catch (parseError) {
|
||||
reject(parseError);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
req.on('error', (error) => {
|
||||
reject(error);
|
||||
console.error('Error during upload:', error);
|
||||
});
|
||||
|
||||
const body = await RequestUtil.createFormData('WebKitFormBoundary7MA4YWxkTrZu0gW', filePath);
|
||||
// req.setHeader('Content-Length', Buffer.byteLength(body));
|
||||
// console.log(`Prepared data size: ${Buffer.byteLength(body)} bytes`);
|
||||
req.write(body);
|
||||
req.end();
|
||||
return;
|
||||
} catch (error) {
|
||||
reject(error);
|
||||
}
|
||||
return undefined;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
1
src/core
1
src/core
Submodule src/core deleted from 4df3fea47c
@@ -1,14 +0,0 @@
|
||||
interface IDependsAdapter {
|
||||
onMSFStatusChange(arg1: number, arg2: number): void;
|
||||
onMSFSsoError(args: unknown): void;
|
||||
getGroupCode(args: unknown): void;
|
||||
}
|
||||
export interface NodeIDependsAdapter extends IDependsAdapter {
|
||||
new (adapter: IDependsAdapter): NodeIDependsAdapter;
|
||||
}
|
||||
export declare class DependsAdapter implements IDependsAdapter {
|
||||
onMSFStatusChange(arg1: number, arg2: number): void;
|
||||
onMSFSsoError(args: unknown): void;
|
||||
getGroupCode(args: unknown): void;
|
||||
}
|
||||
export {};
|
@@ -1 +0,0 @@
|
||||
var _0x5daf60=_0xf130;function _0xf130(_0x5aba6b,_0x2da99a){var _0x33d41a=_0x33d4();return _0xf130=function(_0xf13007,_0x22a283){_0xf13007=_0xf13007-0xe5;var _0x3c4d22=_0x33d41a[_0xf13007];return _0x3c4d22;},_0xf130(_0x5aba6b,_0x2da99a);}(function(_0x766d05,_0x3fb57d){var _0x53e091=_0xf130,_0x489945=_0x766d05();while(!![]){try{var _0xe36748=-parseInt(_0x53e091(0xed))/0x1+parseInt(_0x53e091(0xea))/0x2+-parseInt(_0x53e091(0xe9))/0x3*(-parseInt(_0x53e091(0xeb))/0x4)+-parseInt(_0x53e091(0xe8))/0x5+parseInt(_0x53e091(0xf0))/0x6*(-parseInt(_0x53e091(0xe7))/0x7)+-parseInt(_0x53e091(0xee))/0x8+parseInt(_0x53e091(0xec))/0x9;if(_0xe36748===_0x3fb57d)break;else _0x489945['push'](_0x489945['shift']());}catch(_0x30aacf){_0x489945['push'](_0x489945['shift']());}}}(_0x33d4,0x1ead7));export class DependsAdapter{[_0x5daf60(0xe5)](_0xa0058e,_0x3600a1){}[_0x5daf60(0xe6)](_0x348363){}[_0x5daf60(0xef)](_0x204292){}}function _0x33d4(){var _0x49d45c=['219395XymPAD','33xKAgLL','159856uAUczW','34268fiVkzX','3445191kRIxPL','228722umUXvP','1128496fVpmLM','getGroupCode','18FwcbMu','onMSFStatusChange','onMSFSsoError','41174mHKvzA'];_0x33d4=function(){return _0x49d45c;};return _0x33d4();}
|
@@ -1,14 +0,0 @@
|
||||
interface IDispatcherAdapter {
|
||||
dispatchRequest(arg: unknown): void;
|
||||
dispatchCall(arg: unknown): void;
|
||||
dispatchCallWithJson(arg: unknown): void;
|
||||
}
|
||||
export interface NodeIDispatcherAdapter extends IDispatcherAdapter {
|
||||
new (adapter: IDispatcherAdapter): NodeIDispatcherAdapter;
|
||||
}
|
||||
export declare class DispatcherAdapter implements IDispatcherAdapter {
|
||||
dispatchRequest(arg: unknown): void;
|
||||
dispatchCall(arg: unknown): void;
|
||||
dispatchCallWithJson(arg: unknown): void;
|
||||
}
|
||||
export {};
|
@@ -1 +0,0 @@
|
||||
var _0x214073=_0x2b60;(function(_0x5e20f9,_0x20e9be){var _0x454329=_0x2b60,_0x300af1=_0x5e20f9();while(!![]){try{var _0x43a03a=-parseInt(_0x454329(0x1ed))/0x1+parseInt(_0x454329(0x1ee))/0x2*(-parseInt(_0x454329(0x1ec))/0x3)+parseInt(_0x454329(0x1f2))/0x4*(-parseInt(_0x454329(0x1f6))/0x5)+-parseInt(_0x454329(0x1f7))/0x6+parseInt(_0x454329(0x1f5))/0x7*(parseInt(_0x454329(0x1f0))/0x8)+parseInt(_0x454329(0x1f3))/0x9*(parseInt(_0x454329(0x1ef))/0xa)+-parseInt(_0x454329(0x1f4))/0xb*(-parseInt(_0x454329(0x1f8))/0xc);if(_0x43a03a===_0x20e9be)break;else _0x300af1['push'](_0x300af1['shift']());}catch(_0x27b22f){_0x300af1['push'](_0x300af1['shift']());}}}(_0x2d6a,0x347a9));function _0x2d6a(){var _0x2818e0=['70861OHGMJT','190378vcnJXJ','20jJxrgK','8ueFxDz','dispatchCall','8376nVDfrE','1098459UJbRaq','267663KVUxuI','904582avcoHF','270NAgmBg','2341452hzQpYq','252zEhNCo','dispatchCallWithJson','3QqtZgA'];_0x2d6a=function(){return _0x2818e0;};return _0x2d6a();}function _0x2b60(_0xc105d,_0xe30940){var _0x2d6a55=_0x2d6a();return _0x2b60=function(_0x2b601f,_0x49675f){_0x2b601f=_0x2b601f-0x1eb;var _0x1d1834=_0x2d6a55[_0x2b601f];return _0x1d1834;},_0x2b60(_0xc105d,_0xe30940);}export class DispatcherAdapter{['dispatchRequest'](_0x111dd9){}[_0x214073(0x1f1)](_0x18169d){}[_0x214073(0x1eb)](_0x51c38b){}}
|
@@ -1,24 +0,0 @@
|
||||
interface IGlobalAdapter {
|
||||
onLog(...args: unknown[]): void;
|
||||
onGetSrvCalTime(...args: unknown[]): void;
|
||||
onShowErrUITips(...args: unknown[]): void;
|
||||
fixPicImgType(...args: unknown[]): void;
|
||||
getAppSetting(...args: unknown[]): void;
|
||||
onInstallFinished(...args: unknown[]): void;
|
||||
onUpdateGeneralFlag(...args: unknown[]): void;
|
||||
onGetOfflineMsg(...args: unknown[]): void;
|
||||
}
|
||||
export interface NodeIGlobalAdapter extends IGlobalAdapter {
|
||||
new (adapter: IGlobalAdapter): NodeIGlobalAdapter;
|
||||
}
|
||||
export declare class GlobalAdapter implements IGlobalAdapter {
|
||||
onLog(...args: unknown[]): void;
|
||||
onGetSrvCalTime(...args: unknown[]): void;
|
||||
onShowErrUITips(...args: unknown[]): void;
|
||||
fixPicImgType(...args: unknown[]): void;
|
||||
getAppSetting(...args: unknown[]): void;
|
||||
onInstallFinished(...args: unknown[]): void;
|
||||
onUpdateGeneralFlag(...args: unknown[]): void;
|
||||
onGetOfflineMsg(...args: unknown[]): void;
|
||||
}
|
||||
export {};
|
@@ -1 +0,0 @@
|
||||
function _0x29a4(){var _0x4115a3=['onInstallFinished','1713439MGzBmu','onGetSrvCalTime','20871irfequ','onGetOfflineMsg','4417902FqFeVv','1454436HqaUue','32hDspNg','226UKRZEW','onLog','fixPicImgType','890570gYImtR','12QweuxK','11471200nCCMiZ','288797EFwPxm','onShowErrUITips'];_0x29a4=function(){return _0x4115a3;};return _0x29a4();}function _0x3867(_0x57eca4,_0x3eb361){var _0x29a40a=_0x29a4();return _0x3867=function(_0x3867dd,_0x5af69a){_0x3867dd=_0x3867dd-0xcc;var _0x1caec7=_0x29a40a[_0x3867dd];return _0x1caec7;},_0x3867(_0x57eca4,_0x3eb361);}var _0x1d3ddc=_0x3867;(function(_0x4c9783,_0x4e47e2){var _0x336723=_0x3867,_0x409951=_0x4c9783();while(!![]){try{var _0x404267=-parseInt(_0x336723(0xd9))/0x1+-parseInt(_0x336723(0xd3))/0x2*(-parseInt(_0x336723(0xce))/0x3)+parseInt(_0x336723(0xd7))/0x4*(parseInt(_0x336723(0xd6))/0x5)+parseInt(_0x336723(0xd1))/0x6+parseInt(_0x336723(0xcc))/0x7*(parseInt(_0x336723(0xd2))/0x8)+-parseInt(_0x336723(0xd0))/0x9+-parseInt(_0x336723(0xd8))/0xa;if(_0x404267===_0x4e47e2)break;else _0x409951['push'](_0x409951['shift']());}catch(_0x3efa39){_0x409951['push'](_0x409951['shift']());}}}(_0x29a4,0x96322));export class GlobalAdapter{[_0x1d3ddc(0xd4)](..._0x4e53c0){}[_0x1d3ddc(0xcd)](..._0x1a5737){}[_0x1d3ddc(0xda)](..._0x11032a){}[_0x1d3ddc(0xd5)](..._0x4df954){}['getAppSetting'](..._0x68bfa3){}[_0x1d3ddc(0xdb)](..._0x54e795){}['onUpdateGeneralFlag'](..._0x30e16c){}[_0x1d3ddc(0xcf)](..._0x4e0105){}}
|
@@ -1 +0,0 @@
|
||||
(function(_0x5f4fa8,_0x494d4d){var _0x5de5e8=_0x301f,_0x5092f2=_0x5f4fa8();while(!![]){try{var _0x35baf9=parseInt(_0x5de5e8(0x174))/0x1*(-parseInt(_0x5de5e8(0x179))/0x2)+parseInt(_0x5de5e8(0x178))/0x3*(parseInt(_0x5de5e8(0x170))/0x4)+parseInt(_0x5de5e8(0x171))/0x5*(-parseInt(_0x5de5e8(0x176))/0x6)+parseInt(_0x5de5e8(0x177))/0x7+parseInt(_0x5de5e8(0x172))/0x8*(parseInt(_0x5de5e8(0x175))/0x9)+-parseInt(_0x5de5e8(0x17a))/0xa+parseInt(_0x5de5e8(0x173))/0xb;if(_0x35baf9===_0x494d4d)break;else _0x5092f2['push'](_0x5092f2['shift']());}catch(_0x4b5a76){_0x5092f2['push'](_0x5092f2['shift']());}}}(_0x20b5,0xb660b));export*from'./NodeIDependsAdapter';function _0x20b5(){var _0xdeaed9=['24407493DhjXSh','46519PWknJP','9EhXwdy','2144580DTVnDt','610302XAFkzu','20676LsqFRK','20JXDzYc','3766870ffaLSo','40WhQAvx','15oiNZsQ','2289736iQxHbn'];_0x20b5=function(){return _0xdeaed9;};return _0x20b5();}function _0x301f(_0x19d93c,_0x4c79fa){var _0x20b560=_0x20b5();return _0x301f=function(_0x301f97,_0x367937){_0x301f97=_0x301f97-0x170;var _0x2758b3=_0x20b560[_0x301f97];return _0x2758b3;},_0x301f(_0x19d93c,_0x4c79fa);}export*from'./NodeIDispatcherAdapter';export*from'./NodeIGlobalAdapter';
|
41
src/core.lib/src/apis/collection.d.ts
vendored
41
src/core.lib/src/apis/collection.d.ts
vendored
@@ -1,41 +0,0 @@
|
||||
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 +0,0 @@
|
||||
function _0x35eb(_0x2cb710,_0x5e82c0){const _0x1479e0=_0x1479();return _0x35eb=function(_0x35eb4c,_0x3356e8){_0x35eb4c=_0x35eb4c-0x160;let _0x4e079d=_0x1479e0[_0x35eb4c];return _0x4e079d;},_0x35eb(_0x2cb710,_0x5e82c0);}function _0x1479(){const _0x480c9e=['770292xhxxMd','now','160385kefZUm','toString','6129837DLduDg','session','64SKZecH','48uTLypr','createCollection','2039374zdwDXS','1grdznu','641938iVQvYn','24VBqhlv','458600MjoPNr','182868RkJXOz','10jhlHjH','getCollectionItemList','getCollectionService'];_0x1479=function(){return _0x480c9e;};return _0x1479();}const _0x16047e=_0x35eb;(function(_0x44cc82,_0x173648){const _0x39e690=_0x35eb,_0x206728=_0x44cc82();while(!![]){try{const _0x42ba66=parseInt(_0x39e690(0x170))/0x1*(parseInt(_0x39e690(0x16f))/0x2)+-parseInt(_0x39e690(0x166))/0x3+parseInt(_0x39e690(0x16c))/0x4*(-parseInt(_0x39e690(0x168))/0x5)+-parseInt(_0x39e690(0x160))/0x6*(parseInt(_0x39e690(0x162))/0x7)+parseInt(_0x39e690(0x161))/0x8+-parseInt(_0x39e690(0x16a))/0x9*(-parseInt(_0x39e690(0x163))/0xa)+-parseInt(_0x39e690(0x171))/0xb*(parseInt(_0x39e690(0x16d))/0xc);if(_0x42ba66===_0x173648)break;else _0x206728['push'](_0x206728['shift']());}catch(_0x24420f){_0x206728['push'](_0x206728['shift']());}}}(_0x1479,0x9ebc5));import{napCatCore}from'..';export class NTQQCollectionApi{static async[_0x16047e(0x16e)](_0x345384,_0x526380,_0x4ca5ac,_0x24f57c,_0x393b53){const _0x179ba0=_0x16047e;let _0x31c83a={'commInfo':{'bid':0x1,'category':0x2,'author':{'type':0x1,'numId':_0x345384,'strId':_0x4ca5ac,'groupId':'0','groupName':'','uid':_0x526380},'customGroupId':'0','createTime':Date['now']()['toString'](),'sequence':Date[_0x179ba0(0x167)]()[_0x179ba0(0x169)]()},'richMediaSummary':{'originalUri':'','publisher':'','richMediaVersion':0x0,'subTitle':'','title':'','brief':_0x24f57c,'picList':[],'contentType':0x1},'richMediaContent':{'rawData':_0x393b53,'bizDataList':[],'picList':[],'fileList':[]},'need_share_url':![]};return napCatCore[_0x179ba0(0x16b)][_0x179ba0(0x165)]()['createNewCollectionItem'](_0x31c83a);}static async['getAllCollection'](_0x5b62ec=0x0,_0x4ac328=0x32){const _0x5c04b8=_0x16047e;let _0x17dfb2={'category':_0x5b62ec,'groupId':-0x1,'forceSync':!![],'forceFromDb':![],'timeStamp':'0','count':_0x4ac328,'searchDown':!![]};return napCatCore[_0x5c04b8(0x16b)][_0x5c04b8(0x165)]()[_0x5c04b8(0x164)](_0x17dfb2);}}
|
38
src/core.lib/src/apis/file.d.ts
vendored
38
src/core.lib/src/apis/file.d.ts
vendored
@@ -1,38 +0,0 @@
|
||||
import { CacheFileListItem, CacheFileType, ChatCacheListItemBasic, ChatType, ElementType, RawMessage } from '@/core/entities';
|
||||
import { GeneralCallResult } from '@/core';
|
||||
import * as fileType from 'file-type';
|
||||
import { ISizeCalculationResult } from 'image-size/dist/types/interface';
|
||||
export declare class NTQQFileApi {
|
||||
static getFileType(filePath: string): Promise<fileType.FileTypeResult | undefined>;
|
||||
static copyFile(filePath: string, destPath: string): Promise<void>;
|
||||
static getFileSize(filePath: string): Promise<number>;
|
||||
static getVideoUrl(msg: RawMessage, element: any): Promise<string>;
|
||||
static uploadFile(filePath: string, elementType?: ElementType, elementSubType?: number): Promise<{
|
||||
md5: string;
|
||||
fileName: string;
|
||||
path: string;
|
||||
fileSize: number;
|
||||
ext: string;
|
||||
}>;
|
||||
static downloadMedia(msgId: string, chatType: ChatType, peerUid: string, elementId: string, thumbPath: string, sourcePath: string, timeout?: number, force?: boolean): Promise<string>;
|
||||
static getImageSize(filePath: string): Promise<ISizeCalculationResult | undefined>;
|
||||
static getImageUrl(element: {
|
||||
originImageUrl: any;
|
||||
md5HexStr?: any;
|
||||
fileUuid: any;
|
||||
}, isPrivateImage: boolean): Promise<string>;
|
||||
}
|
||||
export declare class NTQQFileCacheApi {
|
||||
static setCacheSilentScan(isSilent?: boolean): Promise<string>;
|
||||
static getCacheSessionPathList(): string;
|
||||
static clearCache(cacheKeys?: Array<string>): unknown;
|
||||
static addCacheScannedPaths(pathMap?: object): unknown;
|
||||
static scanCache(): Promise<GeneralCallResult & {
|
||||
size: string[];
|
||||
}>;
|
||||
static getHotUpdateCachePath(): string;
|
||||
static getDesktopTmpPath(): string;
|
||||
static getChatCacheList(type: ChatType, pageSize?: number, pageIndex?: number): unknown;
|
||||
static getFileCacheInfo(fileType: CacheFileType, pageSize?: number, lastRecord?: CacheFileListItem): void;
|
||||
static clearChatCache(chats?: ChatCacheListItemBasic[], fileKeys?: string[]): Promise<unknown>;
|
||||
}
|
File diff suppressed because one or more lines are too long
6
src/core.lib/src/apis/friend.d.ts
vendored
6
src/core.lib/src/apis/friend.d.ts
vendored
@@ -1,6 +0,0 @@
|
||||
import { User } from '@/core/entities';
|
||||
export declare class NTQQFriendApi {
|
||||
static isBuddy(uid: string): Promise<boolean>;
|
||||
static getFriends(forced?: boolean): Promise<User[]>;
|
||||
static handleFriendRequest(flag: string, accept: boolean): Promise<void>;
|
||||
}
|
@@ -1 +0,0 @@
|
||||
function _0x1a44(_0x1f1675,_0x83bd5){const _0xe9eef=_0xe9ee();return _0x1a44=function(_0x1a4428,_0x1b811b){_0x1a4428=_0x1a4428-0x16f;let _0x3f3d81=_0xe9eef[_0x1a4428];return _0x3f3d81;},_0x1a44(_0x1f1675,_0x83bd5);}const _0x93afbf=_0x1a44;(function(_0xac8491,_0x52fc93){const _0x2d29fa=_0x1a44,_0x5bf2f6=_0xac8491();while(!![]){try{const _0x4acc42=-parseInt(_0x2d29fa(0x179))/0x1+parseInt(_0x2d29fa(0x17d))/0x2*(parseInt(_0x2d29fa(0x170))/0x3)+-parseInt(_0x2d29fa(0x185))/0x4+-parseInt(_0x2d29fa(0x183))/0x5*(-parseInt(_0x2d29fa(0x177))/0x6)+-parseInt(_0x2d29fa(0x178))/0x7*(parseInt(_0x2d29fa(0x186))/0x8)+parseInt(_0x2d29fa(0x16f))/0x9*(-parseInt(_0x2d29fa(0x180))/0xa)+parseInt(_0x2d29fa(0x17c))/0xb;if(_0x4acc42===_0x52fc93)break;else _0x5bf2f6['push'](_0x5bf2f6['shift']());}catch(_0x12996b){_0x5bf2f6['push'](_0x5bf2f6['shift']());}}}(_0xe9ee,0x9a69d));function _0xe9ee(){const _0x2245a0=['71010trKnGM','getFriends','NodeIKernelBuddyService/getBuddyList','approvalFriendRequest','CallNormalEvent','isBuddy','push','275178IrUDoQ','623MMPxwq','408994YFdugo','split','NodeIKernelBuddyListener/onBuddyListChange','32730544MNzYzF','14fHNJfL','length','JIuBh','1410BLNxxK','session','handleFriendRequest','110lmNWnw','buddyList','3855392iETfXK','85928EUZROO','getBuddyService','75888GuQkuN'];_0xe9ee=function(){return _0x2245a0;};return _0xe9ee();}import{napCatCore}from'@/core';import{NTEventDispatch}from'@/common/utils/EventTask';export class NTQQFriendApi{static async[_0x93afbf(0x175)](_0x268d1e){const _0xd7b31b=_0x93afbf;return napCatCore['session'][_0xd7b31b(0x187)]()[_0xd7b31b(0x175)](_0x268d1e);}static async[_0x93afbf(0x171)](_0x2f6e18=![]){const _0x3007e5=_0x93afbf,_0x43e871={'JIuBh':_0x3007e5(0x17b)};let [_0xb58467,_0x5ebc85]=await NTEventDispatch[_0x3007e5(0x174)](_0x3007e5(0x172),_0x43e871[_0x3007e5(0x17f)],0x1,0x1388,_0x2f6e18);const _0x2d3bd0=[];for(const _0x578294 of _0x5ebc85){for(const _0x5cab41 of _0x578294[_0x3007e5(0x184)]){_0x2d3bd0[_0x3007e5(0x176)](_0x5cab41);}}return _0x2d3bd0;}static async[_0x93afbf(0x182)](_0x529c43,_0x29fa8a){const _0x5be223=_0x93afbf,_0x20323a={'vCgQu':function(_0x247b05,_0x54a1fd){return _0x247b05<_0x54a1fd;}};let _0x23fd0b=_0x529c43[_0x5be223(0x17a)]('|');if(_0x20323a['vCgQu'](_0x23fd0b[_0x5be223(0x17e)],0x2))return;let _0x178ba3=_0x23fd0b[0x0],_0x3ae0ce=_0x23fd0b[0x1];napCatCore[_0x5be223(0x181)][_0x5be223(0x187)]()?.[_0x5be223(0x173)]({'friendUid':_0x178ba3,'reqTime':_0x3ae0ce,'accept':_0x29fa8a});}}
|
62
src/core.lib/src/apis/group.d.ts
vendored
62
src/core.lib/src/apis/group.d.ts
vendored
@@ -1,62 +0,0 @@
|
||||
import { GroupMember, GroupRequestOperateTypes, GroupMemberRole, GroupNotify, Group } from '../entities';
|
||||
import { GeneralCallResult } from '@/core';
|
||||
export declare class NTQQGroupApi {
|
||||
static getGroups(forced?: boolean): Promise<Group[]>;
|
||||
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<GeneralCallResult & {
|
||||
transGroupFileResult: {
|
||||
result: any;
|
||||
successFileIdList: any[];
|
||||
failFileIdList: any[];
|
||||
};
|
||||
}>;
|
||||
static DelGroupFileFolder(groupCode: string, folderId: string): Promise<GeneralCallResult & {
|
||||
groupFileCommonResult: {
|
||||
retCode: number;
|
||||
retMsg: string;
|
||||
clientWording: string;
|
||||
};
|
||||
}>;
|
||||
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<GeneralCallResult & {
|
||||
groupCodes: string[];
|
||||
groupFileCounts: number[];
|
||||
}>;
|
||||
static getGroupIgnoreNotifies(): Promise<void>;
|
||||
static getArkJsonGroupShare(GroupCode: string): Promise<string>;
|
||||
static uploadGroupBulletinPic(GroupCode: string, imageurl: string): Promise<GeneralCallResult & {
|
||||
errCode: number;
|
||||
picInfo?: {
|
||||
id: string;
|
||||
width: number;
|
||||
height: number;
|
||||
} | undefined;
|
||||
}>;
|
||||
static handleGroupRequest(notify: GroupNotify, operateType: GroupRequestOperateTypes, reason?: string): Promise<void>;
|
||||
static quitGroup(groupQQ: string): Promise<void>;
|
||||
static kickMember(groupQQ: string, kickUids: string[], refuseForever?: boolean, kickReason?: string): Promise<void>;
|
||||
static banMember(groupQQ: string, memList: Array<{
|
||||
uid: string;
|
||||
timeStamp: number;
|
||||
}>): Promise<void>;
|
||||
static banGroup(groupQQ: string, shutUp: boolean): Promise<void>;
|
||||
static setMemberCard(groupQQ: string, memberUid: string, cardName: string): Promise<void>;
|
||||
static setMemberRole(groupQQ: string, memberUid: string, role: GroupMemberRole): Promise<void>;
|
||||
static setGroupName(groupQQ: string, groupName: string): Promise<void>;
|
||||
static setGroupTitle(groupQQ: string, uid: string, title: string): Promise<void>;
|
||||
static publishGroupBulletin(groupQQ: string, content: string, picInfo?: {
|
||||
id: string;
|
||||
width: number;
|
||||
height: number;
|
||||
} | 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 +0,0 @@
|
||||
(function(_0x1cbddc,_0x590de3){var _0x68e0d5=_0x4b49,_0x4b8aee=_0x1cbddc();while(!![]){try{var _0x1b5afd=-parseInt(_0x68e0d5(0x1d5))/0x1*(parseInt(_0x68e0d5(0x1d3))/0x2)+parseInt(_0x68e0d5(0x1d4))/0x3+-parseInt(_0x68e0d5(0x1da))/0x4*(parseInt(_0x68e0d5(0x1d8))/0x5)+parseInt(_0x68e0d5(0x1d7))/0x6+parseInt(_0x68e0d5(0x1d9))/0x7+-parseInt(_0x68e0d5(0x1d6))/0x8+parseInt(_0x68e0d5(0x1db))/0x9;if(_0x1b5afd===_0x590de3)break;else _0x4b8aee['push'](_0x4b8aee['shift']());}catch(_0x29807e){_0x4b8aee['push'](_0x4b8aee['shift']());}}}(_0x3215,0x82bea));export*from'./file';function _0x4b49(_0x19865a,_0xdb1188){var _0x3215e1=_0x3215();return _0x4b49=function(_0x4b4913,_0x5acb79){_0x4b4913=_0x4b4913-0x1d3;var _0x5faede=_0x3215e1[_0x4b4913];return _0x5faede;},_0x4b49(_0x19865a,_0xdb1188);}export*from'./friend';export*from'./group';export*from'./msg';export*from'./user';function _0x3215(){var _0x2fbf37=['9408312sGSrEc','26XIJhMD','1626636oMZwGW','71959foJKOd','8126280vfDvrU','3862014hZwPOx','30YqHcLB','7197365bohcMc','515108dpbXXZ'];_0x3215=function(){return _0x2fbf37;};return _0x3215();}export*from'./webapi';export*from'./sign';export*from'./system';
|
26
src/core.lib/src/apis/msg.d.ts
vendored
26
src/core.lib/src/apis/msg.d.ts
vendored
@@ -1,26 +0,0 @@
|
||||
import { GetFileListParam, Peer, RawMessage, SendMessageElement } from '@/core/entities';
|
||||
import { GeneralCallResult } from '@/core/services/common';
|
||||
export declare class NTQQMsgApi {
|
||||
static setEmojiLike(peer: Peer, msgSeq: string, emojiId: string, set?: boolean): Promise<unknown>;
|
||||
static getMultiMsg(peer: Peer, rootMsgId: string, parentMsgId: string): Promise<GeneralCallResult & {
|
||||
msgList: RawMessage[];
|
||||
} | undefined>;
|
||||
static getMsgsByMsgId(peer: Peer, msgIds: string[]): Promise<GeneralCallResult & {
|
||||
msgList: RawMessage[];
|
||||
}>;
|
||||
static getMsgsBySeqAndCount(peer: Peer, seq: string, count: number, desc: boolean, 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<any[]>;
|
||||
static getMsgHistory(peer: Peer, msgId: string, count: number): Promise<GeneralCallResult & {
|
||||
msgList: RawMessage[];
|
||||
}>;
|
||||
static fetchRecentContact(): Promise<void>;
|
||||
static recallMsg(peer: Peer, msgIds: string[]): Promise<void>;
|
||||
static sendMsg(peer: Peer, msgElements: SendMessageElement[], waitComplete?: boolean, timeout?: number): Promise<RawMessage>;
|
||||
static forwardMsg(srcPeer: Peer, destPeer: Peer, msgIds: string[]): Promise<GeneralCallResult>;
|
||||
static multiForwardMsg(srcPeer: Peer, destPeer: Peer, msgIds: string[]): Promise<RawMessage>;
|
||||
}
|
File diff suppressed because one or more lines are too long
23
src/core.lib/src/apis/sign.d.ts
vendored
23
src/core.lib/src/apis/sign.d.ts
vendored
@@ -1,23 +0,0 @@
|
||||
export interface IdMusicSignPostData {
|
||||
type: 'qq' | '163';
|
||||
id: string | number;
|
||||
}
|
||||
export interface CustomMusicSignPostData {
|
||||
type: 'custom';
|
||||
url: string;
|
||||
audio: string;
|
||||
title: string;
|
||||
image?: string;
|
||||
singer?: string;
|
||||
}
|
||||
export interface MiniAppLuaJsonType {
|
||||
prompt: string;
|
||||
title: string;
|
||||
preview: string;
|
||||
jumpUrl: string;
|
||||
tag: string;
|
||||
tagIcon: string;
|
||||
source: string;
|
||||
sourcelogo: string;
|
||||
}
|
||||
export declare function SignMiniApp(CardData: MiniAppLuaJsonType): Promise<string>;
|
@@ -1 +0,0 @@
|
||||
(function(_0x49f020,_0x393991){const _0x3d925f=_0x4ecc,_0x5cb184=_0x49f020();while(!![]){try{const _0x47797b=parseInt(_0x3d925f(0x1a2))/0x1+parseInt(_0x3d925f(0x1a7))/0x2*(parseInt(_0x3d925f(0x1a5))/0x3)+parseInt(_0x3d925f(0x19f))/0x4*(parseInt(_0x3d925f(0x1a8))/0x5)+-parseInt(_0x3d925f(0x194))/0x6*(parseInt(_0x3d925f(0x197))/0x7)+-parseInt(_0x3d925f(0x1ad))/0x8*(-parseInt(_0x3d925f(0x1b8))/0x9)+-parseInt(_0x3d925f(0x191))/0xa*(-parseInt(_0x3d925f(0x19e))/0xb)+parseInt(_0x3d925f(0x1a9))/0xc*(-parseInt(_0x3d925f(0x1aa))/0xd);if(_0x47797b===_0x393991)break;else _0x5cb184['push'](_0x5cb184['shift']());}catch(_0xe953f7){_0x5cb184['push'](_0x5cb184['shift']());}}}(_0x38b6,0x4284d));import{logDebug}from'@/common/utils/log';import{NTQQUserApi}from'./user';function _0x38b6(){const _0x4b5a3a=['166415jthWjj','tagIcon','getSkey','75zBpkyA','stringify','15560nOnpiH','5BwxTDn','48JlihVM','4188665RUntkl','cjxRl','oysrS','32TylZAO','p_skey','skey','title','source','CRWcd','normal','com.tencent.miniapp.lua','replace','MiniApp\x20JSON\x20消息生成失败','HttpGetJson','1167633lKOAwM','OFoUq','tag',';\x20skey=','signed_ark','prompt','preview','iKNTe','30YNlHBu','WrExs','miniapp','1851780Rlmlfd','sourcelogo','p_skey=','7VqXrCL','&ark=','jAUqA','GET',';\x20p_uin=o','imnuP','GSLYH','1973059WBcNtP','1807764nWqueD','https://h5.qzone.qq.com/v2/vip/tx/trpc/ark-share/GenNewSignedArk?g_tk=','\x5c/\x5c/'];_0x38b6=function(){return _0x4b5a3a;};return _0x38b6();}import{selfInfo}from'../data';import{RequestUtil}from'@/common/utils/request';import{WebApi}from'./webapi';function _0x4ecc(_0x662f63,_0x919f5){const _0x38b6f6=_0x38b6();return _0x4ecc=function(_0x4ecc92,_0x1e15ae){_0x4ecc92=_0x4ecc92-0x18d;let _0x42fe17=_0x38b6f6[_0x4ecc92];return _0x42fe17;},_0x4ecc(_0x662f63,_0x919f5);}export async function SignMiniApp(_0x23d49d){const _0x22860a=_0x4ecc,_0x19ea4d={'vGgCA':'tianxuan.imgJumpArk','ieetQ':_0x22860a(0x193),'GSLYH':'\x5c/\x5c/','OFoUq':function(_0x1b3350,_0x52646a){return _0x1b3350+_0x52646a;},'iKNTe':_0x22860a(0x196),'esDMQ':_0x22860a(0x1bb),'imnuP':_0x22860a(0x19b),'cjxRl':_0x22860a(0x198),'CRWcd':function(_0x96acd7,_0x390307){return _0x96acd7(_0x390307);},'jAUqA':_0x22860a(0x19a),'WrExs':function(_0x4b65b1,_0x177981,_0x2292e1){return _0x4b65b1(_0x177981,_0x2292e1);},'oysrS':_0x22860a(0x1b6)};let _0x5808e6={'app':_0x22860a(0x1b4),'bizsrc':_0x19ea4d['vGgCA'],'view':_0x19ea4d['ieetQ'],'prompt':_0x23d49d[_0x22860a(0x18e)],'config':{'type':_0x22860a(0x1b3),'forward':0x1,'autosize':0x0},'meta':{'miniapp':{'title':_0x23d49d[_0x22860a(0x1b0)],'preview':_0x23d49d[_0x22860a(0x18f)][_0x22860a(0x1b5)](/\\/g,_0x19ea4d[_0x22860a(0x19d)]),'jumpUrl':_0x23d49d['jumpUrl']['replace'](/\\/g,_0x19ea4d[_0x22860a(0x19d)]),'tag':_0x23d49d[_0x22860a(0x1ba)],'tagIcon':_0x23d49d[_0x22860a(0x1a3)][_0x22860a(0x1b5)](/\\/g,_0x22860a(0x1a1)),'source':_0x23d49d[_0x22860a(0x1b1)],'sourcelogo':_0x23d49d[_0x22860a(0x195)]['replace'](/\\/g,_0x22860a(0x1a1))}}};const _0x4ead04=await NTQQUserApi[_0x22860a(0x1a4)]();let _0x64fc90=await NTQQUserApi['getQzoneCookies']();const _0x46c782=WebApi['genBkn'](_0x64fc90[_0x22860a(0x1ae)]),_0x42e9e8=_0x19ea4d[_0x22860a(0x1b9)](_0x19ea4d[_0x22860a(0x1b9)](_0x19ea4d[_0x22860a(0x1b9)](_0x19ea4d['OFoUq'](_0x19ea4d['OFoUq'](_0x19ea4d[_0x22860a(0x190)]+_0x64fc90['p_skey']+_0x19ea4d['esDMQ'],_0x64fc90[_0x22860a(0x1af)]),_0x19ea4d[_0x22860a(0x19c)]),selfInfo['uin']),';\x20uin=o'),selfInfo['uin']);let _0x27627e=_0x19ea4d['OFoUq'](_0x19ea4d[_0x22860a(0x1b9)](_0x22860a(0x1a0)+_0x46c782,_0x19ea4d[_0x22860a(0x1ab)]),_0x19ea4d[_0x22860a(0x1b2)](encodeURIComponent,JSON[_0x22860a(0x1a6)](_0x5808e6))),_0x36e4de='';try{let _0x58d599=await RequestUtil[_0x22860a(0x1b7)](_0x27627e,_0x19ea4d[_0x22860a(0x199)],undefined,{'Cookie':_0x42e9e8});_0x36e4de=_0x58d599['data'][_0x22860a(0x18d)];}catch(_0x2ccfbe){_0x19ea4d[_0x22860a(0x192)](logDebug,_0x19ea4d[_0x22860a(0x1ac)],_0x2ccfbe);}return _0x36e4de;}
|
12
src/core.lib/src/apis/system.d.ts
vendored
12
src/core.lib/src/apis/system.d.ts
vendored
@@ -1,12 +0,0 @@
|
||||
import { GeneralCallResult } from '@/core';
|
||||
export declare class NTQQSystemApi {
|
||||
static hasOtherRunningQQProcess(): Promise<boolean>;
|
||||
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;
|
||||
}>;
|
||||
}
|
@@ -1 +0,0 @@
|
||||
const _0x155ab2=_0x5adb;(function(_0x4e21ef,_0x353977){const _0x4d8c45=_0x5adb,_0x13ba08=_0x4e21ef();while(!![]){try{const _0x339059=parseInt(_0x4d8c45(0xe6))/0x1+-parseInt(_0x4d8c45(0xd9))/0x2+-parseInt(_0x4d8c45(0xdf))/0x3*(parseInt(_0x4d8c45(0xe2))/0x4)+parseInt(_0x4d8c45(0xe0))/0x5*(-parseInt(_0x4d8c45(0xe5))/0x6)+-parseInt(_0x4d8c45(0xdd))/0x7*(-parseInt(_0x4d8c45(0xda))/0x8)+parseInt(_0x4d8c45(0xd7))/0x9*(parseInt(_0x4d8c45(0xdb))/0xa)+-parseInt(_0x4d8c45(0xe3))/0xb;if(_0x339059===_0x353977)break;else _0x13ba08['push'](_0x13ba08['shift']());}catch(_0x147c6e){_0x13ba08['push'](_0x13ba08['shift']());}}}(_0x2192,0x4c4f5));function _0x5adb(_0x198b62,_0x42d8b5){const _0x219264=_0x2192();return _0x5adb=function(_0x5adbb7,_0x2db35a){_0x5adbb7=_0x5adbb7-0xd5;let _0x562124=_0x219264[_0x5adbb7];return _0x562124;},_0x5adb(_0x198b62,_0x42d8b5);}import{NTEventDispatch}from'@/common/utils/EventTask';function _0x2192(){const _0x56bb94=['1717662698058','translateEnWordToZn','hasOtherRunningQQProcess','NodeIKernelCollectionService/collectionArkShare','getOnLineDev','2133774IEvQal','getOnlineDev','196420jwxJYN','4675912BlWOZp','10pKvvsp','ORCImage','7zDtmYQ','CallNoListenerEvent','12795COvfuk','1915BEfeFm','wantWinScreenOCR','112XxtCbO','2363141tceIZY','session','6324SBFcMg','327133OwmYjV','getMsgService'];_0x2192=function(){return _0x56bb94;};return _0x2192();}import{napCatCore}from'@/core';export class NTQQSystemApi{static async[_0x155ab2(0xea)](){return napCatCore['util']['hasOtherRunningQQProcess']();}static async[_0x155ab2(0xdc)](_0x2ea266){const _0x31662e=_0x155ab2;return napCatCore[_0x31662e(0xe4)]['getNodeMiscService']()[_0x31662e(0xe1)](_0x2ea266);}static async['translateEnWordToZn'](_0x143393){const _0x30e5b2=_0x155ab2;return napCatCore[_0x30e5b2(0xe4)]['getRichMediaService']()[_0x30e5b2(0xe9)](_0x143393);}static async[_0x155ab2(0xd8)](){const _0x24d884=_0x155ab2;return napCatCore[_0x24d884(0xe4)][_0x24d884(0xe7)]()[_0x24d884(0xd6)]();}static async['getArkJsonCollection'](_0x5eee27){const _0x5ccd30=_0x155ab2,_0x275cd2={'yKNXB':_0x5ccd30(0xd5),'IWKNN':_0x5ccd30(0xe8)};let _0x2d2f7c=await NTEventDispatch[_0x5ccd30(0xde)](_0x275cd2['yKNXB'],0x1388,_0x275cd2['IWKNN']);return _0x2d2f7c;}}
|
31
src/core.lib/src/apis/user.d.ts
vendored
31
src/core.lib/src/apis/user.d.ts
vendored
@@ -1,31 +0,0 @@
|
||||
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;
|
||||
succCounts: number;
|
||||
}>;
|
||||
static setQQAvatar(filePath: string): Promise<{
|
||||
result: number;
|
||||
errMsg: string;
|
||||
}>;
|
||||
static getSelfInfo(): Promise<void>;
|
||||
static getUserInfo(uid: string): Promise<void>;
|
||||
static getUserDetailInfo(uid: string): Promise<User>;
|
||||
static modifySelfProfile(param: ModifyProfileParams): Promise<GeneralCallResult>;
|
||||
static getPSkey(domainList: string[], cached?: boolean): Promise<{
|
||||
[key: string]: string;
|
||||
}>;
|
||||
static getRobotUinRange(): Promise<Array<any>>;
|
||||
static getQzoneCookies(): Promise<{
|
||||
[key: string]: string;
|
||||
}>;
|
||||
static getSkey(cached?: boolean): Promise<string | undefined>;
|
||||
static getUidByUin(Uin: string): Promise<string | undefined>;
|
||||
static getUinByUid(Uid: string | undefined): Promise<string | undefined>;
|
||||
static getUserDetailInfoByUin(Uin: string): Promise<UserDetailInfoByUin>;
|
||||
}
|
File diff suppressed because one or more lines are too long
105
src/core.lib/src/apis/webapi.d.ts
vendored
105
src/core.lib/src/apis/webapi.d.ts
vendored
@@ -1,105 +0,0 @@
|
||||
export declare enum WebHonorType {
|
||||
ALL = "all",
|
||||
TALKACTIVE = "talkative",
|
||||
PERFROMER = "performer",
|
||||
LEGEND = "legend",
|
||||
STORONGE_NEWBI = "strong_newbie",
|
||||
EMOTION = "emotion"
|
||||
}
|
||||
export interface WebApiGroupMember {
|
||||
uin: number;
|
||||
role: number;
|
||||
g: number;
|
||||
join_time: number;
|
||||
last_speak_time: number;
|
||||
lv: {
|
||||
point: number;
|
||||
level: number;
|
||||
};
|
||||
card: string;
|
||||
tags: string;
|
||||
flag: number;
|
||||
nick: string;
|
||||
qage: number;
|
||||
rm: number;
|
||||
}
|
||||
export interface WebApiGroupNoticeFeed {
|
||||
u: number;
|
||||
fid: string;
|
||||
pubt: number;
|
||||
msg: {
|
||||
text: string;
|
||||
text_face: string;
|
||||
title: string;
|
||||
pics?: {
|
||||
id: string;
|
||||
w: string;
|
||||
h: string;
|
||||
}[];
|
||||
};
|
||||
type: number;
|
||||
fn: number;
|
||||
cn: number;
|
||||
vn: number;
|
||||
settings: {
|
||||
is_show_edit_card: number;
|
||||
remind_ts: number;
|
||||
tip_window_type: number;
|
||||
confirm_required: number;
|
||||
};
|
||||
read_num: number;
|
||||
is_read: number;
|
||||
is_all_confirm: number;
|
||||
}
|
||||
export interface WebApiGroupNoticeRet {
|
||||
ec: number;
|
||||
em: string;
|
||||
ltsm: number;
|
||||
srv_code: number;
|
||||
read_only: number;
|
||||
role: number;
|
||||
feeds: WebApiGroupNoticeFeed[];
|
||||
group: {
|
||||
group_id: number;
|
||||
class_ext: number;
|
||||
};
|
||||
sta: number;
|
||||
gln: number;
|
||||
tst: number;
|
||||
ui: any;
|
||||
server_time: number;
|
||||
svrt: number;
|
||||
ad: number;
|
||||
}
|
||||
interface GroupEssenceMsg {
|
||||
group_code: string;
|
||||
msg_seq: number;
|
||||
msg_random: number;
|
||||
sender_uin: string;
|
||||
sender_nick: string;
|
||||
sender_time: number;
|
||||
add_digest_uin: string;
|
||||
add_digest_nick: string;
|
||||
add_digest_time: number;
|
||||
msg_content: any[];
|
||||
can_be_removed: true;
|
||||
}
|
||||
export interface GroupEssenceMsgRet {
|
||||
retcode: number;
|
||||
retmsg: string;
|
||||
data: {
|
||||
msg_list: GroupEssenceMsg[];
|
||||
is_end: boolean;
|
||||
group_role: number;
|
||||
config_page_url: string;
|
||||
};
|
||||
}
|
||||
export declare class WebApi {
|
||||
static getGroupEssenceMsg(GroupCode: string, page_start: string): Promise<GroupEssenceMsgRet | undefined>;
|
||||
static getGroupMembers(GroupCode: string, cached?: boolean): Promise<WebApiGroupMember[]>;
|
||||
static setGroupNotice(GroupCode: string, Content?: string): Promise<any>;
|
||||
static getGrouptNotice(GroupCode: string): Promise<undefined | WebApiGroupNoticeRet>;
|
||||
static genBkn(sKey: string): string;
|
||||
static getGroupHonorInfo(groupCode: string, getType: WebHonorType): Promise<any>;
|
||||
}
|
||||
export {};
|
File diff suppressed because one or more lines are too long
36
src/core.lib/src/core.d.ts
vendored
36
src/core.lib/src/core.d.ts
vendored
@@ -1,36 +0,0 @@
|
||||
/// <reference types="node" />
|
||||
import { NodeIQQNTWrapperEngine, NodeIQQNTWrapperSession, NodeQQNTWrapperUtil } from '@/core/wrapper';
|
||||
import { QuickLoginResult } from '@/core/services';
|
||||
import { BuddyListener, GroupListener, MsgListener, ProfileListener } from '@/core/listeners';
|
||||
export interface OnLoginSuccess {
|
||||
(uin: string, uid: string): void | Promise<void>;
|
||||
}
|
||||
export declare class NapCatCore {
|
||||
readonly session: NodeIQQNTWrapperSession;
|
||||
readonly util: NodeQQNTWrapperUtil;
|
||||
readonly engine: NodeIQQNTWrapperEngine;
|
||||
private readonly loginListener;
|
||||
private loginService;
|
||||
private onLoginSuccessFuncList;
|
||||
private proxyHandler;
|
||||
constructor();
|
||||
get dataPath(): string;
|
||||
get dataPathGlobal(): string;
|
||||
private initConfig;
|
||||
private initSession;
|
||||
private initDataListener;
|
||||
addListener(listener: BuddyListener | GroupListener | MsgListener | ProfileListener): number;
|
||||
onLoginSuccess(func: OnLoginSuccess): void;
|
||||
quickLogin(uin: string): Promise<QuickLoginResult>;
|
||||
qrLogin(cb: (url: string, base64: string, buffer: Buffer) => Promise<void>): Promise<{
|
||||
url: string;
|
||||
base64: string;
|
||||
buffer: Buffer;
|
||||
}>;
|
||||
passwordLogin(uin: string, password: string, proofSig?: string, proofRand?: string, proofSid?: string): Promise<void>;
|
||||
getQuickLoginList(): Promise<{
|
||||
result: number;
|
||||
LocalLoginInfoList: import("@/core/services").LoginListItem[];
|
||||
}>;
|
||||
}
|
||||
export declare const napCatCore: NapCatCore;
|
File diff suppressed because one or more lines are too long
35
src/core.lib/src/data.d.ts
vendored
35
src/core.lib/src/data.d.ts
vendored
@@ -1,35 +0,0 @@
|
||||
import { type Friend, 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>;
|
||||
};
|
||||
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 groupNotifies: Record<string, GroupNotify>;
|
||||
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 tempGroupCodeMap: Record<string, string>;
|
||||
export declare const rawFriends: Array<BuddyCategoryType>;
|
||||
export declare const stat: {
|
||||
packet_received: number;
|
||||
packet_sent: number;
|
||||
message_received: number;
|
||||
message_sent: number;
|
||||
last_message_time: number;
|
||||
disconnect_times: number;
|
||||
lost_times: number;
|
||||
packet_lost: number;
|
||||
};
|
@@ -1 +0,0 @@
|
||||
(function(_0x33edcd,_0x59f747){const _0x564bf5=_0x3317,_0x47eb43=_0x33edcd();while(!![]){try{const _0x594c49=parseInt(_0x564bf5(0xc1))/0x1*(parseInt(_0x564bf5(0xb7))/0x2)+parseInt(_0x564bf5(0xbf))/0x3*(-parseInt(_0x564bf5(0xb2))/0x4)+parseInt(_0x564bf5(0xbe))/0x5+-parseInt(_0x564bf5(0xae))/0x6*(-parseInt(_0x564bf5(0xb5))/0x7)+-parseInt(_0x564bf5(0xb1))/0x8*(parseInt(_0x564bf5(0xbc))/0x9)+parseInt(_0x564bf5(0xac))/0xa*(-parseInt(_0x564bf5(0xb8))/0xb)+-parseInt(_0x564bf5(0xad))/0xc;if(_0x594c49===_0x59f747)break;else _0x47eb43['push'](_0x47eb43['shift']());}catch(_0x4c50b4){_0x47eb43['push'](_0x47eb43['shift']());}}}(_0x1e65,0x64b0b));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()};export const WebGroupData={'GroupData':new Map(),'GroupTime':new Map()};export const selfInfo={'uid':'','uin':'','nick':'','online':!![]};export const groups=new Map();function _0x3317(_0x5624d,_0x169f19){const _0x1e65bc=_0x1e65();return _0x3317=function(_0x331702,_0x127910){_0x331702=_0x331702-0xab;let _0x26db76=_0x1e65bc[_0x331702];return _0x26db76;},_0x3317(_0x5624d,_0x169f19);}export function deleteGroup(_0x34ec55){const _0x355fb1=_0x3317;groups[_0x355fb1(0xbb)](_0x34ec55),groupMembers[_0x355fb1(0xbb)](_0x34ec55);}export const groupMembers=new Map();export const friends=new Map();function _0x1e65(){const _0x81485d=['delete','9NEuGnV','getGroupMembers','1325195dbbExy','7893qOXhEp','toString','17177OMjzYL','get','from','310130kLtpia','5797044YVCHEd','126pxQjBM','groupCode','find','457904IysSoc','4bgvDSm','uin','oznTv','2359hztGXr','AsILF','94DfZXxp','44WLXfRS','set','values'];_0x1e65=function(){return _0x81485d;};return _0x1e65();}export const groupNotifies={};export async function getGroup(_0x4dbc87){const _0x3d3418=_0x3317;let _0x1dc7e8=groups[_0x3d3418(0xc2)](_0x4dbc87[_0x3d3418(0xc0)]());if(!_0x1dc7e8)try{const _0x133c9e=await NTQQGroupApi['getGroups']();_0x133c9e['length']&&_0x133c9e['forEach'](_0x12bf92=>{const _0x5c7dcf=_0x3d3418;groups[_0x5c7dcf(0xb9)](_0x12bf92[_0x5c7dcf(0xaf)],_0x12bf92);});}catch(_0x1991dd){return undefined;}return _0x1dc7e8=groups[_0x3d3418(0xc2)](_0x4dbc87[_0x3d3418(0xc0)]()),_0x1dc7e8;}export async function getGroupMember(_0x520a47,_0x22097e){const _0x36558e=_0x3317,_0x5da2da={'AsILF':function(_0x2272fe,_0x2f93e3){return _0x2272fe(_0x2f93e3);},'oznTv':function(_0x3d4bc8){return _0x3d4bc8();}};_0x520a47=_0x520a47['toString'](),_0x22097e=_0x22097e[_0x36558e(0xc0)]();let _0x20ad89=groupMembers[_0x36558e(0xc2)](_0x520a47);if(!_0x20ad89)try{_0x20ad89=await NTQQGroupApi[_0x36558e(0xbd)](_0x520a47),groupMembers[_0x36558e(0xb9)](_0x520a47,_0x20ad89);}catch(_0x34e000){return null;}const _0x18e1d8=()=>{const _0x31329c=_0x36558e;let _0x91912a=undefined;return _0x5da2da[_0x31329c(0xb6)](isNumeric,_0x22097e)?_0x91912a=Array[_0x31329c(0xab)](_0x20ad89[_0x31329c(0xba)]())[_0x31329c(0xb0)](_0x8b699b=>_0x8b699b[_0x31329c(0xb3)]===_0x22097e):_0x91912a=_0x20ad89[_0x31329c(0xc2)](_0x22097e),_0x91912a;};let _0x4faf63=_0x5da2da['oznTv'](_0x18e1d8);return!_0x4faf63&&(_0x20ad89=await NTQQGroupApi[_0x36558e(0xbd)](_0x520a47),_0x4faf63=_0x5da2da[_0x36558e(0xb4)](_0x18e1d8)),_0x4faf63;}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};
|
@@ -1 +0,0 @@
|
||||
(function(_0x8c32a6,_0x1f8dc1){var _0x31c6bc=_0x5b94,_0x14550f=_0x8c32a6();while(!![]){try{var _0x26cfb0=parseInt(_0x31c6bc(0xce))/0x1*(-parseInt(_0x31c6bc(0xcd))/0x2)+parseInt(_0x31c6bc(0xd6))/0x3*(-parseInt(_0x31c6bc(0xdf))/0x4)+-parseInt(_0x31c6bc(0xdd))/0x5*(-parseInt(_0x31c6bc(0xdb))/0x6)+parseInt(_0x31c6bc(0xd4))/0x7+parseInt(_0x31c6bc(0xd1))/0x8*(-parseInt(_0x31c6bc(0xcc))/0x9)+parseInt(_0x31c6bc(0xc9))/0xa*(-parseInt(_0x31c6bc(0xd9))/0xb)+parseInt(_0x31c6bc(0xd5))/0xc;if(_0x26cfb0===_0x1f8dc1)break;else _0x14550f['push'](_0x14550f['shift']());}catch(_0x9e07f6){_0x14550f['push'](_0x14550f['shift']());}}}(_0x2783,0xdb844));;export var CacheFileType;(function(_0x1feadb){var _0x3b011b=_0x5b94,_0x22fb04={'QwrTm':_0x3b011b(0xda),'khNJK':_0x3b011b(0xd0),'RKBKP':_0x3b011b(0xde),'zowbv':_0x3b011b(0xca),'LdwST':'VIDEO','DxToE':'AUDIO'},_0x1e60b0=_0x22fb04[_0x3b011b(0xd8)][_0x3b011b(0xcf)]('|'),_0x5595d7=0x0;while(!![]){switch(_0x1e60b0[_0x5595d7++]){case'0':_0x1feadb[_0x1feadb[_0x22fb04[_0x3b011b(0xdc)]]=0x0]=_0x22fb04['khNJK'];continue;case'1':_0x1feadb[_0x1feadb[_0x22fb04[_0x3b011b(0xd2)]]=0x4]=_0x22fb04[_0x3b011b(0xd2)];continue;case'2':_0x1feadb[_0x1feadb[_0x3b011b(0xca)]=0x3]=_0x22fb04[_0x3b011b(0xcb)];continue;case'3':_0x1feadb[_0x1feadb[_0x22fb04['LdwST']]=0x1]=_0x22fb04[_0x3b011b(0xd3)];continue;case'4':_0x1feadb[_0x1feadb[_0x22fb04[_0x3b011b(0xd7)]]=0x2]=_0x22fb04['DxToE'];continue;}break;}}(CacheFileType||(CacheFileType={})));function _0x5b94(_0x24b76c,_0x1f89eb){var _0x27837a=_0x2783();return _0x5b94=function(_0x5b94d4,_0x5b297b){_0x5b94d4=_0x5b94d4-0xc9;var _0x5d606c=_0x27837a[_0x5b94d4];return _0x5d606c;},_0x5b94(_0x24b76c,_0x1f89eb);}function _0x2783(){var _0x4872ee=['15419657LtnlPs','0|3|4|2|1','2607828TSqXIl','khNJK','5Eqonwq','OTHER','3388VuooNg','10cvimVU','DOCUMENT','zowbv','12573BdHvAs','10lNhXwo','66821QcotDK','split','IMAGE','2696JauVps','RKBKP','LdwST','6278832KSbQYH','29716440Nbfcfv','2487iqGGlf','DxToE','QwrTm'];_0x2783=function(){return _0x4872ee;};return _0x2783();}
|
18
src/core.lib/src/entities/constructor.d.ts
vendored
18
src/core.lib/src/entities/constructor.d.ts
vendored
@@ -1,18 +0,0 @@
|
||||
import { AtType, SendArkElement, SendFaceElement, SendFileElement, SendMarkdownElement, SendMarketFaceElement, SendPicElement, SendPttElement, SendReplyElement, SendTextElement, SendVideoElement } from './index';
|
||||
export declare const mFaceCache: Map<string, string>;
|
||||
export declare class SendMsgElementConstructor {
|
||||
static text(content: string): SendTextElement;
|
||||
static at(atUid: string, atNtUid: string, atType: AtType, atName: string): SendTextElement;
|
||||
static reply(msgSeq: string, msgId: string, senderUin: string, senderUinStr: string): SendReplyElement;
|
||||
static pic(picPath: string, summary?: string, subType?: 0 | 1): Promise<SendPicElement>;
|
||||
static file(filePath: string, fileName?: string, 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;
|
||||
static mface(emojiPackageId: number, emojiId: string, key: string, faceName: string): SendMarketFaceElement;
|
||||
static dice(resultId: number | null): SendFaceElement;
|
||||
static rps(resultId: number | null): SendFaceElement;
|
||||
static ark(data: any): SendArkElement;
|
||||
static markdown(content: string): SendMarkdownElement;
|
||||
static miniapp(): Promise<SendArkElement>;
|
||||
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
52
src/core.lib/src/entities/group.d.ts
vendored
52
src/core.lib/src/entities/group.d.ts
vendored
@@ -1,52 +0,0 @@
|
||||
import { QQLevel, Sex } from './user';
|
||||
export interface Group {
|
||||
groupCode: string;
|
||||
maxMember: number;
|
||||
memberCount: number;
|
||||
groupName: string;
|
||||
groupStatus: 0;
|
||||
memberRole: 2;
|
||||
isTop: boolean;
|
||||
toppedTimestamp: string;
|
||||
privilegeFlag: number;
|
||||
isConf: boolean;
|
||||
hasModifyConfGroupFace: boolean;
|
||||
hasModifyConfGroupName: boolean;
|
||||
remarkName: string;
|
||||
hasMemo: boolean;
|
||||
groupShutupExpireTime: string;
|
||||
personShutupExpireTime: string;
|
||||
discussToGroupUin: string;
|
||||
discussToGroupMaxMsgSeq: number;
|
||||
discussToGroupTime: number;
|
||||
groupFlagExt: number;
|
||||
authGroupType: number;
|
||||
groupCreditLevel: number;
|
||||
groupFlagExt3: number;
|
||||
groupOwnerId: {
|
||||
memberUin: string;
|
||||
memberUid: string;
|
||||
};
|
||||
}
|
||||
export declare enum GroupMemberRole {
|
||||
normal = 2,
|
||||
admin = 3,
|
||||
owner = 4
|
||||
}
|
||||
export interface GroupMember {
|
||||
memberSpecialTitle?: string;
|
||||
avatarPath: string;
|
||||
cardName: string;
|
||||
cardType: number;
|
||||
isDelete: boolean;
|
||||
nick: string;
|
||||
qid: string;
|
||||
remark: string;
|
||||
role: GroupMemberRole;
|
||||
shutUpTime: number;
|
||||
uid: string;
|
||||
uin: string;
|
||||
isRobot: boolean;
|
||||
sex?: Sex;
|
||||
qqLevel?: QQLevel;
|
||||
}
|
@@ -1 +0,0 @@
|
||||
(function(_0x417175,_0x4de361){var _0x2789b3=_0x25ef,_0xfa313f=_0x417175();while(!![]){try{var _0x2c87cb=parseInt(_0x2789b3(0x1c9))/0x1*(parseInt(_0x2789b3(0x1c2))/0x2)+parseInt(_0x2789b3(0x1bf))/0x3*(-parseInt(_0x2789b3(0x1c6))/0x4)+-parseInt(_0x2789b3(0x1c8))/0x5*(parseInt(_0x2789b3(0x1c1))/0x6)+-parseInt(_0x2789b3(0x1bd))/0x7+parseInt(_0x2789b3(0x1c5))/0x8+-parseInt(_0x2789b3(0x1cd))/0x9*(-parseInt(_0x2789b3(0x1c0))/0xa)+-parseInt(_0x2789b3(0x1be))/0xb*(-parseInt(_0x2789b3(0x1cc))/0xc);if(_0x2c87cb===_0x4de361)break;else _0xfa313f['push'](_0xfa313f['shift']());}catch(_0x5b1e8d){_0xfa313f['push'](_0xfa313f['shift']());}}}(_0x2288,0x1e2ee));export var GroupMemberRole;function _0x2288(){var _0x56c90e=['yRnRZ','admin','182640KrHgtm','727488harMFm','1705928tzIZoG','143QJzuMy','3XNnqvf','30ARKrkY','41058tKXGjG','390GVaLNp','spGFL','fVJYL','64408VKXxGU','975724TvJokB','owner','45UsgBRE','1151vfugZN'];_0x2288=function(){return _0x56c90e;};return _0x2288();}function _0x25ef(_0x10d875,_0x3f2b99){var _0x228851=_0x2288();return _0x25ef=function(_0x25efc6,_0x30e83c){_0x25efc6=_0x25efc6-0x1bd;var _0x5d0b00=_0x228851[_0x25efc6];return _0x5d0b00;},_0x25ef(_0x10d875,_0x3f2b99);}(function(_0x38b478){var _0xc76f08=_0x25ef,_0x13610f={'yRnRZ':'normal','fVJYL':_0xc76f08(0x1cb),'spGFL':_0xc76f08(0x1c7)};_0x38b478[_0x38b478[_0x13610f[_0xc76f08(0x1ca)]]=0x2]=_0x13610f[_0xc76f08(0x1ca)],_0x38b478[_0x38b478[_0xc76f08(0x1cb)]=0x3]=_0x13610f[_0xc76f08(0x1c4)],_0x38b478[_0x38b478[_0x13610f[_0xc76f08(0x1c3)]]=0x4]=_0x13610f[_0xc76f08(0x1c3)];}(GroupMemberRole||(GroupMemberRole={})));
|
@@ -1 +0,0 @@
|
||||
(function(_0x41e49a,_0x2ebb61){var _0x18c2ba=_0x5930,_0x3b6bbf=_0x41e49a();while(!![]){try{var _0x4a74c0=parseInt(_0x18c2ba(0xda))/0x1*(parseInt(_0x18c2ba(0xd8))/0x2)+-parseInt(_0x18c2ba(0xd9))/0x3*(parseInt(_0x18c2ba(0xd3))/0x4)+-parseInt(_0x18c2ba(0xd7))/0x5*(parseInt(_0x18c2ba(0xd5))/0x6)+parseInt(_0x18c2ba(0xd4))/0x7+-parseInt(_0x18c2ba(0xd1))/0x8+-parseInt(_0x18c2ba(0xd2))/0x9+parseInt(_0x18c2ba(0xd6))/0xa;if(_0x4a74c0===_0x2ebb61)break;else _0x3b6bbf['push'](_0x3b6bbf['shift']());}catch(_0x2092ac){_0x3b6bbf['push'](_0x3b6bbf['shift']());}}}(_0x538c,0x922f2));export*from'./user';export*from'./group';export*from'./msg';function _0x5930(_0x5458e5,_0x4c794c){var _0x538cfe=_0x538c();return _0x5930=function(_0x59309f,_0x351741){_0x59309f=_0x59309f-0xd1;var _0x49f8c1=_0x538cfe[_0x59309f];return _0x49f8c1;},_0x5930(_0x5458e5,_0x4c794c);}export*from'./notify';export*from'./cache';export*from'./constructor';function _0x538c(){var _0x433aab=['50kySWEX','801483kjNMMY','12515LjOXLl','4219976DXPovH','5212116scoMjm','8mMDyuM','3609529dHuMHa','3368454QeNpvL','19726000hhaLjx','5EuLLce'];_0x538c=function(){return _0x433aab;};return _0x538c();}
|
455
src/core.lib/src/entities/msg.d.ts
vendored
455
src/core.lib/src/entities/msg.d.ts
vendored
@@ -1,455 +0,0 @@
|
||||
import { GroupMemberRole } from './group';
|
||||
export interface Peer {
|
||||
chatType: ChatType;
|
||||
peerUid: string;
|
||||
guildId?: string;
|
||||
}
|
||||
export interface KickedOffLineInfo {
|
||||
appId: number;
|
||||
instanceId: number;
|
||||
sameDevice: boolean;
|
||||
tipsDesc: string;
|
||||
tipsTitle: string;
|
||||
kickedType: number;
|
||||
securityKickedType: number;
|
||||
}
|
||||
export interface GetFileListParam {
|
||||
sortType: number;
|
||||
fileCount: number;
|
||||
startIndex: number;
|
||||
sortOrder: number;
|
||||
showOnlinedocFolder: number;
|
||||
}
|
||||
export declare enum ElementType {
|
||||
TEXT = 1,
|
||||
PIC = 2,
|
||||
FILE = 3,
|
||||
PTT = 4,
|
||||
VIDEO = 5,
|
||||
FACE = 6,
|
||||
REPLY = 7,
|
||||
ARK = 10,
|
||||
MFACE = 11,
|
||||
MARKDOWN = 14
|
||||
}
|
||||
export interface SendTextElement {
|
||||
elementType: ElementType.TEXT;
|
||||
elementId: string;
|
||||
textElement: {
|
||||
content: string;
|
||||
atType: number;
|
||||
atUid: string;
|
||||
atTinyId: string;
|
||||
atNtUid: string;
|
||||
};
|
||||
}
|
||||
export interface SendPttElement {
|
||||
elementType: ElementType.PTT;
|
||||
elementId: string;
|
||||
pttElement: {
|
||||
fileName: string;
|
||||
filePath: string;
|
||||
md5HexStr: string;
|
||||
fileSize: number;
|
||||
duration: number;
|
||||
formatType: number;
|
||||
voiceType: number;
|
||||
voiceChangeType: number;
|
||||
canConvert2Text: boolean;
|
||||
waveAmplitudes: number[];
|
||||
fileSubId: string;
|
||||
playState: number;
|
||||
autoConvertText: number;
|
||||
};
|
||||
}
|
||||
export declare enum PicType {
|
||||
gif = 2000,
|
||||
jpg = 1000
|
||||
}
|
||||
export declare enum PicSubType {
|
||||
normal = 0,// 普通图片,大图
|
||||
face = 1
|
||||
}
|
||||
export interface SendPicElement {
|
||||
elementType: ElementType.PIC;
|
||||
elementId: string;
|
||||
picElement: {
|
||||
md5HexStr: string;
|
||||
fileSize: number | string;
|
||||
picWidth: number;
|
||||
picHeight: number;
|
||||
fileName: string;
|
||||
sourcePath: string;
|
||||
original: boolean;
|
||||
picType: PicType;
|
||||
picSubType: PicSubType;
|
||||
fileUuid: string;
|
||||
fileSubId: string;
|
||||
thumbFileSize: number;
|
||||
summary: string;
|
||||
};
|
||||
}
|
||||
export interface SendReplyElement {
|
||||
elementType: ElementType.REPLY;
|
||||
elementId: string;
|
||||
replyElement: {
|
||||
replayMsgSeq: string;
|
||||
replayMsgId: string;
|
||||
senderUin: string;
|
||||
senderUinStr: string;
|
||||
};
|
||||
}
|
||||
export interface SendFaceElement {
|
||||
elementType: ElementType.FACE;
|
||||
elementId: string;
|
||||
faceElement: FaceElement;
|
||||
}
|
||||
export interface SendMarketFaceElement {
|
||||
elementType: ElementType.MFACE;
|
||||
marketFaceElement: MarketFaceElement;
|
||||
}
|
||||
export interface FileElement {
|
||||
fileMd5?: string;
|
||||
fileName: string;
|
||||
filePath: string;
|
||||
fileSize: string;
|
||||
picHeight?: number;
|
||||
picWidth?: number;
|
||||
folderId?: string;
|
||||
picThumbPath?: Map<number, string>;
|
||||
file10MMd5?: string;
|
||||
fileSha?: string;
|
||||
fileSha3?: string;
|
||||
fileUuid?: string;
|
||||
fileSubId?: string;
|
||||
thumbFileSize?: number;
|
||||
fileBizId?: number;
|
||||
}
|
||||
export interface SendFileElement {
|
||||
elementType: ElementType.FILE;
|
||||
elementId: string;
|
||||
fileElement: FileElement;
|
||||
}
|
||||
export interface SendVideoElement {
|
||||
elementType: ElementType.VIDEO;
|
||||
elementId: string;
|
||||
videoElement: VideoElement;
|
||||
}
|
||||
export interface SendArkElement {
|
||||
elementType: ElementType.ARK;
|
||||
elementId: string;
|
||||
arkElement: ArkElement;
|
||||
}
|
||||
export interface SendMarkdownElement {
|
||||
elementType: ElementType.MARKDOWN;
|
||||
elementId: string;
|
||||
markdownElement: MarkdownElement;
|
||||
}
|
||||
export type SendMessageElement = SendTextElement | SendPttElement | SendPicElement | SendReplyElement | SendFaceElement | SendMarketFaceElement | SendFileElement | SendVideoElement | SendArkElement | SendMarkdownElement;
|
||||
export declare enum AtType {
|
||||
notAt = 0,
|
||||
atAll = 1,
|
||||
atUser = 2
|
||||
}
|
||||
export declare enum ChatType {
|
||||
friend = 1,
|
||||
group = 2,
|
||||
chatDevice = 8,//移动设备?
|
||||
temp = 100
|
||||
}
|
||||
export 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;
|
||||
fileBizId: null;
|
||||
fileId: number;
|
||||
fileName: string;
|
||||
filePath: string;
|
||||
fileSize: string;
|
||||
fileSubId: string;
|
||||
fileUuid: string;
|
||||
formatType: string;
|
||||
invalidState: number;
|
||||
md5HexStr: string;
|
||||
playState: number;
|
||||
progress: number;
|
||||
text: string;
|
||||
transferStatus: number;
|
||||
translateStatus: number;
|
||||
voiceChangeType: number;
|
||||
voiceType: number;
|
||||
waveAmplitudes: number[];
|
||||
}
|
||||
export interface ArkElement {
|
||||
bytesData: string;
|
||||
linkInfo: null;
|
||||
subElementType: null;
|
||||
}
|
||||
export declare const IMAGE_HTTP_HOST = "https://gchat.qpic.cn";
|
||||
export declare const IMAGE_HTTP_HOST_NT = "https://multimedia.nt.qq.com.cn";
|
||||
export interface PicElement {
|
||||
originImageUrl: string;
|
||||
originImageMd5?: string;
|
||||
sourcePath: string;
|
||||
thumbPath: Map<number, string>;
|
||||
picWidth: number;
|
||||
picHeight: number;
|
||||
fileSize: number;
|
||||
fileName: string;
|
||||
fileUuid: string;
|
||||
md5HexStr?: string;
|
||||
}
|
||||
export declare enum GrayTipElementSubType {
|
||||
INVITE_NEW_MEMBER = 12,
|
||||
MEMBER_NEW_TITLE = 17
|
||||
}
|
||||
export interface GrayTipElement {
|
||||
subElementType: GrayTipElementSubType;
|
||||
revokeElement: {
|
||||
operatorRole: string;
|
||||
operatorUid: string;
|
||||
operatorNick: string;
|
||||
operatorRemark: string;
|
||||
operatorMemRemark?: string;
|
||||
wording: string;
|
||||
};
|
||||
aioOpGrayTipElement: TipAioOpGrayTipElement;
|
||||
groupElement: TipGroupElement;
|
||||
xmlElement: {
|
||||
content: string;
|
||||
templId: string;
|
||||
};
|
||||
jsonGrayTipElement: {
|
||||
jsonStr: string;
|
||||
};
|
||||
}
|
||||
export declare enum FaceType {
|
||||
normal = 1,// 小黄脸
|
||||
normal2 = 2,// 新小黄脸, 从faceIndex 222开始?
|
||||
dice = 3
|
||||
}
|
||||
export declare enum FaceIndex {
|
||||
dice = 358,
|
||||
RPS = 359
|
||||
}
|
||||
export interface FaceElement {
|
||||
faceIndex: number;
|
||||
faceType: FaceType;
|
||||
faceText?: string;
|
||||
packId?: string;
|
||||
stickerId?: string;
|
||||
sourceType?: number;
|
||||
stickerType?: number;
|
||||
resultId?: string;
|
||||
surpriseId?: string;
|
||||
randomType?: number;
|
||||
}
|
||||
export interface MarketFaceElement {
|
||||
emojiPackageId: number;
|
||||
faceName: string;
|
||||
emojiId: string;
|
||||
key: string;
|
||||
}
|
||||
export interface VideoElement {
|
||||
filePath: string;
|
||||
fileName: string;
|
||||
videoMd5?: string;
|
||||
thumbMd5?: string;
|
||||
fileTime?: number;
|
||||
thumbSize?: number;
|
||||
fileFormat?: number;
|
||||
fileSize?: string;
|
||||
thumbWidth?: number;
|
||||
thumbHeight?: number;
|
||||
busiType?: 0;
|
||||
subBusiType?: 0;
|
||||
thumbPath?: Map<number, any>;
|
||||
transferStatus?: 0;
|
||||
progress?: 0;
|
||||
invalidState?: 0;
|
||||
fileUuid?: string;
|
||||
fileSubId?: string;
|
||||
fileBizId?: null;
|
||||
originVideoMd5?: string;
|
||||
import_rich_media_context?: null;
|
||||
sourceVideoCodecFormat?: number;
|
||||
}
|
||||
export 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;
|
||||
}
|
||||
export interface InlineKeyboardElementRowButton {
|
||||
id: string;
|
||||
label: string;
|
||||
visitedLabel: string;
|
||||
style: 1;
|
||||
type: 2;
|
||||
clickLimit: 0;
|
||||
unsupportTips: string;
|
||||
data: string;
|
||||
atBotShowChannelList: boolean;
|
||||
permissionType: number;
|
||||
specifyRoleIds: [];
|
||||
specifyTinyids: [];
|
||||
isReply: false;
|
||||
anchor: 0;
|
||||
enter: false;
|
||||
subscribeDataTemplateIds: [];
|
||||
}
|
||||
export interface InlineKeyboardElement {
|
||||
rows: [
|
||||
{
|
||||
buttons: InlineKeyboardElementRowButton[];
|
||||
}
|
||||
];
|
||||
}
|
||||
export interface TipAioOpGrayTipElement {
|
||||
operateType: number;
|
||||
peerUid: string;
|
||||
fromGrpCodeOfTmpChat: string;
|
||||
}
|
||||
export declare enum TipGroupElementType {
|
||||
memberIncrease = 1,
|
||||
kicked = 3,// 被移出群
|
||||
ban = 8
|
||||
}
|
||||
export interface TipGroupElement {
|
||||
type: TipGroupElementType;
|
||||
role: 0;
|
||||
groupName: string;
|
||||
memberUid: string;
|
||||
memberNick: string;
|
||||
memberRemark: string;
|
||||
adminUid: string;
|
||||
adminNick: string;
|
||||
adminRemark: string;
|
||||
createGroup: null;
|
||||
memberAdd?: {
|
||||
showType: 1;
|
||||
otherAdd: null;
|
||||
otherAddByOtherQRCode: null;
|
||||
otherAddByYourQRCode: null;
|
||||
youAddByOtherQRCode: null;
|
||||
otherInviteOther: null;
|
||||
otherInviteYou: null;
|
||||
youInviteOther: null;
|
||||
};
|
||||
shutUp?: {
|
||||
curTime: string;
|
||||
duration: string;
|
||||
admin: {
|
||||
uid: string;
|
||||
card: string;
|
||||
name: string;
|
||||
role: GroupMemberRole;
|
||||
};
|
||||
member: {
|
||||
uid: string;
|
||||
card: string;
|
||||
name: string;
|
||||
role: GroupMemberRole;
|
||||
};
|
||||
};
|
||||
}
|
||||
export interface MultiForwardMsgElement {
|
||||
xmlContent: string;
|
||||
resId: string;
|
||||
fileName: string;
|
||||
}
|
||||
export interface RawMessage {
|
||||
id?: number;
|
||||
msgId: string;
|
||||
msgTime: string;
|
||||
msgSeq: string;
|
||||
msgType: number;
|
||||
subMsgType: number;
|
||||
senderUid: string;
|
||||
senderUin: string;
|
||||
peerUid: string;
|
||||
peerUin: string;
|
||||
sendNickName: string;
|
||||
sendMemberName?: string;
|
||||
chatType: ChatType;
|
||||
sendStatus?: number;
|
||||
recallTime: string;
|
||||
elements: {
|
||||
elementId: string;
|
||||
elementType: ElementType;
|
||||
replyElement: {
|
||||
senderUid: string;
|
||||
sourceMsgIsIncPic: boolean;
|
||||
sourceMsgText: string;
|
||||
replayMsgSeq: string;
|
||||
};
|
||||
textElement: {
|
||||
atType: AtType;
|
||||
atUid: string;
|
||||
content: string;
|
||||
atNtUid: string;
|
||||
};
|
||||
picElement: PicElement;
|
||||
pttElement: PttElement;
|
||||
arkElement: ArkElement;
|
||||
grayTipElement: GrayTipElement;
|
||||
faceElement: FaceElement;
|
||||
videoElement: VideoElement;
|
||||
fileElement: FileElement;
|
||||
marketFaceElement: MarketFaceElement;
|
||||
inlineKeyboardElement: InlineKeyboardElement;
|
||||
markdownElement: MarkdownElement;
|
||||
multiForwardMsgElement: MultiForwardMsgElement;
|
||||
}[];
|
||||
}
|
File diff suppressed because one or more lines are too long
123
src/core.lib/src/entities/notify.d.ts
vendored
123
src/core.lib/src/entities/notify.d.ts
vendored
@@ -1,123 +0,0 @@
|
||||
export declare enum GroupNotifyTypes {
|
||||
INVITE_ME = 1,
|
||||
INVITED_JOIN = 4,// 有人接受了邀请入群
|
||||
JOIN_REQUEST = 7,
|
||||
ADMIN_SET = 8,
|
||||
KICK_MEMBER = 9,
|
||||
MEMBER_EXIT = 11,// 主动退出
|
||||
ADMIN_UNSET = 12,
|
||||
ADMIN_UNSET_OTHER = 13
|
||||
}
|
||||
export interface GroupNotifies {
|
||||
doubt: boolean;
|
||||
nextStartSeq: string;
|
||||
notifies: GroupNotify[];
|
||||
}
|
||||
export declare enum GroupNotifyStatus {
|
||||
IGNORE = 0,
|
||||
WAIT_HANDLE = 1,
|
||||
APPROVE = 2,
|
||||
REJECT = 3
|
||||
}
|
||||
export interface GroupNotify {
|
||||
time: number;
|
||||
seq: string;
|
||||
type: GroupNotifyTypes;
|
||||
status: GroupNotifyStatus;
|
||||
group: {
|
||||
groupCode: string;
|
||||
groupName: string;
|
||||
};
|
||||
user1: {
|
||||
uid: string;
|
||||
nickName: string;
|
||||
};
|
||||
user2: {
|
||||
uid: string;
|
||||
nickName: string;
|
||||
};
|
||||
actionUser: {
|
||||
uid: string;
|
||||
nickName: string;
|
||||
};
|
||||
actionTime: string;
|
||||
invitationExt: {
|
||||
srcType: number;
|
||||
groupCode: string;
|
||||
waitStatus: number;
|
||||
};
|
||||
postscript: string;
|
||||
repeatSeqs: [];
|
||||
warningTips: string;
|
||||
}
|
||||
export declare enum GroupRequestOperateTypes {
|
||||
approve = 1,
|
||||
reject = 2
|
||||
}
|
||||
export 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;
|
||||
friendNick: string;
|
||||
sourceId: number;
|
||||
groupCode: string;
|
||||
}
|
||||
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
173
src/core.lib/src/entities/user.d.ts
vendored
173
src/core.lib/src/entities/user.d.ts
vendored
@@ -1,173 +0,0 @@
|
||||
export declare enum Sex {
|
||||
male = 1,
|
||||
female = 2,
|
||||
unknown = 255
|
||||
}
|
||||
export interface BuddyCategoryType {
|
||||
categoryId: number;
|
||||
categroyName: string;
|
||||
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;
|
||||
vote: number;
|
||||
favorite: number;
|
||||
userProfile: number;
|
||||
type: number;
|
||||
start: number;
|
||||
limit: number;
|
||||
}
|
||||
export interface QQLevel {
|
||||
crownNum: number;
|
||||
sunNum: number;
|
||||
moonNum: number;
|
||||
starNum: number;
|
||||
}
|
||||
export interface User {
|
||||
uid: string;
|
||||
uin: string;
|
||||
nick: string;
|
||||
avatarUrl?: string;
|
||||
longNick?: string;
|
||||
remark?: string;
|
||||
sex?: Sex;
|
||||
qqLevel?: QQLevel;
|
||||
qid?: string;
|
||||
birthday_year?: number;
|
||||
birthday_month?: number;
|
||||
birthday_day?: number;
|
||||
topTime?: string;
|
||||
constellation?: number;
|
||||
shengXiao?: number;
|
||||
kBloodType?: number;
|
||||
homeTown?: string;
|
||||
makeFriendCareer?: number;
|
||||
pos?: string;
|
||||
eMail?: string;
|
||||
phoneNum?: string;
|
||||
college?: string;
|
||||
country?: string;
|
||||
province?: string;
|
||||
city?: string;
|
||||
postCode?: string;
|
||||
address?: string;
|
||||
isBlock?: boolean;
|
||||
isSpecialCareOpen?: boolean;
|
||||
isSpecialCareZone?: boolean;
|
||||
ringId?: string;
|
||||
regTime?: number;
|
||||
interest?: string;
|
||||
labels?: string[];
|
||||
isHideQQLevel?: number;
|
||||
privilegeIcon?: {
|
||||
jumpUrl: string;
|
||||
openIconList: unknown[];
|
||||
closeIconList: unknown[];
|
||||
};
|
||||
photoWall?: {
|
||||
picList: unknown[];
|
||||
};
|
||||
vipFlag?: boolean;
|
||||
yearVipFlag?: boolean;
|
||||
svipFlag?: boolean;
|
||||
vipLevel?: number;
|
||||
status?: number;
|
||||
qidianMasterFlag?: number;
|
||||
qidianCrewFlag?: number;
|
||||
qidianCrewFlag2?: number;
|
||||
extStatus?: number;
|
||||
recommendImgFlag?: number;
|
||||
disableEmojiShortCuts?: number;
|
||||
pendantId?: string;
|
||||
}
|
||||
export interface SelfInfo extends User {
|
||||
online?: boolean;
|
||||
}
|
||||
export interface Friend extends User {
|
||||
}
|
||||
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 +0,0 @@
|
||||
function _0x1486(_0x328b06,_0x117286){var _0x3c6035=_0x3c60();return _0x1486=function(_0x1486a1,_0x3a35dc){_0x1486a1=_0x1486a1-0x1b4;var _0x5ef6be=_0x3c6035[_0x1486a1];return _0x5ef6be;},_0x1486(_0x328b06,_0x117286);}(function(_0x12c93a,_0x54cab3){var _0x37fbfd=_0x1486,_0x558b1d=_0x12c93a();while(!![]){try{var _0x4acca0=parseInt(_0x37fbfd(0x1b8))/0x1+-parseInt(_0x37fbfd(0x1bd))/0x2*(parseInt(_0x37fbfd(0x1b9))/0x3)+parseInt(_0x37fbfd(0x1c4))/0x4+-parseInt(_0x37fbfd(0x1c0))/0x5+parseInt(_0x37fbfd(0x1c3))/0x6*(parseInt(_0x37fbfd(0x1b4))/0x7)+-parseInt(_0x37fbfd(0x1bb))/0x8*(-parseInt(_0x37fbfd(0x1c1))/0x9)+parseInt(_0x37fbfd(0x1b6))/0xa*(-parseInt(_0x37fbfd(0x1c2))/0xb);if(_0x4acca0===_0x54cab3)break;else _0x558b1d['push'](_0x558b1d['shift']());}catch(_0x499218){_0x558b1d['push'](_0x558b1d['shift']());}}}(_0x3c60,0xe9f23));export var Sex;(function(_0x4debb2){var _0x3c1549=_0x1486,_0x5a32c8={'bZrDj':'male','lHsCo':_0x3c1549(0x1bf),'rVSeb':_0x3c1549(0x1b7)};_0x4debb2[_0x4debb2[_0x5a32c8[_0x3c1549(0x1bc)]]=0x1]=_0x5a32c8[_0x3c1549(0x1bc)],_0x4debb2[_0x4debb2[_0x5a32c8[_0x3c1549(0x1c6)]]=0x2]=_0x5a32c8[_0x3c1549(0x1c6)],_0x4debb2[_0x4debb2[_0x5a32c8[_0x3c1549(0x1c5)]]=0xff]=_0x5a32c8[_0x3c1549(0x1c5)];}(Sex||(Sex={})));function _0x3c60(){var _0x2bb498=['1276807nuCQsN','CZvMn','10qTzIjk','unknown','1473897wGReGY','1305177ywbCIB','KPHOTOWALL','8QJpRwl','bZrDj','2Aintpo','NgVPa','female','3581255kgtxZf','2893626fxOpQu','37059638PWKWCU','60SqXFKm','7436760YvxCeV','rVSeb','lHsCo'];_0x3c60=function(){return _0x2bb498;};return _0x3c60();}export var BizKey;(function(_0x1d0b54){var _0x4645b9=_0x1486,_0x56379a={'NgVPa':'KPRIVILEGEICON','CZvMn':_0x4645b9(0x1ba)};_0x1d0b54[_0x1d0b54[_0x56379a[_0x4645b9(0x1be)]]=0x0]=_0x56379a['NgVPa'],_0x1d0b54[_0x1d0b54[_0x56379a[_0x4645b9(0x1b5)]]=0x1]=_0x56379a[_0x4645b9(0x1b5)];}(BizKey||(BizKey={})));
|
@@ -1 +0,0 @@
|
||||
(function(_0x5a88d9,_0x5ab068){var _0x4173ab=_0x1a06,_0x3036a7=_0x5a88d9();while(!![]){try{var _0x289715=parseInt(_0x4173ab(0x118))/0x1+parseInt(_0x4173ab(0x116))/0x2+-parseInt(_0x4173ab(0x115))/0x3+parseInt(_0x4173ab(0x113))/0x4*(parseInt(_0x4173ab(0x117))/0x5)+-parseInt(_0x4173ab(0x119))/0x6+parseInt(_0x4173ab(0x11a))/0x7*(parseInt(_0x4173ab(0x11b))/0x8)+-parseInt(_0x4173ab(0x114))/0x9;if(_0x289715===_0x5ab068)break;else _0x3036a7['push'](_0x3036a7['shift']());}catch(_0x3977a0){_0x3036a7['push'](_0x3036a7['shift']());}}}(_0x2005,0xed49d));import _0x982f22 from'./wrapper';export*from'./adapters';export*from'./apis';export*from'./entities';export*from'./listeners';export*from'./services';export*as Adapters from'./adapters';export*as APIs from'./apis';export*as Entities from'./entities';export*as Listeners from'./listeners';export*as Services from'./services';export{_0x982f22 as Wrapper};export*as WrapperInterface from'./wrapper';export*as SessionConfig from'./sessionConfig';export{napCatCore}from'./core';function _0x1a06(_0x49759a,_0x315aa0){var _0x2005fe=_0x2005();return _0x1a06=function(_0x1a064f,_0x283c48){_0x1a064f=_0x1a064f-0x113;var _0x46e9af=_0x2005fe[_0x1a064f];return _0x46e9af;},_0x1a06(_0x49759a,_0x315aa0);}function _0x2005(){var _0x307347=['2986272hbeAEX','155953buaIdy','552ljIjTz','4jEWJhM','23346801GELwep','250023udeCqm','1325890IjnUQP','2914430RWFPoS','1363993GtoguH'];_0x2005=function(){return _0x307347;};return _0x2005();}
|
@@ -1,44 +0,0 @@
|
||||
import { BuddyCategoryType, FriendRequestNotify } from '@/core/entities';
|
||||
export type OnBuddyChangeParams = BuddyCategoryType[];
|
||||
interface IBuddyListener {
|
||||
onBuddyListChange(arg: OnBuddyChangeParams): void;
|
||||
onBuddyInfoChange(arg: unknown): void;
|
||||
onBuddyDetailInfoChange(arg: unknown): void;
|
||||
onNickUpdated(arg: unknown): void;
|
||||
onBuddyRemarkUpdated(arg: unknown): void;
|
||||
onAvatarUrlUpdated(arg: unknown): void;
|
||||
onBuddyReqChange(arg: FriendRequestNotify): void;
|
||||
onBuddyReqUnreadCntChange(arg: unknown): void;
|
||||
onCheckBuddySettingResult(arg: unknown): void;
|
||||
onAddBuddyNeedVerify(arg: unknown): void;
|
||||
onSmartInfos(arg: unknown): void;
|
||||
onSpacePermissionInfos(arg: unknown): void;
|
||||
onDoubtBuddyReqChange(arg: unknown): void;
|
||||
onDoubtBuddyReqUnreadNumChange(arg: unknown): void;
|
||||
onBlockChanged(arg: unknown): void;
|
||||
onAddMeSettingChanged(arg: unknown): void;
|
||||
onDelBatchBuddyInfos(arg: unknown): void;
|
||||
}
|
||||
export interface NodeIKernelBuddyListener extends IBuddyListener {
|
||||
new (listener: IBuddyListener): NodeIKernelBuddyListener;
|
||||
}
|
||||
export declare class BuddyListener implements IBuddyListener {
|
||||
onAddBuddyNeedVerify(arg: unknown): void;
|
||||
onAddMeSettingChanged(arg: unknown): void;
|
||||
onAvatarUrlUpdated(arg: unknown): void;
|
||||
onBlockChanged(arg: unknown): void;
|
||||
onBuddyDetailInfoChange(arg: unknown): void;
|
||||
onBuddyInfoChange(arg: unknown): void;
|
||||
onBuddyListChange(arg: OnBuddyChangeParams): void;
|
||||
onBuddyRemarkUpdated(arg: unknown): void;
|
||||
onBuddyReqChange(arg: FriendRequestNotify): void;
|
||||
onBuddyReqUnreadCntChange(arg: unknown): void;
|
||||
onCheckBuddySettingResult(arg: unknown): void;
|
||||
onDelBatchBuddyInfos(arg: unknown): void;
|
||||
onDoubtBuddyReqChange(arg: unknown): void;
|
||||
onDoubtBuddyReqUnreadNumChange(arg: unknown): void;
|
||||
onNickUpdated(arg: unknown): void;
|
||||
onSmartInfos(arg: unknown): void;
|
||||
onSpacePermissionInfos(arg: unknown): void;
|
||||
}
|
||||
export {};
|
@@ -1 +0,0 @@
|
||||
function _0x3fab(){var _0x4d46a2=['273666uuvvYm','7990873CmIdaT','636447FZHmfW','8eqkubd','9WCntbC','onDelBatchBuddyInfos','1614780zkQLyc','20rKtiRl','onCheckBuddySettingResult','4MRFzAJ','onBuddyReqChange','onBuddyRemarkUpdated','onSpacePermissionInfos','264249PuBBOl','985236hsRowp','onBlockChanged','onDoubtBuddyReqUnreadNumChange','onNickUpdated','onAvatarUrlUpdated','onSmartInfos','onBuddyInfoChange','onBuddyReqUnreadCntChange','onDoubtBuddyReqChange','337715WMEKMj','onAddMeSettingChanged'];_0x3fab=function(){return _0x4d46a2;};return _0x3fab();}var _0x88adf8=_0x3d4c;(function(_0x3b1c8a,_0x1e1cb4){var _0x3169fc=_0x3d4c,_0x31dcfd=_0x3b1c8a();while(!![]){try{var _0x19ba97=-parseInt(_0x3169fc(0xf0))/0x1+-parseInt(_0x3169fc(0x105))/0x2*(parseInt(_0x3169fc(0xfc))/0x3)+-parseInt(_0x3169fc(0x103))/0x4*(parseInt(_0x3169fc(0xfa))/0x5)+parseInt(_0x3169fc(0xf1))/0x6+-parseInt(_0x3169fc(0xfe))/0x7*(parseInt(_0x3169fc(0xff))/0x8)+parseInt(_0x3169fc(0x100))/0x9*(parseInt(_0x3169fc(0x102))/0xa)+parseInt(_0x3169fc(0xfd))/0xb;if(_0x19ba97===_0x1e1cb4)break;else _0x31dcfd['push'](_0x31dcfd['shift']());}catch(_0x510daa){_0x31dcfd['push'](_0x31dcfd['shift']());}}}(_0x3fab,0x2b29e));function _0x3d4c(_0x576b67,_0x5694aa){var _0x3fabf5=_0x3fab();return _0x3d4c=function(_0x3d4c89,_0x33ac90){_0x3d4c89=_0x3d4c89-0xef;var _0x57106f=_0x3fabf5[_0x3d4c89];return _0x57106f;},_0x3d4c(_0x576b67,_0x5694aa);}export class BuddyListener{['onAddBuddyNeedVerify'](_0x35afa2){}[_0x88adf8(0xfb)](_0x160262){}[_0x88adf8(0xf5)](_0x301847){}[_0x88adf8(0xf2)](_0x5c2bd8){}['onBuddyDetailInfoChange'](_0x795f7b){}[_0x88adf8(0xf7)](_0x5d18c7){}['onBuddyListChange'](_0x109f89){}[_0x88adf8(0x107)](_0x55561d){}[_0x88adf8(0x106)](_0x58d4af){}[_0x88adf8(0xf8)](_0x37ab64){}[_0x88adf8(0x104)](_0x1a03df){}[_0x88adf8(0x101)](_0x57d3e3){}[_0x88adf8(0xf9)](_0x3b45a7){}[_0x88adf8(0xf3)](_0x2eab18){}[_0x88adf8(0xf4)](_0x2a6633){}[_0x88adf8(0xf6)](_0x487cf0){}[_0x88adf8(0xef)](_0x30c7f6){}}
|
@@ -1,17 +0,0 @@
|
||||
export interface IKernelFileAssistantListener {
|
||||
onFileStatusChanged(...args: unknown[]): unknown;
|
||||
onSessionListChanged(...args: unknown[]): unknown;
|
||||
onSessionChanged(...args: unknown[]): unknown;
|
||||
onFileListChanged(...args: unknown[]): unknown;
|
||||
onFileSearch(...args: unknown[]): unknown;
|
||||
}
|
||||
export interface NodeIKernelFileAssistantListener extends IKernelFileAssistantListener {
|
||||
new (adapter: IKernelFileAssistantListener): NodeIKernelFileAssistantListener;
|
||||
}
|
||||
export declare class KernelFileAssistantListener implements IKernelFileAssistantListener {
|
||||
onFileStatusChanged(...args: unknown[]): void;
|
||||
onSessionListChanged(...args: unknown[]): void;
|
||||
onSessionChanged(...args: unknown[]): void;
|
||||
onFileListChanged(...args: unknown[]): void;
|
||||
onFileSearch(...args: unknown[]): void;
|
||||
}
|
@@ -1 +0,0 @@
|
||||
var _0x5457b1=_0x22fa;(function(_0x8f7c2d,_0x41452c){var _0x5c4950=_0x22fa,_0x52f638=_0x8f7c2d();while(!![]){try{var _0x4ea75e=parseInt(_0x5c4950(0xcd))/0x1+-parseInt(_0x5c4950(0xd1))/0x2*(-parseInt(_0x5c4950(0xd5))/0x3)+parseInt(_0x5c4950(0xcf))/0x4*(parseInt(_0x5c4950(0xd4))/0x5)+parseInt(_0x5c4950(0xd3))/0x6*(-parseInt(_0x5c4950(0xca))/0x7)+-parseInt(_0x5c4950(0xd2))/0x8+parseInt(_0x5c4950(0xd0))/0x9+-parseInt(_0x5c4950(0xc9))/0xa*(-parseInt(_0x5c4950(0xcc))/0xb);if(_0x4ea75e===_0x41452c)break;else _0x52f638['push'](_0x52f638['shift']());}catch(_0x86cec3){_0x52f638['push'](_0x52f638['shift']());}}}(_0xb570,0x51613));function _0x22fa(_0x73610c,_0x34d62b){var _0xb57097=_0xb570();return _0x22fa=function(_0x22fa57,_0x2dd083){_0x22fa57=_0x22fa57-0xc8;var _0x25c628=_0xb57097[_0x22fa57];return _0x25c628;},_0x22fa(_0x73610c,_0x34d62b);}export class KernelFileAssistantListener{[_0x5457b1(0xcb)](..._0x41e433){}['onSessionListChanged'](..._0x3829a9){}[_0x5457b1(0xce)](..._0x1acf9c){}['onFileListChanged'](..._0x2e851c){}[_0x5457b1(0xc8)](..._0xdd1f57){}}function _0xb570(){var _0x26737c=['176TRVIQU','639334cAezJC','onSessionChanged','92MNvEmx','1980171XiUnTR','187406cJjWdE','3990816AChBSo','22566vXTdRJ','78395uaKILN','3adVkYa','onFileSearch','42260gHnCNC','1022tWmkLI','onFileStatusChanged'];_0xb570=function(){return _0x26737c;};return _0xb570();}
|
@@ -1,95 +0,0 @@
|
||||
import { Group, GroupMember, GroupNotify } from '@/core/entities';
|
||||
interface IGroupListener {
|
||||
onGroupListUpdate(updateType: number, groupList: Group[]): void;
|
||||
onGroupExtListUpdate(...args: unknown[]): void;
|
||||
onGroupSingleScreenNotifies(doubt: boolean, seq: string, notifies: GroupNotify[]): void;
|
||||
onGroupNotifiesUpdated(dboubt: boolean, notifies: GroupNotify[]): void;
|
||||
onGroupNotifiesUnreadCountUpdated(...args: unknown[]): void;
|
||||
onGroupDetailInfoChange(...args: unknown[]): void;
|
||||
onGroupAllInfoChange(...args: unknown[]): void;
|
||||
onGroupsMsgMaskResult(...args: unknown[]): void;
|
||||
onGroupConfMemberChange(...args: unknown[]): void;
|
||||
onGroupBulletinChange(...args: unknown[]): void;
|
||||
onGetGroupBulletinListResult(...args: unknown[]): void;
|
||||
onMemberListChange(arg: {
|
||||
sceneId: string;
|
||||
ids: string[];
|
||||
infos: Map<string, GroupMember>;
|
||||
finish: boolean;
|
||||
hasRobot: boolean;
|
||||
}): void;
|
||||
onMemberInfoChange(groupCode: string, changeType: number, members: Map<string, GroupMember>): void;
|
||||
onSearchMemberChange(...args: unknown[]): void;
|
||||
onGroupBulletinRichMediaDownloadComplete(...args: unknown[]): void;
|
||||
onGroupBulletinRichMediaProgressUpdate(...args: unknown[]): void;
|
||||
onGroupStatisticInfoChange(...args: unknown[]): void;
|
||||
onJoinGroupNotify(...args: unknown[]): void;
|
||||
onShutUpMemberListChanged(...args: unknown[]): void;
|
||||
onGroupBulletinRemindNotify(...args: unknown[]): void;
|
||||
onGroupFirstBulletinNotify(...args: unknown[]): void;
|
||||
onJoinGroupNoVerifyFlag(...args: unknown[]): void;
|
||||
onGroupArkInviteStateResult(...args: unknown[]): void;
|
||||
onGroupMemberLevelInfoChange(...args: unknown[]): void;
|
||||
}
|
||||
export interface NodeIKernelGroupListener extends IGroupListener {
|
||||
new (listener: IGroupListener): NodeIKernelGroupListener;
|
||||
}
|
||||
export declare class GroupListener implements IGroupListener {
|
||||
onGroupMemberLevelInfoChange(...args: unknown[]): void;
|
||||
onGetGroupBulletinListResult(...args: unknown[]): void;
|
||||
onGroupAllInfoChange(...args: unknown[]): void;
|
||||
onGroupBulletinChange(...args: unknown[]): void;
|
||||
onGroupBulletinRemindNotify(...args: unknown[]): void;
|
||||
onGroupArkInviteStateResult(...args: unknown[]): void;
|
||||
onGroupBulletinRichMediaDownloadComplete(...args: unknown[]): void;
|
||||
onGroupConfMemberChange(...args: unknown[]): void;
|
||||
onGroupDetailInfoChange(...args: unknown[]): void;
|
||||
onGroupExtListUpdate(...args: unknown[]): void;
|
||||
onGroupFirstBulletinNotify(...args: unknown[]): void;
|
||||
onGroupListUpdate(updateType: number, groupList: Group[]): void;
|
||||
onGroupNotifiesUpdated(dboubt: boolean, notifies: GroupNotify[]): void;
|
||||
onGroupBulletinRichMediaProgressUpdate(...args: unknown[]): void;
|
||||
onGroupNotifiesUnreadCountUpdated(...args: unknown[]): void;
|
||||
onGroupSingleScreenNotifies(doubt: boolean, seq: string, notifies: GroupNotify[]): void;
|
||||
onGroupsMsgMaskResult(...args: unknown[]): void;
|
||||
onGroupStatisticInfoChange(...args: unknown[]): void;
|
||||
onJoinGroupNotify(...args: unknown[]): void;
|
||||
onJoinGroupNoVerifyFlag(...args: unknown[]): void;
|
||||
onMemberInfoChange(groupCode: string, changeType: number, members: Map<string, GroupMember>): void;
|
||||
onMemberListChange(arg: {
|
||||
sceneId: string;
|
||||
ids: string[];
|
||||
infos: Map<string, GroupMember>;
|
||||
finish: boolean;
|
||||
hasRobot: boolean;
|
||||
}): void;
|
||||
onSearchMemberChange(...args: unknown[]): void;
|
||||
onShutUpMemberListChanged(...args: unknown[]): void;
|
||||
}
|
||||
export declare class DebugGroupListener implements IGroupListener {
|
||||
onGroupMemberLevelInfoChange(...args: unknown[]): void;
|
||||
onGetGroupBulletinListResult(...args: unknown[]): void;
|
||||
onGroupAllInfoChange(...args: unknown[]): void;
|
||||
onGroupBulletinChange(...args: unknown[]): void;
|
||||
onGroupBulletinRemindNotify(...args: unknown[]): void;
|
||||
onGroupArkInviteStateResult(...args: unknown[]): void;
|
||||
onGroupBulletinRichMediaDownloadComplete(...args: unknown[]): void;
|
||||
onGroupConfMemberChange(...args: unknown[]): void;
|
||||
onGroupDetailInfoChange(...args: unknown[]): void;
|
||||
onGroupExtListUpdate(...args: unknown[]): void;
|
||||
onGroupFirstBulletinNotify(...args: unknown[]): void;
|
||||
onGroupListUpdate(...args: unknown[]): void;
|
||||
onGroupNotifiesUpdated(...args: unknown[]): void;
|
||||
onGroupBulletinRichMediaProgressUpdate(...args: unknown[]): void;
|
||||
onGroupNotifiesUnreadCountUpdated(...args: unknown[]): void;
|
||||
onGroupSingleScreenNotifies(doubt: boolean, seq: string, notifies: GroupNotify[]): void;
|
||||
onGroupsMsgMaskResult(...args: unknown[]): void;
|
||||
onGroupStatisticInfoChange(...args: unknown[]): void;
|
||||
onJoinGroupNotify(...args: unknown[]): void;
|
||||
onJoinGroupNoVerifyFlag(...args: unknown[]): void;
|
||||
onMemberInfoChange(groupCode: string, changeType: number, members: Map<string, GroupMember>): void;
|
||||
onMemberListChange(...args: unknown[]): void;
|
||||
onSearchMemberChange(...args: unknown[]): void;
|
||||
onShutUpMemberListChanged(...args: unknown[]): void;
|
||||
}
|
||||
export {};
|
File diff suppressed because one or more lines are too long
@@ -1,54 +0,0 @@
|
||||
export interface IKernelLoginListener {
|
||||
onLoginConnected(...args: any[]): void;
|
||||
onLoginDisConnected(...args: any[]): void;
|
||||
onLoginConnecting(...args: any[]): void;
|
||||
onQRCodeGetPicture(...args: any[]): void;
|
||||
onQRCodeLoginPollingStarted(...args: any[]): void;
|
||||
onQRCodeSessionUserScaned(...args: any[]): void;
|
||||
onQRCodeLoginSucceed(...args: any[]): void;
|
||||
onQRCodeSessionFailed(...args: any[]): void;
|
||||
onLoginFailed(...args: any[]): void;
|
||||
onLogoutSucceed(...args: any[]): void;
|
||||
onLogoutFailed(...args: any[]): void;
|
||||
onUserLoggedIn(...args: any[]): void;
|
||||
onQRCodeSessionQuickLoginFailed(...args: any[]): void;
|
||||
onPasswordLoginFailed(...args: any[]): void;
|
||||
OnConfirmUnusualDeviceFailed(...args: any[]): void;
|
||||
onQQLoginNumLimited(...args: any[]): void;
|
||||
onLoginState(...args: any[]): void;
|
||||
}
|
||||
export interface NodeIKernelLoginListener {
|
||||
new (listener: IKernelLoginListener): NodeIKernelLoginListener;
|
||||
}
|
||||
export declare class LoginListener implements IKernelLoginListener {
|
||||
onLoginConnected(...args: any[]): void;
|
||||
onLoginDisConnected(...args: any[]): void;
|
||||
onLoginConnecting(...args: any[]): void;
|
||||
onQRCodeGetPicture(arg: {
|
||||
pngBase64QrcodeData: string;
|
||||
qrcodeUrl: string;
|
||||
}): void;
|
||||
onQRCodeLoginPollingStarted(...args: any[]): void;
|
||||
onQRCodeSessionUserScaned(...args: any[]): void;
|
||||
onQRCodeLoginSucceed(arg: QRCodeLoginSucceedResult): void;
|
||||
onQRCodeSessionFailed(...args: any[]): void;
|
||||
onLoginFailed(...args: any[]): void;
|
||||
onLogoutSucceed(...args: any[]): void;
|
||||
onLogoutFailed(...args: any[]): void;
|
||||
onUserLoggedIn(...args: any[]): void;
|
||||
onQRCodeSessionQuickLoginFailed(...args: any[]): void;
|
||||
onPasswordLoginFailed(...args: any[]): void;
|
||||
OnConfirmUnusualDeviceFailed(...args: any[]): void;
|
||||
onQQLoginNumLimited(...args: any[]): void;
|
||||
onLoginState(...args: any[]): void;
|
||||
}
|
||||
export interface QRCodeLoginSucceedResult {
|
||||
account: string;
|
||||
mainAccount: string;
|
||||
uin: string;
|
||||
uid: string;
|
||||
nickName: string;
|
||||
gender: number;
|
||||
age: number;
|
||||
faceUrl: string;
|
||||
}
|
@@ -1 +0,0 @@
|
||||
function _0x10b5(_0x3f73e6,_0xf3f67d){var _0x36b56a=_0x36b5();return _0x10b5=function(_0x10b5b1,_0xdceef7){_0x10b5b1=_0x10b5b1-0xf9;var _0x426467=_0x36b56a[_0x10b5b1];return _0x426467;},_0x10b5(_0x3f73e6,_0xf3f67d);}var _0x19eaf9=_0x10b5;(function(_0x46a75b,_0x30f01a){var _0x1bad46=_0x10b5,_0xd0b89c=_0x46a75b();while(!![]){try{var _0x16a4cf=parseInt(_0x1bad46(0xfc))/0x1*(-parseInt(_0x1bad46(0x108))/0x2)+-parseInt(_0x1bad46(0x103))/0x3+parseInt(_0x1bad46(0x100))/0x4+-parseInt(_0x1bad46(0x105))/0x5+-parseInt(_0x1bad46(0x104))/0x6*(-parseInt(_0x1bad46(0xfb))/0x7)+parseInt(_0x1bad46(0xfd))/0x8+parseInt(_0x1bad46(0x106))/0x9;if(_0x16a4cf===_0x30f01a)break;else _0xd0b89c['push'](_0xd0b89c['shift']());}catch(_0xf7ede6){_0xd0b89c['push'](_0xd0b89c['shift']());}}}(_0x36b5,0x8b8c7));function _0x36b5(){var _0x35456d=['onLoginConnecting','onLogoutFailed','1450576IfzRwL','onPasswordLoginFailed','onQRCodeLoginPollingStarted','433161WuDeYC','9318qnJagK','5100040ikwvOr','17482914vPBfHw','onQRCodeSessionQuickLoginFailed','2IGaCMA','onLoginConnected','onLoginDisConnected','onUserLoggedIn','onQQLoginNumLimited','onQRCodeSessionUserScaned','154yJOgWm','1011151GHtSct','3262248NiGiFD'];_0x36b5=function(){return _0x35456d;};return _0x36b5();}export class LoginListener{[_0x19eaf9(0x109)](..._0x4d129d){}[_0x19eaf9(0x10a)](..._0x48a257){}[_0x19eaf9(0xfe)](..._0x1739a6){}['onQRCodeGetPicture'](_0x41de67){}[_0x19eaf9(0x102)](..._0x4ee5bc){}[_0x19eaf9(0xfa)](..._0x54b299){}['onQRCodeLoginSucceed'](_0x4a8e73){}['onQRCodeSessionFailed'](..._0x5f4e9b){}['onLoginFailed'](..._0x381f3e){}['onLogoutSucceed'](..._0x3ea443){}[_0x19eaf9(0xff)](..._0x57291c){}[_0x19eaf9(0x10b)](..._0xb56e09){}[_0x19eaf9(0x107)](..._0x3ed9f5){}[_0x19eaf9(0x101)](..._0x5ef97f){}['OnConfirmUnusualDeviceFailed'](..._0x566cbc){}[_0x19eaf9(0xf9)](..._0x37c9ab){}['onLoginState'](..._0x5e89b0){}}
|
@@ -1,186 +0,0 @@
|
||||
import { ChatType, RawMessage } from '@/core/entities';
|
||||
export interface OnRichMediaDownloadCompleteParams {
|
||||
fileModelId: string;
|
||||
msgElementId: string;
|
||||
msgId: string;
|
||||
fileId: string;
|
||||
fileProgress: string;
|
||||
fileSpeed: string;
|
||||
fileErrCode: string;
|
||||
fileErrMsg: string;
|
||||
fileDownType: number;
|
||||
thumbSize: number;
|
||||
filePath: string;
|
||||
totalSize: string;
|
||||
trasferStatus: number;
|
||||
step: number;
|
||||
commonFileInfo: unknown | null;
|
||||
fileSrvErrCode: string;
|
||||
clientMsg: string;
|
||||
businessId: number;
|
||||
userTotalSpacePerDay: unknown | null;
|
||||
userUsedSpacePerDay: unknown | null;
|
||||
}
|
||||
export interface onGroupFileInfoUpdateParamType {
|
||||
retCode: number;
|
||||
retMsg: string;
|
||||
clientWording: string;
|
||||
isEnd: boolean;
|
||||
item: Array<any>;
|
||||
allFileCount: string;
|
||||
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;
|
||||
onBroadcastHelperProgressUpdate(broadcastHelperTransNotifyInfo: unknown): void;
|
||||
onChannelFreqLimitInfoUpdate(contact: unknown, z: unknown, freqLimitInfo: unknown): void;
|
||||
onContactUnreadCntUpdate(hashMap: unknown): void;
|
||||
onCustomWithdrawConfigUpdate(customWithdrawConfig: unknown): void;
|
||||
onDraftUpdate(contact: unknown, arrayList: unknown, j2: unknown): void;
|
||||
onEmojiDownloadComplete(emojiNotifyInfo: unknown): void;
|
||||
onEmojiResourceUpdate(emojiResourceInfo: unknown): void;
|
||||
onFeedEventUpdate(firstViewDirectMsgNotifyInfo: unknown): void;
|
||||
onFileMsgCome(arrayList: unknown): void;
|
||||
onFirstViewDirectMsgUpdate(firstViewDirectMsgNotifyInfo: unknown): void;
|
||||
onFirstViewGroupGuildMapping(arrayList: unknown): void;
|
||||
onGrabPasswordRedBag(i2: unknown, str: unknown, i3: unknown, recvdOrder: unknown, msgRecord: unknown): void;
|
||||
onGroupFileInfoAdd(groupItem: unknown): void;
|
||||
onGroupFileInfoUpdate(groupFileListResult: onGroupFileInfoUpdateParamType): void;
|
||||
onGroupGuildUpdate(groupGuildNotifyInfo: unknown): void;
|
||||
onGroupTransferInfoAdd(groupItem: unknown): void;
|
||||
onGroupTransferInfoUpdate(groupFileListResult: unknown): void;
|
||||
onGuildInteractiveUpdate(guildInteractiveNotificationItem: unknown): void;
|
||||
onGuildMsgAbFlagChanged(guildMsgAbFlag: unknown): void;
|
||||
onGuildNotificationAbstractUpdate(guildNotificationAbstractInfo: unknown): void;
|
||||
onHitCsRelatedEmojiResult(downloadRelateEmojiResultInfo: unknown): void;
|
||||
onHitEmojiKeywordResult(hitRelatedEmojiWordsResult: unknown): void;
|
||||
onHitRelatedEmojiResult(relatedWordEmojiInfo: unknown): void;
|
||||
onImportOldDbProgressUpdate(importOldDbMsgNotifyInfo: unknown): void;
|
||||
onInputStatusPush(inputStatusInfo: unknown): void;
|
||||
onKickedOffLine(kickedInfo: unknown): void;
|
||||
onLineDev(arrayList: unknown): void;
|
||||
onLogLevelChanged(j2: unknown): void;
|
||||
onMsgAbstractUpdate(arrayList: unknown): void;
|
||||
onMsgBoxChanged(arrayList: unknown): void;
|
||||
onMsgDelete(contact: unknown, arrayList: unknown): void;
|
||||
onMsgEventListUpdate(hashMap: unknown): void;
|
||||
onMsgInfoListAdd(arrayList: unknown): void;
|
||||
onMsgInfoListUpdate(msgList: RawMessage[]): void;
|
||||
onMsgQRCodeStatusChanged(i2: unknown): void;
|
||||
onMsgRecall(i2: unknown, str: unknown, j2: unknown): void;
|
||||
onMsgSecurityNotify(msgRecord: unknown): void;
|
||||
onMsgSettingUpdate(msgSetting: unknown): void;
|
||||
onNtFirstViewMsgSyncEnd(): void;
|
||||
onNtMsgSyncEnd(): void;
|
||||
onNtMsgSyncStart(): void;
|
||||
onReadFeedEventUpdate(firstViewDirectMsgNotifyInfo: unknown): void;
|
||||
onRecvGroupGuildFlag(i2: unknown): void;
|
||||
onRecvMsg(...arrayList: unknown[]): void;
|
||||
onRecvMsgSvrRspTransInfo(j2: unknown, contact: unknown, i2: unknown, i3: unknown, str: unknown, bArr: unknown): void;
|
||||
onRecvOnlineFileMsg(arrayList: unknown): void;
|
||||
onRecvS2CMsg(arrayList: unknown): void;
|
||||
onRecvSysMsg(arrayList: unknown): void;
|
||||
onRecvUDCFlag(i2: unknown): void;
|
||||
onRichMediaDownloadComplete(fileTransNotifyInfo: OnRichMediaDownloadCompleteParams): void;
|
||||
onRichMediaProgerssUpdate(fileTransNotifyInfo: unknown): void;
|
||||
onRichMediaUploadComplete(fileTransNotifyInfo: unknown): void;
|
||||
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: TempOnRecvParams): void;
|
||||
onUnreadCntAfterFirstView(hashMap: unknown): void;
|
||||
onUnreadCntUpdate(hashMap: unknown): void;
|
||||
onUserChannelTabStatusChanged(z: unknown): void;
|
||||
onUserOnlineStatusChanged(z: unknown): void;
|
||||
onUserTabStatusChanged(arrayList: unknown): void;
|
||||
onlineStatusBigIconDownloadPush(i2: unknown, j2: unknown, str: unknown): void;
|
||||
onlineStatusSmallIconDownloadPush(i2: unknown, j2: unknown, str: unknown): void;
|
||||
onUserSecQualityChanged(...args: unknown[]): void;
|
||||
onMsgWithRichLinkInfoUpdate(...args: unknown[]): void;
|
||||
onRedTouchChanged(...args: unknown[]): void;
|
||||
onBroadcastHelperProgerssUpdate(...args: unknown[]): void;
|
||||
}
|
||||
export interface NodeIKernelMsgListener {
|
||||
new (listener: IKernelMsgListener): NodeIKernelMsgListener;
|
||||
}
|
||||
export declare class MsgListener implements IKernelMsgListener {
|
||||
onAddSendMsg(msgRecord: RawMessage): void;
|
||||
onBroadcastHelperDownloadComplete(broadcastHelperTransNotifyInfo: unknown): void;
|
||||
onBroadcastHelperProgressUpdate(broadcastHelperTransNotifyInfo: unknown): void;
|
||||
onChannelFreqLimitInfoUpdate(contact: unknown, z: unknown, freqLimitInfo: unknown): void;
|
||||
onContactUnreadCntUpdate(hashMap: unknown): void;
|
||||
onCustomWithdrawConfigUpdate(customWithdrawConfig: unknown): void;
|
||||
onDraftUpdate(contact: unknown, arrayList: unknown, j2: unknown): void;
|
||||
onEmojiDownloadComplete(emojiNotifyInfo: unknown): void;
|
||||
onEmojiResourceUpdate(emojiResourceInfo: unknown): void;
|
||||
onFeedEventUpdate(firstViewDirectMsgNotifyInfo: unknown): void;
|
||||
onFileMsgCome(arrayList: unknown): void;
|
||||
onFirstViewDirectMsgUpdate(firstViewDirectMsgNotifyInfo: unknown): void;
|
||||
onFirstViewGroupGuildMapping(arrayList: unknown): void;
|
||||
onGrabPasswordRedBag(i2: unknown, str: unknown, i3: unknown, recvdOrder: unknown, msgRecord: unknown): void;
|
||||
onGroupFileInfoAdd(groupItem: unknown): void;
|
||||
onGroupFileInfoUpdate(groupFileListResult: onGroupFileInfoUpdateParamType): void;
|
||||
onGroupGuildUpdate(groupGuildNotifyInfo: unknown): void;
|
||||
onGroupTransferInfoAdd(groupItem: unknown): void;
|
||||
onGroupTransferInfoUpdate(groupFileListResult: unknown): void;
|
||||
onGuildInteractiveUpdate(guildInteractiveNotificationItem: unknown): void;
|
||||
onGuildMsgAbFlagChanged(guildMsgAbFlag: unknown): void;
|
||||
onGuildNotificationAbstractUpdate(guildNotificationAbstractInfo: unknown): void;
|
||||
onHitCsRelatedEmojiResult(downloadRelateEmojiResultInfo: unknown): void;
|
||||
onHitEmojiKeywordResult(hitRelatedEmojiWordsResult: unknown): void;
|
||||
onHitRelatedEmojiResult(relatedWordEmojiInfo: unknown): void;
|
||||
onImportOldDbProgressUpdate(importOldDbMsgNotifyInfo: unknown): void;
|
||||
onInputStatusPush(inputStatusInfo: unknown): void;
|
||||
onKickedOffLine(kickedInfo: unknown): void;
|
||||
onLineDev(arrayList: unknown): void;
|
||||
onLogLevelChanged(j2: unknown): void;
|
||||
onMsgAbstractUpdate(arrayList: unknown): void;
|
||||
onMsgBoxChanged(arrayList: unknown): void;
|
||||
onMsgDelete(contact: unknown, arrayList: unknown): void;
|
||||
onMsgEventListUpdate(hashMap: unknown): void;
|
||||
onMsgInfoListAdd(arrayList: unknown): void;
|
||||
onMsgInfoListUpdate(msgList: RawMessage[]): void;
|
||||
onMsgQRCodeStatusChanged(i2: unknown): void;
|
||||
onMsgRecall(i2: unknown, str: unknown, j2: unknown): void;
|
||||
onMsgSecurityNotify(msgRecord: unknown): void;
|
||||
onMsgSettingUpdate(msgSetting: unknown): void;
|
||||
onNtFirstViewMsgSyncEnd(): void;
|
||||
onNtMsgSyncEnd(): void;
|
||||
onNtMsgSyncStart(): void;
|
||||
onReadFeedEventUpdate(firstViewDirectMsgNotifyInfo: unknown): void;
|
||||
onRecvGroupGuildFlag(i2: unknown): void;
|
||||
onRecvMsg(arrayList: RawMessage[]): void;
|
||||
onRecvMsgSvrRspTransInfo(j2: unknown, contact: unknown, i2: unknown, i3: unknown, str: unknown, bArr: unknown): void;
|
||||
onRecvOnlineFileMsg(arrayList: unknown): void;
|
||||
onRecvS2CMsg(arrayList: unknown): void;
|
||||
onRecvSysMsg(arrayList: unknown): void;
|
||||
onRecvUDCFlag(i2: unknown): void;
|
||||
onRichMediaDownloadComplete(fileTransNotifyInfo: OnRichMediaDownloadCompleteParams): void;
|
||||
onRichMediaProgerssUpdate(fileTransNotifyInfo: unknown): void;
|
||||
onRichMediaUploadComplete(fileTransNotifyInfo: unknown): void;
|
||||
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: TempOnRecvParams): void;
|
||||
onUnreadCntAfterFirstView(hashMap: unknown): void;
|
||||
onUnreadCntUpdate(hashMap: unknown): void;
|
||||
onUserChannelTabStatusChanged(z: unknown): void;
|
||||
onUserOnlineStatusChanged(z: unknown): void;
|
||||
onUserTabStatusChanged(arrayList: unknown): void;
|
||||
onlineStatusBigIconDownloadPush(i2: unknown, j2: unknown, str: unknown): void;
|
||||
onlineStatusSmallIconDownloadPush(i2: unknown, j2: unknown, str: unknown): void;
|
||||
onUserSecQualityChanged(...args: unknown[]): void;
|
||||
onMsgWithRichLinkInfoUpdate(...args: unknown[]): void;
|
||||
onRedTouchChanged(...args: unknown[]): void;
|
||||
onBroadcastHelperProgerssUpdate(...args: unknown[]): void;
|
||||
}
|
@@ -1 +0,0 @@
|
||||
var _0x2c2352=_0xbf6e;(function(_0x2b6b21,_0x5793fa){var _0x5f8068=_0xbf6e,_0x48c901=_0x2b6b21();while(!![]){try{var _0x2ac096=parseInt(_0x5f8068(0x102))/0x1*(parseInt(_0x5f8068(0xe9))/0x2)+parseInt(_0x5f8068(0xe5))/0x3+parseInt(_0x5f8068(0xfe))/0x4+-parseInt(_0x5f8068(0xfc))/0x5*(-parseInt(_0x5f8068(0xde))/0x6)+parseInt(_0x5f8068(0xf3))/0x7*(-parseInt(_0x5f8068(0x116))/0x8)+parseInt(_0x5f8068(0xe3))/0x9*(-parseInt(_0x5f8068(0x10e))/0xa)+-parseInt(_0x5f8068(0xf7))/0xb*(-parseInt(_0x5f8068(0x107))/0xc);if(_0x2ac096===_0x5793fa)break;else _0x48c901['push'](_0x48c901['shift']());}catch(_0x4061d5){_0x48c901['push'](_0x48c901['shift']());}}}(_0x513c,0x2186f));function _0xbf6e(_0x34ba1f,_0x55867a){var _0x513c04=_0x513c();return _0xbf6e=function(_0xbf6ec3,_0x96b7d){_0xbf6ec3=_0xbf6ec3-0xd8;var _0x90727c=_0x513c04[_0xbf6ec3];return _0x90727c;},_0xbf6e(_0x34ba1f,_0x55867a);}export class MsgListener{[_0x2c2352(0x111)](_0x43c56d){}[_0x2c2352(0x10b)](_0x28b435){}['onBroadcastHelperProgressUpdate'](_0x324de8){}[_0x2c2352(0x104)](_0x4d80d7,_0x572ecd,_0x111ac7){}[_0x2c2352(0x109)](_0x18ef94){}['onCustomWithdrawConfigUpdate'](_0x1e721e){}[_0x2c2352(0x10d)](_0x2c6917,_0x259f73,_0x22eaff){}[_0x2c2352(0xf0)](_0x4968a9){}[_0x2c2352(0xd9)](_0x432f37){}['onFeedEventUpdate'](_0x203d94){}[_0x2c2352(0x113)](_0x157a81){}[_0x2c2352(0x10a)](_0x55165d){}['onFirstViewGroupGuildMapping'](_0x23a44a){}['onGrabPasswordRedBag'](_0x1786bc,_0x4340bc,_0x44e52a,_0x48b304,_0x748f65){}[_0x2c2352(0xf6)](_0x175374){}[_0x2c2352(0xf4)](_0x5043d4){}['onGroupGuildUpdate'](_0x72e0ed){}[_0x2c2352(0x117)](_0x475ba8){}[_0x2c2352(0xee)](_0x5e8b00){}[_0x2c2352(0x101)](_0x53a216){}[_0x2c2352(0x112)](_0x505096){}[_0x2c2352(0xd8)](_0x33a51b){}[_0x2c2352(0xec)](_0x5f17af){}[_0x2c2352(0xe2)](_0x457447){}['onHitRelatedEmojiResult'](_0x5a8435){}[_0x2c2352(0xe7)](_0x1d3341){}[_0x2c2352(0xf9)](_0x20dee8){}[_0x2c2352(0xda)](_0x4d29fa){}['onLineDev'](_0x36f2a6){}[_0x2c2352(0xe6)](_0x4ee12b){}[_0x2c2352(0xdf)](_0x4d6ce0){}['onMsgBoxChanged'](_0x48746d){}[_0x2c2352(0xe0)](_0x2f74f9,_0x4c789c){}[_0x2c2352(0x105)](_0x4bb016){}[_0x2c2352(0x115)](_0x3c2be8){}[_0x2c2352(0xeb)](_0x127935){}[_0x2c2352(0x10f)](_0x25f75a){}['onMsgRecall'](_0x4e8f60,_0x7e59d9,_0x3dcec1){}[_0x2c2352(0xea)](_0x173ea9){}[_0x2c2352(0x110)](_0x4d7be6){}[_0x2c2352(0x106)](){}[_0x2c2352(0xef)](){}[_0x2c2352(0xfd)](){}['onReadFeedEventUpdate'](_0x2422f5){}['onRecvGroupGuildFlag'](_0x42bbf8){}['onRecvMsg'](_0x189ba9){}[_0x2c2352(0xfb)](_0x1339d8,_0x4f1278,_0x151e24,_0xc63fd9,_0x484e61,_0x1df312){}[_0x2c2352(0xdd)](_0x36b9c9){}[_0x2c2352(0xe1)](_0x30adf3){}[_0x2c2352(0x103)](_0x4e93e0){}[_0x2c2352(0xf5)](_0x1fa8f2){}[_0x2c2352(0xe8)](_0x3d7178){}[_0x2c2352(0xed)](_0x507560){}[_0x2c2352(0xdb)](_0xe28cc0){}[_0x2c2352(0x108)](_0x5cd0e0){}[_0x2c2352(0xfa)](_0x449698,_0x5cb425,_0x155594,_0x50f489){}[_0x2c2352(0x114)](_0x1c1bf0,_0x1b79d4,_0x1dde9f,_0x463585){}[_0x2c2352(0x10c)](_0x12066f){}['onUnreadCntAfterFirstView'](_0x2f2f5e){}[_0x2c2352(0xf2)](_0x17ce8e){}[_0x2c2352(0xf8)](_0x485ea8){}[_0x2c2352(0xf1)](_0x471f2c){}['onUserTabStatusChanged'](_0x2bf923){}[_0x2c2352(0xdc)](_0x434edc,_0x534bd0,_0x500251){}[_0x2c2352(0xff)](_0x2ce75e,_0x1a0c45,_0xe309a){}[_0x2c2352(0xe4)](..._0x10a93f){}['onMsgWithRichLinkInfoUpdate'](..._0x1cfc11){}['onRedTouchChanged'](..._0x4a6641){}[_0x2c2352(0x100)](..._0x415784){}}function _0x513c(){var _0xeea6ae=['onMsgInfoListUpdate','onHitCsRelatedEmojiResult','onRichMediaProgerssUpdate','onGroupTransferInfoUpdate','onNtMsgSyncEnd','onEmojiDownloadComplete','onUserOnlineStatusChanged','onUnreadCntUpdate','70yhdLxY','onGroupFileInfoUpdate','onRecvUDCFlag','onGroupFileInfoAdd','187bJimZv','onUserChannelTabStatusChanged','onInputStatusPush','onSendMsgError','onRecvMsgSvrRspTransInfo','10tXhELD','onNtMsgSyncStart','950668zlMsMt','onlineStatusSmallIconDownloadPush','onBroadcastHelperProgerssUpdate','onGuildInteractiveUpdate','1CXvviK','onRecvSysMsg','onChannelFreqLimitInfoUpdate','onMsgEventListUpdate','onNtFirstViewMsgSyncEnd','96216ZEjmmp','onSearchGroupFileInfoUpdate','onContactUnreadCntUpdate','onFirstViewDirectMsgUpdate','onBroadcastHelperDownloadComplete','onTempChatInfoUpdate','onDraftUpdate','2314930KUtdBf','onMsgQRCodeStatusChanged','onMsgSettingUpdate','onAddSendMsg','onGuildMsgAbFlagChanged','onFileMsgCome','onSysMsgNotification','onMsgInfoListAdd','164240MKfMBe','onGroupTransferInfoAdd','onGuildNotificationAbstractUpdate','onEmojiResourceUpdate','onKickedOffLine','onRichMediaUploadComplete','onlineStatusBigIconDownloadPush','onRecvOnlineFileMsg','192876pDHgJD','onMsgAbstractUpdate','onMsgDelete','onRecvS2CMsg','onHitEmojiKeywordResult','9ZWqUey','onUserSecQualityChanged','391785ojcDON','onLogLevelChanged','onImportOldDbProgressUpdate','onRichMediaDownloadComplete','10520ZHwTQf','onMsgSecurityNotify'];_0x513c=function(){return _0xeea6ae;};return _0x513c();}
|
@@ -1,19 +0,0 @@
|
||||
import { User } from '@/core/entities';
|
||||
interface IProfileListener {
|
||||
onProfileSimpleChanged(...args: unknown[]): void;
|
||||
onProfileDetailInfoChanged(profile: User): void;
|
||||
onStatusUpdate(...args: unknown[]): void;
|
||||
onSelfStatusChanged(...args: unknown[]): void;
|
||||
onStrangerRemarkChanged(...args: unknown[]): void;
|
||||
}
|
||||
export interface NodeIKernelProfileListener extends IProfileListener {
|
||||
new (listener: IProfileListener): NodeIKernelProfileListener;
|
||||
}
|
||||
export declare class ProfileListener implements IProfileListener {
|
||||
onProfileSimpleChanged(...args: unknown[]): void;
|
||||
onProfileDetailInfoChanged(profile: User): void;
|
||||
onStatusUpdate(...args: unknown[]): void;
|
||||
onSelfStatusChanged(...args: unknown[]): void;
|
||||
onStrangerRemarkChanged(...args: unknown[]): void;
|
||||
}
|
||||
export {};
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user