Compare commits

..

144 Commits

Author SHA1 Message Date
手瓜一十雪
c54a58d6e4 release: v1.6.6 2024-07-16 15:55:25 +08:00
手瓜一十雪
34cb1ea3fd Merge pull request #126 from cnxysoft/main
修复戳一戳
2024-07-16 15:52:39 +08:00
Alen
f640b0ca91 修复戳一戳 2024-07-16 15:47:23 +08:00
手瓜一十雪
60e16da42e Merge pull request #121 from pohgxz/main
增加winQQ-9912一键启动脚本
2024-07-14 08:44:55 +08:00
Nepenthe
0cdceb95d6 增加winQQ-9912一键启动脚本 2024-07-13 16:09:14 +00:00
手瓜一十雪
70bd22d925 fix: typo 2024-07-13 20:27:18 +08:00
手瓜一十雪
82462dd647 docs: 规划 2024-07-13 20:21:48 +08:00
手瓜一十雪
c0466e943d build: test 2024-07-13 19:37:39 +08:00
手瓜一十雪
b187b4695d refactor: uin<->uid 2024-07-13 19:37:02 +08:00
手瓜一十雪
b1956d2a37 refactor: poke 2024-07-13 19:10:47 +08:00
手瓜一十雪
590b622e5f build: test 2024-07-13 18:58:52 +08:00
手瓜一十雪
3d8174396a feat: LinuxQQ版本25765 2024-07-13 18:58:29 +08:00
手瓜一十雪
b8dc6e9bd9 feat: 再次提升版本 25765 2024-07-13 18:56:42 +08:00
手瓜一十雪
8ee99109dc chore: 整理代码 2024-07-13 18:20:44 +08:00
手瓜一十雪
902041d4ee refactor: 新增启动脚本 2024-07-13 18:15:00 +08:00
手瓜一十雪
cc34aef47e style: code lint 2024-07-13 18:12:38 +08:00
手瓜一十雪
0afbbe7c7a refactor: 废弃部分代码 2024-07-13 18:10:41 +08:00
手瓜一十雪
8004553ba7 refactor: groupNotifies 2024-07-13 18:04:55 +08:00
手瓜一十雪
0023b2846a feat: 第二次大致整理 2024-07-13 17:23:05 +08:00
手瓜一十雪
34775c1816 fix: 整理常量 2024-07-12 18:08:45 +08:00
手瓜一十雪
e0759e704b feat:大部分消息元素 2024-07-12 18:01:48 +08:00
手瓜一十雪
0aa225ca78 fix: typo 2024-07-12 17:04:28 +08:00
手瓜一十雪
b43b4ee5c0 feat: test code 2024-07-12 16:59:08 +08:00
手瓜一十雪
0cdb8cecbf feat: 群精华 代码未测试 2024-07-12 11:02:10 +08:00
手瓜一十雪
fd6a306742 feat: 懒得写了 2024-07-12 10:54:01 +08:00
手瓜一十雪
7f3b3d2277 feat: 群精华 2024-07-12 10:46:57 +08:00
手瓜一十雪
8be5b977bf Merge pull request #117 from po-lan/main
对缓存进一步优化
2024-07-12 09:52:17 +08:00
po-lan
d7ddb15f9c 对缓存进一步优化
LRUCache 将所有被移除的缓存数据作为事件参数传递给事件处理程序。

在数据库操作部分,优化了读写流程,以确保每个群组至多执行三次数据库操作:

读取:先判断缓存中是否存在用户记录,若不存在则读取数据库。
创建:如果用户记录在数据库中不存在,则新增记录。
修改:如果用户记录在数据库中存在,则进行修改。
即使单个群组内有大量用户,每种操作也只会执行一次。
2024-07-12 00:46:03 +08:00
手瓜一十雪
9a6a1798d0 build: poke能用25493 2024-07-11 12:44:42 +08:00
手瓜一十雪
14196fd349 build: 移除调试代码 2024-07-11 12:31:00 +08:00
手瓜一十雪
941b89a523 feat: uin转换优化&poke支持重写 2024-07-11 12:28:11 +08:00
手瓜一十雪
a5f9e5f8c0 Merge pull request #113 from idranme/main
perf: audio
2024-07-11 09:49:56 +08:00
idranme
80c3356c8f perf: audio 2024-07-10 17:44:17 +00:00
手瓜一十雪
914136b750 refactor: 移除异常代码 2024-07-10 21:39:03 +08:00
手瓜一十雪
f9a60795f5 feat: uid转换优化 2024-07-10 21:33:31 +08:00
手瓜一十雪
19640927c7 Merge branch 'main' of https://github.com/NapNeko/NapCatQQ 2024-07-10 21:11:43 +08:00
手瓜一十雪
22faac7e36 fix: friend uid 异常 2024-07-10 21:11:28 +08:00
手瓜一十雪
30d260ab32 Merge pull request #111 from idranme/main
fix: error catch
2024-07-10 11:55:53 +08:00
idranme
115120d066 Update file.ts 2024-07-10 11:35:55 +08:00
idranme
1327844736 fix: error catch 2024-07-10 03:25:25 +00:00
手瓜一十雪
29904f3cb7 feat: 164 way03启动脚本补充 2024-07-06 13:23:31 +08:00
手瓜一十雪
50395594b7 Merge pull request #106 from jetjinser/fix-editorconfig
fix: `.editorconfig` wrong pair `end_of_line`
2024-07-05 22:43:23 +08:00
Jinser Kafka
9360af88b3 fix: .editorconfig 2024-07-05 19:36:32 +08:00
手瓜一十雪
376370336c release: 1.6.5 2024-07-05 16:50:57 +08:00
手瓜一十雪
70df6e3302 Merge pull request #105 from po-lan/main
对缓存小优化
2024-07-05 16:49:30 +08:00
手瓜一十雪
0a1fc2dc12 feat: 1.6.5 2024-07-05 16:49:16 +08:00
手瓜一十雪
9857f6e437 feat: 优化载入流程 2024-07-05 16:47:08 +08:00
手瓜一十雪
56d6ebe916 refactor: 迁移到新库 2024-07-05 15:48:03 +08:00
po-lan
81134ea2d4 Update LRUCache.ts 2024-07-05 12:13:24 +08:00
po-lan
a9f3e7fc54 Update db.ts
通过读取缓存修复刚说话缺无法获取发言时间的问题
2024-07-05 12:12:40 +08:00
po-lan
eb84e2f8c9 Update LRUCache.ts
Add a get function to the cache
2024-07-05 12:09:59 +08:00
手瓜一十雪
61cfa0e86d release: 1.6.4 2024-07-03 14:30:55 +08:00
手瓜一十雪
0a01b8ade9 Merge pull request #97 from cnxysoft/main
修改下载函数
2024-07-02 10:13:15 +08:00
Alen
1457efa9a4 修改下载函数
为默认Headers增加Host,解决一些网站无法下载文件的问题
2024-07-02 01:07:30 +08:00
手瓜一十雪
fa5c7add7a refactor: new core 2024-07-01 18:45:48 +08:00
手瓜一十雪
d644eba4d1 refactor: napcat 2024-07-01 18:24:36 +08:00
手瓜一十雪
9c422c1a8f Merge pull request #95 from ahjsrhj/main
feat: ws反代请求添加UA: OneBot/11
2024-07-01 13:20:47 +08:00
手瓜一十雪
b6db37202f feat: core code 2024-07-01 13:18:59 +08:00
手瓜一十雪
4ca3891089 refactor: core 2024-07-01 13:18:19 +08:00
ahjsrhj
4c7ed01776 feat: ws反代请求添加UA: OneBot/11 2024-07-01 11:19:15 +08:00
手瓜一十雪
45c922c377 release: 1.6.3 2024-06-28 14:00:15 +08:00
手瓜一十雪
f854c258bd fix: 清除旧的反向ws 2024-06-28 13:42:09 +08:00
手瓜一十雪
a643fac073 refactor: msg context 2024-06-28 13:38:03 +08:00
手瓜一十雪
861f105bea fix: uid->uin 临时修复方案
uid uin转换需要优化
2024-06-28 13:11:06 +08:00
手瓜一十雪
bf10ce9f1e fix: error 2024-06-26 18:40:08 +08:00
手瓜一十雪
ccf521d0a8 feat: win ia32支持 2024-06-26 18:13:55 +08:00
手瓜一十雪
6075d98eaa release: v1.6.2 2024-06-26 18:09:41 +08:00
手瓜一十雪
a3801fc243 fix: script 2024-06-26 17:17:33 +08:00
手瓜一十雪
a1f0c05f3a chore: build script 2024-06-26 17:16:54 +08:00
手瓜一十雪
a568c96929 chore: build script 2024-06-26 17:15:46 +08:00
手瓜一十雪
d58bcf3c0e refactor: error catch 2024-06-26 17:14:23 +08:00
手瓜一十雪
985f2e6436 fix: 还原修改 2024-06-25 17:24:42 +08:00
手瓜一十雪
ad441fa793 docs: update 2024-06-24 21:38:28 +08:00
手瓜一十雪
316300cc86 Merge pull request #86 from NapNeko/dependabot/npm_and_yarn/types/uuid-10.0.0
build(deps-dev): bump @types/uuid from 9.0.8 to 10.0.0
2024-06-24 17:44:25 +08:00
dependabot[bot]
5c4f37b234 build(deps-dev): bump @types/uuid from 9.0.8 to 10.0.0
Bumps [@types/uuid](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/uuid) from 9.0.8 to 10.0.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/uuid)

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

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

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-10 08:12:09 +00:00
手瓜一十雪
bdea2d02a9 release: v1.5.3 2024-06-09 20:09:14 +08:00
手瓜一十雪
c4307481f1 build: 1.5.3-beta4 2024-06-09 19:47:16 +08:00
手瓜一十雪
b8ac1b28bd build: v1.5.3-beta3 2024-06-09 19:41:27 +08:00
手瓜一十雪
24038cda95 refactor: video url 2024-06-09 19:40:34 +08:00
手瓜一十雪
86c82e9608 build: 1.5.3-beta2 2024-06-09 19:14:27 +08:00
手瓜一十雪
daab5d150b refactor: friend add 2024-06-09 19:13:49 +08:00
手瓜一十雪
9ff82bdb90 feat: support SetLongNick 2024-06-09 18:28:09 +08:00
手瓜一十雪
c6d70ef1cf build: 1.5.3-beta1 2024-06-09 17:46:32 +08:00
手瓜一十雪
15d4bb3c76 feat: new api 2024-06-09 17:30:30 +08:00
手瓜一十雪
3e698981fd chore: sync core 2024-06-09 14:26:02 +08:00
手瓜一十雪
9d45c934a5 chore: sync core 2024-06-08 22:13:05 +08:00
手瓜一十雪
c2bf9cf93e chore: sync core 2024-06-08 12:11:04 +08:00
手瓜一十雪
b3c6fd7f26 chore: sync core 2024-06-07 17:59:33 +08:00
手瓜一十雪
ccd155de71 feat: 推荐联系人ArkJson 2024-06-07 17:57:33 +08:00
手瓜一十雪
1f90d2e46b feat: 支持专属头衔获取 2024-06-07 17:26:00 +08:00
手瓜一十雪
4c5d974c22 feat: 支持专属头衔获取 2024-06-07 17:25:34 +08:00
手瓜一十雪
392eda1cbc fix: typo 2024-06-07 13:19:22 +08:00
手瓜一十雪
a9da3279e8 docs: change 2024-06-07 13:01:15 +08:00
手瓜一十雪
1ce8351180 docs: develop 2024-06-07 09:49:31 +08:00
手瓜一十雪
96c334478a docs: todo 2024-06-07 00:39:09 +08:00
手瓜一十雪
f1b0875b05 feat: ArkJsonGroupShare 2024-06-06 17:20:34 +08:00
手瓜一十雪
cea9e11c83 docs: add 2024-06-06 14:31:45 +08:00
手瓜一十雪
f098b39200 refactor: uins 2024-06-06 13:34:05 +08:00
手瓜一十雪
012d948b59 chore: sync 2024-06-06 13:23:15 +08:00
手瓜一十雪
3334cd0a71 docs: change 2024-06-06 12:18:17 +08:00
手瓜一十雪
d63d53fd88 docs: move 2024-06-06 11:05:30 +08:00
手瓜一十雪
a7fa39b2fd fix: message_id error 2024-06-06 11:03:29 +08:00
Version
40bb42e193 chore:version change 2024-06-05 10:30:26 +00:00
277 changed files with 13256 additions and 6881 deletions

View File

@@ -5,7 +5,7 @@ root = true
# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf|crlf
end_of_line = lf
insert_final_newline = true
# Matches multiple files with brace expansion notation

View File

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

View File

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

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

@@ -0,0 +1,69 @@
name: "Build Test"
on:
workflow_dispatch:
permissions: write-all
jobs:
build-linux:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target_platform: [linux]
target_arch: [x64, arm64]
steps:
- name: Clone Main Repository
uses: actions/checkout@v4
with:
repository: 'NapNeko/NapCatQQ'
submodules: true
ref: main
token: ${{ secrets.NAPCAT_BUILD }}
- name: Use Node.js 20.X
uses: actions/setup-node@v4
with:
node-version: 20.x
- name: Build NuCat Linux
run: |
npm i --arch=${{ matrix.target_arch }} --platform=${{ matrix.target_platform }}
npm run build:prod
cd dist
npm i --omit=dev --arch=${{ matrix.target_arch }} --platform=${{ matrix.target_platform }}
cd ..
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: NapCat.${{ matrix.target_platform }}.${{ matrix.target_arch }}
path: dist
build-win32:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target_platform: [win32]
target_arch: [x64,ia32]
steps:
- name: Clone Main Repository
uses: actions/checkout@v4
with:
repository: 'NapNeko/NapCatQQ'
submodules: true
ref: main
token: ${{ secrets.NAPCAT_BUILD }}
- name: Use Node.js 20.X
uses: actions/setup-node@v4
with:
node-version: 20.x
- name: Build NuCat Linux
run: |
npm i --arch=${{ matrix.target_arch }} --platform=${{ matrix.target_platform }}
npm run build:prod
cd dist
npm i --omit=dev --arch=${{ matrix.target_arch }} --platform=${{ matrix.target_platform }}
cd ..
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: NapCat.${{ matrix.target_platform }}.${{ matrix.target_arch }}
path: dist

1
.gitignore vendored
View File

@@ -15,3 +15,4 @@ dist/
# Build
*.db
checkVersion.sh
bun.lockb

4
.gitmodules vendored
View File

@@ -1,4 +0,0 @@
[submodule "src/core"]
path = src/core
url = https://github.com/NapNeko/core.git
branch = master

View File

@@ -0,0 +1,17 @@
# 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. 修复了一些问题
## 新增与调整
没有哦
新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,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)

View 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)

View File

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

View File

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

View File

@@ -0,0 +1,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. 某些参数的自动提取

View File

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

View File

@@ -2,7 +2,7 @@
"name": "napcat",
"private": true,
"type": "module",
"version": "1.5.1",
"version": "1.6.6",
"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,9 +64,9 @@
"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": "^9.0.1",
"uuid": "^10.0.0",
"ws": "^8.16.0"
}
}

45
script/BootWay.03.ps1 Normal file
View 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
View 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
View File

@@ -0,0 +1,3 @@
REM 全新启动脚本 基于 Hook Native 预计版本1.6.0左右发布
@echo off
pause

20
script/index.js Normal file
View 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);
}

View File

@@ -0,0 +1,18 @@
@echo off
setlocal enabledelayedexpansion
chcp 65001
:loop_read
for /f "tokens=2*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ" /v "UninstallString"') do (
set "RetString=%%b"
goto :napcat_boot
)
:napcat_boot
for %%a in ("!RetString!") do (
set "pathWithoutUninstall=%%~dpa"
)
set "QQPath=!pathWithoutUninstall!"
cd /d !QQPath!
echo !QQPath!
QQ.exe --enable-logging %*

View 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
View File

@@ -0,0 +1,17 @@
@echo off
setlocal enabledelayedexpansion
:loop_read
for /f "tokens=2*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ" /v "UninstallString"') do (
set "RetString=%%b"
goto :napcat_boot
)
:napcat_boot
for %%a in ("!RetString!") do (
set "pathWithoutUninstall=%%~dpa"
)
set QQPath=!pathWithoutUninstall!
cd /d !QQPath!
echo !QQPath!
QQ.exe --enable-logging %*

41
script/napcat-9912.ps1 Normal file
View 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}"

View File

@@ -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)[] = [];

View File

@@ -1,4 +1,3 @@
import { NodeIKernelMsgListener } from '@/core';
import { NodeIQQNTWrapperSession } from '@/core/wrapper';
import { randomUUID } from 'crypto';

View File

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

View File

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

View File

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

View File

@@ -38,11 +38,11 @@ type QQVersionConfigInfo = {
}
let _qqVersionConfigInfo: QQVersionConfigInfo = {
'baseVersion': '9.9.9-23361',
'curVersion': '9.9.9-23361',
'baseVersion': '9.9.12-25765',
'curVersion': '9.9.12-25765',
'prevVersion': '',
'onErrorVersions': [],
'buildId': '23361'
'buildId': '25765'
};
if (fs.existsSync(configVersionInfoPath)) {
@@ -55,19 +55,23 @@ if (fs.existsSync(configVersionInfoPath)) {
}
export const qqVersionConfigInfo: QQVersionConfigInfo = _qqVersionConfigInfo;
//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 = '537213803'; // 默认为 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;

View File

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

View File

@@ -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) =>
@@ -232,19 +258,6 @@ class DBUtil extends DBUtilBase {
logError('Could not create table files', err);
}
});
// 接收到的临时会话消息uid
const createTempUinTableSQL = `
CREATE TABLE IF NOT EXISTS temp_uins (
id INTEGER PRIMARY KEY AUTOINCREMENT,
uid TEXT,
uin TEXT
)`;
this.db!.run(createTempUinTableSQL, function (err) {
if (err) {
logError('Could not create table temp_uins', err);
}
});
}
private async getCurrentMaxShortId() {
@@ -415,63 +428,18 @@ class DBUtil extends DBUtilBase {
});
}
// 被动收到的临时会话消息uin->uid
async getReceivedTempUinMap() {
const stmt = 'SELECT * FROM temp_uins';
return new Promise<Record<string, string>>((resolve, reject) => {
this.db!.all(stmt, (err, rows: { uin: string, uid: string }[]) => {
if (err) {
logError('db could not get temp uin map', err);
reject(err);
}
const map: Record<string, string> = {};
rows.forEach(row => {
map[row.uin] = row.uid;
});
resolve(map);
});
});
}
// 通过uin获取临时会话消息uid
async getUidByTempUin(uid: string) {
const stmt = 'SELECT * FROM temp_uins WHERE uin = ?';
return new Promise<string>((resolve, reject) => {
this.db!.get(stmt, [uid], (err, row: { uin: string, uid: string }) => {
if (err) {
logError('db could not get temp uin map', err);
reject(err);
}
resolve(row?.uid);
});
});
}
async addTempUin(uin: string, uid: string) {
const existUid = await this.getUidByTempUin(uin);
if (!existUid) {
const stmt = this.db!.prepare('INSERT INTO temp_uins (uin, uid) VALUES (?, ?)');
return new Promise((resolve, reject) => {
stmt.run(uin, uid, function (err: any) {
if (err) {
logError('db could not add temp uin', err);
reject(err);
}
resolve(null);
});
});
}
}
async getLastSentTimeAndJoinTime(
groupId: number
): Promise<IRember[]> {
logDebug('读取发言时间', groupId);
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);
});

View File

@@ -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();

View File

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

View File

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

View File

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

Submodule src/core deleted from 1d7364fe51

View File

@@ -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 {};

View File

@@ -1 +0,0 @@
var _0x180f33=_0x5925;(function(_0x19eec4,_0xca7740){var _0x2559b0=_0x5925,_0x2f6df2=_0x19eec4();while(!![]){try{var _0x23e091=-parseInt(_0x2559b0(0xd5))/0x1*(-parseInt(_0x2559b0(0xd2))/0x2)+-parseInt(_0x2559b0(0xca))/0x3*(-parseInt(_0x2559b0(0xd1))/0x4)+-parseInt(_0x2559b0(0xcd))/0x5*(-parseInt(_0x2559b0(0xcb))/0x6)+parseInt(_0x2559b0(0xd4))/0x7+parseInt(_0x2559b0(0xd3))/0x8*(-parseInt(_0x2559b0(0xcf))/0x9)+-parseInt(_0x2559b0(0xd0))/0xa*(parseInt(_0x2559b0(0xc9))/0xb)+-parseInt(_0x2559b0(0xcc))/0xc;if(_0x23e091===_0xca7740)break;else _0x2f6df2['push'](_0x2f6df2['shift']());}catch(_0x3a2656){_0x2f6df2['push'](_0x2f6df2['shift']());}}}(_0x1ddc,0x3f451));export class DependsAdapter{[_0x180f33(0xce)](_0x166ee6,_0x35dfd4){}['onMSFSsoError'](_0x6033d7){}[_0x180f33(0xc8)](_0x32d8a9){}}function _0x5925(_0x526448,_0xa72577){var _0x1ddc96=_0x1ddc();return _0x5925=function(_0x592548,_0x370baa){_0x592548=_0x592548-0xc8;var _0x5a445a=_0x1ddc96[_0x592548];return _0x5a445a;},_0x5925(_0x526448,_0xa72577);}function _0x1ddc(){var _0x5b3b36=['getGroupCode','1218019MkOeTo','393qFqFZy','21102teGnHC','11315400uVNWfO','415JHBZjn','onMSFStatusChange','417159rqnsAl','10mnELmi','11252zVdEBO','861338enwuLI','16KxIhqj','2201157xBBOeS','1dpEVPX'];_0x1ddc=function(){return _0x5b3b36;};return _0x1ddc();}

View File

@@ -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 {};

View File

@@ -1 +0,0 @@
var _0x4aa6ca=_0x1a5c;(function(_0x4cdb44,_0x43a77d){var _0x147eb1=_0x1a5c,_0x1b263f=_0x4cdb44();while(!![]){try{var _0x15e817=-parseInt(_0x147eb1(0x137))/0x1+parseInt(_0x147eb1(0x134))/0x2+parseInt(_0x147eb1(0x13a))/0x3+-parseInt(_0x147eb1(0x13b))/0x4*(parseInt(_0x147eb1(0x132))/0x5)+-parseInt(_0x147eb1(0x138))/0x6+-parseInt(_0x147eb1(0x135))/0x7+parseInt(_0x147eb1(0x131))/0x8;if(_0x15e817===_0x43a77d)break;else _0x1b263f['push'](_0x1b263f['shift']());}catch(_0x426d96){_0x1b263f['push'](_0x1b263f['shift']());}}}(_0x2e07,0x69a3f));function _0x1a5c(_0x3584e9,_0x19f578){var _0x2e0737=_0x2e07();return _0x1a5c=function(_0x1a5cd0,_0x212336){_0x1a5cd0=_0x1a5cd0-0x131;var _0x37545a=_0x2e0737[_0x1a5cd0];return _0x37545a;},_0x1a5c(_0x3584e9,_0x19f578);}export class DispatcherAdapter{[_0x4aa6ca(0x133)](_0x540a71){}[_0x4aa6ca(0x136)](_0x48afc5){}[_0x4aa6ca(0x139)](_0x32addf){}}function _0x2e07(){var _0x41d5cd=['290925nrSlmC','4499754vVFZZF','dispatchCallWithJson','1917246KiRfWX','8IUygde','8052592lcxhvi','336760YOAYnw','dispatchRequest','1067950qiLQac','3999380GnXDWN','dispatchCall'];_0x2e07=function(){return _0x41d5cd;};return _0x2e07();}

View File

@@ -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 {};

View File

@@ -1 +0,0 @@
function _0x286c(_0x369b1f,_0x3eb745){var _0x1950b6=_0x1950();return _0x286c=function(_0x286c7d,_0x2cb412){_0x286c7d=_0x286c7d-0x89;var _0x348b17=_0x1950b6[_0x286c7d];return _0x348b17;},_0x286c(_0x369b1f,_0x3eb745);}var _0x316b46=_0x286c;function _0x1950(){var _0x30308f=['5884LorTNN','2GMiQaB','47620QScrxn','1659606cSkmDI','fixPicImgType','onInstallFinished','onGetOfflineMsg','getAppSetting','18iSMxub','onGetSrvCalTime','794804GiVpMz','2511005yEFuYs','1515720SWLpzA','105DdxPnD','onShowErrUITips','11EFRhZs','2879608aWmWzX','onLog'];_0x1950=function(){return _0x30308f;};return _0x1950();}(function(_0x1bf5b8,_0x3901f7){var _0x297e50=_0x286c,_0x338a9d=_0x1bf5b8();while(!![]){try{var _0x40dee8=-parseInt(_0x297e50(0x8c))/0x1*(-parseInt(_0x297e50(0x95))/0x2)+parseInt(_0x297e50(0x8e))/0x3+parseInt(_0x297e50(0x8b))/0x4*(-parseInt(_0x297e50(0x98))/0x5)+parseInt(_0x297e50(0x97))/0x6+-parseInt(_0x297e50(0x96))/0x7+parseInt(_0x297e50(0x89))/0x8*(-parseInt(_0x297e50(0x93))/0x9)+parseInt(_0x297e50(0x8d))/0xa*(-parseInt(_0x297e50(0x9a))/0xb);if(_0x40dee8===_0x3901f7)break;else _0x338a9d['push'](_0x338a9d['shift']());}catch(_0x1d7563){_0x338a9d['push'](_0x338a9d['shift']());}}}(_0x1950,0x76bd4));export class GlobalAdapter{[_0x316b46(0x8a)](..._0x3330be){}[_0x316b46(0x94)](..._0x2de10d){}[_0x316b46(0x99)](..._0x157aa6){}[_0x316b46(0x8f)](..._0x53d931){}[_0x316b46(0x92)](..._0x49663f){}[_0x316b46(0x90)](..._0x2d3b60){}['onUpdateGeneralFlag'](..._0x43cabf){}[_0x316b46(0x91)](..._0x5b6e08){}}

View File

@@ -1 +0,0 @@
(function(_0xdb5248,_0x4f7241){var _0x2d969f=_0x5ba2,_0x58e949=_0xdb5248();while(!![]){try{var _0x5462e5=-parseInt(_0x2d969f(0xad))/0x1*(parseInt(_0x2d969f(0xac))/0x2)+-parseInt(_0x2d969f(0xb4))/0x3*(-parseInt(_0x2d969f(0xab))/0x4)+parseInt(_0x2d969f(0xae))/0x5+parseInt(_0x2d969f(0xb2))/0x6*(parseInt(_0x2d969f(0xb0))/0x7)+parseInt(_0x2d969f(0xaf))/0x8+parseInt(_0x2d969f(0xb3))/0x9+-parseInt(_0x2d969f(0xb1))/0xa*(parseInt(_0x2d969f(0xaa))/0xb);if(_0x5462e5===_0x4f7241)break;else _0x58e949['push'](_0x58e949['shift']());}catch(_0x5522cf){_0x58e949['push'](_0x58e949['shift']());}}}(_0x3e77,0x2a162));export*from'./NodeIDependsAdapter';function _0x3e77(){var _0x12a2f7=['20ZCDxwz','246faIjle','2128410GlRbhd','7542pawBRd','4439963CdzMuI','256hzJtHn','5498sibAUL','97BjCCdc','949415PVSqWs','2647304cBmfwy','56021NLmpkv'];_0x3e77=function(){return _0x12a2f7;};return _0x3e77();}function _0x5ba2(_0x57d9d3,_0x21b14d){var _0x3e771f=_0x3e77();return _0x5ba2=function(_0x5ba286,_0x55e926){_0x5ba286=_0x5ba286-0xaa;var _0x3f37fd=_0x3e771f[_0x5ba286];return _0x3f37fd;},_0x5ba2(_0x57d9d3,_0x21b14d);}export*from'./NodeIDispatcherAdapter';export*from'./NodeIGlobalAdapter';

View File

@@ -1,37 +0,0 @@
import { CacheFileListItem, CacheFileType, ChatCacheListItemBasic, ChatType, ElementType } from '@/core/entities';
import { GeneralCallResult } from '@/core';
import * as fileType from 'file-type';
import { ISizeCalculationResult } from 'image-size/dist/types/interface';
export declare class NTQQFileApi {
static getFileType(filePath: string): Promise<fileType.FileTypeResult | undefined>;
static copyFile(filePath: string, destPath: string): Promise<void>;
static getFileSize(filePath: string): Promise<number>;
static uploadFile(filePath: string, elementType?: ElementType, elementSubType?: number): Promise<{
md5: string;
fileName: string;
path: string;
fileSize: number;
ext: string;
}>;
static downloadMedia(msgId: string, chatType: ChatType, peerUid: string, elementId: string, thumbPath: string, sourcePath: string, timeout?: number, force?: boolean): Promise<string>;
static getImageSize(filePath: string): Promise<ISizeCalculationResult | undefined>;
static getImageUrl(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

View File

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

View File

@@ -1 +0,0 @@
(function(_0x15323a,_0x5bd824){const _0xcfebd9=_0x1b89,_0x51b705=_0x15323a();while(!![]){try{const _0x4987c3=parseInt(_0xcfebd9(0x15f))/0x1*(parseInt(_0xcfebd9(0x15e))/0x2)+-parseInt(_0xcfebd9(0x161))/0x3*(-parseInt(_0xcfebd9(0x157))/0x4)+-parseInt(_0xcfebd9(0x167))/0x5+-parseInt(_0xcfebd9(0x165))/0x6*(parseInt(_0xcfebd9(0x15d))/0x7)+-parseInt(_0xcfebd9(0x15c))/0x8*(-parseInt(_0xcfebd9(0x15a))/0x9)+-parseInt(_0xcfebd9(0x16a))/0xa*(-parseInt(_0xcfebd9(0x160))/0xb)+-parseInt(_0xcfebd9(0x15b))/0xc;if(_0x4987c3===_0x5bd824)break;else _0x51b705['push'](_0x51b705['shift']());}catch(_0xd53235){_0x51b705['push'](_0x51b705['shift']());}}}(_0x1cb8,0x51fb5));import{napCatCore}from'@/core';import{NTEventDispatch}from'@/common/utils/EventTask';function _0x1b89(_0x1b8ecb,_0x3bd14e){const _0x1cb8ff=_0x1cb8();return _0x1b89=function(_0x1b89db,_0x501a13){_0x1b89db=_0x1b89db-0x157;let _0x20dc7b=_0x1cb8ff[_0x1b89db];return _0x20dc7b;},_0x1b89(_0x1b8ecb,_0x3bd14e);}export class NTQQFriendApi{static async['getFriends'](_0x1bb8d7=![]){const _0x4243e6=_0x1b89,_0x4da786={'bgiXJ':_0x4243e6(0x163)};let [_0x3a945a,_0xe67696]=await NTEventDispatch[_0x4243e6(0x169)](_0x4da786[_0x4243e6(0x168)],_0x4243e6(0x159),0x1,0x1388,_0x1bb8d7);const _0x257a77=[];for(const _0x389e6a of _0xe67696){for(const _0x27ac93 of _0x389e6a[_0x4243e6(0x166)]){_0x257a77[_0x4243e6(0x164)](_0x27ac93);}}return _0x257a77;}static async['handleFriendRequest'](_0x2a389b,_0x25dd88){const _0x5261c5=_0x1b89;napCatCore['session'][_0x5261c5(0x162)]()?.['approvalFriendRequest']({'friendUid':_0x2a389b['friendUid'],'reqTime':_0x2a389b[_0x5261c5(0x158)],'accept':_0x25dd88});}}function _0x1cb8(){const _0x1517d3=['1595675jJnWLT','bgiXJ','CallNormalEvent','230oQmFEU','1119512FvVUQQ','reqTime','NodeIKernelBuddyListener/onBuddyListChange','9nJfPsv','4586532OdIbcx','1734456IcCKdG','9842iVLyze','206ngbxUw','1805uyJmcI','242187ieSvDW','3NapPCw','getBuddyService','NodeIKernelBuddyService/getBuddyList','push','648eBBlSp','buddyList'];_0x1cb8=function(){return _0x1517d3;};return _0x1cb8();}

View File

@@ -1,57 +0,0 @@
import { GroupMember, GroupRequestOperateTypes, GroupMemberRole, GroupNotify, Group } from '../entities';
export declare class NTQQGroupApi {
static getGroups(forced?: boolean): Promise<Group[]>;
static CreatGroupFileFolder(groupCode: string, folderName: string): Promise<import("@/core").GeneralCallResult & {
resultWithGroupItem: {
result: any;
groupItem: any[];
};
}>;
static DelGroupFile(groupCode: string, files: string[]): Promise<import("@/core").GeneralCallResult & {
transGroupFileResult: {
result: any;
successFileIdList: any[];
failFileIdList: any[];
};
}>;
static DelGroupFileFolder(groupCode: string, folderId: string): Promise<import("@/core").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<import("@/core").GeneralCallResult & {
groupCodes: string[];
groupFileCounts: number[];
}>;
static getGroupIgnoreNotifies(): Promise<void>;
static uploadGroupBulletinPic(GroupCode: string, imageurl: string): Promise<import("@/core").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<import("@/core").GeneralCallResult>;
}

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
(function(_0xb31610,_0x2c7ccc){var _0x5a5d3d=_0x61c7,_0x5d962b=_0xb31610();while(!![]){try{var _0xd4104d=-parseInt(_0x5a5d3d(0xef))/0x1+-parseInt(_0x5a5d3d(0xf4))/0x2+parseInt(_0x5a5d3d(0xf0))/0x3+-parseInt(_0x5a5d3d(0xee))/0x4*(parseInt(_0x5a5d3d(0xf3))/0x5)+-parseInt(_0x5a5d3d(0xf1))/0x6+parseInt(_0x5a5d3d(0xf5))/0x7+parseInt(_0x5a5d3d(0xf2))/0x8;if(_0xd4104d===_0x2c7ccc)break;else _0x5d962b['push'](_0x5d962b['shift']());}catch(_0x39e138){_0x5d962b['push'](_0x5d962b['shift']());}}}(_0xcd07,0x6073b));export*from'./file';export*from'./friend';function _0xcd07(){var _0xe79441=['479676ocTTQt','7741632bpCsIV','2085gBTWac','222538NqKmrA','530775nUbUOd','3116ibOuKY','620632TdicXr','1464684yejxhP'];_0xcd07=function(){return _0xe79441;};return _0xcd07();}function _0x61c7(_0x3bb304,_0x18f16d){var _0xcd07fd=_0xcd07();return _0x61c7=function(_0x61c7c0,_0x33920b){_0x61c7c0=_0x61c7c0-0xee;var _0x4090fc=_0xcd07fd[_0x61c7c0];return _0x4090fc;},_0x61c7(_0x3bb304,_0x18f16d);}export*from'./group';export*from'./msg';export*from'./user';export*from'./webapi';export*from'./sign';export*from'./system';

View File

@@ -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, unknownArg: boolean): Promise<GeneralCallResult & {
msgList: RawMessage[];
}>;
static activateChat(peer: Peer): Promise<void>;
static activateChatAndGetHistory(peer: Peer): Promise<void>;
static setMsgRead(peer: Peer): Promise<GeneralCallResult>;
static 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

View File

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

View File

@@ -1 +0,0 @@
(function(_0xa8cd9a,_0x157a72){const _0x39e490=_0x4162,_0x5362bc=_0xa8cd9a();while(!![]){try{const _0x7d26dd=-parseInt(_0x39e490(0x1b1))/0x1+parseInt(_0x39e490(0x193))/0x2*(-parseInt(_0x39e490(0x1ad))/0x3)+parseInt(_0x39e490(0x1aa))/0x4+parseInt(_0x39e490(0x1b7))/0x5*(-parseInt(_0x39e490(0x1ab))/0x6)+parseInt(_0x39e490(0x195))/0x7*(parseInt(_0x39e490(0x198))/0x8)+-parseInt(_0x39e490(0x191))/0x9+parseInt(_0x39e490(0x196))/0xa;if(_0x7d26dd===_0x157a72)break;else _0x5362bc['push'](_0x5362bc['shift']());}catch(_0x41bee7){_0x5362bc['push'](_0x5362bc['shift']());}}}(_0xa24e,0x69925));import{logDebug}from'@/common/utils/log';import{NTQQUserApi}from'./user';import{selfInfo}from'../data';import{RequestUtil}from'@/common/utils/request';import{WebApi}from'./webapi';export async function SignMiniApp(_0xaaec27){const _0x29239f=_0x4162,_0x47c2bf={'yYnyO':'com.tencent.miniapp.lua','bMEcY':'tianxuan.imgJumpArk','eFtDa':_0x29239f(0x1a2),'eHmiT':'\x5c/\x5c/','fzQzf':function(_0x40b21c,_0xf62dc3){return _0x40b21c+_0xf62dc3;},'TrMsY':function(_0xeae244,_0x215dde){return _0xeae244+_0x215dde;},'LOfnS':function(_0x175e05,_0x4e0564){return _0x175e05+_0x4e0564;},'RTVqn':function(_0x59b67e,_0x470541){return _0x59b67e+_0x470541;},'LjejL':function(_0x2e0468,_0x3a2c05){return _0x2e0468+_0x3a2c05;},'SfnFi':function(_0x531363,_0x4dab5c){return _0x531363+_0x4dab5c;},'qgjcH':'p_skey=','pjQXt':_0x29239f(0x19b),'UIlSV':_0x29239f(0x1b6),'IKpZq':_0x29239f(0x18f),'bvxvL':function(_0x4a4c1f,_0x400abc){return _0x4a4c1f+_0x400abc;},'KGnYN':_0x29239f(0x1af),'UiwZR':function(_0x1cab3c,_0x2a28ab){return _0x1cab3c(_0x2a28ab);},'DvAQA':_0x29239f(0x1a9),'JhyRU':function(_0x105648,_0x18a7b4,_0x30b0a9){return _0x105648(_0x18a7b4,_0x30b0a9);}};let _0x10cb94={'app':_0x47c2bf[_0x29239f(0x185)],'bizsrc':_0x47c2bf[_0x29239f(0x1a3)],'view':_0x29239f(0x188),'prompt':_0xaaec27[_0x29239f(0x190)],'config':{'type':_0x47c2bf['eFtDa'],'forward':0x1,'autosize':0x0},'meta':{'miniapp':{'title':_0xaaec27[_0x29239f(0x19d)],'preview':_0xaaec27['preview'][_0x29239f(0x1ae)](/\\/g,_0x47c2bf[_0x29239f(0x1a4)]),'jumpUrl':_0xaaec27[_0x29239f(0x19f)][_0x29239f(0x1ae)](/\\/g,_0x47c2bf[_0x29239f(0x1a4)]),'tag':_0xaaec27['tag'],'tagIcon':_0xaaec27[_0x29239f(0x18d)][_0x29239f(0x1ae)](/\\/g,_0x29239f(0x18b)),'source':_0xaaec27[_0x29239f(0x18e)],'sourcelogo':_0xaaec27[_0x29239f(0x18a)][_0x29239f(0x1ae)](/\\/g,_0x47c2bf[_0x29239f(0x1a4)])}}};const _0x15a271=await NTQQUserApi['getSkey']();let _0x2a1df3=await NTQQUserApi['getQzoneCookies']();const _0x17c3fa=WebApi[_0x29239f(0x19c)](_0x2a1df3[_0x29239f(0x1a8)]),_0x107392=_0x47c2bf[_0x29239f(0x1b8)](_0x47c2bf[_0x29239f(0x19e)](_0x47c2bf[_0x29239f(0x19e)](_0x47c2bf[_0x29239f(0x1b5)](_0x47c2bf[_0x29239f(0x186)](_0x47c2bf[_0x29239f(0x1a0)](_0x47c2bf[_0x29239f(0x1a1)](_0x47c2bf['qgjcH'],_0x2a1df3[_0x29239f(0x1a8)]),_0x47c2bf[_0x29239f(0x1a5)]),_0x2a1df3[_0x29239f(0x187)]),_0x47c2bf[_0x29239f(0x189)]),selfInfo['uin']),_0x47c2bf[_0x29239f(0x1ac)]),selfInfo[_0x29239f(0x1b4)]);let _0x1d24e7=_0x47c2bf[_0x29239f(0x1a1)](_0x47c2bf['SfnFi'](_0x47c2bf[_0x29239f(0x1b2)](_0x47c2bf[_0x29239f(0x19a)],_0x17c3fa),_0x29239f(0x18c)),_0x47c2bf[_0x29239f(0x1b3)](encodeURIComponent,JSON[_0x29239f(0x1a6)](_0x10cb94))),_0x3cff0d='';try{let _0x5286ec=await RequestUtil[_0x29239f(0x199)](_0x1d24e7,_0x47c2bf[_0x29239f(0x1a7)],undefined,{'Cookie':_0x107392});_0x3cff0d=_0x5286ec[_0x29239f(0x192)][_0x29239f(0x197)];}catch(_0x3d1722){_0x47c2bf[_0x29239f(0x1b0)](logDebug,_0x29239f(0x194),_0x3d1722);}return _0x3cff0d;}function _0x4162(_0x31a76f,_0xadc953){const _0xa24ecd=_0xa24e();return _0x4162=function(_0x4162aa,_0x278181){_0x4162aa=_0x4162aa-0x185;let _0x34c919=_0xa24ecd[_0x4162aa];return _0x34c919;},_0x4162(_0x31a76f,_0xadc953);}function _0xa24e(){const _0x13245a=['DvAQA','p_skey','GET','1251040MgxtYy','4123608EkgNvh','IKpZq','790827SclqVt','replace','https://h5.qzone.qq.com/v2/vip/tx/trpc/ark-share/GenNewSignedArk?g_tk=','JhyRU','631649nfAkJf','bvxvL','UiwZR','uin','LOfnS',';\x20p_uin=o','5ZnlDqj','fzQzf','yYnyO','RTVqn','skey','miniapp','UIlSV','sourcelogo','\x5c/\x5c/','&ark=','tagIcon','source',';\x20uin=o','prompt','6740703lbXzhM','data','2pVKwwX','MiniApp\x20JSON\x20消息生成失败','1818761OAOQas','19315080KYhLPl','signed_ark','16iXNpgj','HttpGetJson','KGnYN',';\x20skey=','genBkn','title','TrMsY','jumpUrl','LjejL','SfnFi','normal','bMEcY','eHmiT','pjQXt','stringify'];_0xa24e=function(){return _0x13245a;};return _0xa24e();}

View File

@@ -1,7 +0,0 @@
export declare class NTQQSystemApi {
static hasOtherRunningQQProcess(): Promise<boolean>;
static ORCImage(filePath: string): Promise<import("@/core").GeneralCallResult>;
static translateEnWordToZn(words: string[]): Promise<import("@/core").GeneralCallResult & {
words: string[];
}>;
}

View File

@@ -1 +0,0 @@
var _0x3c8fd6=_0x2da5;(function(_0x32f2af,_0x4f9204){var _0x84e4a6=_0x2da5,_0x43455d=_0x32f2af();while(!![]){try{var _0x125d10=-parseInt(_0x84e4a6(0x134))/0x1+parseInt(_0x84e4a6(0x132))/0x2*(parseInt(_0x84e4a6(0x133))/0x3)+parseInt(_0x84e4a6(0x12a))/0x4+parseInt(_0x84e4a6(0x12d))/0x5+-parseInt(_0x84e4a6(0x12f))/0x6*(-parseInt(_0x84e4a6(0x135))/0x7)+parseInt(_0x84e4a6(0x129))/0x8+parseInt(_0x84e4a6(0x137))/0x9*(-parseInt(_0x84e4a6(0x128))/0xa);if(_0x125d10===_0x4f9204)break;else _0x43455d['push'](_0x43455d['shift']());}catch(_0x5dd3c1){_0x43455d['push'](_0x43455d['shift']());}}}(_0x2c37,0x9aed1));function _0x2c37(){var _0x3c4a42=['1071768EoLYXl','3542ygTcPx','session','72NPLLKG','1273870Mgwhvk','7428440tNbVHc','2827624FecycE','getNodeMiscService','util','1281565VMIMYo','hasOtherRunningQQProcess','3018fVVqsA','wantWinScreenOCR','ORCImage','158lttkut','21993fJjkCy'];_0x2c37=function(){return _0x3c4a42;};return _0x2c37();}import{napCatCore}from'@/core';function _0x2da5(_0xd81610,_0x55a82b){var _0x2c3767=_0x2c37();return _0x2da5=function(_0x2da58c,_0x410220){_0x2da58c=_0x2da58c-0x128;var _0x4169b0=_0x2c3767[_0x2da58c];return _0x4169b0;},_0x2da5(_0xd81610,_0x55a82b);}export class NTQQSystemApi{static async['hasOtherRunningQQProcess'](){var _0x56f53c=_0x2da5;return napCatCore[_0x56f53c(0x12c)][_0x56f53c(0x12e)]();}static async[_0x3c8fd6(0x131)](_0x254c26){var _0xa9638d=_0x3c8fd6;return napCatCore['session'][_0xa9638d(0x12b)]()[_0xa9638d(0x130)](_0x254c26);}static async['translateEnWordToZn'](_0x131b69){var _0x3557b1=_0x3c8fd6;return napCatCore[_0x3557b1(0x136)]['getRichMediaService']()['translateEnWordToZn'](_0x131b69);}}

View File

@@ -1,29 +0,0 @@
import { ModifyProfileParams, User, UserDetailInfoByUin } from '@/core/entities';
import { GeneralCallResult } from '@/core';
export declare class NTQQUserApi {
static setSelfOnlineStatus(status: number, extStatus: number, batteryStatus: number): Promise<GeneralCallResult>;
static like(uid: string, count?: number): Promise<{
result: number;
errMsg: string;
succCounts: number;
}>;
static setQQAvatar(filePath: string): Promise<{
result: number;
errMsg: string;
}>;
static getSelfInfo(): Promise<void>;
static getUserInfo(uid: string): Promise<void>;
static getUserDetailInfo(uid: string): Promise<User>;
static 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

View File

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

View File

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

File diff suppressed because one or more lines are too long

View File

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

View File

@@ -1,43 +0,0 @@
import { type Friend, type FriendRequest, type Group, type GroupMember, GroupNotify, type SelfInfo, BuddyCategoryType } from './entities';
import { WebApiGroupMember } from '@/core/apis';
export declare const Credentials: {
Skey: string;
CreatTime: number;
Cookies: Map<string, string>;
ClientKey: string;
KeyIndex: string;
PskeyData: Map<string, string>;
PskeyTime: Map<string, number>;
};
export declare const WebGroupData: {
GroupData: Map<string, WebApiGroupMember[]>;
GroupTime: Map<string, number>;
};
export declare const selfInfo: SelfInfo;
export declare const groups: Map<string, Group>;
export declare function deleteGroup(groupQQ: string): void;
export declare const groupMembers: Map<string, Map<string, GroupMember>>;
export declare const friends: Map<string, Friend>;
export declare const friendRequests: Record<string, FriendRequest>;
export declare const groupNotifies: Record<string, GroupNotify>;
export declare const napCatError: {
ffmpegError: string;
httpServerError: string;
wsServerError: string;
otherError: string;
};
export declare function getFriend(uinOrUid: string): Promise<Friend | undefined>;
export declare function getGroup(qq: string | number): Promise<Group | undefined>;
export declare function getGroupMember(groupQQ: string | number, memberUinOrUid: string | number): Promise<GroupMember | null | undefined>;
export declare const 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;
};

View File

@@ -1 +0,0 @@
const _0x90c644=_0x123d;(function(_0x3940bb,_0x51ad79){const _0x5a003e=_0x123d,_0x54f0bb=_0x3940bb();while(!![]){try{const _0x597c8b=parseInt(_0x5a003e(0xf8))/0x1+parseInt(_0x5a003e(0xfd))/0x2*(-parseInt(_0x5a003e(0xf1))/0x3)+-parseInt(_0x5a003e(0x105))/0x4*(-parseInt(_0x5a003e(0xfb))/0x5)+-parseInt(_0x5a003e(0xf7))/0x6*(-parseInt(_0x5a003e(0x106))/0x7)+parseInt(_0x5a003e(0x103))/0x8+parseInt(_0x5a003e(0xf6))/0x9+-parseInt(_0x5a003e(0x101))/0xa;if(_0x597c8b===_0x51ad79)break;else _0x54f0bb['push'](_0x54f0bb['shift']());}catch(_0x167d3c){_0x54f0bb['push'](_0x54f0bb['shift']());}}}(_0x246b,0x71229));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();export function deleteGroup(_0x3dca23){const _0x8784a9=_0x123d;groups[_0x8784a9(0xf4)](_0x3dca23),groupMembers[_0x8784a9(0xf4)](_0x3dca23);}export const groupMembers=new Map();export const friends=new Map();export const friendRequests={};export const groupNotifies={};export const napCatError={'ffmpegError':'','httpServerError':'','wsServerError':'','otherError':_0x90c644(0xf9)};export async function getFriend(_0x4df720){const _0x1931c8=_0x90c644,_0x4b86d8={'RgFrX':function(_0x123db4,_0x2216ae){return _0x123db4(_0x2216ae);}};_0x4df720=_0x4df720[_0x1931c8(0xff)]();if(_0x4b86d8[_0x1931c8(0x108)](isNumeric,_0x4df720)){const _0x2de032=Array[_0x1931c8(0x100)](friends[_0x1931c8(0x102)]());return _0x2de032['find'](_0xc7230e=>_0xc7230e[_0x1931c8(0xfa)]===_0x4df720);}else return friends[_0x1931c8(0xf0)](_0x4df720);}export async function getGroup(_0x27e68a){const _0x460266=_0x90c644;let _0x22521a=groups[_0x460266(0xf0)](_0x27e68a[_0x460266(0xff)]());if(!_0x22521a)try{const _0x3d52c6=await NTQQGroupApi[_0x460266(0xf5)]();_0x3d52c6['length']&&_0x3d52c6[_0x460266(0xfc)](_0x292473=>{const _0x3b68f1=_0x460266;groups[_0x3b68f1(0x109)](_0x292473[_0x3b68f1(0x107)],_0x292473);});}catch(_0x449a41){return undefined;}return _0x22521a=groups['get'](_0x27e68a[_0x460266(0xff)]()),_0x22521a;}function _0x123d(_0xd7768c,_0x37ef4b){const _0x246b7c=_0x246b();return _0x123d=function(_0x123d56,_0x3b527f){_0x123d56=_0x123d56-0xf0;let _0x3fe38a=_0x246b7c[_0x123d56];return _0x3fe38a;},_0x123d(_0xd7768c,_0x37ef4b);}function _0x246b(){const _0x1bd0f3=['get','9SMTtDy','getGroupMembers','bOSxo','delete','getGroups','5206401anodZZ','2574uhYjfn','277XtWdDB','NapCat未能正常启动请检查日志查看错误','uin','847385flKNhp','forEach','116462BkuBux','OzWpi','toString','from','12369090LFYdWO','values','2650448wUauQe','find','20Lzbyyv','1918gIFIYs','groupCode','RgFrX','set'];_0x246b=function(){return _0x1bd0f3;};return _0x246b();}export async function getGroupMember(_0x5284d9,_0x20e5c9){const _0x26cdcb=_0x90c644,_0x16274e={'bOSxo':function(_0x4572f5,_0x38831a){return _0x4572f5(_0x38831a);},'xiQEB':function(_0x38e3f6){return _0x38e3f6();},'OzWpi':function(_0x22e0b7){return _0x22e0b7();}};_0x5284d9=_0x5284d9[_0x26cdcb(0xff)](),_0x20e5c9=_0x20e5c9[_0x26cdcb(0xff)]();let _0x3b7e1b=groupMembers[_0x26cdcb(0xf0)](_0x5284d9);if(!_0x3b7e1b)try{_0x3b7e1b=await NTQQGroupApi['getGroupMembers'](_0x5284d9),groupMembers[_0x26cdcb(0x109)](_0x5284d9,_0x3b7e1b);}catch(_0x2803ee){return null;}const _0x1596e7=()=>{const _0x2686cd=_0x26cdcb;let _0x435364=undefined;return _0x16274e[_0x2686cd(0xf3)](isNumeric,_0x20e5c9)?_0x435364=Array['from'](_0x3b7e1b['values']())[_0x2686cd(0x104)](_0x1de9f3=>_0x1de9f3['uin']===_0x20e5c9):_0x435364=_0x3b7e1b['get'](_0x20e5c9),_0x435364;};let _0x477a8f=_0x16274e['xiQEB'](_0x1596e7);return!_0x477a8f&&(_0x3b7e1b=await NTQQGroupApi[_0x26cdcb(0xf2)](_0x5284d9),_0x477a8f=_0x16274e[_0x26cdcb(0xfe)](_0x1596e7)),_0x477a8f;}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};

View File

@@ -1 +0,0 @@
(function(_0x571cd6,_0x4f3711){var _0x45c8cc=_0x5742,_0x10d69f=_0x571cd6();while(!![]){try{var _0x1a8798=-parseInt(_0x45c8cc(0xe3))/0x1+-parseInt(_0x45c8cc(0xea))/0x2*(parseInt(_0x45c8cc(0xe7))/0x3)+-parseInt(_0x45c8cc(0xec))/0x4*(-parseInt(_0x45c8cc(0xed))/0x5)+-parseInt(_0x45c8cc(0xf4))/0x6*(-parseInt(_0x45c8cc(0xe4))/0x7)+-parseInt(_0x45c8cc(0xf0))/0x8*(-parseInt(_0x45c8cc(0xee))/0x9)+-parseInt(_0x45c8cc(0xe2))/0xa+parseInt(_0x45c8cc(0xeb))/0xb;if(_0x1a8798===_0x4f3711)break;else _0x10d69f['push'](_0x10d69f['shift']());}catch(_0x5d8ca3){_0x10d69f['push'](_0x10d69f['shift']());}}}(_0x2279,0x3dab5));;export var CacheFileType;function _0x2279(){var _0x559982=['7VpxAZi','SOvfy','split','24675MRwhKn','VIDEO','FYODZ','14zOysSk','663388bHWuoO','8236KdZOhb','205FdyzIS','54nOJghj','DOCUMENT','49880rPqXTH','IMAGE','AUDIO','LUehk','2958198IiuVkN','lOqHC','OTHER','DgAml','3035560wRNTYR','61442IePxgt'];_0x2279=function(){return _0x559982;};return _0x2279();}function _0x5742(_0x550f0d,_0x4125a3){var _0x2279de=_0x2279();return _0x5742=function(_0x574215,_0x55e309){_0x574215=_0x574215-0xe1;var _0x5a0360=_0x2279de[_0x574215];return _0x5a0360;},_0x5742(_0x550f0d,_0x4125a3);}(function(_0x22d635){var _0x4ebe49=_0x5742,_0x29a76f={'DgAml':_0x4ebe49(0xef),'lOqHC':_0x4ebe49(0xe8),'SOvfy':_0x4ebe49(0xf1),'FYODZ':_0x4ebe49(0xf2),'LUehk':_0x4ebe49(0xf6)},_0x3fe20f='2|1|3|0|4'[_0x4ebe49(0xe6)]('|'),_0xd1d66a=0x0;while(!![]){switch(_0x3fe20f[_0xd1d66a++]){case'0':_0x22d635[_0x22d635[_0x29a76f['DgAml']]=0x3]=_0x29a76f[_0x4ebe49(0xe1)];continue;case'1':_0x22d635[_0x22d635[_0x29a76f[_0x4ebe49(0xf5)]]=0x1]=_0x29a76f['lOqHC'];continue;case'2':_0x22d635[_0x22d635[_0x29a76f[_0x4ebe49(0xe5)]]=0x0]=_0x4ebe49(0xf1);continue;case'3':_0x22d635[_0x22d635[_0x29a76f[_0x4ebe49(0xe9)]]=0x2]=_0x29a76f[_0x4ebe49(0xe9)];continue;case'4':_0x22d635[_0x22d635[_0x4ebe49(0xf6)]=0x4]=_0x29a76f[_0x4ebe49(0xf3)];continue;}break;}}(CacheFileType||(CacheFileType={})));

View File

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

View File

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

View File

@@ -1 +0,0 @@
(function(_0x3eba37,_0x497acf){var _0x57a4ab=_0x55e0,_0x130b4f=_0x3eba37();while(!![]){try{var _0xecf628=parseInt(_0x57a4ab(0x17c))/0x1+-parseInt(_0x57a4ab(0x177))/0x2*(-parseInt(_0x57a4ab(0x175))/0x3)+parseInt(_0x57a4ab(0x170))/0x4+parseInt(_0x57a4ab(0x17a))/0x5*(-parseInt(_0x57a4ab(0x176))/0x6)+-parseInt(_0x57a4ab(0x174))/0x7+parseInt(_0x57a4ab(0x17d))/0x8+-parseInt(_0x57a4ab(0x172))/0x9*(-parseInt(_0x57a4ab(0x17e))/0xa);if(_0xecf628===_0x497acf)break;else _0x130b4f['push'](_0x130b4f['shift']());}catch(_0x2fbf8d){_0x130b4f['push'](_0x130b4f['shift']());}}}(_0x3c9a,0xef86e));export var GroupMemberRole;function _0x55e0(_0x48630f,_0x2ef894){var _0x3c9a72=_0x3c9a();return _0x55e0=function(_0x55e0fb,_0xd5f033){_0x55e0fb=_0x55e0fb-0x16f;var _0x5a2abd=_0x3c9a72[_0x55e0fb];return _0x5a2abd;},_0x55e0(_0x48630f,_0x2ef894);}(function(_0x5ed4fe){var _0x382368=_0x55e0,_0x5ae093={'fJBqw':'normal','DBtFa':_0x382368(0x178),'lspvJ':_0x382368(0x173)};_0x5ed4fe[_0x5ed4fe[_0x5ae093[_0x382368(0x179)]]=0x2]=_0x382368(0x171),_0x5ed4fe[_0x5ed4fe[_0x5ae093[_0x382368(0x17b)]]=0x3]=_0x5ae093[_0x382368(0x17b)],_0x5ed4fe[_0x5ed4fe[_0x5ae093[_0x382368(0x16f)]]=0x4]=_0x5ae093[_0x382368(0x16f)];}(GroupMemberRole||(GroupMemberRole={})));function _0x3c9a(){var _0x57609b=['DBtFa','131804DlumfY','4111680ZHsNib','13235610izFxgw','lspvJ','1084276bJCTmi','normal','9FXJtsd','owner','10114272geIRjz','39hTvjYO','6rBqmVR','231698KnfXFC','admin','fJBqw','6602165hCGwNb'];_0x3c9a=function(){return _0x57609b;};return _0x3c9a();}

View File

@@ -1 +0,0 @@
function _0x529c(_0x34841d,_0x2a6039){var _0x498a17=_0x498a();return _0x529c=function(_0x529cee,_0xa4b0aa){_0x529cee=_0x529cee-0xf8;var _0xe4d279=_0x498a17[_0x529cee];return _0xe4d279;},_0x529c(_0x34841d,_0x2a6039);}(function(_0x3f3b10,_0x265363){var _0x3db235=_0x529c,_0x2e527b=_0x3f3b10();while(!![]){try{var _0x13ee98=-parseInt(_0x3db235(0xf8))/0x1*(parseInt(_0x3db235(0x100))/0x2)+parseInt(_0x3db235(0x102))/0x3+-parseInt(_0x3db235(0xfc))/0x4+parseInt(_0x3db235(0xfe))/0x5*(-parseInt(_0x3db235(0x103))/0x6)+-parseInt(_0x3db235(0xff))/0x7*(parseInt(_0x3db235(0x101))/0x8)+-parseInt(_0x3db235(0xf9))/0x9*(-parseInt(_0x3db235(0xfd))/0xa)+parseInt(_0x3db235(0xfa))/0xb*(parseInt(_0x3db235(0xfb))/0xc);if(_0x13ee98===_0x265363)break;else _0x2e527b['push'](_0x2e527b['shift']());}catch(_0x8782c5){_0x2e527b['push'](_0x2e527b['shift']());}}}(_0x498a,0x76326));export*from'./user';export*from'./group';function _0x498a(){var _0x3a2a4d=['744wNyLIN','188608wQddIZ','387570AJVwXd','139575TCDwJF','7fAOeuC','4GmhCJD','4424152BpiXAa','2268201QppAsq','120eBPoGq','481972chQkVc','198gTdWlb','177034rWaAMp'];_0x498a=function(){return _0x3a2a4d;};return _0x498a();}export*from'./msg';export*from'./notify';export*from'./cache';export*from'./constructor';

View File

@@ -1,400 +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 interface PttElement {
canConvert2Text: boolean;
duration: number;
fileBizId: null;
fileId: number;
fileName: string;
filePath: string;
fileSize: string;
fileSubId: string;
fileUuid: string;
formatType: string;
invalidState: number;
md5HexStr: string;
playState: number;
progress: number;
text: string;
transferStatus: number;
translateStatus: number;
voiceChangeType: number;
voiceType: number;
waveAmplitudes: number[];
}
export interface ArkElement {
bytesData: string;
linkInfo: null;
subElementType: null;
}
export declare const IMAGE_HTTP_HOST = "https://gchat.qpic.cn";
export declare const IMAGE_HTTP_HOST_NT = "https://multimedia.nt.qq.com.cn";
export interface PicElement {
originImageUrl: string;
originImageMd5?: string;
sourcePath: string;
thumbPath: Map<number, string>;
picWidth: number;
picHeight: number;
fileSize: number;
fileName: string;
fileUuid: string;
md5HexStr?: string;
}
export declare enum GrayTipElementSubType {
INVITE_NEW_MEMBER = 12,
MEMBER_NEW_TITLE = 17
}
export interface GrayTipElement {
subElementType: GrayTipElementSubType;
revokeElement: {
operatorRole: string;
operatorUid: string;
operatorNick: string;
operatorRemark: string;
operatorMemRemark?: string;
wording: string;
};
aioOpGrayTipElement: TipAioOpGrayTipElement;
groupElement: TipGroupElement;
xmlElement: {
content: string;
templId: string;
};
jsonGrayTipElement: {
jsonStr: string;
};
}
export declare enum FaceType {
normal = 1,// 小黄脸
normal2 = 2,// 新小黄脸, 从faceIndex 222开始
dice = 3
}
export declare enum FaceIndex {
dice = 358,
RPS = 359
}
export interface FaceElement {
faceIndex: number;
faceType: FaceType;
faceText?: string;
packId?: string;
stickerId?: string;
sourceType?: number;
stickerType?: number;
resultId?: string;
surpriseId?: string;
randomType?: number;
}
export interface MarketFaceElement {
emojiPackageId: number;
faceName: string;
emojiId: string;
key: string;
}
export interface VideoElement {
filePath: string;
fileName: string;
videoMd5?: string;
thumbMd5?: string;
fileTime?: number;
thumbSize?: number;
fileFormat?: number;
fileSize?: string;
thumbWidth?: number;
thumbHeight?: number;
busiType?: 0;
subBusiType?: 0;
thumbPath?: Map<number, any>;
transferStatus?: 0;
progress?: 0;
invalidState?: 0;
fileUuid?: string;
fileSubId?: string;
fileBizId?: null;
originVideoMd5?: string;
import_rich_media_context?: null;
sourceVideoCodecFormat?: number;
}
export interface MarkdownElement {
content: string;
}
export interface InlineKeyboardElementRowButton {
id: string;
label: string;
visitedLabel: string;
style: 1;
type: 2;
clickLimit: 0;
unsupportTips: string;
data: string;
atBotShowChannelList: boolean;
permissionType: number;
specifyRoleIds: [];
specifyTinyids: [];
isReply: false;
anchor: 0;
enter: false;
subscribeDataTemplateIds: [];
}
export interface InlineKeyboardElement {
rows: [
{
buttons: InlineKeyboardElementRowButton[];
}
];
}
export interface TipAioOpGrayTipElement {
operateType: number;
peerUid: string;
fromGrpCodeOfTmpChat: string;
}
export declare enum TipGroupElementType {
memberIncrease = 1,
kicked = 3,// 被移出群
ban = 8
}
export interface TipGroupElement {
type: TipGroupElementType;
role: 0;
groupName: string;
memberUid: string;
memberNick: string;
memberRemark: string;
adminUid: string;
adminNick: string;
adminRemark: string;
createGroup: null;
memberAdd?: {
showType: 1;
otherAdd: null;
otherAddByOtherQRCode: null;
otherAddByYourQRCode: null;
youAddByOtherQRCode: null;
otherInviteOther: null;
otherInviteYou: null;
youInviteOther: null;
};
shutUp?: {
curTime: string;
duration: string;
admin: {
uid: string;
card: string;
name: string;
role: GroupMemberRole;
};
member: {
uid: string;
card: string;
name: string;
role: GroupMemberRole;
};
};
}
export interface MultiForwardMsgElement {
xmlContent: string;
resId: string;
fileName: string;
}
export interface RawMessage {
id?: number;
msgId: string;
msgTime: string;
msgSeq: string;
msgType: number;
subMsgType: number;
senderUid: string;
senderUin: string;
peerUid: string;
peerUin: string;
sendNickName: string;
sendMemberName?: string;
chatType: ChatType;
sendStatus?: number;
recallTime: string;
elements: {
elementId: string;
elementType: ElementType;
replyElement: {
senderUid: string;
sourceMsgIsIncPic: boolean;
sourceMsgText: string;
replayMsgSeq: string;
};
textElement: {
atType: AtType;
atUid: string;
content: string;
atNtUid: string;
};
picElement: PicElement;
pttElement: PttElement;
arkElement: ArkElement;
grayTipElement: GrayTipElement;
faceElement: FaceElement;
videoElement: VideoElement;
fileElement: FileElement;
marketFaceElement: MarketFaceElement;
inlineKeyboardElement: InlineKeyboardElement;
markdownElement: MarkdownElement;
multiForwardMsgElement: MultiForwardMsgElement;
}[];
}

File diff suppressed because one or more lines are too long

View File

@@ -1,69 +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 interface FriendRequest {
friendUid: string;
reqTime: string;
extWords: string;
isUnread: boolean;
friendNick: string;
sourceId: number;
groupCode: string;
}
export interface FriendRequestNotify {
unreadNums: number;
buddyReqs: FriendRequest[];
}

View File

@@ -1 +0,0 @@
(function(_0x7d0811,_0x9559dc){var _0x2bc126=_0x5d56,_0x2d90d0=_0x7d0811();while(!![]){try{var _0x54f71d=parseInt(_0x2bc126(0x100))/0x1+parseInt(_0x2bc126(0x10b))/0x2*(-parseInt(_0x2bc126(0x101))/0x3)+-parseInt(_0x2bc126(0x11b))/0x4*(-parseInt(_0x2bc126(0x11c))/0x5)+-parseInt(_0x2bc126(0x105))/0x6+parseInt(_0x2bc126(0x11a))/0x7*(-parseInt(_0x2bc126(0x11f))/0x8)+-parseInt(_0x2bc126(0x111))/0x9+parseInt(_0x2bc126(0x119))/0xa;if(_0x54f71d===_0x9559dc)break;else _0x2d90d0['push'](_0x2d90d0['shift']());}catch(_0x3596b4){_0x2d90d0['push'](_0x2d90d0['shift']());}}}(_0x376e,0x63684));function _0x5d56(_0x4ce3b5,_0x259540){var _0x376e4a=_0x376e();return _0x5d56=function(_0x5d5641,_0xeaf8e6){_0x5d5641=_0x5d5641-0x100;var _0x3548a5=_0x376e4a[_0x5d5641];return _0x3548a5;},_0x5d56(_0x4ce3b5,_0x259540);}export var GroupNotifyTypes;(function(_0x310d35){var _0x149231=_0x5d56,_0x252710={'NZCnw':_0x149231(0x114),'uPFzG':_0x149231(0x108),'DwNXE':_0x149231(0x116),'yCiJX':_0x149231(0x10e),'BCOxf':_0x149231(0x107),'GAGDE':'ADMIN_UNSET','OiNWa':_0x149231(0x109),'pskiF':'MEMBER_EXIT','Bpgjo':'KICK_MEMBER'},_0x5b56b2=_0x252710['NZCnw'][_0x149231(0x10f)]('|'),_0x4626e2=0x0;while(!![]){switch(_0x5b56b2[_0x4626e2++]){case'0':_0x310d35[_0x310d35[_0x252710[_0x149231(0x117)]]=0xd]=_0x252710[_0x149231(0x117)];continue;case'1':_0x310d35[_0x310d35[_0x252710[_0x149231(0x110)]]=0x7]=_0x149231(0x116);continue;case'2':_0x310d35[_0x310d35[_0x149231(0x10e)]=0x8]=_0x252710[_0x149231(0x115)];continue;case'3':_0x310d35[_0x310d35[_0x252710[_0x149231(0x106)]]=0x1]=_0x252710['BCOxf'];continue;case'4':_0x310d35[_0x310d35[_0x252710[_0x149231(0x118)]]=0xc]=_0x252710[_0x149231(0x118)];continue;case'5':_0x310d35[_0x310d35[_0x252710['OiNWa']]=0x4]=_0x252710[_0x149231(0x120)];continue;case'6':_0x310d35[_0x310d35[_0x252710['pskiF']]=0xb]='MEMBER_EXIT';continue;case'7':_0x310d35[_0x310d35[_0x252710[_0x149231(0x102)]]=0x9]=_0x252710[_0x149231(0x102)];continue;}break;}}(GroupNotifyTypes||(GroupNotifyTypes={})));export var GroupNotifyStatus;function _0x376e(){var _0x9f7aea=['OiNWa','551978sJCSWv','3ItdETv','Bpgjo','AUuZe','APPROVE','432372hfqjfO','BCOxf','INVITE_ME','ADMIN_UNSET_OTHER','INVITED_JOIN','hyeoQ','130286qZdFuj','approve','ewsuQ','ADMIN_SET','split','DwNXE','3269115OUxudj','rJAOJ','NhqhX','3|5|1|2|7|6|4|0','yCiJX','JOIN_REQUEST','uPFzG','GAGDE','445560MqVxpy','5509NhgopD','196492RXobeV','75HVaGho','REJECT','mfiGK','4328IfBBZw'];_0x376e=function(){return _0x9f7aea;};return _0x376e();}(function(_0x5c4ac4){var _0x545e79=_0x5d56,_0x4e37ef={'ewsuQ':'IGNORE','rJAOJ':'WAIT_HANDLE','mfiGK':_0x545e79(0x104),'NhqhX':_0x545e79(0x11d)};_0x5c4ac4[_0x5c4ac4[_0x4e37ef[_0x545e79(0x10d)]]=0x0]=_0x4e37ef['ewsuQ'],_0x5c4ac4[_0x5c4ac4[_0x4e37ef['rJAOJ']]=0x1]=_0x4e37ef[_0x545e79(0x112)],_0x5c4ac4[_0x5c4ac4[_0x4e37ef[_0x545e79(0x11e)]]=0x2]=_0x545e79(0x104),_0x5c4ac4[_0x5c4ac4[_0x4e37ef[_0x545e79(0x113)]]=0x3]=_0x545e79(0x11d);}(GroupNotifyStatus||(GroupNotifyStatus={})));export var GroupRequestOperateTypes;(function(_0x8f4409){var _0x2787e0=_0x5d56,_0x3a43a0={'AUuZe':'approve','hyeoQ':'reject'};_0x8f4409[_0x8f4409[_0x2787e0(0x10c)]=0x1]=_0x3a43a0[_0x2787e0(0x103)],_0x8f4409[_0x8f4409['reject']=0x2]=_0x3a43a0[_0x2787e0(0x10a)];}(GroupRequestOperateTypes||(GroupRequestOperateTypes={})));

View File

@@ -1,169 +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 interface UserDetailInfoByUin {
result: number;
errMsg: string;
info: {
uid: string;
qid: string;
uin: string;
nick: string;
remark: string;
longNick: string;
avatarUrl: string;
birthday_year: number;
birthday_month: number;
birthday_day: number;
sex: number;
topTime: string;
constellation: number;
shengXiao: number;
kBloodType: number;
homeTown: string;
makeFriendCareer: number;
pos: string;
eMail: string;
phoneNum: string;
college: string;
country: string;
province: string;
city: string;
postCode: string;
address: string;
isBlock: boolean;
isSpecialCareOpen: boolean;
isSpecialCareZone: boolean;
ringId: string;
regTime: number;
interest: string;
termType: number;
labels: any[];
qqLevel: {
crownNum: number;
sunNum: number;
moonNum: number;
starNum: number;
};
isHideQQLevel: number;
privilegeIcon: {
jumpUrl: string;
openIconList: any[];
closeIconList: any[];
};
isHidePrivilegeIcon: number;
photoWall: {
picList: any[];
};
vipFlag: boolean;
yearVipFlag: boolean;
svipFlag: boolean;
vipLevel: number;
status: number;
qidianMasterFlag: number;
qidianCrewFlag: number;
qidianCrewFlag2: number;
extStatus: number;
recommendImgFlag: number;
disableEmojiShortCuts: number;
pendantId: string;
vipNameColorId: string;
};
}

View File

@@ -1 +0,0 @@
function _0x558b(){var _0x2d7a37=['2DgwsfC','unknown','male','909007aLDGTT','female','40cJboYM','550ZnNSiv','251358ZSeMNF','8507223pxiWCJ','872tNciYj','52619qqgUxw','ogIfx','110170lfkhPG','japol','2492812hWIUSA','1340913ahJZBc'];_0x558b=function(){return _0x2d7a37;};return _0x558b();}function _0x224b(_0x4468a3,_0x34c094){var _0x558b52=_0x558b();return _0x224b=function(_0x224b73,_0x5d2b99){_0x224b73=_0x224b73-0x1a4;var _0x4bd9f2=_0x558b52[_0x224b73];return _0x4bd9f2;},_0x224b(_0x4468a3,_0x34c094);}(function(_0x2d4259,_0x7994db){var _0x2f727c=_0x224b,_0x552f46=_0x2d4259();while(!![]){try{var _0x1c622e=parseInt(_0x2f727c(0x1a6))/0x1*(parseInt(_0x2f727c(0x1b3))/0x2)+-parseInt(_0x2f727c(0x1b2))/0x3+-parseInt(_0x2f727c(0x1b1))/0x4+parseInt(_0x2f727c(0x1a8))/0x5*(parseInt(_0x2f727c(0x1aa))/0x6)+-parseInt(_0x2f727c(0x1ad))/0x7*(-parseInt(_0x2f727c(0x1ac))/0x8)+-parseInt(_0x2f727c(0x1ab))/0x9+-parseInt(_0x2f727c(0x1af))/0xa*(-parseInt(_0x2f727c(0x1a9))/0xb);if(_0x1c622e===_0x7994db)break;else _0x552f46['push'](_0x552f46['shift']());}catch(_0x5b18dd){_0x552f46['push'](_0x552f46['shift']());}}}(_0x558b,0x92395));export var Sex;(function(_0x5f3282){var _0x5a90b3=_0x224b,_0x13c50c={'SLLHM':_0x5a90b3(0x1a5),'japol':_0x5a90b3(0x1a7),'ogIfx':_0x5a90b3(0x1a4)};_0x5f3282[_0x5f3282[_0x5a90b3(0x1a5)]=0x1]=_0x13c50c['SLLHM'],_0x5f3282[_0x5f3282[_0x13c50c['japol']]=0x2]=_0x13c50c[_0x5a90b3(0x1b0)],_0x5f3282[_0x5f3282[_0x13c50c[_0x5a90b3(0x1ae)]]=0xff]=_0x5a90b3(0x1a4);}(Sex||(Sex={})));

View File

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

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
(function(_0x541b13,_0x35fccd){var _0x2154d8=_0x2911,_0x1afe69=_0x541b13();while(!![]){try{var _0x589b2c=-parseInt(_0x2154d8(0x6d))/0x1*(-parseInt(_0x2154d8(0x6c))/0x2)+parseInt(_0x2154d8(0x68))/0x3+parseInt(_0x2154d8(0x69))/0x4+-parseInt(_0x2154d8(0x6b))/0x5+parseInt(_0x2154d8(0x6f))/0x6+-parseInt(_0x2154d8(0x6e))/0x7+parseInt(_0x2154d8(0x6a))/0x8;if(_0x589b2c===_0x35fccd)break;else _0x1afe69['push'](_0x1afe69['shift']());}catch(_0x57ecd0){_0x1afe69['push'](_0x1afe69['shift']());}}}(_0x3165,0x53e34));import _0x57022c from'./wrapper';export*from'./adapters';export*from'./apis';export*from'./entities';function _0x3165(){var _0x305877=['2264328RzFxvl','288606ZwHgPw','22688anxzHB','2580472dlEqwD','555150SjPbQS','71054TZWPGz','7EGAMfB','4171132FUZfjM'];_0x3165=function(){return _0x305877;};return _0x3165();}export*from'./listeners';export*from'./services';export*as Adapters from'./adapters';export*as APIs from'./apis';function _0x2911(_0x11910c,_0x354014){var _0x316599=_0x3165();return _0x2911=function(_0x291128,_0x8cc84e){_0x291128=_0x291128-0x68;var _0x2a5653=_0x316599[_0x291128];return _0x2a5653;},_0x2911(_0x11910c,_0x354014);}export*as Entities from'./entities';export*as Listeners from'./listeners';export*as Services from'./services';export{_0x57022c as Wrapper};export*as WrapperInterface from'./wrapper';export*as SessionConfig from'./sessionConfig';export{napCatCore}from'./core';

View File

@@ -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 {};

View File

@@ -1 +0,0 @@
var _0x3261e9=_0x25da;function _0x25da(_0x4acf6b,_0x524728){var _0x4a1c20=_0x4a1c();return _0x25da=function(_0x25dabc,_0xc8d457){_0x25dabc=_0x25dabc-0x12e;var _0x2d5a0a=_0x4a1c20[_0x25dabc];return _0x2d5a0a;},_0x25da(_0x4acf6b,_0x524728);}(function(_0x2ac88b,_0x2ea05d){var _0x5c767=_0x25da,_0x36cfa6=_0x2ac88b();while(!![]){try{var _0x27cb5d=parseInt(_0x5c767(0x136))/0x1+-parseInt(_0x5c767(0x137))/0x2+parseInt(_0x5c767(0x131))/0x3+-parseInt(_0x5c767(0x13f))/0x4+parseInt(_0x5c767(0x134))/0x5+-parseInt(_0x5c767(0x132))/0x6+parseInt(_0x5c767(0x138))/0x7;if(_0x27cb5d===_0x2ea05d)break;else _0x36cfa6['push'](_0x36cfa6['shift']());}catch(_0x5e47ea){_0x36cfa6['push'](_0x36cfa6['shift']());}}}(_0x4a1c,0x6dea4));function _0x4a1c(){var _0x37142e=['onSmartInfos','onBlockChanged','onBuddyReqChange','onBuddyDetailInfoChange','1029921WHHwWZ','2865234HeJslG','onAddMeSettingChanged','1892405jLGijL','onNickUpdated','53073ATQIHq','1138794YdnQeC','7662767TOGxtq','onSpacePermissionInfos','onAddBuddyNeedVerify','onDoubtBuddyReqUnreadNumChange','onCheckBuddySettingResult','onBuddyInfoChange','onBuddyListChange','1489576ZcqAes'];_0x4a1c=function(){return _0x37142e;};return _0x4a1c();}export class BuddyListener{[_0x3261e9(0x13a)](_0x3b9999){}[_0x3261e9(0x133)](_0x2e4231){}['onAvatarUrlUpdated'](_0x1d4b33){}[_0x3261e9(0x12e)](_0x2086d7){}[_0x3261e9(0x130)](_0x3204d4){}[_0x3261e9(0x13d)](_0x44b810){}[_0x3261e9(0x13e)](_0x272484){}['onBuddyRemarkUpdated'](_0x17273f){}[_0x3261e9(0x12f)](_0x932bc6){}['onBuddyReqUnreadCntChange'](_0x3422b0){}[_0x3261e9(0x13c)](_0x3cd4b2){}['onDelBatchBuddyInfos'](_0x3000b0){}['onDoubtBuddyReqChange'](_0xf23596){}[_0x3261e9(0x13b)](_0x10adab){}[_0x3261e9(0x135)](_0x27c6ac){}[_0x3261e9(0x140)](_0x305895){}[_0x3261e9(0x139)](_0x12f358){}}

View File

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

View File

@@ -1 +0,0 @@
var _0x48f75f=_0x50f6;(function(_0x1a1898,_0x4a751e){var _0x214528=_0x50f6,_0x3d6479=_0x1a1898();while(!![]){try{var _0x50d730=parseInt(_0x214528(0x119))/0x1+-parseInt(_0x214528(0x114))/0x2*(parseInt(_0x214528(0x115))/0x3)+parseInt(_0x214528(0x117))/0x4*(-parseInt(_0x214528(0x118))/0x5)+-parseInt(_0x214528(0x11e))/0x6+-parseInt(_0x214528(0x112))/0x7*(-parseInt(_0x214528(0x11f))/0x8)+parseInt(_0x214528(0x111))/0x9*(-parseInt(_0x214528(0x116))/0xa)+parseInt(_0x214528(0x11d))/0xb*(parseInt(_0x214528(0x110))/0xc);if(_0x50d730===_0x4a751e)break;else _0x3d6479['push'](_0x3d6479['shift']());}catch(_0x3c180a){_0x3d6479['push'](_0x3d6479['shift']());}}}(_0x4c71,0x2707a));function _0x50f6(_0x5d7ece,_0x23b66){var _0x4c71e6=_0x4c71();return _0x50f6=function(_0x50f698,_0x21f9b2){_0x50f698=_0x50f698-0x110;var _0x40424b=_0x4c71e6[_0x50f698];return _0x40424b;},_0x50f6(_0x5d7ece,_0x23b66);}function _0x4c71(){var _0x518655=['344imwMhZ','478020vywqkp','487764AmsWpx','32543hYXWOX','onFileStatusChanged','74110PfhtyY','3kqtcDX','30cyMorN','6980jzEKlQ','665VUHXAE','230079kKHVjM','onFileListChanged','onFileSearch','onSessionListChanged','55ULkYXB','225402eHQZRZ'];_0x4c71=function(){return _0x518655;};return _0x4c71();}export class KernelFileAssistantListener{[_0x48f75f(0x113)](..._0x480017){}[_0x48f75f(0x11c)](..._0xa0dff8){}['onSessionChanged'](..._0x4efa91){}[_0x48f75f(0x11a)](..._0x25aeb8){}[_0x48f75f(0x11b)](..._0x28f471){}}

View File

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

View File

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

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