mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-07-19 12:03:37 +00:00
Compare commits
14 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
f43c1eadd7 | ||
![]() |
ae4b4e7ff9 | ||
![]() |
68b9771fa9 | ||
![]() |
114c98f4cf | ||
![]() |
685dc74742 | ||
![]() |
56966961dc | ||
![]() |
75b8002616 | ||
![]() |
6cd2d14e85 | ||
![]() |
d11ad0585b | ||
![]() |
ccbb641a8e | ||
![]() |
5695d10a86 | ||
![]() |
185f167c5f | ||
![]() |
9cf38a439b | ||
![]() |
de65cd810c |
@@ -1,21 +1,21 @@
|
|||||||
# EditorConfig is awesome: https://EditorConfig.org
|
# EditorConfig is awesome: https://EditorConfig.org
|
||||||
|
|
||||||
# top-most EditorConfig file
|
# top-most EditorConfig file
|
||||||
root = true
|
root = true
|
||||||
|
|
||||||
# Unix-style newlines with a newline ending every file
|
# Unix-style newlines with a newline ending every file
|
||||||
[*]
|
[*]
|
||||||
end_of_line = lf
|
end_of_line = lf|crlf
|
||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
|
|
||||||
# Matches multiple files with brace expansion notation
|
# Matches multiple files with brace expansion notation
|
||||||
# Set default charset
|
# Set default charset
|
||||||
charset = utf-8
|
charset = utf-8
|
||||||
|
|
||||||
# 2 space indentation
|
# 2 space indentation
|
||||||
[*.{cjs,mjs,js,jsx,ts,tsx,css,scss,sass,html,json}]
|
[*.{cjs,mjs,js,jsx,ts,tsx,css,scss,sass,html,json}]
|
||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
|
|
||||||
# Unfortunately, EditorConfig doesn't support space configuration inside import braces directly.
|
# Unfortunately, EditorConfig doesn't support space configuration inside import braces directly.
|
||||||
# You'll need to rely on your linter/formatter like ESLint or Prettier for that.
|
# You'll need to rely on your linter/formatter like ESLint or Prettier for that.
|
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
@@ -1,4 +1,4 @@
|
|||||||
name: "Build Action"
|
name: "Build"
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
|
3
.github/workflows/release.yml
vendored
3
.github/workflows/release.yml
vendored
@@ -1,4 +1,4 @@
|
|||||||
name: "Build Release"
|
name: "release"
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
@@ -130,7 +130,6 @@ jobs:
|
|||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
body_path: CHANGELOG.md
|
body_path: CHANGELOG.md
|
||||||
files: |
|
files: |
|
||||||
NapCat.win32.ia32.zip
|
|
||||||
NapCat.win32.x64.zip
|
NapCat.win32.x64.zip
|
||||||
NapCat.linux.x64.zip
|
NapCat.linux.x64.zip
|
||||||
NapCat.linux.arm64.zip
|
NapCat.linux.arm64.zip
|
||||||
|
69
.github/workflows/test.yml
vendored
69
.github/workflows/test.yml
vendored
@@ -1,69 +0,0 @@
|
|||||||
name: "Build Test"
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
permissions: write-all
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-linux:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
target_platform: [linux]
|
|
||||||
target_arch: [x64, arm64]
|
|
||||||
steps:
|
|
||||||
- name: Clone Main Repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
repository: 'NapNeko/NapCatQQ'
|
|
||||||
submodules: true
|
|
||||||
ref: main
|
|
||||||
token: ${{ secrets.NAPCAT_BUILD }}
|
|
||||||
- name: Use Node.js 20.X
|
|
||||||
uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- name: Build NuCat Linux
|
|
||||||
run: |
|
|
||||||
npm i --arch=${{ matrix.target_arch }} --platform=${{ matrix.target_platform }}
|
|
||||||
npm run build:prod
|
|
||||||
cd dist
|
|
||||||
npm i --omit=dev --arch=${{ matrix.target_arch }} --platform=${{ matrix.target_platform }}
|
|
||||||
cd ..
|
|
||||||
- name: Upload Artifact
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: NapCat.${{ matrix.target_platform }}.${{ matrix.target_arch }}
|
|
||||||
path: dist
|
|
||||||
build-win32:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
target_platform: [win32]
|
|
||||||
target_arch: [x64,ia32]
|
|
||||||
steps:
|
|
||||||
- name: Clone Main Repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
repository: 'NapNeko/NapCatQQ'
|
|
||||||
submodules: true
|
|
||||||
ref: main
|
|
||||||
token: ${{ secrets.NAPCAT_BUILD }}
|
|
||||||
- name: Use Node.js 20.X
|
|
||||||
uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20.x
|
|
||||||
- name: Build NuCat Linux
|
|
||||||
run: |
|
|
||||||
npm i --arch=${{ matrix.target_arch }} --platform=${{ matrix.target_platform }}
|
|
||||||
npm run build:prod
|
|
||||||
cd dist
|
|
||||||
npm i --omit=dev --arch=${{ matrix.target_arch }} --platform=${{ matrix.target_platform }}
|
|
||||||
cd ..
|
|
||||||
- name: Upload Artifact
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: NapCat.${{ matrix.target_platform }}.${{ matrix.target_arch }}
|
|
||||||
path: dist
|
|
3
.gitignore
vendored
3
.gitignore
vendored
@@ -14,5 +14,4 @@ dist/
|
|||||||
|
|
||||||
# Build
|
# Build
|
||||||
*.db
|
*.db
|
||||||
checkVersion.sh
|
checkVersion.sh
|
||||||
bun.lockb
|
|
4
.gitmodules
vendored
Normal file
4
.gitmodules
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
[submodule "src/core"]
|
||||||
|
path = src/core
|
||||||
|
url = https://github.com/NapNeko/core.git
|
||||||
|
branch = master
|
@@ -1,17 +0,0 @@
|
|||||||
# 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)
|
|
@@ -1,11 +0,0 @@
|
|||||||
# 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)
|
|
@@ -1,11 +0,0 @@
|
|||||||
# 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)
|
|
@@ -1,13 +0,0 @@
|
|||||||
# 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)
|
|
@@ -1,13 +0,0 @@
|
|||||||
# 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)
|
|
@@ -1,18 +0,0 @@
|
|||||||
# 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)
|
|
@@ -1,18 +0,0 @@
|
|||||||
# 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)
|
|
2
docs/develop/Android.md
Normal file
2
docs/develop/Android.md
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# 开始
|
||||||
|
jadx 跳转于 `com.tencent.qqnt.kernel.*`
|
42
docs/develop/GetMemberExt.md
Normal file
42
docs/develop/GetMemberExt.md
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
# Android
|
||||||
|
```java
|
||||||
|
GroupMemberExtReq groupMemberExtReq = new GroupMemberExtReq();
|
||||||
|
groupMemberExtReq.sourceType = MemberExtSourceType.TITLETYPE.ordinal();
|
||||||
|
groupMemberExtReq.groupCode = longOrNull.longValue();
|
||||||
|
groupMemberExtReq.beginUin = "0";
|
||||||
|
groupMemberExtReq.dataTime = "0";
|
||||||
|
Long[] lArr = new Long[1];
|
||||||
|
AppInterface a2 = dVar.a();
|
||||||
|
lArr[0] = Long.valueOf(a2 != null ? a2.getLongAccountUin() : 0L);
|
||||||
|
arrayListOf = CollectionsKt__CollectionsKt.arrayListOf(lArr);
|
||||||
|
groupMemberExtReq.uinList = arrayListOf;
|
||||||
|
MemberExtInfoFilter memberExtInfoFilter = new MemberExtInfoFilter();
|
||||||
|
memberExtInfoFilter.memberLevelInfoUin = 1;
|
||||||
|
memberExtInfoFilter.memberLevelInfoPoint = 1;
|
||||||
|
memberExtInfoFilter.memberLevelInfoActiveDay = 1;
|
||||||
|
memberExtInfoFilter.memberLevelInfoLevel = 1;
|
||||||
|
memberExtInfoFilter.levelName = 1;
|
||||||
|
memberExtInfoFilter.dataTime = 1;
|
||||||
|
memberExtInfoFilter.sysShowFlag = 1;
|
||||||
|
memberExtInfoFilter.userShowFlag = 1;
|
||||||
|
memberExtInfoFilter.userShowFlagNew = 1;
|
||||||
|
memberExtInfoFilter.levelNameNew = 1;
|
||||||
|
Unit unit = Unit.INSTANCE;
|
||||||
|
groupMemberExtReq.memberExtFilter = memberExtInfoFilter;
|
||||||
|
troopLevelFrequencyControl.f(troopUin, new TroopListRepo$fetchTroopLevelInfo$2(b2, groupMemberExtReq, troopUin, new com.tencent.qqnt.troopmemberlist.report.c("fetchTroopLevelInfo")));
|
||||||
|
```
|
||||||
|
# Win
|
||||||
|
参数解析位于 sub_181456A10(24108) -> wrapper.node(24108)+1456A10
|
||||||
|
IGroupService.GetMemberExt(param: object);
|
||||||
|
param展开如下
|
||||||
|
```
|
||||||
|
groupCode string
|
||||||
|
beginUin string
|
||||||
|
dataTime string
|
||||||
|
uinList Array<string>
|
||||||
|
uinNum string
|
||||||
|
groupType string
|
||||||
|
richCardNameVer string
|
||||||
|
sourceType number
|
||||||
|
memberExtFilter object// 参数解析位于 sub_18145A6D0(24108) -> wrapper.node(24108)+145A6D0
|
||||||
|
```
|
@@ -1,16 +0,0 @@
|
|||||||
# 开发方向
|
|
||||||
方向一 NativeCall/Hook:
|
|
||||||
1. 崩溃检测机制的实现
|
|
||||||
2. Api_Caller 的Hook 可以拿到Event/Handler 进一步提升NC 即时的拦截与处理一些事件比如ReCall拦截
|
|
||||||
3. Node包装层 进一步分析,拿到脱离自带Listener/Adapter,可以拿到一些更加底层的数据变动 或许包括更多二进制数据
|
|
||||||
|
|
||||||
方向二 全新的无头启动 Way01
|
|
||||||
1. 基于Node启动原理,借助导出符号获取函数地址 再次还原NodeMain
|
|
||||||
|
|
||||||
方向三 发包与收包
|
|
||||||
1. 参考 方向一/3 大概可以收包
|
|
||||||
2. 发包 (暂时没有计划)
|
|
||||||
|
|
||||||
方向四 版本控制
|
|
||||||
1. 根据不同版本进行逻辑控制
|
|
||||||
2. 某些参数的自动提取
|
|
24
docs/develop/参与开发.md
Normal file
24
docs/develop/参与开发.md
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# 前排提示
|
||||||
|
由于Core未处于开源,非组织人员无法参与Core开发,此处为Core开发提示
|
||||||
|
|
||||||
|
# 准备工具
|
||||||
|
frida ida-pro jadx x64dbg ce 内部调试脚本
|
||||||
|
|
||||||
|
## ida-pro
|
||||||
|
1. 用于快速分析入参和返回类型
|
||||||
|
2. 通过静态QLog推测语义
|
||||||
|
3. 提取Listener与Service (常用)
|
||||||
|
## frida
|
||||||
|
1. 用于动态获取QLog推测语义
|
||||||
|
2. 捕捉Native函数 实际入参与数据 分析中间流程
|
||||||
|
|
||||||
|
## jadx
|
||||||
|
1. 通过其它平台实现 静态获取QLog推测语义
|
||||||
|
2. 提供部分未调用代码 参考
|
||||||
|
|
||||||
|
## x64dbg
|
||||||
|
1. 验证IDA的Hook点
|
||||||
|
|
||||||
|
## 内部脚本
|
||||||
|
1. 提取Listener与Service (不调用无类型 不推荐)
|
||||||
|
2. 获取NT调用流程
|
@@ -1 +0,0 @@
|
|||||||
getMsgUniqueId 传入时间 产出一个唯一ID 发送消息作为一个参数
|
|
@@ -2,7 +2,7 @@
|
|||||||
"name": "napcat",
|
"name": "napcat",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "1.6.6",
|
"version": "1.5.9",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"watch:dev": "vite --mode development",
|
"watch:dev": "vite --mode development",
|
||||||
"watch:prod": "vite --mode production",
|
"watch:prod": "vite --mode production",
|
||||||
@@ -64,7 +64,7 @@
|
|||||||
"json-schema-to-ts": "^3.1.0",
|
"json-schema-to-ts": "^3.1.0",
|
||||||
"log4js": "^6.9.1",
|
"log4js": "^6.9.1",
|
||||||
"qrcode-terminal": "^0.12.0",
|
"qrcode-terminal": "^0.12.0",
|
||||||
"silk-wasm": "^3.6.1",
|
"silk-wasm": "^3.3.4",
|
||||||
"sqlite3": "^5.1.7",
|
"sqlite3": "^5.1.7",
|
||||||
"uuid": "^10.0.0",
|
"uuid": "^10.0.0",
|
||||||
"ws": "^8.16.0"
|
"ws": "^8.16.0"
|
||||||
|
@@ -1,45 +0,0 @@
|
|||||||
# 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}"
|
|
@@ -1,28 +0,0 @@
|
|||||||
@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
|
|
@@ -1,3 +0,0 @@
|
|||||||
REM 全新启动脚本 基于 Hook Native 预计版本1.6.0左右发布
|
|
||||||
@echo off
|
|
||||||
pause
|
|
@@ -1,20 +0,0 @@
|
|||||||
// --------------------
|
|
||||||
// 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);
|
|
||||||
}
|
|
@@ -1,18 +0,0 @@
|
|||||||
@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 %*
|
|
@@ -1,41 +0,0 @@
|
|||||||
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}"
|
|
@@ -1,17 +0,0 @@
|
|||||||
@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 %*
|
|
@@ -1,41 +0,0 @@
|
|||||||
function Get-QQpath {
|
|
||||||
try {
|
|
||||||
$key = Get-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ"
|
|
||||||
$uninstallString = $key.UninstallString
|
|
||||||
return [System.IO.Path]::GetDirectoryName($uninstallString) + "\"
|
|
||||||
}
|
|
||||||
catch {
|
|
||||||
throw "get QQ path error: $_"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function Select-QQPath {
|
|
||||||
Add-Type -AssemblyName System.Windows.Forms
|
|
||||||
[System.Windows.Forms.Application]::EnableVisualStyles()
|
|
||||||
|
|
||||||
$dialogTitle = "Select QQ.exe"
|
|
||||||
|
|
||||||
$filePicker = New-Object System.Windows.Forms.OpenFileDialog
|
|
||||||
$filePicker.Title = $dialogTitle
|
|
||||||
$filePicker.Filter = "Executable Files (*.exe)|*.exe|All Files (*.*)|*.*"
|
|
||||||
$filePicker.FilterIndex = 1
|
|
||||||
$null = $filePicker.ShowDialog()
|
|
||||||
if (-not ($filePicker.FileName)) {
|
|
||||||
throw "User did not select an .exe file."
|
|
||||||
}
|
|
||||||
return $filePicker.FileName
|
|
||||||
}
|
|
||||||
|
|
||||||
$params = $args -join " "
|
|
||||||
Try {
|
|
||||||
$QQpath = Get-QQpath
|
|
||||||
}
|
|
||||||
Catch {
|
|
||||||
$QQpath = Select-QQPath
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(Test-Path $QQpath)) {
|
|
||||||
throw "provided QQ path is invalid: $QQpath"
|
|
||||||
}
|
|
||||||
|
|
||||||
Set-Location -Path $QQpath
|
|
||||||
Start-Process powershell -ArgumentList "-noexit", "-noprofile", "-command &{& ./QQ.exe --enable-logging $params}"
|
|
@@ -1,7 +1,7 @@
|
|||||||
import { sleep } from '@/common/utils/helper';
|
import { sleep } from '@/common/utils/helper';
|
||||||
import { logError } from './log';
|
import { logError } from './log';
|
||||||
type AsyncQueueTask = (() => void) | (()=>Promise<void>);
|
type AsyncQueueTask = (() => void) | (()=>Promise<void>);
|
||||||
// 2024.7.13 废弃
|
|
||||||
|
|
||||||
export class AsyncQueue {
|
export class AsyncQueue {
|
||||||
private tasks: (AsyncQueueTask)[] = [];
|
private tasks: (AsyncQueueTask)[] = [];
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
import { NodeIKernelMsgListener } from '@/core';
|
||||||
import { NodeIQQNTWrapperSession } from '@/core/wrapper';
|
import { NodeIQQNTWrapperSession } from '@/core/wrapper';
|
||||||
import { randomUUID } from 'crypto';
|
import { randomUUID } from 'crypto';
|
||||||
|
|
||||||
|
@@ -21,8 +21,7 @@ class cacheNode<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type cache<T, K = { [key: user_id]: cacheNode<T> }> = { [key: group_id]: K };
|
type cache<T> = { [key: group_id]: { [key: user_id]: cacheNode<T> } };
|
||||||
type removeObject<T> = cache<T, { userId: user_id, value: T }[]>
|
|
||||||
class LRU<T> {
|
class LRU<T> {
|
||||||
private maxAge: number;
|
private maxAge: number;
|
||||||
private maxSize: number;
|
private maxSize: number;
|
||||||
@@ -30,9 +29,9 @@ class LRU<T> {
|
|||||||
private cache: cache<T>;
|
private cache: cache<T>;
|
||||||
private head: cacheNode<T> | null = null;
|
private head: cacheNode<T> | null = null;
|
||||||
private tail: cacheNode<T> | null = null;
|
private tail: cacheNode<T> | null = null;
|
||||||
private onFuncs: ((node: removeObject<T>) => void)[] = [];
|
private onFuncs: ((node: cacheNode<T>) => void)[] = [];
|
||||||
|
|
||||||
constructor(maxAge: number = 6e4 * 3, maxSize: number = 1e4) {
|
constructor(maxAge: number = 2e4, maxSize: number = 5e3) {
|
||||||
this.maxAge = maxAge;
|
this.maxAge = maxAge;
|
||||||
this.maxSize = maxSize;
|
this.maxSize = maxSize;
|
||||||
this.cache = Object.create(null);
|
this.cache = Object.create(null);
|
||||||
@@ -54,39 +53,46 @@ class LRU<T> {
|
|||||||
node.prev = node.next = null;
|
node.prev = node.next = null;
|
||||||
delete this.cache[node.groupId][node.userId];
|
delete this.cache[node.groupId][node.userId];
|
||||||
this.removeNode(node);
|
this.removeNode(node);
|
||||||
this.onFuncs.forEach((func) => func({ [node.groupId]: [node] }));
|
this.onFuncs.forEach((func) => func(node));
|
||||||
this.currentSize--;
|
this.currentSize--;
|
||||||
}
|
}
|
||||||
|
|
||||||
public on(func: (node: removeObject<T>) => void) {
|
public on(func: (node: cacheNode<T>) => void) {
|
||||||
this.onFuncs.push(func);
|
this.onFuncs.push(func);
|
||||||
}
|
}
|
||||||
|
|
||||||
private removeExpired() {
|
private removeExpired() {
|
||||||
const now = Date.now();
|
const now = Date.now();
|
||||||
let current = this.tail;
|
let current = this.tail;
|
||||||
let totalNodeNum = 0;
|
const nodesToRemove: cacheNode<T>[] = [];
|
||||||
|
let removedCount = 0;
|
||||||
const removeObject: cache<T, { userId: user_id, value: T }[]> = {};
|
|
||||||
|
|
||||||
|
// 收集需要删除的节点
|
||||||
while (current && now - current.timestamp > this.maxAge) {
|
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;
|
current = current.prev;
|
||||||
totalNodeNum++;
|
removedCount++;
|
||||||
this.currentSize--;
|
if (removedCount >= 100) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!totalNodeNum) return;
|
// 更新链表指向
|
||||||
|
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) => {
|
||||||
if (current) { current.next = null; } else { this.head = null; }
|
node.prev = node.next = null;
|
||||||
this.tail = current;
|
delete this.cache[node.groupId][node.userId];
|
||||||
|
|
||||||
this.onFuncs.forEach(func => func(removeObject));
|
this.currentSize--;
|
||||||
|
this.onFuncs.forEach((func) => func(node));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private addNode(node: cacheNode<T>) {
|
private addNode(node: cacheNode<T>) {
|
||||||
@@ -134,28 +140,6 @@ 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;
|
export default LRU;
|
||||||
|
@@ -38,11 +38,11 @@ type QQVersionConfigInfo = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let _qqVersionConfigInfo: QQVersionConfigInfo = {
|
let _qqVersionConfigInfo: QQVersionConfigInfo = {
|
||||||
'baseVersion': '9.9.12-25765',
|
'baseVersion': '9.9.11-24568',
|
||||||
'curVersion': '9.9.12-25765',
|
'curVersion': '9.9.11-24568',
|
||||||
'prevVersion': '',
|
'prevVersion': '',
|
||||||
'onErrorVersions': [],
|
'onErrorVersions': [],
|
||||||
'buildId': '25765'
|
'buildId': '24568'
|
||||||
};
|
};
|
||||||
|
|
||||||
if (fs.existsSync(configVersionInfoPath)) {
|
if (fs.existsSync(configVersionInfoPath)) {
|
||||||
@@ -55,23 +55,24 @@ if (fs.existsSync(configVersionInfoPath)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const qqVersionConfigInfo: QQVersionConfigInfo = _qqVersionConfigInfo;
|
export const qqVersionConfigInfo: QQVersionConfigInfo = _qqVersionConfigInfo;
|
||||||
//V1_WIN_NQ_9.9.12_25765_GW_B
|
//V1_WIN_NQ_9.9.11_24568_GW_B
|
||||||
export const qqPkgInfo: QQPkgInfo = JSON.parse(fs.readFileSync(pkgInfoPath).toString());
|
export const qqPkgInfo: QQPkgInfo = JSON.parse(fs.readFileSync(pkgInfoPath).toString());
|
||||||
// platform_type: 3,
|
// platform_type: 3,
|
||||||
// app_type: 4,
|
// app_type: 4,
|
||||||
// app_version: '9.9.12-25765',
|
// app_version: '9.9.9-23159',
|
||||||
// qua: 'V1_WIN_NQ_9.9.12_25765_GW_B',
|
// qua: 'V1_WIN_NQ_9.9.9_23159_GW_B',
|
||||||
// appid: '537234702',
|
// appid: '537213764',
|
||||||
// platVer: '10.0.26100',
|
// platVer: '10.0.26100',
|
||||||
// clientVer: '9.9.9-25765',
|
// clientVer: '9.9.9-23159',
|
||||||
|
//Android
|
||||||
|
//V1_AND_SQ_9.0.60_6478_YYB_D
|
||||||
// Linux
|
// Linux
|
||||||
// app_version: '3.2.9-25765',
|
// app_version: '3.2.9-24568',
|
||||||
// qua: 'V1_LNX_NQ_3.2.10_25765_GW_B',
|
// qua: 'V1_LNX_NQ_3.2.9_24568_GW_B',
|
||||||
|
|
||||||
let _appid: string = '537234702'; // 默认为 Windows 平台的 appid
|
let _appid: string = '537226369'; // 默认为 Windows 平台的 appid
|
||||||
if (systemPlatform === 'linux') {
|
if (systemPlatform === 'linux') {
|
||||||
_appid = '537234773';
|
_appid = '537226441';
|
||||||
}
|
}
|
||||||
// todo: mac 平台的 appid
|
// todo: mac 平台的 appid
|
||||||
export const appid = _appid;
|
export const appid = _appid;
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import { encode, getDuration, getWavFileInfo, isWav, isSilk } from 'silk-wasm';
|
import { encode, getDuration, getWavFileInfo, isWav } from 'silk-wasm';
|
||||||
import fsPromise from 'fs/promises';
|
import fsPromise from 'fs/promises';
|
||||||
import { log, logError } from './log';
|
import { log, logError } from './log';
|
||||||
import path from 'node:path';
|
import path from 'node:path';
|
||||||
@@ -63,11 +63,10 @@ export async function encodeSilk(filePath: string) {
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const file = await fsPromise.readFile(filePath);
|
|
||||||
const pttPath = path.join(TEMP_DIR, uuidv4());
|
const pttPath = path.join(TEMP_DIR, uuidv4());
|
||||||
if (!isSilk(file)) {
|
if (getFileHeader(filePath) !== '02232153494c4b') {
|
||||||
log(`语音文件${filePath}需要转换成silk`);
|
log(`语音文件${filePath}需要转换成silk`);
|
||||||
const _isWav = isWav(file);
|
const _isWav = await isWavFile(filePath);
|
||||||
const pcmPath = pttPath + '.pcm';
|
const pcmPath = pttPath + '.pcm';
|
||||||
let sampleRate = 0;
|
let sampleRate = 0;
|
||||||
const convert = () => {
|
const convert = () => {
|
||||||
@@ -97,7 +96,7 @@ export async function encodeSilk(filePath: string) {
|
|||||||
if (!_isWav) {
|
if (!_isWav) {
|
||||||
input = await convert();
|
input = await convert();
|
||||||
} else {
|
} else {
|
||||||
input = file;
|
input = fs.readFileSync(filePath);
|
||||||
const allowSampleRate = [8000, 12000, 16000, 24000, 32000, 44100, 48000];
|
const allowSampleRate = [8000, 12000, 16000, 24000, 32000, 44100, 48000];
|
||||||
const { fmt } = getWavFileInfo(input);
|
const { fmt } = getWavFileInfo(input);
|
||||||
// log(`wav文件信息`, fmt)
|
// log(`wav文件信息`, fmt)
|
||||||
@@ -114,7 +113,7 @@ export async function encodeSilk(filePath: string) {
|
|||||||
duration: silk.duration / 1000
|
duration: silk.duration / 1000
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
const silk = file;
|
const silk = fs.readFileSync(filePath);
|
||||||
let duration = 0;
|
let duration = 0;
|
||||||
try {
|
try {
|
||||||
duration = getDuration(silk) / 1000;
|
duration = getDuration(silk) / 1000;
|
||||||
|
@@ -72,7 +72,7 @@ class DBUtil extends DBUtilBase {
|
|||||||
private cache: { gid: number; uid: number }[] = [];
|
private cache: { gid: number; uid: number }[] = [];
|
||||||
private maxSize: number;
|
private maxSize: number;
|
||||||
|
|
||||||
constructor(maxSize: number = 50000) {
|
constructor(maxSize: number = 5000) {
|
||||||
this.maxSize = maxSize;
|
this.maxSize = maxSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,83 +120,57 @@ class DBUtil extends DBUtilBase {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
this.LURCache.on(async (nodeObject) => {
|
this.LURCache.on(async (node) => {
|
||||||
|
const { value: time, groupId, userId } = node;
|
||||||
|
|
||||||
Object.entries(nodeObject).forEach(async ([_groupId, datas]) => {
|
logDebug('插入发言时间', userId, groupId);
|
||||||
const userIds = datas.map(v => v.userId);
|
await this.createGroupInfoTimeTableIfNotExist(groupId);
|
||||||
const groupId = Number(_groupId);
|
|
||||||
logDebug('插入发言时间', _groupId);
|
|
||||||
|
|
||||||
await this.createGroupInfoTimeTableIfNotExist(groupId);
|
const method = await this.getDataSetMethod(groupId, userId);
|
||||||
|
logDebug('插入发言时间方法判断', userId, groupId, method);
|
||||||
|
|
||||||
const needCreatUsers = await this.getNeedCreatList(groupId, userIds);
|
const sql =
|
||||||
const updateList = needCreatUsers.length > 0 ? datas.filter(user => !needCreatUsers.includes(user.userId)) : datas;
|
method == 'update'
|
||||||
const insertList = needCreatUsers.map(userId => datas.find(e => userId == e.userId)!);
|
? `UPDATE "${groupId}" SET last_sent_time = ? WHERE user_id = ?`
|
||||||
|
: `INSERT INTO "${groupId}" (last_sent_time, user_id) VALUES (?, ?)`;
|
||||||
|
|
||||||
logDebug('updateList', updateList);
|
this.db!.all(sql, [time, userId], (err) => {
|
||||||
logDebug('insertList', insertList);
|
if (err) {
|
||||||
|
return logError('插入/更新发言时间失败', userId, groupId);
|
||||||
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 getNeedCreatList(groupId: number, userIds: number[]) {
|
async getDataSetMethod(groupId: number, userId: number) {
|
||||||
|
// 缓存记录
|
||||||
// 获取缓存中没有的
|
if (this.LastSentCache.get(groupId, userId)) {
|
||||||
const unhas = userIds.filter(userId => !this.LastSentCache.get(groupId, userId));
|
logDebug('缓存命中', userId, groupId);
|
||||||
|
return 'update';
|
||||||
if (unhas.length == 0) {
|
|
||||||
logDebug('缓存全部命中');
|
|
||||||
return [];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
logDebug('缓存未全部命中');
|
// 数据库判断
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
const sql = `SELECT * FROM "${groupId}" WHERE user_id IN (${unhas.map(() => '?').join(',')})`;
|
if (rows.length === 0) {
|
||||||
|
logDebug('查询发言时间不存在', userId, groupId);
|
||||||
|
return resolve('insert');
|
||||||
|
}
|
||||||
|
|
||||||
return new Promise<number[]>((resolve) => {
|
logDebug('查询发言时间存在', userId, groupId);
|
||||||
this.db!.all(sql, unhas, (err, rows: { user_id: number }[]) => {
|
resolve('update');
|
||||||
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) {
|
async createGroupInfoTimeTableIfNotExist(groupId: number) {
|
||||||
const createTableSQL = (groupId: number) =>
|
const createTableSQL = (groupId: number) =>
|
||||||
@@ -434,12 +408,10 @@ class DBUtil extends DBUtilBase {
|
|||||||
logDebug('读取发言时间', groupId);
|
logDebug('读取发言时间', groupId);
|
||||||
return new Promise<IRember[]>((resolve, reject) => {
|
return new Promise<IRember[]>((resolve, reject) => {
|
||||||
this.db!.all(`SELECT * FROM "${groupId}" `, (err, rows: IRember[]) => {
|
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) {
|
if (err) {
|
||||||
logError('查询发言时间失败', groupId);
|
logError('查询发言时间失败', groupId);
|
||||||
return resolve(cache.map(e => ({ ...e, join_time: 0 })));
|
return resolve([]);
|
||||||
}
|
}
|
||||||
Object.assign(rows, cache);
|
|
||||||
logDebug('查询发言时间成功', groupId, rows);
|
logDebug('查询发言时间成功', groupId, rows);
|
||||||
resolve(rows);
|
resolve(rows);
|
||||||
});
|
});
|
||||||
|
@@ -148,8 +148,6 @@ export async function httpDownload(options: string | HttpDownloadOptions): Promi
|
|||||||
};
|
};
|
||||||
if (typeof options === 'string') {
|
if (typeof options === 'string') {
|
||||||
url = options;
|
url = options;
|
||||||
const host = new URL(url).hostname;
|
|
||||||
headers['Host'] = host;
|
|
||||||
} else {
|
} else {
|
||||||
url = options.url;
|
url = options.url;
|
||||||
if (options.headers) {
|
if (options.headers) {
|
||||||
@@ -160,12 +158,7 @@ export async function httpDownload(options: string | HttpDownloadOptions): Promi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const fetchRes = await fetch(url, { headers }).catch((err) => {
|
const fetchRes = await fetch(url, { headers });
|
||||||
if (err.cause) {
|
|
||||||
throw err.cause;
|
|
||||||
}
|
|
||||||
throw err;
|
|
||||||
});
|
|
||||||
if (!fetchRes.ok) throw new Error(`下载文件失败: ${fetchRes.statusText}`);
|
if (!fetchRes.ok) throw new Error(`下载文件失败: ${fetchRes.statusText}`);
|
||||||
|
|
||||||
const blob = await fetchRes.blob();
|
const blob = await fetchRes.blob();
|
||||||
|
@@ -1,13 +1,15 @@
|
|||||||
import https from 'node:https';
|
import https from 'node:https';
|
||||||
import http from 'node:http';
|
import http from 'node:http';
|
||||||
import { readFileSync } from 'node:fs';
|
import fs, { readFileSync } from 'node:fs';
|
||||||
import { NTQQUserApi } from '@/core';
|
import { NTQQUserApi } from '@/core';
|
||||||
|
import path from 'node:path';
|
||||||
|
import { request } from 'node:http';
|
||||||
export class RequestUtil {
|
export class RequestUtil {
|
||||||
// 适用于获取服务器下发cookies时获取,仅GET
|
// 适用于获取服务器下发cookies时获取,仅GET
|
||||||
static async HttpsGetCookies(url: string): Promise<{ [key: string]: string }> {
|
static async HttpsGetCookies(url: string): Promise<{ [key: string]: string }> {
|
||||||
const client = url.startsWith('https') ? https : http;
|
const client = url.startsWith('https') ? https : http;
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const req = client.get(url, (res) => {
|
client.get(url, (res) => {
|
||||||
let cookies: { [key: string]: string } = {};
|
let cookies: { [key: string]: string } = {};
|
||||||
const handleRedirect = (res: http.IncomingMessage) => {
|
const handleRedirect = (res: http.IncomingMessage) => {
|
||||||
//console.log(res.headers.location);
|
//console.log(res.headers.location);
|
||||||
@@ -18,8 +20,6 @@ export class RequestUtil {
|
|||||||
// 合并重定向过程中的cookies
|
// 合并重定向过程中的cookies
|
||||||
cookies = { ...cookies, ...redirectCookies };
|
cookies = { ...cookies, ...redirectCookies };
|
||||||
resolve(cookies);
|
resolve(cookies);
|
||||||
}).catch((err) => {
|
|
||||||
reject(err);
|
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
resolve(cookies);
|
resolve(cookies);
|
||||||
@@ -43,10 +43,9 @@ export class RequestUtil {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}).on('error', (err) => {
|
||||||
|
reject(err);
|
||||||
});
|
});
|
||||||
req.on('error', (error: any) => {
|
|
||||||
reject(error);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,6 +157,7 @@ export class RequestUtil {
|
|||||||
});
|
});
|
||||||
|
|
||||||
res.on('end', () => {
|
res.on('end', () => {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
|
if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
|
||||||
const responseJson = JSON.parse(responseBody) as retType;
|
const responseJson = JSON.parse(responseBody) as retType;
|
||||||
@@ -174,7 +174,6 @@ export class RequestUtil {
|
|||||||
});
|
});
|
||||||
|
|
||||||
req.on('error', (error) => {
|
req.on('error', (error) => {
|
||||||
reject(error);
|
|
||||||
console.error('Error during upload:', error);
|
console.error('Error during upload:', error);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -190,4 +189,4 @@ export class RequestUtil {
|
|||||||
return undefined;
|
return undefined;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
1
src/core
Submodule
1
src/core
Submodule
Submodule src/core added at f362cdb9fa
14
src/core.lib/src/adapters/NodeIDependsAdapter.d.ts
vendored
Normal file
14
src/core.lib/src/adapters/NodeIDependsAdapter.d.ts
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
interface IDependsAdapter {
|
||||||
|
onMSFStatusChange(arg1: number, arg2: number): void;
|
||||||
|
onMSFSsoError(args: unknown): void;
|
||||||
|
getGroupCode(args: unknown): void;
|
||||||
|
}
|
||||||
|
export interface NodeIDependsAdapter extends IDependsAdapter {
|
||||||
|
new (adapter: IDependsAdapter): NodeIDependsAdapter;
|
||||||
|
}
|
||||||
|
export declare class DependsAdapter implements IDependsAdapter {
|
||||||
|
onMSFStatusChange(arg1: number, arg2: number): void;
|
||||||
|
onMSFSsoError(args: unknown): void;
|
||||||
|
getGroupCode(args: unknown): void;
|
||||||
|
}
|
||||||
|
export {};
|
1
src/core.lib/src/adapters/NodeIDependsAdapter.js
Normal file
1
src/core.lib/src/adapters/NodeIDependsAdapter.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
function _0x3af3(_0x356d40,_0x2a20fb){var _0x101a99=_0x101a();return _0x3af3=function(_0x3af393,_0x53d8da){_0x3af393=_0x3af393-0x64;var _0x1a7781=_0x101a99[_0x3af393];return _0x1a7781;},_0x3af3(_0x356d40,_0x2a20fb);}var _0x37baa3=_0x3af3;(function(_0x3d6d4c,_0x1c9364){var _0x3270f1=_0x3af3,_0x5d4667=_0x3d6d4c();while(!![]){try{var _0x6921cf=parseInt(_0x3270f1(0x68))/0x1+-parseInt(_0x3270f1(0x6b))/0x2+parseInt(_0x3270f1(0x6f))/0x3+-parseInt(_0x3270f1(0x6e))/0x4*(parseInt(_0x3270f1(0x67))/0x5)+-parseInt(_0x3270f1(0x6a))/0x6*(parseInt(_0x3270f1(0x64))/0x7)+-parseInt(_0x3270f1(0x66))/0x8*(parseInt(_0x3270f1(0x65))/0x9)+parseInt(_0x3270f1(0x6d))/0xa;if(_0x6921cf===_0x1c9364)break;else _0x5d4667['push'](_0x5d4667['shift']());}catch(_0xc0a47b){_0x5d4667['push'](_0x5d4667['shift']());}}}(_0x101a,0xe1bfe));export class DependsAdapter{[_0x37baa3(0x69)](_0x1e1f6e,_0x459b96){}[_0x37baa3(0x6c)](_0x1f7874){}[_0x37baa3(0x70)](_0x52d383){}}function _0x101a(){var _0xa96996=['42367970pybWcp','5588848WWCYNI','1222647CgLZgG','getGroupCode','7658BHknpG','4631319UaMPvI','24IHKGAL','5juNrBF','406432qNpTWf','onMSFStatusChange','54fzBnPw','2350554PxwUSd','onMSFSsoError'];_0x101a=function(){return _0xa96996;};return _0x101a();}
|
14
src/core.lib/src/adapters/NodeIDispatcherAdapter.d.ts
vendored
Normal file
14
src/core.lib/src/adapters/NodeIDispatcherAdapter.d.ts
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
interface IDispatcherAdapter {
|
||||||
|
dispatchRequest(arg: unknown): void;
|
||||||
|
dispatchCall(arg: unknown): void;
|
||||||
|
dispatchCallWithJson(arg: unknown): void;
|
||||||
|
}
|
||||||
|
export interface NodeIDispatcherAdapter extends IDispatcherAdapter {
|
||||||
|
new (adapter: IDispatcherAdapter): NodeIDispatcherAdapter;
|
||||||
|
}
|
||||||
|
export declare class DispatcherAdapter implements IDispatcherAdapter {
|
||||||
|
dispatchRequest(arg: unknown): void;
|
||||||
|
dispatchCall(arg: unknown): void;
|
||||||
|
dispatchCallWithJson(arg: unknown): void;
|
||||||
|
}
|
||||||
|
export {};
|
1
src/core.lib/src/adapters/NodeIDispatcherAdapter.js
Normal file
1
src/core.lib/src/adapters/NodeIDispatcherAdapter.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
var _0x1a2d1a=_0x34fa;(function(_0x1a1675,_0x286fde){var _0x8a52bc=_0x34fa,_0x5eddf7=_0x1a1675();while(!![]){try{var _0x18454f=parseInt(_0x8a52bc(0x72))/0x1+-parseInt(_0x8a52bc(0x6b))/0x2*(-parseInt(_0x8a52bc(0x74))/0x3)+parseInt(_0x8a52bc(0x6e))/0x4*(-parseInt(_0x8a52bc(0x6f))/0x5)+parseInt(_0x8a52bc(0x76))/0x6*(parseInt(_0x8a52bc(0x78))/0x7)+parseInt(_0x8a52bc(0x6c))/0x8+-parseInt(_0x8a52bc(0x77))/0x9*(parseInt(_0x8a52bc(0x6d))/0xa)+-parseInt(_0x8a52bc(0x79))/0xb*(-parseInt(_0x8a52bc(0x73))/0xc);if(_0x18454f===_0x286fde)break;else _0x5eddf7['push'](_0x5eddf7['shift']());}catch(_0x39129d){_0x5eddf7['push'](_0x5eddf7['shift']());}}}(_0x5423,0x8d2fe));function _0x34fa(_0x11e3c6,_0x18a7d3){var _0x5423ce=_0x5423();return _0x34fa=function(_0x34fa44,_0x1c1e83){_0x34fa44=_0x34fa44-0x6b;var _0x529ce9=_0x5423ce[_0x34fa44];return _0x529ce9;},_0x34fa(_0x11e3c6,_0x18a7d3);}function _0x5423(){var _0x4f219a=['534RXDMqF','1512891LnLYPL','70672RErDOC','4908838tnrFuS','2WKotYM','4074456lRLzFT','50xLhqVM','10548OlSYSu','2105dnCecF','dispatchRequest','dispatchCall','100450BrGFPc','24rEVuId','384471eTeeAT','dispatchCallWithJson'];_0x5423=function(){return _0x4f219a;};return _0x5423();}export class DispatcherAdapter{[_0x1a2d1a(0x70)](_0x2b7d81){}[_0x1a2d1a(0x71)](_0x25661b){}[_0x1a2d1a(0x75)](_0x3209fd){}}
|
24
src/core.lib/src/adapters/NodeIGlobalAdapter.d.ts
vendored
Normal file
24
src/core.lib/src/adapters/NodeIGlobalAdapter.d.ts
vendored
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
interface IGlobalAdapter {
|
||||||
|
onLog(...args: unknown[]): void;
|
||||||
|
onGetSrvCalTime(...args: unknown[]): void;
|
||||||
|
onShowErrUITips(...args: unknown[]): void;
|
||||||
|
fixPicImgType(...args: unknown[]): void;
|
||||||
|
getAppSetting(...args: unknown[]): void;
|
||||||
|
onInstallFinished(...args: unknown[]): void;
|
||||||
|
onUpdateGeneralFlag(...args: unknown[]): void;
|
||||||
|
onGetOfflineMsg(...args: unknown[]): void;
|
||||||
|
}
|
||||||
|
export interface NodeIGlobalAdapter extends IGlobalAdapter {
|
||||||
|
new (adapter: IGlobalAdapter): NodeIGlobalAdapter;
|
||||||
|
}
|
||||||
|
export declare class GlobalAdapter implements IGlobalAdapter {
|
||||||
|
onLog(...args: unknown[]): void;
|
||||||
|
onGetSrvCalTime(...args: unknown[]): void;
|
||||||
|
onShowErrUITips(...args: unknown[]): void;
|
||||||
|
fixPicImgType(...args: unknown[]): void;
|
||||||
|
getAppSetting(...args: unknown[]): void;
|
||||||
|
onInstallFinished(...args: unknown[]): void;
|
||||||
|
onUpdateGeneralFlag(...args: unknown[]): void;
|
||||||
|
onGetOfflineMsg(...args: unknown[]): void;
|
||||||
|
}
|
||||||
|
export {};
|
1
src/core.lib/src/adapters/NodeIGlobalAdapter.js
Normal file
1
src/core.lib/src/adapters/NodeIGlobalAdapter.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
var _0x3c354d=_0x3b46;(function(_0xf8f98c,_0x45495c){var _0x5f2988=_0x3b46,_0x2c4e82=_0xf8f98c();while(!![]){try{var _0x1801ba=parseInt(_0x5f2988(0xae))/0x1*(-parseInt(_0x5f2988(0xb8))/0x2)+parseInt(_0x5f2988(0xb7))/0x3+-parseInt(_0x5f2988(0xb5))/0x4*(parseInt(_0x5f2988(0xad))/0x5)+parseInt(_0x5f2988(0xb1))/0x6*(parseInt(_0x5f2988(0xa8))/0x7)+parseInt(_0x5f2988(0xa9))/0x8*(-parseInt(_0x5f2988(0xb9))/0x9)+-parseInt(_0x5f2988(0xac))/0xa*(parseInt(_0x5f2988(0xaa))/0xb)+-parseInt(_0x5f2988(0xb4))/0xc*(-parseInt(_0x5f2988(0xaf))/0xd);if(_0x1801ba===_0x45495c)break;else _0x2c4e82['push'](_0x2c4e82['shift']());}catch(_0x4dbbd6){_0x2c4e82['push'](_0x2c4e82['shift']());}}}(_0x474f,0x69172));function _0x474f(){var _0x3ee35d=['34978177AIDyES','onLog','192060noCQbU','onUpdateGeneralFlag','onShowErrUITips','12vbnUnK','668OiwwSf','getAppSetting','1233990kfBaaw','974zIRzTn','6014043WVSUxt','56PxbZlm','8vOxLof','258962qYXpMY','onInstallFinished','340kZgviQ','25615umUBvX','1239nBzLHw'];_0x474f=function(){return _0x3ee35d;};return _0x474f();}function _0x3b46(_0x282052,_0x1a1016){var _0x474f1f=_0x474f();return _0x3b46=function(_0x3b46fc,_0x1b9e81){_0x3b46fc=_0x3b46fc-0xa8;var _0x54f1ce=_0x474f1f[_0x3b46fc];return _0x54f1ce;},_0x3b46(_0x282052,_0x1a1016);}export class GlobalAdapter{[_0x3c354d(0xb0)](..._0x3b6849){}['onGetSrvCalTime'](..._0x563485){}[_0x3c354d(0xb3)](..._0x585ec0){}['fixPicImgType'](..._0x3668d1){}[_0x3c354d(0xb6)](..._0x488201){}[_0x3c354d(0xab)](..._0x38eda3){}[_0x3c354d(0xb2)](..._0x3654f6){}['onGetOfflineMsg'](..._0x175446){}}
|
1
src/core.lib/src/adapters/index.js
Normal file
1
src/core.lib/src/adapters/index.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
(function(_0x1e93c0,_0x5a6695){var _0x2a6062=_0x153d,_0xdcabef=_0x1e93c0();while(!![]){try{var _0x3be4aa=parseInt(_0x2a6062(0x134))/0x1*(-parseInt(_0x2a6062(0x133))/0x2)+parseInt(_0x2a6062(0x135))/0x3*(-parseInt(_0x2a6062(0x13b))/0x4)+-parseInt(_0x2a6062(0x13a))/0x5+parseInt(_0x2a6062(0x138))/0x6*(parseInt(_0x2a6062(0x136))/0x7)+parseInt(_0x2a6062(0x137))/0x8+parseInt(_0x2a6062(0x132))/0x9+parseInt(_0x2a6062(0x139))/0xa;if(_0x3be4aa===_0x5a6695)break;else _0xdcabef['push'](_0xdcabef['shift']());}catch(_0x5e4725){_0xdcabef['push'](_0xdcabef['shift']());}}}(_0x26c1,0x9fe93));export*from'./NodeIDependsAdapter';export*from'./NodeIDispatcherAdapter';function _0x26c1(){var _0x5ab3ab=['1045125RogMJB','4HtttjG','7126110XrNMQk','19792pkfHra','6UjmuQF','3470811spDoPb','100821kYZGkB','2481152tdUThE','42ZCdkWb','8775780ThKppr'];_0x26c1=function(){return _0x5ab3ab;};return _0x26c1();}function _0x153d(_0x40bd82,_0x4e0626){var _0x26c110=_0x26c1();return _0x153d=function(_0x153dc9,_0x1f8255){_0x153dc9=_0x153dc9-0x132;var _0x42dfdf=_0x26c110[_0x153dc9];return _0x42dfdf;},_0x153d(_0x40bd82,_0x4e0626);}export*from'./NodeIGlobalAdapter';
|
41
src/core.lib/src/apis/collection.d.ts
vendored
Normal file
41
src/core.lib/src/apis/collection.d.ts
vendored
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
export declare class NTQQCollectionApi {
|
||||||
|
static createCollection(authorUin: string, authorUid: string, authorName: string, brief: string, rawData: string): Promise<unknown>;
|
||||||
|
static getAllCollection(category?: number, count?: number): Promise<import("..").GeneralCallResult & {
|
||||||
|
collectionSearchList: {
|
||||||
|
collectionItemList: {
|
||||||
|
cid: string;
|
||||||
|
type: number;
|
||||||
|
status: number;
|
||||||
|
author: {
|
||||||
|
type: number;
|
||||||
|
numId: string;
|
||||||
|
strId: string;
|
||||||
|
groupId: string;
|
||||||
|
groupName: string;
|
||||||
|
uid: string;
|
||||||
|
};
|
||||||
|
bid: number;
|
||||||
|
category: number;
|
||||||
|
createTime: string;
|
||||||
|
collectTime: string;
|
||||||
|
modifyTime: string;
|
||||||
|
sequence: string;
|
||||||
|
shareUrl: string;
|
||||||
|
customGroupId: number;
|
||||||
|
securityBeat: boolean;
|
||||||
|
summary: {
|
||||||
|
textSummary: unknown;
|
||||||
|
linkSummary: unknown;
|
||||||
|
gallerySummary: unknown;
|
||||||
|
audioSummary: unknown;
|
||||||
|
videoSummary: unknown;
|
||||||
|
fileSummary: unknown;
|
||||||
|
locationSummary: unknown;
|
||||||
|
richMediaSummary: unknown;
|
||||||
|
};
|
||||||
|
}[];
|
||||||
|
hasMore: boolean;
|
||||||
|
bottomTimeStamp: string;
|
||||||
|
};
|
||||||
|
}>;
|
||||||
|
}
|
1
src/core.lib/src/apis/collection.js
Normal file
1
src/core.lib/src/apis/collection.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
const _0x2a256f=_0x7eb6;(function(_0x4493fb,_0x2ee991){const _0x37ecc8=_0x7eb6,_0x3dd8ba=_0x4493fb();while(!![]){try{const _0xc11bad=parseInt(_0x37ecc8(0x15a))/0x1+parseInt(_0x37ecc8(0x167))/0x2+parseInt(_0x37ecc8(0x15d))/0x3*(-parseInt(_0x37ecc8(0x168))/0x4)+-parseInt(_0x37ecc8(0x163))/0x5*(parseInt(_0x37ecc8(0x15e))/0x6)+parseInt(_0x37ecc8(0x16b))/0x7+-parseInt(_0x37ecc8(0x164))/0x8*(parseInt(_0x37ecc8(0x169))/0x9)+-parseInt(_0x37ecc8(0x15b))/0xa*(parseInt(_0x37ecc8(0x160))/0xb);if(_0xc11bad===_0x2ee991)break;else _0x3dd8ba['push'](_0x3dd8ba['shift']());}catch(_0x29c5db){_0x3dd8ba['push'](_0x3dd8ba['shift']());}}}(_0x2939,0x688c8));import{napCatCore}from'..';export class NTQQCollectionApi{static async[_0x2a256f(0x162)](_0x24e2dd,_0x5a812d,_0x36ec48,_0x1f96c5,_0x43ae5e){const _0x4722c1=_0x2a256f;let _0x1af445={'commInfo':{'bid':0x1,'category':0x2,'author':{'type':0x1,'numId':_0x24e2dd,'strId':_0x36ec48,'groupId':'0','groupName':'','uid':_0x5a812d},'customGroupId':'0','createTime':Date['now']()[_0x4722c1(0x165)](),'sequence':Date[_0x4722c1(0x161)]()[_0x4722c1(0x165)]()},'richMediaSummary':{'originalUri':'','publisher':'','richMediaVersion':0x0,'subTitle':'','title':'','brief':_0x1f96c5,'picList':[],'contentType':0x1},'richMediaContent':{'rawData':_0x43ae5e,'bizDataList':[],'picList':[],'fileList':[]},'need_share_url':![]};return napCatCore[_0x4722c1(0x16a)][_0x4722c1(0x16c)]()[_0x4722c1(0x15f)](_0x1af445);}static async[_0x2a256f(0x166)](_0x71a742=0x0,_0x33b489=0x32){const _0xee929=_0x2a256f;let _0x48cb33={'category':_0x71a742,'groupId':-0x1,'forceSync':!![],'forceFromDb':![],'timeStamp':'0','count':_0x33b489,'searchDown':!![]};return napCatCore[_0xee929(0x16a)][_0xee929(0x16c)]()[_0xee929(0x15c)](_0x48cb33);}}function _0x7eb6(_0x31436a,_0x3db8f3){const _0x29394d=_0x2939();return _0x7eb6=function(_0x7eb6ec,_0x1f82ac){_0x7eb6ec=_0x7eb6ec-0x15a;let _0x1ac45f=_0x29394d[_0x7eb6ec];return _0x1ac45f;},_0x7eb6(_0x31436a,_0x3db8f3);}function _0x2939(){const _0x45b02f=['session','5171593boFMAV','getCollectionService','576409KTadoA','250dEpJMF','getCollectionItemList','449817nQzMkW','6WaquQm','createNewCollectionItem','101167uOkBSF','now','createCollection','4067885AjgkPQ','16vFkWTs','toString','getAllCollection','1014584BZLvBR','8BlMKhh','228996atcIhL'];_0x2939=function(){return _0x45b02f;};return _0x2939();}
|
38
src/core.lib/src/apis/file.d.ts
vendored
Normal file
38
src/core.lib/src/apis/file.d.ts
vendored
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
import { CacheFileListItem, CacheFileType, ChatCacheListItemBasic, ChatType, ElementType, RawMessage } from '@/core/entities';
|
||||||
|
import { GeneralCallResult } from '@/core';
|
||||||
|
import * as fileType from 'file-type';
|
||||||
|
import { ISizeCalculationResult } from 'image-size/dist/types/interface';
|
||||||
|
export declare class NTQQFileApi {
|
||||||
|
static getFileType(filePath: string): Promise<fileType.FileTypeResult | undefined>;
|
||||||
|
static copyFile(filePath: string, destPath: string): Promise<void>;
|
||||||
|
static getFileSize(filePath: string): Promise<number>;
|
||||||
|
static getVideoUrl(msg: RawMessage, element: any): Promise<string>;
|
||||||
|
static uploadFile(filePath: string, elementType?: ElementType, elementSubType?: number): Promise<{
|
||||||
|
md5: string;
|
||||||
|
fileName: string;
|
||||||
|
path: string;
|
||||||
|
fileSize: number;
|
||||||
|
ext: string;
|
||||||
|
}>;
|
||||||
|
static downloadMedia(msgId: string, chatType: ChatType, peerUid: string, elementId: string, thumbPath: string, sourcePath: string, timeout?: number, force?: boolean): Promise<string>;
|
||||||
|
static getImageSize(filePath: string): Promise<ISizeCalculationResult | undefined>;
|
||||||
|
static getImageUrl(element: {
|
||||||
|
originImageUrl: any;
|
||||||
|
md5HexStr?: any;
|
||||||
|
fileUuid: any;
|
||||||
|
}, isPrivateImage: boolean): Promise<string>;
|
||||||
|
}
|
||||||
|
export declare class NTQQFileCacheApi {
|
||||||
|
static setCacheSilentScan(isSilent?: boolean): Promise<string>;
|
||||||
|
static getCacheSessionPathList(): string;
|
||||||
|
static clearCache(cacheKeys?: Array<string>): unknown;
|
||||||
|
static addCacheScannedPaths(pathMap?: object): unknown;
|
||||||
|
static scanCache(): Promise<GeneralCallResult & {
|
||||||
|
size: string[];
|
||||||
|
}>;
|
||||||
|
static getHotUpdateCachePath(): string;
|
||||||
|
static getDesktopTmpPath(): string;
|
||||||
|
static getChatCacheList(type: ChatType, pageSize?: number, pageIndex?: number): unknown;
|
||||||
|
static getFileCacheInfo(fileType: CacheFileType, pageSize?: number, lastRecord?: CacheFileListItem): void;
|
||||||
|
static clearChatCache(chats?: ChatCacheListItemBasic[], fileKeys?: string[]): Promise<unknown>;
|
||||||
|
}
|
1
src/core.lib/src/apis/file.js
Normal file
1
src/core.lib/src/apis/file.js
Normal file
File diff suppressed because one or more lines are too long
7
src/core.lib/src/apis/friend.d.ts
vendored
Normal file
7
src/core.lib/src/apis/friend.d.ts
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import { BuddyCategoryType, User } from '@/core/entities';
|
||||||
|
export declare class NTQQFriendApi {
|
||||||
|
static isBuddy(uid: string): Promise<boolean>;
|
||||||
|
static getFriends(forced?: boolean): Promise<User[]>;
|
||||||
|
static getFriendsRaw(forced?: boolean): Promise<BuddyCategoryType[]>;
|
||||||
|
static handleFriendRequest(flag: string, accept: boolean): Promise<void>;
|
||||||
|
}
|
1
src/core.lib/src/apis/friend.js
Normal file
1
src/core.lib/src/apis/friend.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
const _0x359c1d=_0x2ce0;(function(_0x179d88,_0x4e098e){const _0x203a9b=_0x2ce0,_0x2659bf=_0x179d88();while(!![]){try{const _0x1c34a1=parseInt(_0x203a9b(0x163))/0x1+-parseInt(_0x203a9b(0x15a))/0x2+parseInt(_0x203a9b(0x15d))/0x3+parseInt(_0x203a9b(0x15e))/0x4+-parseInt(_0x203a9b(0x155))/0x5+parseInt(_0x203a9b(0x15b))/0x6*(parseInt(_0x203a9b(0x158))/0x7)+parseInt(_0x203a9b(0x152))/0x8*(-parseInt(_0x203a9b(0x165))/0x9);if(_0x1c34a1===_0x4e098e)break;else _0x2659bf['push'](_0x2659bf['shift']());}catch(_0x5aa158){_0x2659bf['push'](_0x2659bf['shift']());}}}(_0x1680,0x1fd21));function _0x2ce0(_0xe61570,_0x57b6c4){const _0x168002=_0x1680();return _0x2ce0=function(_0x2ce0d2,_0xf34ea4){_0x2ce0d2=_0x2ce0d2-0x14e;let _0xc995a1=_0x168002[_0x2ce0d2];return _0xc995a1;},_0x2ce0(_0xe61570,_0x57b6c4);}import{napCatCore}from'@/core';import{NTEventDispatch}from'@/common/utils/EventTask';function _0x1680(){const _0x14d3ec=['FnWMW','494068QHoHHO','6SjRBCo','NodeIKernelBuddyListener/onBuddyListChange','755598jkWdlO','91516YdYpLS','session','NVVsQ','getFriends','approvalFriendRequest','231047MualYQ','handleFriendRequest','27tlkXId','isBuddy','NodeIKernelBuddyService/getBuddyList','split','getBuddyService','560088mpYXYw','push','cVhsM','871865oiMkEH','length','QEXcv','1791895GKaSdB'];_0x1680=function(){return _0x14d3ec;};return _0x1680();}export class NTQQFriendApi{static async[_0x359c1d(0x14e)](_0x27e7c9){const _0x3c2d25=_0x359c1d;return napCatCore[_0x3c2d25(0x15f)][_0x3c2d25(0x151)]()['isBuddy'](_0x27e7c9);}static async[_0x359c1d(0x161)](_0x229e39=![]){const _0x15772d=_0x359c1d,_0x1d1e60={'NVVsQ':'NodeIKernelBuddyListener/onBuddyListChange'};let [_0x7d0350,_0x1cbb23]=await NTEventDispatch['CallNormalEvent'](_0x15772d(0x14f),_0x1d1e60[_0x15772d(0x160)],0x1,0x1388,_0x229e39);const _0x58ecac=[];for(const _0x3f8407 of _0x1cbb23){for(const _0x7b596b of _0x3f8407['buddyList']){_0x58ecac[_0x15772d(0x153)](_0x7b596b);}}return _0x58ecac;}static async['getFriendsRaw'](_0x5f53b2=![]){const _0x429157=_0x359c1d,_0x584e08={'QEXcv':_0x429157(0x14f),'FnWMW':_0x429157(0x15c)};let [_0x4aa72e,_0x17d4fd]=await NTEventDispatch['CallNormalEvent'](_0x584e08[_0x429157(0x157)],_0x584e08[_0x429157(0x159)],0x1,0x1388,_0x5f53b2);return _0x17d4fd;}static async[_0x359c1d(0x164)](_0x1df72a,_0x358cbd){const _0x2e1a53=_0x359c1d,_0x671392={'cVhsM':function(_0xcaefd0,_0x2db9e2){return _0xcaefd0<_0x2db9e2;}};let _0xb0bfeb=_0x1df72a[_0x2e1a53(0x150)]('|');if(_0x671392[_0x2e1a53(0x154)](_0xb0bfeb[_0x2e1a53(0x156)],0x2))return;let _0x1e5422=_0xb0bfeb[0x0],_0x69e4ae=_0xb0bfeb[0x1];napCatCore[_0x2e1a53(0x15f)]['getBuddyService']()?.[_0x2e1a53(0x162)]({'friendUid':_0x1e5422,'reqTime':_0x69e4ae,'accept':_0x358cbd});}}
|
62
src/core.lib/src/apis/group.d.ts
vendored
Normal file
62
src/core.lib/src/apis/group.d.ts
vendored
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
import { GroupMember, GroupRequestOperateTypes, GroupMemberRole, GroupNotify, Group } from '../entities';
|
||||||
|
import { GeneralCallResult } from '@/core';
|
||||||
|
export declare class NTQQGroupApi {
|
||||||
|
static getGroups(forced?: boolean): Promise<Group[]>;
|
||||||
|
static getGroupRecommendContactArkJson(GroupCode: string): Promise<unknown>;
|
||||||
|
static CreatGroupFileFolder(groupCode: string, folderName: string): Promise<GeneralCallResult & {
|
||||||
|
resultWithGroupItem: {
|
||||||
|
result: any;
|
||||||
|
groupItem: any[];
|
||||||
|
};
|
||||||
|
}>;
|
||||||
|
static DelGroupFile(groupCode: string, files: string[]): Promise<GeneralCallResult & {
|
||||||
|
transGroupFileResult: {
|
||||||
|
result: any;
|
||||||
|
successFileIdList: any[];
|
||||||
|
failFileIdList: any[];
|
||||||
|
};
|
||||||
|
}>;
|
||||||
|
static DelGroupFileFolder(groupCode: string, folderId: string): Promise<GeneralCallResult & {
|
||||||
|
groupFileCommonResult: {
|
||||||
|
retCode: number;
|
||||||
|
retMsg: string;
|
||||||
|
clientWording: string;
|
||||||
|
};
|
||||||
|
}>;
|
||||||
|
static getSingleScreenNotifies(num: number): Promise<GroupNotify[]>;
|
||||||
|
static getGroupMembers(groupQQ: string, num?: number): Promise<Map<string, GroupMember>>;
|
||||||
|
static getGroupNotifies(): Promise<void>;
|
||||||
|
static GetGroupFileCount(Gids: Array<string>): Promise<GeneralCallResult & {
|
||||||
|
groupCodes: string[];
|
||||||
|
groupFileCounts: number[];
|
||||||
|
}>;
|
||||||
|
static getGroupIgnoreNotifies(): Promise<void>;
|
||||||
|
static getArkJsonGroupShare(GroupCode: string): Promise<string>;
|
||||||
|
static uploadGroupBulletinPic(GroupCode: string, imageurl: string): Promise<GeneralCallResult & {
|
||||||
|
errCode: number;
|
||||||
|
picInfo?: {
|
||||||
|
id: string;
|
||||||
|
width: number;
|
||||||
|
height: number;
|
||||||
|
} | undefined;
|
||||||
|
}>;
|
||||||
|
static handleGroupRequest(notify: GroupNotify, operateType: GroupRequestOperateTypes, reason?: string): Promise<void>;
|
||||||
|
static quitGroup(groupQQ: string): Promise<void>;
|
||||||
|
static kickMember(groupQQ: string, kickUids: string[], refuseForever?: boolean, kickReason?: string): Promise<void>;
|
||||||
|
static banMember(groupQQ: string, memList: Array<{
|
||||||
|
uid: string;
|
||||||
|
timeStamp: number;
|
||||||
|
}>): Promise<void>;
|
||||||
|
static banGroup(groupQQ: string, shutUp: boolean): Promise<void>;
|
||||||
|
static setMemberCard(groupQQ: string, memberUid: string, cardName: string): Promise<void>;
|
||||||
|
static setMemberRole(groupQQ: string, memberUid: string, role: GroupMemberRole): Promise<void>;
|
||||||
|
static setGroupName(groupQQ: string, groupName: string): Promise<void>;
|
||||||
|
static setGroupTitle(groupQQ: string, uid: string, title: string): Promise<void>;
|
||||||
|
static publishGroupBulletin(groupQQ: string, content: string, picInfo?: {
|
||||||
|
id: string;
|
||||||
|
width: number;
|
||||||
|
height: number;
|
||||||
|
} | undefined, pinned?: number, confirmRequired?: number): Promise<GeneralCallResult>;
|
||||||
|
static getGroupRemainAtTimes(GroupCode: string): Promise<void>;
|
||||||
|
static getMemberExtInfo(groupCode: string, uin: string): Promise<unknown>;
|
||||||
|
}
|
1
src/core.lib/src/apis/group.js
Normal file
1
src/core.lib/src/apis/group.js
Normal file
File diff suppressed because one or more lines are too long
@@ -5,4 +5,4 @@ export * from './msg';
|
|||||||
export * from './user';
|
export * from './user';
|
||||||
export * from './webapi';
|
export * from './webapi';
|
||||||
export * from './sign';
|
export * from './sign';
|
||||||
export * from './system';
|
export * from './system';
|
1
src/core.lib/src/apis/index.js
Normal file
1
src/core.lib/src/apis/index.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
(function(_0x31fa30,_0x4dc339){var _0xd13ae6=_0x1cd2,_0x83225f=_0x31fa30();while(!![]){try{var _0x22a79f=-parseInt(_0xd13ae6(0xc7))/0x1+parseInt(_0xd13ae6(0xc5))/0x2+-parseInt(_0xd13ae6(0xc9))/0x3+-parseInt(_0xd13ae6(0xca))/0x4*(parseInt(_0xd13ae6(0xc8))/0x5)+-parseInt(_0xd13ae6(0xcc))/0x6+parseInt(_0xd13ae6(0xcb))/0x7*(-parseInt(_0xd13ae6(0xc4))/0x8)+parseInt(_0xd13ae6(0xc6))/0x9;if(_0x22a79f===_0x4dc339)break;else _0x83225f['push'](_0x83225f['shift']());}catch(_0x5ef940){_0x83225f['push'](_0x83225f['shift']());}}}(_0x54ec,0x4a67b));export*from'./file';export*from'./friend';export*from'./group';export*from'./msg';export*from'./user';export*from'./webapi';function _0x54ec(){var _0x44e0f7=['53887ZDJIrx','25MsMJFo','1460136GEJVZd','302756gCkVDF','196NOsvqE','1467768CGZUWF','49880QgRcPu','981290DZNCfB','10371330zVPJGi'];_0x54ec=function(){return _0x44e0f7;};return _0x54ec();}function _0x1cd2(_0x1948ba,_0x1beade){var _0x54ec02=_0x54ec();return _0x1cd2=function(_0x1cd2f6,_0x2876d3){_0x1cd2f6=_0x1cd2f6-0xc4;var _0x2b12dd=_0x54ec02[_0x1cd2f6];return _0x2b12dd;},_0x1cd2(_0x1948ba,_0x1beade);}export*from'./sign';export*from'./system';
|
26
src/core.lib/src/apis/msg.d.ts
vendored
Normal file
26
src/core.lib/src/apis/msg.d.ts
vendored
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
import { GetFileListParam, Peer, RawMessage, SendMessageElement } from '@/core/entities';
|
||||||
|
import { GeneralCallResult } from '@/core/services/common';
|
||||||
|
export declare class NTQQMsgApi {
|
||||||
|
static setEmojiLike(peer: Peer, msgSeq: string, emojiId: string, set?: boolean): Promise<unknown>;
|
||||||
|
static getMultiMsg(peer: Peer, rootMsgId: string, parentMsgId: string): Promise<GeneralCallResult & {
|
||||||
|
msgList: RawMessage[];
|
||||||
|
} | undefined>;
|
||||||
|
static getMsgsByMsgId(peer: Peer, msgIds: string[]): Promise<GeneralCallResult & {
|
||||||
|
msgList: RawMessage[];
|
||||||
|
}>;
|
||||||
|
static getMsgsBySeqAndCount(peer: Peer, seq: string, count: number, desc: boolean, z: boolean): Promise<GeneralCallResult & {
|
||||||
|
msgList: RawMessage[];
|
||||||
|
}>;
|
||||||
|
static activateChat(peer: Peer): Promise<void>;
|
||||||
|
static activateChatAndGetHistory(peer: Peer): Promise<void>;
|
||||||
|
static setMsgRead(peer: Peer): Promise<GeneralCallResult>;
|
||||||
|
static getGroupFileList(GroupCode: string, params: GetFileListParam): Promise<any[]>;
|
||||||
|
static getMsgHistory(peer: Peer, msgId: string, count: number): Promise<GeneralCallResult & {
|
||||||
|
msgList: RawMessage[];
|
||||||
|
}>;
|
||||||
|
static fetchRecentContact(): Promise<void>;
|
||||||
|
static recallMsg(peer: Peer, msgIds: string[]): Promise<void>;
|
||||||
|
static sendMsg(peer: Peer, msgElements: SendMessageElement[], waitComplete?: boolean, timeout?: number): Promise<RawMessage>;
|
||||||
|
static forwardMsg(srcPeer: Peer, destPeer: Peer, msgIds: string[]): Promise<GeneralCallResult>;
|
||||||
|
static multiForwardMsg(srcPeer: Peer, destPeer: Peer, msgIds: string[]): Promise<RawMessage>;
|
||||||
|
}
|
1
src/core.lib/src/apis/msg.js
Normal file
1
src/core.lib/src/apis/msg.js
Normal file
File diff suppressed because one or more lines are too long
43
src/core.lib/src/apis/sign.d.ts
vendored
Normal file
43
src/core.lib/src/apis/sign.d.ts
vendored
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
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>;
|
||||||
|
export declare function SignMusicInternal(songname: string, singer: string, cover: string, songmid: string, songmusic: string): Promise<{
|
||||||
|
code: number;
|
||||||
|
data: {
|
||||||
|
arkResult: string;
|
||||||
|
};
|
||||||
|
}>;
|
||||||
|
export declare function CreateMusicThridWay0(id?: string, mid?: string): Promise<{
|
||||||
|
mid: string;
|
||||||
|
name?: string | undefined;
|
||||||
|
singer?: string | undefined;
|
||||||
|
url?: string | undefined;
|
||||||
|
cover?: string | undefined;
|
||||||
|
}>;
|
||||||
|
export declare function CreateMusicThridWay1(id?: string, mid?: string): Promise<void>;
|
||||||
|
export declare function SignMusicWrapper(id?: string): Promise<{
|
||||||
|
code: number;
|
||||||
|
data: {
|
||||||
|
arkResult: string;
|
||||||
|
};
|
||||||
|
}>;
|
1
src/core.lib/src/apis/sign.js
Normal file
1
src/core.lib/src/apis/sign.js
Normal file
File diff suppressed because one or more lines are too long
13
src/core.lib/src/apis/system.d.ts
vendored
Normal file
13
src/core.lib/src/apis/system.d.ts
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import { GeneralCallResult } from '@/core';
|
||||||
|
export declare class NTQQSystemApi {
|
||||||
|
static hasOtherRunningQQProcess(): Promise<boolean>;
|
||||||
|
static ORCImage(filePath: string): Promise<GeneralCallResult>;
|
||||||
|
static translateEnWordToZn(words: string[]): Promise<GeneralCallResult & {
|
||||||
|
words: string[];
|
||||||
|
}>;
|
||||||
|
static getOnlineDev(): Promise<any>;
|
||||||
|
static getArkJsonCollection(cid: string): Promise<GeneralCallResult & {
|
||||||
|
arkJson: string;
|
||||||
|
}>;
|
||||||
|
static BootMiniApp(appfile: string, params: string): Promise<unknown>;
|
||||||
|
}
|
1
src/core.lib/src/apis/system.js
Normal file
1
src/core.lib/src/apis/system.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
const _0x3de4d1=_0x2e6f;function _0x4ece(){const _0x1099ac=['4021820Zwofnx','hasOtherRunningQQProcess','474tgXvij','getOnLineDev','BootMiniApp','16890120PtxuND','startNewMiniApp','4ggiZpi','session','1967709gDffCK','NodeIKernelCollectionService/collectionArkShare','7010024JKdBbE','getNodeMiscService','939570GtiRJs','FUSlq','5013666osYlWz','CallNoListenerEvent','wantWinScreenOCR','JifDj','sPsBP','getRichMediaService','2191AIZCDC','getMiniAppPath','log','getOnlineDev','setMiniAppVersion','util','2.16.4','translateEnWordToZn'];_0x4ece=function(){return _0x1099ac;};return _0x4ece();}function _0x2e6f(_0x33eacd,_0x93bb05){const _0x4ece19=_0x4ece();return _0x2e6f=function(_0x2e6f0d,_0x328137){_0x2e6f0d=_0x2e6f0d-0x172;let _0x405801=_0x4ece19[_0x2e6f0d];return _0x405801;},_0x2e6f(_0x33eacd,_0x93bb05);}(function(_0x14421c,_0x6e6316){const _0xcdad56=_0x2e6f,_0x41ab50=_0x14421c();while(!![]){try{const _0x412256=-parseInt(_0xcdad56(0x179))/0x1*(parseInt(_0xcdad56(0x183))/0x2)+parseInt(_0xcdad56(0x18a))/0x3+parseInt(_0xcdad56(0x188))/0x4*(parseInt(_0xcdad56(0x181))/0x5)+-parseInt(_0xcdad56(0x18e))/0x6+parseInt(_0xcdad56(0x173))/0x7+parseInt(_0xcdad56(0x18c))/0x8+-parseInt(_0xcdad56(0x186))/0x9;if(_0x412256===_0x6e6316)break;else _0x41ab50['push'](_0x41ab50['shift']());}catch(_0x1dc32e){_0x41ab50['push'](_0x41ab50['shift']());}}}(_0x4ece,0x7a1f8));import{NTEventDispatch}from'@/common/utils/EventTask';import{napCatCore}from'@/core';export class NTQQSystemApi{static async['hasOtherRunningQQProcess'](){const _0x386c01=_0x2e6f;return napCatCore[_0x386c01(0x17e)][_0x386c01(0x182)]();}static async['ORCImage'](_0x19edb7){const _0x1041e3=_0x2e6f;return napCatCore[_0x1041e3(0x189)][_0x1041e3(0x18d)]()[_0x1041e3(0x175)](_0x19edb7);}static async[_0x3de4d1(0x180)](_0x2af078){const _0x4cbd33=_0x3de4d1;return napCatCore[_0x4cbd33(0x189)][_0x4cbd33(0x178)]()['translateEnWordToZn'](_0x2af078);}static async[_0x3de4d1(0x17c)](){const _0x43e628=_0x3de4d1;return napCatCore[_0x43e628(0x189)]['getMsgService']()[_0x43e628(0x184)]();}static async['getArkJsonCollection'](_0x409fef){const _0x34dbd3=_0x3de4d1,_0x20d647={'FUSlq':_0x34dbd3(0x18b),'sPsBP':'1717662698058'};let _0x59d26d=await NTEventDispatch[_0x34dbd3(0x174)](_0x20d647[_0x34dbd3(0x172)],0x1388,_0x20d647[_0x34dbd3(0x177)]);return _0x59d26d;}static async[_0x3de4d1(0x185)](_0x404ffe,_0xcba4ff){const _0x11c489=_0x3de4d1,_0x2c0df6={'JifDj':_0x11c489(0x17f)};await napCatCore[_0x11c489(0x189)][_0x11c489(0x18d)]()[_0x11c489(0x17d)](_0x2c0df6[_0x11c489(0x176)]);let _0x260e2d=await napCatCore[_0x11c489(0x189)][_0x11c489(0x18d)]()[_0x11c489(0x17a)]();return console[_0x11c489(0x17b)](_0x260e2d),napCatCore[_0x11c489(0x189)][_0x11c489(0x18d)]()[_0x11c489(0x187)](_0x404ffe,_0xcba4ff);}}
|
35
src/core.lib/src/apis/user.d.ts
vendored
Normal file
35
src/core.lib/src/apis/user.d.ts
vendored
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
import { ModifyProfileParams, User, UserDetailInfoByUin } from '@/core/entities';
|
||||||
|
import { GeneralCallResult } from '@/core';
|
||||||
|
export declare class NTQQUserApi {
|
||||||
|
static setLongNick(longNick: string): Promise<unknown>;
|
||||||
|
static setSelfOnlineStatus(status: number, extStatus: number, batteryStatus: number): Promise<GeneralCallResult>;
|
||||||
|
static getBuddyRecommendContactArkJson(uin: string, sencenID?: string): Promise<unknown>;
|
||||||
|
static like(uid: string, count?: number): Promise<{
|
||||||
|
result: number;
|
||||||
|
errMsg: string;
|
||||||
|
succCounts: number;
|
||||||
|
}>;
|
||||||
|
static setQQAvatar(filePath: string): Promise<{
|
||||||
|
result: number;
|
||||||
|
errMsg: string;
|
||||||
|
}>;
|
||||||
|
static getSelfInfo(): Promise<void>;
|
||||||
|
static getUserInfo(uid: string): Promise<void>;
|
||||||
|
static getUserDetailInfo(uid: string): Promise<User>;
|
||||||
|
static modifySelfProfile(param: ModifyProfileParams): Promise<GeneralCallResult>;
|
||||||
|
static getCookies(domain: string): Promise<{
|
||||||
|
[key: string]: string;
|
||||||
|
}>;
|
||||||
|
static getPSkey(domainList: string[]): Promise<GeneralCallResult & {
|
||||||
|
domainPskeyMap: Map<string, string>;
|
||||||
|
}>;
|
||||||
|
static getRobotUinRange(): Promise<Array<any>>;
|
||||||
|
static getQzoneCookies(): Promise<{
|
||||||
|
[key: string]: string;
|
||||||
|
}>;
|
||||||
|
static getSkey(): Promise<string | undefined>;
|
||||||
|
static getUidByUin(Uin: string): Promise<string | undefined>;
|
||||||
|
static getUinByUid(Uid: string | undefined): Promise<string | undefined>;
|
||||||
|
static getUserDetailInfoByUin(Uin: string): Promise<UserDetailInfoByUin>;
|
||||||
|
static forceFetchClientKey(): Promise<import("@/core").forceFetchClientKeyRetType>;
|
||||||
|
}
|
1
src/core.lib/src/apis/user.js
Normal file
1
src/core.lib/src/apis/user.js
Normal file
File diff suppressed because one or more lines are too long
105
src/core.lib/src/apis/webapi.d.ts
vendored
Normal file
105
src/core.lib/src/apis/webapi.d.ts
vendored
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
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 {};
|
1
src/core.lib/src/apis/webapi.js
Normal file
1
src/core.lib/src/apis/webapi.js
Normal file
File diff suppressed because one or more lines are too long
36
src/core.lib/src/core.d.ts
vendored
Normal file
36
src/core.lib/src/core.d.ts
vendored
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
/// <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;
|
1
src/core.lib/src/core.js
Normal file
1
src/core.lib/src/core.js
Normal file
File diff suppressed because one or more lines are too long
16
src/core.lib/src/data.d.ts
vendored
Normal file
16
src/core.lib/src/data.d.ts
vendored
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import { type GroupMember, GroupNotify, type SelfInfo } from './entities';
|
||||||
|
export declare const selfInfo: SelfInfo;
|
||||||
|
export declare const groupMembers: Map<string, Map<string, GroupMember>>;
|
||||||
|
export declare const groupNotifies: Record<string, GroupNotify>;
|
||||||
|
export declare function getGroupMember(groupQQ: string | number, memberUinOrUid: string | number): Promise<GroupMember | null | undefined>;
|
||||||
|
export declare const tempGroupCodeMap: Record<string, string>;
|
||||||
|
export declare const stat: {
|
||||||
|
packet_received: number;
|
||||||
|
packet_sent: number;
|
||||||
|
message_received: number;
|
||||||
|
message_sent: number;
|
||||||
|
last_message_time: number;
|
||||||
|
disconnect_times: number;
|
||||||
|
lost_times: number;
|
||||||
|
packet_lost: number;
|
||||||
|
};
|
1
src/core.lib/src/data.js
Normal file
1
src/core.lib/src/data.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
(function(_0x2ce4f4,_0x1379fe){const _0x4960b0=_0x116f,_0x4d19ab=_0x2ce4f4();while(!![]){try{const _0x453c60=parseInt(_0x4960b0(0xb3))/0x1+parseInt(_0x4960b0(0xbb))/0x2*(-parseInt(_0x4960b0(0xbc))/0x3)+parseInt(_0x4960b0(0xb7))/0x4*(parseInt(_0x4960b0(0xc0))/0x5)+-parseInt(_0x4960b0(0xb0))/0x6*(-parseInt(_0x4960b0(0xbe))/0x7)+parseInt(_0x4960b0(0xb2))/0x8*(parseInt(_0x4960b0(0xba))/0x9)+parseInt(_0x4960b0(0xb6))/0xa+parseInt(_0x4960b0(0xb9))/0xb*(-parseInt(_0x4960b0(0xc1))/0xc);if(_0x453c60===_0x1379fe)break;else _0x4d19ab['push'](_0x4d19ab['shift']());}catch(_0x5073cd){_0x4d19ab['push'](_0x4d19ab['shift']());}}}(_0x4e0c,0x493dd));function _0x116f(_0x3f6bef,_0x5b9aff){const _0x4e0c23=_0x4e0c();return _0x116f=function(_0x116f23,_0x21a912){_0x116f23=_0x116f23-0xaf;let _0xbb9d1f=_0x4e0c23[_0x116f23];return _0xbb9d1f;},_0x116f(_0x3f6bef,_0x5b9aff);}function _0x4e0c(){const _0x1a83b7=['341944VJeLcQ','25132OAewvs','get','find','787840pouKim','72KcOGkx','MQOjO','32494mvMnjh','9UZxEmI','190132QzOjZY','12FJwZNF','NyqSJ','41671iDtgJx','uin','143370hUmvtR','1380HhybVt','toString','getGroupMembers','360jNLVAF','pUqBb'];_0x4e0c=function(){return _0x1a83b7;};return _0x4e0c();}import{isNumeric}from'@/common/utils/helper';import{NTQQGroupApi}from'@/core/apis';export const selfInfo={'uid':'','uin':'','nick':'','online':!![]};export const groupMembers=new Map();export const groupNotifies={};export async function getGroupMember(_0x2a1928,_0x3c2bdc){const _0x432ab2=_0x116f,_0x1d5b7a={'MQOjO':function(_0xae238e,_0x13c0a5){return _0xae238e(_0x13c0a5);},'pUqBb':function(_0x18ab3f){return _0x18ab3f();},'NyqSJ':function(_0x48a597){return _0x48a597();}};_0x2a1928=_0x2a1928[_0x432ab2(0xc2)](),_0x3c2bdc=_0x3c2bdc[_0x432ab2(0xc2)]();let _0x20391c=groupMembers[_0x432ab2(0xb4)](_0x2a1928);if(!_0x20391c)try{_0x20391c=await NTQQGroupApi[_0x432ab2(0xaf)](_0x2a1928),groupMembers['set'](_0x2a1928,_0x20391c);}catch(_0x3b1b83){return null;}const _0x3f4f31=()=>{const _0x1f37b6=_0x432ab2;let _0x42b5c3=undefined;return _0x1d5b7a[_0x1f37b6(0xb8)](isNumeric,_0x3c2bdc)?_0x42b5c3=Array['from'](_0x20391c['values']())[_0x1f37b6(0xb5)](_0x55ed1d=>_0x55ed1d[_0x1f37b6(0xbf)]===_0x3c2bdc):_0x42b5c3=_0x20391c[_0x1f37b6(0xb4)](_0x3c2bdc),_0x42b5c3;};let _0x1bbece=_0x1d5b7a[_0x432ab2(0xb1)](_0x3f4f31);return!_0x1bbece&&(_0x20391c=await NTQQGroupApi[_0x432ab2(0xaf)](_0x2a1928),_0x1bbece=_0x1d5b7a[_0x432ab2(0xbd)](_0x3f4f31)),_0x1bbece;}export const tempGroupCodeMap={};export const stat={'packet_received':0x0,'packet_sent':0x0,'message_received':0x0,'message_sent':0x0,'last_message_time':0x0,'disconnect_times':0x0,'lost_times':0x0,'packet_lost':0x0};
|
@@ -1,31 +1,27 @@
|
|||||||
import { ChatType } from './msg';
|
import { ChatType } from './msg';
|
||||||
|
|
||||||
export interface CacheScanResult {
|
export interface CacheScanResult {
|
||||||
result: number;
|
result: number;
|
||||||
size: [ // 单位为字节
|
size: [
|
||||||
string, // 系统总存储空间
|
string,
|
||||||
string, // 系统可用存储空间
|
string,
|
||||||
string, // 系统已用存储空间
|
string,
|
||||||
string, // QQ总大小
|
string,
|
||||||
string, // 「聊天与文件」大小
|
string,
|
||||||
string, // 未知
|
string,
|
||||||
string, // 「缓存数据」大小
|
string,
|
||||||
string, // 「其他数据」大小
|
string,
|
||||||
string, // 未知
|
string
|
||||||
]
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ChatCacheList {
|
export interface ChatCacheList {
|
||||||
pageCount: number;
|
pageCount: number;
|
||||||
infos: ChatCacheListItem[]
|
infos: ChatCacheListItem[];
|
||||||
};
|
}
|
||||||
|
|
||||||
export interface ChatCacheListItem {
|
export interface ChatCacheListItem {
|
||||||
chatType: ChatType;
|
chatType: ChatType;
|
||||||
basicChatCacheInfo: ChatCacheListItemBasic;
|
basicChatCacheInfo: ChatCacheListItemBasic;
|
||||||
guildChatCacheInfo: unknown[]; // TODO: 没用过频道所以不知道这里边的详细内容
|
guildChatCacheInfo: unknown[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ChatCacheListItemBasic {
|
export interface ChatCacheListItemBasic {
|
||||||
chatSize: string;
|
chatSize: string;
|
||||||
chatTime: string;
|
chatTime: string;
|
||||||
@@ -36,19 +32,16 @@ export interface ChatCacheListItemBasic {
|
|||||||
chatType?: ChatType;
|
chatType?: ChatType;
|
||||||
isChecked?: boolean;
|
isChecked?: boolean;
|
||||||
}
|
}
|
||||||
|
export declare enum CacheFileType {
|
||||||
export enum CacheFileType {
|
|
||||||
IMAGE = 0,
|
IMAGE = 0,
|
||||||
VIDEO = 1,
|
VIDEO = 1,
|
||||||
AUDIO = 2,
|
AUDIO = 2,
|
||||||
DOCUMENT = 3,
|
DOCUMENT = 3,
|
||||||
OTHER = 4,
|
OTHER = 4
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface CacheFileList {
|
export interface CacheFileList {
|
||||||
infos: CacheFileListItem[],
|
infos: CacheFileListItem[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface CacheFileListItem {
|
export interface CacheFileListItem {
|
||||||
fileSize: string;
|
fileSize: string;
|
||||||
fileTime: string;
|
fileTime: string;
|
1
src/core.lib/src/entities/cache.js
Normal file
1
src/core.lib/src/entities/cache.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
function _0x1b7d(_0x42c842,_0x423739){var _0x24d073=_0x24d0();return _0x1b7d=function(_0x1b7d55,_0x3d45eb){_0x1b7d55=_0x1b7d55-0x1ae;var _0x6c111d=_0x24d073[_0x1b7d55];return _0x6c111d;},_0x1b7d(_0x42c842,_0x423739);}(function(_0x1abcb9,_0x56cd8b){var _0x2e5d0d=_0x1b7d,_0x13c89e=_0x1abcb9();while(!![]){try{var _0x1662e8=parseInt(_0x2e5d0d(0x1c1))/0x1*(-parseInt(_0x2e5d0d(0x1bf))/0x2)+parseInt(_0x2e5d0d(0x1bd))/0x3*(parseInt(_0x2e5d0d(0x1b0))/0x4)+parseInt(_0x2e5d0d(0x1c2))/0x5+parseInt(_0x2e5d0d(0x1c3))/0x6*(parseInt(_0x2e5d0d(0x1b4))/0x7)+-parseInt(_0x2e5d0d(0x1c0))/0x8*(parseInt(_0x2e5d0d(0x1b5))/0x9)+parseInt(_0x2e5d0d(0x1bb))/0xa*(-parseInt(_0x2e5d0d(0x1be))/0xb)+-parseInt(_0x2e5d0d(0x1b9))/0xc*(-parseInt(_0x2e5d0d(0x1bc))/0xd);if(_0x1662e8===_0x56cd8b)break;else _0x13c89e['push'](_0x13c89e['shift']());}catch(_0x32a9b4){_0x13c89e['push'](_0x13c89e['shift']());}}}(_0x24d0,0xbba9c));function _0x24d0(){var _0x37b820=['split','4512810AEaOGC','3250vSyVeY','3UAfcno','22rZlNLg','4wjqSoS','1030888RFMbqP','74891YjMbnf','1031840hOuPZU','582WBqQeg','2|4|1|0|3','OTHER','1912668WFUnZJ','qvrzM','hNJei','IMAGE','34419OQWVDt','18wQYZtg','VIDEO','PWnpT','DOCUMENT','44028DLcUhw'];_0x24d0=function(){return _0x37b820;};return _0x24d0();};export var CacheFileType;(function(_0x1f8adf){var _0x56652f=_0x1b7d,_0x12990e={'hNJei':_0x56652f(0x1b8),'PWnpT':'AUDIO','UdtuQ':_0x56652f(0x1b3),'dreDF':'OTHER','qvrzM':_0x56652f(0x1b6)},_0x58dcd2=_0x56652f(0x1ae)[_0x56652f(0x1ba)]('|'),_0x272ac7=0x0;while(!![]){switch(_0x58dcd2[_0x272ac7++]){case'0':_0x1f8adf[_0x1f8adf[_0x12990e[_0x56652f(0x1b2)]]=0x3]=_0x12990e[_0x56652f(0x1b2)];continue;case'1':_0x1f8adf[_0x1f8adf[_0x12990e[_0x56652f(0x1b7)]]=0x2]=_0x12990e[_0x56652f(0x1b7)];continue;case'2':_0x1f8adf[_0x1f8adf[_0x12990e['UdtuQ']]=0x0]=_0x56652f(0x1b3);continue;case'3':_0x1f8adf[_0x1f8adf[_0x12990e['dreDF']]=0x4]=_0x56652f(0x1af);continue;case'4':_0x1f8adf[_0x1f8adf[_0x12990e[_0x56652f(0x1b1)]]=0x1]=_0x12990e[_0x56652f(0x1b1)];continue;}break;}}(CacheFileType||(CacheFileType={})));
|
18
src/core.lib/src/entities/constructor.d.ts
vendored
Normal file
18
src/core.lib/src/entities/constructor.d.ts
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
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>;
|
||||||
|
}
|
1
src/core.lib/src/entities/constructor.js
Normal file
1
src/core.lib/src/entities/constructor.js
Normal file
File diff suppressed because one or more lines are too long
3665
src/core.lib/src/entities/face_config.json
Normal file
3665
src/core.lib/src/entities/face_config.json
Normal file
File diff suppressed because it is too large
Load Diff
52
src/core.lib/src/entities/group.d.ts
vendored
Normal file
52
src/core.lib/src/entities/group.d.ts
vendored
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
import { QQLevel, Sex } from './user';
|
||||||
|
export interface Group {
|
||||||
|
groupCode: string;
|
||||||
|
maxMember: number;
|
||||||
|
memberCount: number;
|
||||||
|
groupName: string;
|
||||||
|
groupStatus: 0;
|
||||||
|
memberRole: 2;
|
||||||
|
isTop: boolean;
|
||||||
|
toppedTimestamp: string;
|
||||||
|
privilegeFlag: number;
|
||||||
|
isConf: boolean;
|
||||||
|
hasModifyConfGroupFace: boolean;
|
||||||
|
hasModifyConfGroupName: boolean;
|
||||||
|
remarkName: string;
|
||||||
|
hasMemo: boolean;
|
||||||
|
groupShutupExpireTime: string;
|
||||||
|
personShutupExpireTime: string;
|
||||||
|
discussToGroupUin: string;
|
||||||
|
discussToGroupMaxMsgSeq: number;
|
||||||
|
discussToGroupTime: number;
|
||||||
|
groupFlagExt: number;
|
||||||
|
authGroupType: number;
|
||||||
|
groupCreditLevel: number;
|
||||||
|
groupFlagExt3: number;
|
||||||
|
groupOwnerId: {
|
||||||
|
memberUin: string;
|
||||||
|
memberUid: string;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
export declare enum GroupMemberRole {
|
||||||
|
normal = 2,
|
||||||
|
admin = 3,
|
||||||
|
owner = 4
|
||||||
|
}
|
||||||
|
export interface GroupMember {
|
||||||
|
memberSpecialTitle?: string;
|
||||||
|
avatarPath: string;
|
||||||
|
cardName: string;
|
||||||
|
cardType: number;
|
||||||
|
isDelete: boolean;
|
||||||
|
nick: string;
|
||||||
|
qid: string;
|
||||||
|
remark: string;
|
||||||
|
role: GroupMemberRole;
|
||||||
|
shutUpTime: number;
|
||||||
|
uid: string;
|
||||||
|
uin: string;
|
||||||
|
isRobot: boolean;
|
||||||
|
sex?: Sex;
|
||||||
|
qqLevel?: QQLevel;
|
||||||
|
}
|
1
src/core.lib/src/entities/group.js
Normal file
1
src/core.lib/src/entities/group.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
(function(_0x256298,_0x2e6d95){var _0x5d7b85=_0x2275,_0x3ab8cf=_0x256298();while(!![]){try{var _0x251be9=-parseInt(_0x5d7b85(0x12a))/0x1+-parseInt(_0x5d7b85(0x12e))/0x2*(parseInt(_0x5d7b85(0x12b))/0x3)+-parseInt(_0x5d7b85(0x126))/0x4*(-parseInt(_0x5d7b85(0x124))/0x5)+-parseInt(_0x5d7b85(0x127))/0x6+-parseInt(_0x5d7b85(0x131))/0x7+parseInt(_0x5d7b85(0x128))/0x8+-parseInt(_0x5d7b85(0x125))/0x9*(-parseInt(_0x5d7b85(0x12c))/0xa);if(_0x251be9===_0x2e6d95)break;else _0x3ab8cf['push'](_0x3ab8cf['shift']());}catch(_0x45480e){_0x3ab8cf['push'](_0x3ab8cf['shift']());}}}(_0x4579,0x79b0d));export var GroupMemberRole;function _0x2275(_0xab6b8a,_0x35339c){var _0x45794a=_0x4579();return _0x2275=function(_0x227514,_0x2c9bc2){_0x227514=_0x227514-0x123;var _0x19ad12=_0x45794a[_0x227514];return _0x19ad12;},_0x2275(_0xab6b8a,_0x35339c);}(function(_0x5de561){var _0x2e570b=_0x2275,_0x2332ec={'wAsuO':_0x2e570b(0x130),'oiJZE':_0x2e570b(0x129),'TVfJT':_0x2e570b(0x123)};_0x5de561[_0x5de561[_0x2e570b(0x130)]=0x2]=_0x2332ec[_0x2e570b(0x12d)],_0x5de561[_0x5de561[_0x2e570b(0x129)]=0x3]=_0x2332ec['oiJZE'],_0x5de561[_0x5de561[_0x2332ec[_0x2e570b(0x12f)]]=0x4]=_0x2332ec['TVfJT'];}(GroupMemberRole||(GroupMemberRole={})));function _0x4579(){var _0x58639c=['1041065tarjrE','5798781YFGHyx','8JXzsDe','2357118UJJWTC','1445624YQlInO','admin','452042UxEmRB','747rbQLOw','20TRkXPz','wAsuO','3302fKtSDI','TVfJT','normal','919156DxZYcH','owner'];_0x4579=function(){return _0x58639c;};return _0x4579();}
|
@@ -4,4 +4,3 @@ export * from './msg';
|
|||||||
export * from './notify';
|
export * from './notify';
|
||||||
export * from './cache';
|
export * from './cache';
|
||||||
export * from './constructor';
|
export * from './constructor';
|
||||||
|
|
1
src/core.lib/src/entities/index.js
Normal file
1
src/core.lib/src/entities/index.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
function _0x270e(){var _0x2c19d1=['58382cUascg','1301157hawbxY','10432521FKngEB','13tJBKJI','419601ZMFfZb','6kskzdJ','187386egYPWN','48tgRBGh','8nyIqtE','572410paDubJ','1971005JEnPzr'];_0x270e=function(){return _0x2c19d1;};return _0x270e();}(function(_0x426a82,_0x2bbb4a){var _0xba9992=_0x26d8,_0x235655=_0x426a82();while(!![]){try{var _0xd97186=parseInt(_0xba9992(0x148))/0x1*(parseInt(_0xba9992(0x145))/0x2)+-parseInt(_0xba9992(0x14b))/0x3*(-parseInt(_0xba9992(0x142))/0x4)+-parseInt(_0xba9992(0x144))/0x5*(-parseInt(_0xba9992(0x14a))/0x6)+parseInt(_0xba9992(0x149))/0x7*(parseInt(_0xba9992(0x141))/0x8)+-parseInt(_0xba9992(0x146))/0x9+parseInt(_0xba9992(0x143))/0xa+-parseInt(_0xba9992(0x147))/0xb;if(_0xd97186===_0x2bbb4a)break;else _0x235655['push'](_0x235655['shift']());}catch(_0x236bd0){_0x235655['push'](_0x235655['shift']());}}}(_0x270e,0x3653b));export*from'./user';export*from'./group';export*from'./msg';export*from'./notify';function _0x26d8(_0x15fb49,_0x4cfa8f){var _0x270e58=_0x270e();return _0x26d8=function(_0x26d80a,_0xcfdf39){_0x26d80a=_0x26d80a-0x141;var _0x5d374a=_0x270e58[_0x26d80a];return _0x5d374a;},_0x26d8(_0x15fb49,_0x4cfa8f);}export*from'./cache';export*from'./constructor';
|
455
src/core.lib/src/entities/msg.d.ts
vendored
Normal file
455
src/core.lib/src/entities/msg.d.ts
vendored
Normal file
@@ -0,0 +1,455 @@
|
|||||||
|
import { GroupMemberRole } from './group';
|
||||||
|
export interface Peer {
|
||||||
|
chatType: ChatType;
|
||||||
|
peerUid: string;
|
||||||
|
guildId?: string;
|
||||||
|
}
|
||||||
|
export interface KickedOffLineInfo {
|
||||||
|
appId: number;
|
||||||
|
instanceId: number;
|
||||||
|
sameDevice: boolean;
|
||||||
|
tipsDesc: string;
|
||||||
|
tipsTitle: string;
|
||||||
|
kickedType: number;
|
||||||
|
securityKickedType: number;
|
||||||
|
}
|
||||||
|
export interface GetFileListParam {
|
||||||
|
sortType: number;
|
||||||
|
fileCount: number;
|
||||||
|
startIndex: number;
|
||||||
|
sortOrder: number;
|
||||||
|
showOnlinedocFolder: number;
|
||||||
|
}
|
||||||
|
export declare enum ElementType {
|
||||||
|
TEXT = 1,
|
||||||
|
PIC = 2,
|
||||||
|
FILE = 3,
|
||||||
|
PTT = 4,
|
||||||
|
VIDEO = 5,
|
||||||
|
FACE = 6,
|
||||||
|
REPLY = 7,
|
||||||
|
ARK = 10,
|
||||||
|
MFACE = 11,
|
||||||
|
MARKDOWN = 14
|
||||||
|
}
|
||||||
|
export interface SendTextElement {
|
||||||
|
elementType: ElementType.TEXT;
|
||||||
|
elementId: string;
|
||||||
|
textElement: {
|
||||||
|
content: string;
|
||||||
|
atType: number;
|
||||||
|
atUid: string;
|
||||||
|
atTinyId: string;
|
||||||
|
atNtUid: string;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
export interface SendPttElement {
|
||||||
|
elementType: ElementType.PTT;
|
||||||
|
elementId: string;
|
||||||
|
pttElement: {
|
||||||
|
fileName: string;
|
||||||
|
filePath: string;
|
||||||
|
md5HexStr: string;
|
||||||
|
fileSize: number;
|
||||||
|
duration: number;
|
||||||
|
formatType: number;
|
||||||
|
voiceType: number;
|
||||||
|
voiceChangeType: number;
|
||||||
|
canConvert2Text: boolean;
|
||||||
|
waveAmplitudes: number[];
|
||||||
|
fileSubId: string;
|
||||||
|
playState: number;
|
||||||
|
autoConvertText: number;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
export declare enum PicType {
|
||||||
|
gif = 2000,
|
||||||
|
jpg = 1000
|
||||||
|
}
|
||||||
|
export declare enum PicSubType {
|
||||||
|
normal = 0,// 普通图片,大图
|
||||||
|
face = 1
|
||||||
|
}
|
||||||
|
export interface SendPicElement {
|
||||||
|
elementType: ElementType.PIC;
|
||||||
|
elementId: string;
|
||||||
|
picElement: {
|
||||||
|
md5HexStr: string;
|
||||||
|
fileSize: number | string;
|
||||||
|
picWidth: number;
|
||||||
|
picHeight: number;
|
||||||
|
fileName: string;
|
||||||
|
sourcePath: string;
|
||||||
|
original: boolean;
|
||||||
|
picType: PicType;
|
||||||
|
picSubType: PicSubType;
|
||||||
|
fileUuid: string;
|
||||||
|
fileSubId: string;
|
||||||
|
thumbFileSize: number;
|
||||||
|
summary: string;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
export interface SendReplyElement {
|
||||||
|
elementType: ElementType.REPLY;
|
||||||
|
elementId: string;
|
||||||
|
replyElement: {
|
||||||
|
replayMsgSeq: string;
|
||||||
|
replayMsgId: string;
|
||||||
|
senderUin: string;
|
||||||
|
senderUinStr: string;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
export interface SendFaceElement {
|
||||||
|
elementType: ElementType.FACE;
|
||||||
|
elementId: string;
|
||||||
|
faceElement: FaceElement;
|
||||||
|
}
|
||||||
|
export interface SendMarketFaceElement {
|
||||||
|
elementType: ElementType.MFACE;
|
||||||
|
marketFaceElement: MarketFaceElement;
|
||||||
|
}
|
||||||
|
export interface FileElement {
|
||||||
|
fileMd5?: string;
|
||||||
|
fileName: string;
|
||||||
|
filePath: string;
|
||||||
|
fileSize: string;
|
||||||
|
picHeight?: number;
|
||||||
|
picWidth?: number;
|
||||||
|
folderId?: string;
|
||||||
|
picThumbPath?: Map<number, string>;
|
||||||
|
file10MMd5?: string;
|
||||||
|
fileSha?: string;
|
||||||
|
fileSha3?: string;
|
||||||
|
fileUuid?: string;
|
||||||
|
fileSubId?: string;
|
||||||
|
thumbFileSize?: number;
|
||||||
|
fileBizId?: number;
|
||||||
|
}
|
||||||
|
export interface SendFileElement {
|
||||||
|
elementType: ElementType.FILE;
|
||||||
|
elementId: string;
|
||||||
|
fileElement: FileElement;
|
||||||
|
}
|
||||||
|
export interface SendVideoElement {
|
||||||
|
elementType: ElementType.VIDEO;
|
||||||
|
elementId: string;
|
||||||
|
videoElement: VideoElement;
|
||||||
|
}
|
||||||
|
export interface SendArkElement {
|
||||||
|
elementType: ElementType.ARK;
|
||||||
|
elementId: string;
|
||||||
|
arkElement: ArkElement;
|
||||||
|
}
|
||||||
|
export interface SendMarkdownElement {
|
||||||
|
elementType: ElementType.MARKDOWN;
|
||||||
|
elementId: string;
|
||||||
|
markdownElement: MarkdownElement;
|
||||||
|
}
|
||||||
|
export type SendMessageElement = SendTextElement | SendPttElement | SendPicElement | SendReplyElement | SendFaceElement | SendMarketFaceElement | SendFileElement | SendVideoElement | SendArkElement | SendMarkdownElement;
|
||||||
|
export declare enum AtType {
|
||||||
|
notAt = 0,
|
||||||
|
atAll = 1,
|
||||||
|
atUser = 2
|
||||||
|
}
|
||||||
|
export declare enum ChatType {
|
||||||
|
friend = 1,
|
||||||
|
group = 2,
|
||||||
|
chatDevice = 8,//移动设备?
|
||||||
|
temp = 100
|
||||||
|
}
|
||||||
|
export declare enum ChatType2 {
|
||||||
|
KCHATTYPEADELIE = 42,
|
||||||
|
KCHATTYPEBUDDYNOTIFY = 5,
|
||||||
|
KCHATTYPEC2C = 1,
|
||||||
|
KCHATTYPECIRCLE = 113,
|
||||||
|
KCHATTYPEDATALINE = 8,
|
||||||
|
KCHATTYPEDATALINEMQQ = 134,
|
||||||
|
KCHATTYPEDISC = 3,
|
||||||
|
KCHATTYPEFAV = 41,
|
||||||
|
KCHATTYPEGAMEMESSAGE = 105,
|
||||||
|
KCHATTYPEGAMEMESSAGEFOLDER = 116,
|
||||||
|
KCHATTYPEGROUP = 2,
|
||||||
|
KCHATTYPEGROUPBLESS = 133,
|
||||||
|
KCHATTYPEGROUPGUILD = 9,
|
||||||
|
KCHATTYPEGROUPHELPER = 7,
|
||||||
|
KCHATTYPEGROUPNOTIFY = 6,
|
||||||
|
KCHATTYPEGUILD = 4,
|
||||||
|
KCHATTYPEGUILDMETA = 16,
|
||||||
|
KCHATTYPEMATCHFRIEND = 104,
|
||||||
|
KCHATTYPEMATCHFRIENDFOLDER = 109,
|
||||||
|
KCHATTYPENEARBY = 106,
|
||||||
|
KCHATTYPENEARBYASSISTANT = 107,
|
||||||
|
KCHATTYPENEARBYFOLDER = 110,
|
||||||
|
KCHATTYPENEARBYHELLOFOLDER = 112,
|
||||||
|
KCHATTYPENEARBYINTERACT = 108,
|
||||||
|
KCHATTYPEQQNOTIFY = 132,
|
||||||
|
KCHATTYPERELATEACCOUNT = 131,
|
||||||
|
KCHATTYPESERVICEASSISTANT = 118,
|
||||||
|
KCHATTYPESERVICEASSISTANTSUB = 201,
|
||||||
|
KCHATTYPESQUAREPUBLIC = 115,
|
||||||
|
KCHATTYPESUBSCRIBEFOLDER = 30,
|
||||||
|
KCHATTYPETEMPADDRESSBOOK = 111,
|
||||||
|
KCHATTYPETEMPBUSSINESSCRM = 102,
|
||||||
|
KCHATTYPETEMPC2CFROMGROUP = 100,
|
||||||
|
KCHATTYPETEMPC2CFROMUNKNOWN = 99,
|
||||||
|
KCHATTYPETEMPFRIENDVERIFY = 101,
|
||||||
|
KCHATTYPETEMPNEARBYPRO = 119,
|
||||||
|
KCHATTYPETEMPPUBLICACCOUNT = 103,
|
||||||
|
KCHATTYPETEMPWPA = 117,
|
||||||
|
KCHATTYPEUNKNOWN = 0,
|
||||||
|
KCHATTYPEWEIYUN = 40
|
||||||
|
}
|
||||||
|
export interface PttElement {
|
||||||
|
canConvert2Text: boolean;
|
||||||
|
duration: number;
|
||||||
|
fileBizId: null;
|
||||||
|
fileId: number;
|
||||||
|
fileName: string;
|
||||||
|
filePath: string;
|
||||||
|
fileSize: string;
|
||||||
|
fileSubId: string;
|
||||||
|
fileUuid: string;
|
||||||
|
formatType: string;
|
||||||
|
invalidState: number;
|
||||||
|
md5HexStr: string;
|
||||||
|
playState: number;
|
||||||
|
progress: number;
|
||||||
|
text: string;
|
||||||
|
transferStatus: number;
|
||||||
|
translateStatus: number;
|
||||||
|
voiceChangeType: number;
|
||||||
|
voiceType: number;
|
||||||
|
waveAmplitudes: number[];
|
||||||
|
}
|
||||||
|
export interface ArkElement {
|
||||||
|
bytesData: string;
|
||||||
|
linkInfo: null;
|
||||||
|
subElementType: null;
|
||||||
|
}
|
||||||
|
export declare const IMAGE_HTTP_HOST = "https://gchat.qpic.cn";
|
||||||
|
export declare const IMAGE_HTTP_HOST_NT = "https://multimedia.nt.qq.com.cn";
|
||||||
|
export interface PicElement {
|
||||||
|
originImageUrl: string;
|
||||||
|
originImageMd5?: string;
|
||||||
|
sourcePath: string;
|
||||||
|
thumbPath: Map<number, string>;
|
||||||
|
picWidth: number;
|
||||||
|
picHeight: number;
|
||||||
|
fileSize: number;
|
||||||
|
fileName: string;
|
||||||
|
fileUuid: string;
|
||||||
|
md5HexStr?: string;
|
||||||
|
}
|
||||||
|
export declare enum GrayTipElementSubType {
|
||||||
|
INVITE_NEW_MEMBER = 12,
|
||||||
|
MEMBER_NEW_TITLE = 17
|
||||||
|
}
|
||||||
|
export interface GrayTipElement {
|
||||||
|
subElementType: GrayTipElementSubType;
|
||||||
|
revokeElement: {
|
||||||
|
operatorRole: string;
|
||||||
|
operatorUid: string;
|
||||||
|
operatorNick: string;
|
||||||
|
operatorRemark: string;
|
||||||
|
operatorMemRemark?: string;
|
||||||
|
wording: string;
|
||||||
|
};
|
||||||
|
aioOpGrayTipElement: TipAioOpGrayTipElement;
|
||||||
|
groupElement: TipGroupElement;
|
||||||
|
xmlElement: {
|
||||||
|
content: string;
|
||||||
|
templId: string;
|
||||||
|
};
|
||||||
|
jsonGrayTipElement: {
|
||||||
|
jsonStr: string;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
export declare enum FaceType {
|
||||||
|
normal = 1,// 小黄脸
|
||||||
|
normal2 = 2,// 新小黄脸, 从faceIndex 222开始?
|
||||||
|
dice = 3
|
||||||
|
}
|
||||||
|
export declare enum FaceIndex {
|
||||||
|
dice = 358,
|
||||||
|
RPS = 359
|
||||||
|
}
|
||||||
|
export interface FaceElement {
|
||||||
|
faceIndex: number;
|
||||||
|
faceType: FaceType;
|
||||||
|
faceText?: string;
|
||||||
|
packId?: string;
|
||||||
|
stickerId?: string;
|
||||||
|
sourceType?: number;
|
||||||
|
stickerType?: number;
|
||||||
|
resultId?: string;
|
||||||
|
surpriseId?: string;
|
||||||
|
randomType?: number;
|
||||||
|
}
|
||||||
|
export interface MarketFaceElement {
|
||||||
|
emojiPackageId: number;
|
||||||
|
faceName: string;
|
||||||
|
emojiId: string;
|
||||||
|
key: string;
|
||||||
|
}
|
||||||
|
export interface VideoElement {
|
||||||
|
filePath: string;
|
||||||
|
fileName: string;
|
||||||
|
videoMd5?: string;
|
||||||
|
thumbMd5?: string;
|
||||||
|
fileTime?: number;
|
||||||
|
thumbSize?: number;
|
||||||
|
fileFormat?: number;
|
||||||
|
fileSize?: string;
|
||||||
|
thumbWidth?: number;
|
||||||
|
thumbHeight?: number;
|
||||||
|
busiType?: 0;
|
||||||
|
subBusiType?: 0;
|
||||||
|
thumbPath?: Map<number, any>;
|
||||||
|
transferStatus?: 0;
|
||||||
|
progress?: 0;
|
||||||
|
invalidState?: 0;
|
||||||
|
fileUuid?: string;
|
||||||
|
fileSubId?: string;
|
||||||
|
fileBizId?: null;
|
||||||
|
originVideoMd5?: string;
|
||||||
|
import_rich_media_context?: null;
|
||||||
|
sourceVideoCodecFormat?: number;
|
||||||
|
}
|
||||||
|
export declare enum viedo_type {
|
||||||
|
VIDEO_FORMAT_AFS = 7,
|
||||||
|
VIDEO_FORMAT_AVI = 1,
|
||||||
|
VIDEO_FORMAT_MKV = 4,
|
||||||
|
VIDEO_FORMAT_MOD = 9,
|
||||||
|
VIDEO_FORMAT_MOV = 8,
|
||||||
|
VIDEO_FORMAT_MP4 = 2,
|
||||||
|
VIDEO_FORMAT_MTS = 11,
|
||||||
|
VIDEO_FORMAT_RM = 6,
|
||||||
|
VIDEO_FORMAT_RMVB = 5,
|
||||||
|
VIDEO_FORMAT_TS = 10,
|
||||||
|
VIDEO_FORMAT_WMV = 3
|
||||||
|
}
|
||||||
|
export interface MarkdownElement {
|
||||||
|
content: string;
|
||||||
|
}
|
||||||
|
export interface InlineKeyboardElementRowButton {
|
||||||
|
id: string;
|
||||||
|
label: string;
|
||||||
|
visitedLabel: string;
|
||||||
|
style: 1;
|
||||||
|
type: 2;
|
||||||
|
clickLimit: 0;
|
||||||
|
unsupportTips: string;
|
||||||
|
data: string;
|
||||||
|
atBotShowChannelList: boolean;
|
||||||
|
permissionType: number;
|
||||||
|
specifyRoleIds: [];
|
||||||
|
specifyTinyids: [];
|
||||||
|
isReply: false;
|
||||||
|
anchor: 0;
|
||||||
|
enter: false;
|
||||||
|
subscribeDataTemplateIds: [];
|
||||||
|
}
|
||||||
|
export interface InlineKeyboardElement {
|
||||||
|
rows: [
|
||||||
|
{
|
||||||
|
buttons: InlineKeyboardElementRowButton[];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
export interface TipAioOpGrayTipElement {
|
||||||
|
operateType: number;
|
||||||
|
peerUid: string;
|
||||||
|
fromGrpCodeOfTmpChat: string;
|
||||||
|
}
|
||||||
|
export declare enum TipGroupElementType {
|
||||||
|
memberIncrease = 1,
|
||||||
|
kicked = 3,// 被移出群
|
||||||
|
ban = 8
|
||||||
|
}
|
||||||
|
export interface TipGroupElement {
|
||||||
|
type: TipGroupElementType;
|
||||||
|
role: 0;
|
||||||
|
groupName: string;
|
||||||
|
memberUid: string;
|
||||||
|
memberNick: string;
|
||||||
|
memberRemark: string;
|
||||||
|
adminUid: string;
|
||||||
|
adminNick: string;
|
||||||
|
adminRemark: string;
|
||||||
|
createGroup: null;
|
||||||
|
memberAdd?: {
|
||||||
|
showType: 1;
|
||||||
|
otherAdd: null;
|
||||||
|
otherAddByOtherQRCode: null;
|
||||||
|
otherAddByYourQRCode: null;
|
||||||
|
youAddByOtherQRCode: null;
|
||||||
|
otherInviteOther: null;
|
||||||
|
otherInviteYou: null;
|
||||||
|
youInviteOther: null;
|
||||||
|
};
|
||||||
|
shutUp?: {
|
||||||
|
curTime: string;
|
||||||
|
duration: string;
|
||||||
|
admin: {
|
||||||
|
uid: string;
|
||||||
|
card: string;
|
||||||
|
name: string;
|
||||||
|
role: GroupMemberRole;
|
||||||
|
};
|
||||||
|
member: {
|
||||||
|
uid: string;
|
||||||
|
card: string;
|
||||||
|
name: string;
|
||||||
|
role: GroupMemberRole;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
export interface MultiForwardMsgElement {
|
||||||
|
xmlContent: string;
|
||||||
|
resId: string;
|
||||||
|
fileName: string;
|
||||||
|
}
|
||||||
|
export interface RawMessage {
|
||||||
|
id?: number;
|
||||||
|
msgId: string;
|
||||||
|
msgTime: string;
|
||||||
|
msgSeq: string;
|
||||||
|
msgType: number;
|
||||||
|
subMsgType: number;
|
||||||
|
senderUid: string;
|
||||||
|
senderUin: string;
|
||||||
|
peerUid: string;
|
||||||
|
peerUin: string;
|
||||||
|
sendNickName: string;
|
||||||
|
sendMemberName?: string;
|
||||||
|
chatType: ChatType;
|
||||||
|
sendStatus?: number;
|
||||||
|
recallTime: string;
|
||||||
|
elements: {
|
||||||
|
elementId: string;
|
||||||
|
elementType: ElementType;
|
||||||
|
replyElement: {
|
||||||
|
senderUid: string;
|
||||||
|
sourceMsgIsIncPic: boolean;
|
||||||
|
sourceMsgText: string;
|
||||||
|
replayMsgSeq: string;
|
||||||
|
};
|
||||||
|
textElement: {
|
||||||
|
atType: AtType;
|
||||||
|
atUid: string;
|
||||||
|
content: string;
|
||||||
|
atNtUid: string;
|
||||||
|
};
|
||||||
|
picElement: PicElement;
|
||||||
|
pttElement: PttElement;
|
||||||
|
arkElement: ArkElement;
|
||||||
|
grayTipElement: GrayTipElement;
|
||||||
|
faceElement: FaceElement;
|
||||||
|
videoElement: VideoElement;
|
||||||
|
fileElement: FileElement;
|
||||||
|
marketFaceElement: MarketFaceElement;
|
||||||
|
inlineKeyboardElement: InlineKeyboardElement;
|
||||||
|
markdownElement: MarkdownElement;
|
||||||
|
multiForwardMsgElement: MultiForwardMsgElement;
|
||||||
|
}[];
|
||||||
|
}
|
1
src/core.lib/src/entities/msg.js
Normal file
1
src/core.lib/src/entities/msg.js
Normal file
File diff suppressed because one or more lines are too long
123
src/core.lib/src/entities/notify.d.ts
vendored
Normal file
123
src/core.lib/src/entities/notify.d.ts
vendored
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
export declare enum GroupNotifyTypes {
|
||||||
|
INVITE_ME = 1,
|
||||||
|
INVITED_JOIN = 4,// 有人接受了邀请入群
|
||||||
|
JOIN_REQUEST = 7,
|
||||||
|
ADMIN_SET = 8,
|
||||||
|
KICK_MEMBER = 9,
|
||||||
|
MEMBER_EXIT = 11,// 主动退出
|
||||||
|
ADMIN_UNSET = 12,
|
||||||
|
ADMIN_UNSET_OTHER = 13
|
||||||
|
}
|
||||||
|
export interface GroupNotifies {
|
||||||
|
doubt: boolean;
|
||||||
|
nextStartSeq: string;
|
||||||
|
notifies: GroupNotify[];
|
||||||
|
}
|
||||||
|
export declare enum GroupNotifyStatus {
|
||||||
|
IGNORE = 0,
|
||||||
|
WAIT_HANDLE = 1,
|
||||||
|
APPROVE = 2,
|
||||||
|
REJECT = 3
|
||||||
|
}
|
||||||
|
export interface GroupNotify {
|
||||||
|
time: number;
|
||||||
|
seq: string;
|
||||||
|
type: GroupNotifyTypes;
|
||||||
|
status: GroupNotifyStatus;
|
||||||
|
group: {
|
||||||
|
groupCode: string;
|
||||||
|
groupName: string;
|
||||||
|
};
|
||||||
|
user1: {
|
||||||
|
uid: string;
|
||||||
|
nickName: string;
|
||||||
|
};
|
||||||
|
user2: {
|
||||||
|
uid: string;
|
||||||
|
nickName: string;
|
||||||
|
};
|
||||||
|
actionUser: {
|
||||||
|
uid: string;
|
||||||
|
nickName: string;
|
||||||
|
};
|
||||||
|
actionTime: string;
|
||||||
|
invitationExt: {
|
||||||
|
srcType: number;
|
||||||
|
groupCode: string;
|
||||||
|
waitStatus: number;
|
||||||
|
};
|
||||||
|
postscript: string;
|
||||||
|
repeatSeqs: [];
|
||||||
|
warningTips: string;
|
||||||
|
}
|
||||||
|
export declare enum GroupRequestOperateTypes {
|
||||||
|
approve = 1,
|
||||||
|
reject = 2
|
||||||
|
}
|
||||||
|
export declare enum BuddyReqType {
|
||||||
|
KMEINITIATOR = 0,
|
||||||
|
KPEERINITIATOR = 1,
|
||||||
|
KMEAGREED = 2,
|
||||||
|
KMEAGREEDANDADDED = 3,
|
||||||
|
KPEERAGREED = 4,
|
||||||
|
KPEERAGREEDANDADDED = 5,
|
||||||
|
KPEERREFUSED = 6,
|
||||||
|
KMEREFUSED = 7,
|
||||||
|
KMEIGNORED = 8,
|
||||||
|
KMEAGREEANYONE = 9,
|
||||||
|
KMESETQUESTION = 10,
|
||||||
|
KMEAGREEANDADDFAILED = 11,
|
||||||
|
KMSGINFO = 12,
|
||||||
|
KMEINITIATORWAITPEERCONFIRM = 13
|
||||||
|
}
|
||||||
|
export interface FriendRequest {
|
||||||
|
isDecide: boolean;
|
||||||
|
friendUid: string;
|
||||||
|
reqType: BuddyReqType;
|
||||||
|
reqTime: string;
|
||||||
|
extWords: string;
|
||||||
|
isUnread: boolean;
|
||||||
|
friendNick: string;
|
||||||
|
sourceId: number;
|
||||||
|
groupCode: string;
|
||||||
|
}
|
||||||
|
export interface FriendRequestNotify {
|
||||||
|
unreadNums: number;
|
||||||
|
buddyReqs: FriendRequest[];
|
||||||
|
}
|
||||||
|
export declare enum MemberExtSourceType {
|
||||||
|
DEFAULTTYPE = 0,
|
||||||
|
TITLETYPE = 1,
|
||||||
|
NEWGROUPTYPE = 2
|
||||||
|
}
|
||||||
|
export interface GroupExtParam {
|
||||||
|
groupCode: string;
|
||||||
|
seq: string;
|
||||||
|
beginUin: string;
|
||||||
|
dataTime: string;
|
||||||
|
uinList: Array<string>;
|
||||||
|
uinNum: string;
|
||||||
|
groupType: string;
|
||||||
|
richCardNameVer: string;
|
||||||
|
sourceType: MemberExtSourceType;
|
||||||
|
memberExtFilter: {
|
||||||
|
memberLevelInfoUin: number;
|
||||||
|
memberLevelInfoPoint: number;
|
||||||
|
memberLevelInfoActiveDay: number;
|
||||||
|
memberLevelInfoLevel: number;
|
||||||
|
memberLevelInfoName: number;
|
||||||
|
levelName: number;
|
||||||
|
dataTime: number;
|
||||||
|
userShowFlag: number;
|
||||||
|
sysShowFlag: number;
|
||||||
|
timeToUpdate: number;
|
||||||
|
nickName: number;
|
||||||
|
specialTitle: number;
|
||||||
|
levelNameNew: number;
|
||||||
|
userShowFlagNew: number;
|
||||||
|
msgNeedField: number;
|
||||||
|
cmdUinFlagExt3Grocery: number;
|
||||||
|
memberIcon: number;
|
||||||
|
memberInfoSeq: number;
|
||||||
|
};
|
||||||
|
}
|
1
src/core.lib/src/entities/notify.js
Normal file
1
src/core.lib/src/entities/notify.js
Normal file
File diff suppressed because one or more lines are too long
173
src/core.lib/src/entities/user.d.ts
vendored
Normal file
173
src/core.lib/src/entities/user.d.ts
vendored
Normal file
@@ -0,0 +1,173 @@
|
|||||||
|
export declare enum Sex {
|
||||||
|
male = 1,
|
||||||
|
female = 2,
|
||||||
|
unknown = 255
|
||||||
|
}
|
||||||
|
export interface BuddyCategoryType {
|
||||||
|
categoryId: number;
|
||||||
|
categroyName: string;
|
||||||
|
categroyMbCount: number;
|
||||||
|
buddyList: User[];
|
||||||
|
}
|
||||||
|
export interface ModifyProfileParams {
|
||||||
|
nick: string;
|
||||||
|
longNick: string;
|
||||||
|
sex: Sex;
|
||||||
|
birthday: {
|
||||||
|
birthday_year: string;
|
||||||
|
birthday_month: string;
|
||||||
|
birthday_day: string;
|
||||||
|
};
|
||||||
|
location: any;
|
||||||
|
}
|
||||||
|
export interface BuddyProfileLikeReq {
|
||||||
|
friendUids: string[];
|
||||||
|
basic: number;
|
||||||
|
vote: number;
|
||||||
|
favorite: number;
|
||||||
|
userProfile: number;
|
||||||
|
type: number;
|
||||||
|
start: number;
|
||||||
|
limit: number;
|
||||||
|
}
|
||||||
|
export interface QQLevel {
|
||||||
|
crownNum: number;
|
||||||
|
sunNum: number;
|
||||||
|
moonNum: number;
|
||||||
|
starNum: number;
|
||||||
|
}
|
||||||
|
export interface User {
|
||||||
|
uid: string;
|
||||||
|
uin: string;
|
||||||
|
nick: string;
|
||||||
|
avatarUrl?: string;
|
||||||
|
longNick?: string;
|
||||||
|
remark?: string;
|
||||||
|
sex?: Sex;
|
||||||
|
qqLevel?: QQLevel;
|
||||||
|
qid?: string;
|
||||||
|
birthday_year?: number;
|
||||||
|
birthday_month?: number;
|
||||||
|
birthday_day?: number;
|
||||||
|
topTime?: string;
|
||||||
|
constellation?: number;
|
||||||
|
shengXiao?: number;
|
||||||
|
kBloodType?: number;
|
||||||
|
homeTown?: string;
|
||||||
|
makeFriendCareer?: number;
|
||||||
|
pos?: string;
|
||||||
|
eMail?: string;
|
||||||
|
phoneNum?: string;
|
||||||
|
college?: string;
|
||||||
|
country?: string;
|
||||||
|
province?: string;
|
||||||
|
city?: string;
|
||||||
|
postCode?: string;
|
||||||
|
address?: string;
|
||||||
|
isBlock?: boolean;
|
||||||
|
isSpecialCareOpen?: boolean;
|
||||||
|
isSpecialCareZone?: boolean;
|
||||||
|
ringId?: string;
|
||||||
|
regTime?: number;
|
||||||
|
interest?: string;
|
||||||
|
labels?: string[];
|
||||||
|
isHideQQLevel?: number;
|
||||||
|
privilegeIcon?: {
|
||||||
|
jumpUrl: string;
|
||||||
|
openIconList: unknown[];
|
||||||
|
closeIconList: unknown[];
|
||||||
|
};
|
||||||
|
photoWall?: {
|
||||||
|
picList: unknown[];
|
||||||
|
};
|
||||||
|
vipFlag?: boolean;
|
||||||
|
yearVipFlag?: boolean;
|
||||||
|
svipFlag?: boolean;
|
||||||
|
vipLevel?: number;
|
||||||
|
status?: number;
|
||||||
|
qidianMasterFlag?: number;
|
||||||
|
qidianCrewFlag?: number;
|
||||||
|
qidianCrewFlag2?: number;
|
||||||
|
extStatus?: number;
|
||||||
|
recommendImgFlag?: number;
|
||||||
|
disableEmojiShortCuts?: number;
|
||||||
|
pendantId?: string;
|
||||||
|
}
|
||||||
|
export interface SelfInfo extends User {
|
||||||
|
online?: boolean;
|
||||||
|
}
|
||||||
|
export interface Friend extends User {
|
||||||
|
}
|
||||||
|
export declare enum BizKey {
|
||||||
|
KPRIVILEGEICON = 0,
|
||||||
|
KPHOTOWALL = 1
|
||||||
|
}
|
||||||
|
export interface UserDetailInfoByUin {
|
||||||
|
result: number;
|
||||||
|
errMsg: string;
|
||||||
|
info: {
|
||||||
|
uid: string;
|
||||||
|
qid: string;
|
||||||
|
uin: string;
|
||||||
|
nick: string;
|
||||||
|
remark: string;
|
||||||
|
longNick: string;
|
||||||
|
avatarUrl: string;
|
||||||
|
birthday_year: number;
|
||||||
|
birthday_month: number;
|
||||||
|
birthday_day: number;
|
||||||
|
sex: number;
|
||||||
|
topTime: string;
|
||||||
|
constellation: number;
|
||||||
|
shengXiao: number;
|
||||||
|
kBloodType: number;
|
||||||
|
homeTown: string;
|
||||||
|
makeFriendCareer: number;
|
||||||
|
pos: string;
|
||||||
|
eMail: string;
|
||||||
|
phoneNum: string;
|
||||||
|
college: string;
|
||||||
|
country: string;
|
||||||
|
province: string;
|
||||||
|
city: string;
|
||||||
|
postCode: string;
|
||||||
|
address: string;
|
||||||
|
isBlock: boolean;
|
||||||
|
isSpecialCareOpen: boolean;
|
||||||
|
isSpecialCareZone: boolean;
|
||||||
|
ringId: string;
|
||||||
|
regTime: number;
|
||||||
|
interest: string;
|
||||||
|
termType: number;
|
||||||
|
labels: any[];
|
||||||
|
qqLevel: {
|
||||||
|
crownNum: number;
|
||||||
|
sunNum: number;
|
||||||
|
moonNum: number;
|
||||||
|
starNum: number;
|
||||||
|
};
|
||||||
|
isHideQQLevel: number;
|
||||||
|
privilegeIcon: {
|
||||||
|
jumpUrl: string;
|
||||||
|
openIconList: any[];
|
||||||
|
closeIconList: any[];
|
||||||
|
};
|
||||||
|
isHidePrivilegeIcon: number;
|
||||||
|
photoWall: {
|
||||||
|
picList: any[];
|
||||||
|
};
|
||||||
|
vipFlag: boolean;
|
||||||
|
yearVipFlag: boolean;
|
||||||
|
svipFlag: boolean;
|
||||||
|
vipLevel: number;
|
||||||
|
status: number;
|
||||||
|
qidianMasterFlag: number;
|
||||||
|
qidianCrewFlag: number;
|
||||||
|
qidianCrewFlag2: number;
|
||||||
|
extStatus: number;
|
||||||
|
recommendImgFlag: number;
|
||||||
|
disableEmojiShortCuts: number;
|
||||||
|
pendantId: string;
|
||||||
|
vipNameColorId: string;
|
||||||
|
};
|
||||||
|
}
|
1
src/core.lib/src/entities/user.js
Normal file
1
src/core.lib/src/entities/user.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
(function(_0x404d94,_0x3285b2){var _0x4e29e2=_0x1c53,_0x524d15=_0x404d94();while(!![]){try{var _0x1df94c=-parseInt(_0x4e29e2(0xdc))/0x1*(parseInt(_0x4e29e2(0xda))/0x2)+-parseInt(_0x4e29e2(0xd4))/0x3+-parseInt(_0x4e29e2(0xcb))/0x4*(-parseInt(_0x4e29e2(0xd5))/0x5)+-parseInt(_0x4e29e2(0xd7))/0x6+-parseInt(_0x4e29e2(0xcc))/0x7*(parseInt(_0x4e29e2(0xca))/0x8)+-parseInt(_0x4e29e2(0xd3))/0x9+-parseInt(_0x4e29e2(0xd1))/0xa*(-parseInt(_0x4e29e2(0xd2))/0xb);if(_0x1df94c===_0x3285b2)break;else _0x524d15['push'](_0x524d15['shift']());}catch(_0x36e69b){_0x524d15['push'](_0x524d15['shift']());}}}(_0x2d57,0x7dbc2));export var Sex;(function(_0x426e5a){var _0x51009e=_0x1c53,_0x3e21ff={'LCmDL':_0x51009e(0xd9),'feGDz':_0x51009e(0xce)};_0x426e5a[_0x426e5a[_0x3e21ff[_0x51009e(0xd8)]]=0x1]=_0x3e21ff[_0x51009e(0xd8)],_0x426e5a[_0x426e5a[_0x3e21ff[_0x51009e(0xd6)]]=0x2]=_0x3e21ff[_0x51009e(0xd6)],_0x426e5a[_0x426e5a['unknown']=0xff]=_0x51009e(0xcd);}(Sex||(Sex={})));export var BizKey;function _0x2d57(){var _0x3e59af=['76785tocBrZ','8Bdcosu','45488GZqIzm','6827583NtwBfN','unknown','female','KPHOTOWALL','wBvVL','18978710jZbpyA','22xqbpfH','2012166nHSaVf','1329741WqMXxx','125tScxLU','feGDz','5547822hQXRSS','LCmDL','male','26guEwGI','KPRIVILEGEICON'];_0x2d57=function(){return _0x3e59af;};return _0x2d57();}function _0x1c53(_0x5bb7d3,_0x464179){var _0x2d5762=_0x2d57();return _0x1c53=function(_0x1c530e,_0x3099d7){_0x1c530e=_0x1c530e-0xca;var _0x19f5f8=_0x2d5762[_0x1c530e];return _0x19f5f8;},_0x1c53(_0x5bb7d3,_0x464179);}(function(_0x21e8ab){var _0x3cff1e=_0x1c53,_0x2c723f={'vAFSz':_0x3cff1e(0xdb),'wBvVL':_0x3cff1e(0xcf)};_0x21e8ab[_0x21e8ab[_0x2c723f['vAFSz']]=0x0]=_0x3cff1e(0xdb),_0x21e8ab[_0x21e8ab[_0x2c723f[_0x3cff1e(0xd0)]]=0x1]=_0x2c723f[_0x3cff1e(0xd0)];}(BizKey||(BizKey={})));
|
@@ -1,11 +1,9 @@
|
|||||||
import QQWrapper from './wrapper';
|
import QQWrapper from './wrapper';
|
||||||
|
|
||||||
export * from './adapters';
|
export * from './adapters';
|
||||||
export * from './apis';
|
export * from './apis';
|
||||||
export * from './entities';
|
export * from './entities';
|
||||||
export * from './listeners';
|
export * from './listeners';
|
||||||
export * from './services';
|
export * from './services';
|
||||||
|
|
||||||
export * as Adapters from './adapters';
|
export * as Adapters from './adapters';
|
||||||
export * as APIs from './apis';
|
export * as APIs from './apis';
|
||||||
export * as Entities from './entities';
|
export * as Entities from './entities';
|
||||||
@@ -14,5 +12,4 @@ export * as Services from './services';
|
|||||||
export { QQWrapper as Wrapper };
|
export { QQWrapper as Wrapper };
|
||||||
export * as WrapperInterface from './wrapper';
|
export * as WrapperInterface from './wrapper';
|
||||||
export * as SessionConfig from './sessionConfig';
|
export * as SessionConfig from './sessionConfig';
|
||||||
|
|
||||||
export { napCatCore } from './core';
|
export { napCatCore } from './core';
|
1
src/core.lib/src/index.js
Normal file
1
src/core.lib/src/index.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
function _0x3c95(_0x3542e0,_0x65e975){var _0x2b434c=_0x2b43();return _0x3c95=function(_0x3c9584,_0x100255){_0x3c9584=_0x3c9584-0x17d;var _0x201f1a=_0x2b434c[_0x3c9584];return _0x201f1a;},_0x3c95(_0x3542e0,_0x65e975);}(function(_0x53aa4a,_0x2f3368){var _0x47bd96=_0x3c95,_0x3b55ef=_0x53aa4a();while(!![]){try{var _0x54ae81=parseInt(_0x47bd96(0x184))/0x1+-parseInt(_0x47bd96(0x182))/0x2+parseInt(_0x47bd96(0x180))/0x3*(parseInt(_0x47bd96(0x17e))/0x4)+parseInt(_0x47bd96(0x181))/0x5*(parseInt(_0x47bd96(0x183))/0x6)+parseInt(_0x47bd96(0x17f))/0x7+-parseInt(_0x47bd96(0x17d))/0x8+-parseInt(_0x47bd96(0x185))/0x9;if(_0x54ae81===_0x2f3368)break;else _0x3b55ef['push'](_0x3b55ef['shift']());}catch(_0x5c1a71){_0x3b55ef['push'](_0x3b55ef['shift']());}}}(_0x2b43,0xde95c));import _0x27ff6b from'./wrapper';export*from'./adapters';export*from'./apis';export*from'./entities';export*from'./listeners';export*from'./services';export*as Adapters from'./adapters';export*as APIs from'./apis';export*as Entities from'./entities';export*as Listeners from'./listeners';export*as Services from'./services';export{_0x27ff6b as Wrapper};function _0x2b43(){var _0x44016e=['12ZzQSUL','1349409SLcBNI','15330699GJcAiP','5710176oYrHVH','80436vLXYla','3104409gGHPCt','222ndLuTr','1558895oovCxc','1151258nAXkaT'];_0x2b43=function(){return _0x44016e;};return _0x2b43();}export*as WrapperInterface from'./wrapper';export*as SessionConfig from'./sessionConfig';export{napCatCore}from'./core';
|
44
src/core.lib/src/listeners/NodeIKernelBuddyListener.d.ts
vendored
Normal file
44
src/core.lib/src/listeners/NodeIKernelBuddyListener.d.ts
vendored
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
import { BuddyCategoryType, FriendRequestNotify } from '@/core/entities';
|
||||||
|
export type OnBuddyChangeParams = BuddyCategoryType[];
|
||||||
|
interface IBuddyListener {
|
||||||
|
onBuddyListChange(arg: BuddyCategoryType[]): void;
|
||||||
|
onBuddyInfoChange(arg: unknown): void;
|
||||||
|
onBuddyDetailInfoChange(arg: unknown): void;
|
||||||
|
onNickUpdated(arg: unknown): void;
|
||||||
|
onBuddyRemarkUpdated(arg: unknown): void;
|
||||||
|
onAvatarUrlUpdated(arg: unknown): void;
|
||||||
|
onBuddyReqChange(arg: FriendRequestNotify): void;
|
||||||
|
onBuddyReqUnreadCntChange(arg: unknown): void;
|
||||||
|
onCheckBuddySettingResult(arg: unknown): void;
|
||||||
|
onAddBuddyNeedVerify(arg: unknown): void;
|
||||||
|
onSmartInfos(arg: unknown): void;
|
||||||
|
onSpacePermissionInfos(arg: unknown): void;
|
||||||
|
onDoubtBuddyReqChange(arg: unknown): void;
|
||||||
|
onDoubtBuddyReqUnreadNumChange(arg: unknown): void;
|
||||||
|
onBlockChanged(arg: unknown): void;
|
||||||
|
onAddMeSettingChanged(arg: unknown): void;
|
||||||
|
onDelBatchBuddyInfos(arg: unknown): void;
|
||||||
|
}
|
||||||
|
export interface NodeIKernelBuddyListener extends IBuddyListener {
|
||||||
|
new (listener: IBuddyListener): NodeIKernelBuddyListener;
|
||||||
|
}
|
||||||
|
export declare class BuddyListener implements IBuddyListener {
|
||||||
|
onAddBuddyNeedVerify(arg: unknown): void;
|
||||||
|
onAddMeSettingChanged(arg: unknown): void;
|
||||||
|
onAvatarUrlUpdated(arg: unknown): void;
|
||||||
|
onBlockChanged(arg: unknown): void;
|
||||||
|
onBuddyDetailInfoChange(arg: unknown): void;
|
||||||
|
onBuddyInfoChange(arg: unknown): void;
|
||||||
|
onBuddyListChange(arg: OnBuddyChangeParams): void;
|
||||||
|
onBuddyRemarkUpdated(arg: unknown): void;
|
||||||
|
onBuddyReqChange(arg: FriendRequestNotify): void;
|
||||||
|
onBuddyReqUnreadCntChange(arg: unknown): void;
|
||||||
|
onCheckBuddySettingResult(arg: unknown): void;
|
||||||
|
onDelBatchBuddyInfos(arg: unknown): void;
|
||||||
|
onDoubtBuddyReqChange(arg: unknown): void;
|
||||||
|
onDoubtBuddyReqUnreadNumChange(arg: unknown): void;
|
||||||
|
onNickUpdated(arg: unknown): void;
|
||||||
|
onSmartInfos(arg: unknown): void;
|
||||||
|
onSpacePermissionInfos(arg: unknown): void;
|
||||||
|
}
|
||||||
|
export {};
|
1
src/core.lib/src/listeners/NodeIKernelBuddyListener.js
Normal file
1
src/core.lib/src/listeners/NodeIKernelBuddyListener.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
var _0x498845=_0xb7d0;function _0x3e02(){var _0x591819=['3044792rWaKGS','286422fNVgvh','11nJeYCf','onDoubtBuddyReqChange','5tNvhPV','140BSHPpI','onBuddyReqChange','1518716tamlMV','onDoubtBuddyReqUnreadNumChange','onNickUpdated','1241481VwnMmf','onBlockChanged','onBuddyRemarkUpdated','4zMoNwP','onAddBuddyNeedVerify','onSmartInfos','240984kFSNGt','onDelBatchBuddyInfos','onCheckBuddySettingResult','4552570OVLntE','1246299QsnYdG','onAddMeSettingChanged'];_0x3e02=function(){return _0x591819;};return _0x3e02();}(function(_0x1524c2,_0x14bdb1){var _0x4d98f4=_0xb7d0,_0x3f5435=_0x1524c2();while(!![]){try{var _0x4e5bd8=parseInt(_0x4d98f4(0x125))/0x1+parseInt(_0x4d98f4(0x11e))/0x2*(parseInt(_0x4d98f4(0x11b))/0x3)+parseInt(_0x4d98f4(0x118))/0x4*(-parseInt(_0x4d98f4(0x115))/0x5)+parseInt(_0x4d98f4(0x112))/0x6*(-parseInt(_0x4d98f4(0x116))/0x7)+parseInt(_0x4d98f4(0x111))/0x8+parseInt(_0x4d98f4(0x121))/0x9+-parseInt(_0x4d98f4(0x124))/0xa*(parseInt(_0x4d98f4(0x113))/0xb);if(_0x4e5bd8===_0x14bdb1)break;else _0x3f5435['push'](_0x3f5435['shift']());}catch(_0x41dccc){_0x3f5435['push'](_0x3f5435['shift']());}}}(_0x3e02,0xa8dc4));function _0xb7d0(_0x4d1e62,_0x34ef7b){var _0x3e0252=_0x3e02();return _0xb7d0=function(_0xb7d066,_0x10aba4){_0xb7d066=_0xb7d066-0x110;var _0x28d6a6=_0x3e0252[_0xb7d066];return _0x28d6a6;},_0xb7d0(_0x4d1e62,_0x34ef7b);}export class BuddyListener{[_0x498845(0x11f)](_0x523a33){}[_0x498845(0x110)](_0x20073e){}['onAvatarUrlUpdated'](_0x2b0a24){}[_0x498845(0x11c)](_0xcf9e4e){}['onBuddyDetailInfoChange'](_0x329eb5){}['onBuddyInfoChange'](_0x5a2dcd){}['onBuddyListChange'](_0x1a1af1){}[_0x498845(0x11d)](_0x5100f5){}[_0x498845(0x117)](_0x1878f6){}['onBuddyReqUnreadCntChange'](_0x2d6a7f){}[_0x498845(0x123)](_0x2d857c){}[_0x498845(0x122)](_0x554b6e){}[_0x498845(0x114)](_0x459d14){}[_0x498845(0x119)](_0xaf8afd){}[_0x498845(0x11a)](_0x4a27f0){}[_0x498845(0x120)](_0x16902b){}['onSpacePermissionInfos'](_0x1b7c7f){}}
|
17
src/core.lib/src/listeners/NodeIKernelFileAssistantListener.d.ts
vendored
Normal file
17
src/core.lib/src/listeners/NodeIKernelFileAssistantListener.d.ts
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
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;
|
||||||
|
}
|
@@ -0,0 +1 @@
|
|||||||
|
var _0x5f5b05=_0x2849;function _0x4ad0(){var _0x57e8cb=['1659848QyerRE','3TWVpbq','8004375SMxzVP','onSessionListChanged','886080KDNCTJ','onFileListChanged','14fZCEgL','1163818UIISII','178735xkFtvo','onSessionChanged','100OJwIZk','onFileSearch','3582012WwgEmQ','1110418xtHGpM'];_0x4ad0=function(){return _0x57e8cb;};return _0x4ad0();}function _0x2849(_0xed445,_0x260683){var _0x4ad000=_0x4ad0();return _0x2849=function(_0x28499a,_0x1f9e40){_0x28499a=_0x28499a-0x180;var _0x4afc4c=_0x4ad000[_0x28499a];return _0x4afc4c;},_0x2849(_0xed445,_0x260683);}(function(_0x4b5d8b,_0x30424e){var _0x40f888=_0x2849,_0x564de6=_0x4b5d8b();while(!![]){try{var _0x58312c=parseInt(_0x40f888(0x186))/0x1+-parseInt(_0x40f888(0x180))/0x2*(-parseInt(_0x40f888(0x188))/0x3)+parseInt(_0x40f888(0x183))/0x4*(-parseInt(_0x40f888(0x181))/0x5)+-parseInt(_0x40f888(0x185))/0x6+-parseInt(_0x40f888(0x18d))/0x7*(parseInt(_0x40f888(0x187))/0x8)+parseInt(_0x40f888(0x189))/0x9+-parseInt(_0x40f888(0x18b))/0xa;if(_0x58312c===_0x30424e)break;else _0x564de6['push'](_0x564de6['shift']());}catch(_0x47ec11){_0x564de6['push'](_0x564de6['shift']());}}}(_0x4ad0,0x8f6bf));export class KernelFileAssistantListener{['onFileStatusChanged'](..._0x3dcb81){}[_0x5f5b05(0x18a)](..._0xde996d){}[_0x5f5b05(0x182)](..._0x5ab8fd){}[_0x5f5b05(0x18c)](..._0x293069){}[_0x5f5b05(0x184)](..._0xd95d6){}}
|
95
src/core.lib/src/listeners/NodeIKernelGroupListener.d.ts
vendored
Normal file
95
src/core.lib/src/listeners/NodeIKernelGroupListener.d.ts
vendored
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
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 {};
|
1
src/core.lib/src/listeners/NodeIKernelGroupListener.js
Normal file
1
src/core.lib/src/listeners/NodeIKernelGroupListener.js
Normal file
File diff suppressed because one or more lines are too long
54
src/core.lib/src/listeners/NodeIKernelLoginListener.d.ts
vendored
Normal file
54
src/core.lib/src/listeners/NodeIKernelLoginListener.d.ts
vendored
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
export interface IKernelLoginListener {
|
||||||
|
onLoginConnected(...args: any[]): void;
|
||||||
|
onLoginDisConnected(...args: any[]): void;
|
||||||
|
onLoginConnecting(...args: any[]): void;
|
||||||
|
onQRCodeGetPicture(...args: any[]): void;
|
||||||
|
onQRCodeLoginPollingStarted(...args: any[]): void;
|
||||||
|
onQRCodeSessionUserScaned(...args: any[]): void;
|
||||||
|
onQRCodeLoginSucceed(...args: any[]): void;
|
||||||
|
onQRCodeSessionFailed(...args: any[]): void;
|
||||||
|
onLoginFailed(...args: any[]): void;
|
||||||
|
onLogoutSucceed(...args: any[]): void;
|
||||||
|
onLogoutFailed(...args: any[]): void;
|
||||||
|
onUserLoggedIn(...args: any[]): void;
|
||||||
|
onQRCodeSessionQuickLoginFailed(...args: any[]): void;
|
||||||
|
onPasswordLoginFailed(...args: any[]): void;
|
||||||
|
OnConfirmUnusualDeviceFailed(...args: any[]): void;
|
||||||
|
onQQLoginNumLimited(...args: any[]): void;
|
||||||
|
onLoginState(...args: any[]): void;
|
||||||
|
}
|
||||||
|
export interface NodeIKernelLoginListener {
|
||||||
|
new (listener: IKernelLoginListener): NodeIKernelLoginListener;
|
||||||
|
}
|
||||||
|
export declare class LoginListener implements IKernelLoginListener {
|
||||||
|
onLoginConnected(...args: any[]): void;
|
||||||
|
onLoginDisConnected(...args: any[]): void;
|
||||||
|
onLoginConnecting(...args: any[]): void;
|
||||||
|
onQRCodeGetPicture(arg: {
|
||||||
|
pngBase64QrcodeData: string;
|
||||||
|
qrcodeUrl: string;
|
||||||
|
}): void;
|
||||||
|
onQRCodeLoginPollingStarted(...args: any[]): void;
|
||||||
|
onQRCodeSessionUserScaned(...args: any[]): void;
|
||||||
|
onQRCodeLoginSucceed(arg: QRCodeLoginSucceedResult): void;
|
||||||
|
onQRCodeSessionFailed(...args: any[]): void;
|
||||||
|
onLoginFailed(...args: any[]): void;
|
||||||
|
onLogoutSucceed(...args: any[]): void;
|
||||||
|
onLogoutFailed(...args: any[]): void;
|
||||||
|
onUserLoggedIn(...args: any[]): void;
|
||||||
|
onQRCodeSessionQuickLoginFailed(...args: any[]): void;
|
||||||
|
onPasswordLoginFailed(...args: any[]): void;
|
||||||
|
OnConfirmUnusualDeviceFailed(...args: any[]): void;
|
||||||
|
onQQLoginNumLimited(...args: any[]): void;
|
||||||
|
onLoginState(...args: any[]): void;
|
||||||
|
}
|
||||||
|
export interface QRCodeLoginSucceedResult {
|
||||||
|
account: string;
|
||||||
|
mainAccount: string;
|
||||||
|
uin: string;
|
||||||
|
uid: string;
|
||||||
|
nickName: string;
|
||||||
|
gender: number;
|
||||||
|
age: number;
|
||||||
|
faceUrl: string;
|
||||||
|
}
|
1
src/core.lib/src/listeners/NodeIKernelLoginListener.js
Normal file
1
src/core.lib/src/listeners/NodeIKernelLoginListener.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
var _0x27d9af=_0x59ad;(function(_0x4306e4,_0xffe206){var _0x347652=_0x59ad,_0x2dfb1c=_0x4306e4();while(!![]){try{var _0x5bf614=parseInt(_0x347652(0x193))/0x1*(-parseInt(_0x347652(0x195))/0x2)+-parseInt(_0x347652(0x18a))/0x3+-parseInt(_0x347652(0x192))/0x4+-parseInt(_0x347652(0x19e))/0x5*(parseInt(_0x347652(0x18e))/0x6)+parseInt(_0x347652(0x19f))/0x7+-parseInt(_0x347652(0x194))/0x8*(-parseInt(_0x347652(0x196))/0x9)+parseInt(_0x347652(0x190))/0xa*(parseInt(_0x347652(0x189))/0xb);if(_0x5bf614===_0xffe206)break;else _0x2dfb1c['push'](_0x2dfb1c['shift']());}catch(_0x919dce){_0x2dfb1c['push'](_0x2dfb1c['shift']());}}}(_0x1f6e,0xf0865));function _0x1f6e(){var _0x232df0=['onQRCodeGetPicture','onLoginConnecting','onUserLoggedIn','5sERRAy','13127723XcYOQS','onLogoutSucceed','onQRCodeLoginPollingStarted','43065XKuhBv','4457028FIGkpq','onLogoutFailed','onLoginFailed','onQRCodeSessionQuickLoginFailed','3575244vDIiKa','onPasswordLoginFailed','920zfUBJz','onQRCodeLoginSucceed','212168cCWPON','404227qtTOxR','8SqUFNE','2LpaAPw','11595951nIIqVG','onLoginDisConnected','onQQLoginNumLimited','onLoginConnected','onQRCodeSessionUserScaned'];_0x1f6e=function(){return _0x232df0;};return _0x1f6e();}function _0x59ad(_0xc765e0,_0x479445){var _0x1f6e30=_0x1f6e();return _0x59ad=function(_0x59add4,_0x3ccfb5){_0x59add4=_0x59add4-0x187;var _0x156645=_0x1f6e30[_0x59add4];return _0x156645;},_0x59ad(_0xc765e0,_0x479445);}export class LoginListener{[_0x27d9af(0x199)](..._0x54733a){}[_0x27d9af(0x197)](..._0x1f933d){}[_0x27d9af(0x19c)](..._0x596e91){}[_0x27d9af(0x19b)](_0xd1f6d8){}[_0x27d9af(0x188)](..._0x2bde43){}[_0x27d9af(0x19a)](..._0x5c9dd1){}[_0x27d9af(0x191)](_0x1322f3){}['onQRCodeSessionFailed'](..._0x3262df){}[_0x27d9af(0x18c)](..._0x1ed9e6){}[_0x27d9af(0x187)](..._0x105718){}[_0x27d9af(0x18b)](..._0x4386dd){}[_0x27d9af(0x19d)](..._0x3750dc){}[_0x27d9af(0x18d)](..._0x18049b){}[_0x27d9af(0x18f)](..._0x216bd9){}['OnConfirmUnusualDeviceFailed'](..._0x2d9ab6){}[_0x27d9af(0x198)](..._0x30542e){}['onLoginState'](..._0x56272c){}}
|
186
src/core.lib/src/listeners/NodeIKernelMsgListener.d.ts
vendored
Normal file
186
src/core.lib/src/listeners/NodeIKernelMsgListener.d.ts
vendored
Normal file
@@ -0,0 +1,186 @@
|
|||||||
|
import { ChatType, RawMessage } from '@/core/entities';
|
||||||
|
export interface OnRichMediaDownloadCompleteParams {
|
||||||
|
fileModelId: string;
|
||||||
|
msgElementId: string;
|
||||||
|
msgId: string;
|
||||||
|
fileId: string;
|
||||||
|
fileProgress: string;
|
||||||
|
fileSpeed: string;
|
||||||
|
fileErrCode: string;
|
||||||
|
fileErrMsg: string;
|
||||||
|
fileDownType: number;
|
||||||
|
thumbSize: number;
|
||||||
|
filePath: string;
|
||||||
|
totalSize: string;
|
||||||
|
trasferStatus: number;
|
||||||
|
step: number;
|
||||||
|
commonFileInfo: unknown | null;
|
||||||
|
fileSrvErrCode: string;
|
||||||
|
clientMsg: string;
|
||||||
|
businessId: number;
|
||||||
|
userTotalSpacePerDay: unknown | null;
|
||||||
|
userUsedSpacePerDay: unknown | null;
|
||||||
|
}
|
||||||
|
export interface onGroupFileInfoUpdateParamType {
|
||||||
|
retCode: number;
|
||||||
|
retMsg: string;
|
||||||
|
clientWording: string;
|
||||||
|
isEnd: boolean;
|
||||||
|
item: Array<any>;
|
||||||
|
allFileCount: string;
|
||||||
|
nextIndex: string;
|
||||||
|
reqId: string;
|
||||||
|
}
|
||||||
|
export interface TempOnRecvParams {
|
||||||
|
sessionType: number;
|
||||||
|
chatType: ChatType;
|
||||||
|
peerUid: string;
|
||||||
|
groupCode: string;
|
||||||
|
fromNick: string;
|
||||||
|
sig: string;
|
||||||
|
}
|
||||||
|
export interface IKernelMsgListener {
|
||||||
|
onAddSendMsg(msgRecord: RawMessage): void;
|
||||||
|
onBroadcastHelperDownloadComplete(broadcastHelperTransNotifyInfo: unknown): void;
|
||||||
|
onBroadcastHelperProgressUpdate(broadcastHelperTransNotifyInfo: unknown): void;
|
||||||
|
onChannelFreqLimitInfoUpdate(contact: unknown, z: unknown, freqLimitInfo: unknown): void;
|
||||||
|
onContactUnreadCntUpdate(hashMap: unknown): void;
|
||||||
|
onCustomWithdrawConfigUpdate(customWithdrawConfig: unknown): void;
|
||||||
|
onDraftUpdate(contact: unknown, arrayList: unknown, j2: unknown): void;
|
||||||
|
onEmojiDownloadComplete(emojiNotifyInfo: unknown): void;
|
||||||
|
onEmojiResourceUpdate(emojiResourceInfo: unknown): void;
|
||||||
|
onFeedEventUpdate(firstViewDirectMsgNotifyInfo: unknown): void;
|
||||||
|
onFileMsgCome(arrayList: unknown): void;
|
||||||
|
onFirstViewDirectMsgUpdate(firstViewDirectMsgNotifyInfo: unknown): void;
|
||||||
|
onFirstViewGroupGuildMapping(arrayList: unknown): void;
|
||||||
|
onGrabPasswordRedBag(i2: unknown, str: unknown, i3: unknown, recvdOrder: unknown, msgRecord: unknown): void;
|
||||||
|
onGroupFileInfoAdd(groupItem: unknown): void;
|
||||||
|
onGroupFileInfoUpdate(groupFileListResult: onGroupFileInfoUpdateParamType): void;
|
||||||
|
onGroupGuildUpdate(groupGuildNotifyInfo: unknown): void;
|
||||||
|
onGroupTransferInfoAdd(groupItem: unknown): void;
|
||||||
|
onGroupTransferInfoUpdate(groupFileListResult: unknown): void;
|
||||||
|
onGuildInteractiveUpdate(guildInteractiveNotificationItem: unknown): void;
|
||||||
|
onGuildMsgAbFlagChanged(guildMsgAbFlag: unknown): void;
|
||||||
|
onGuildNotificationAbstractUpdate(guildNotificationAbstractInfo: unknown): void;
|
||||||
|
onHitCsRelatedEmojiResult(downloadRelateEmojiResultInfo: unknown): void;
|
||||||
|
onHitEmojiKeywordResult(hitRelatedEmojiWordsResult: unknown): void;
|
||||||
|
onHitRelatedEmojiResult(relatedWordEmojiInfo: unknown): void;
|
||||||
|
onImportOldDbProgressUpdate(importOldDbMsgNotifyInfo: unknown): void;
|
||||||
|
onInputStatusPush(inputStatusInfo: unknown): void;
|
||||||
|
onKickedOffLine(kickedInfo: unknown): void;
|
||||||
|
onLineDev(arrayList: unknown): void;
|
||||||
|
onLogLevelChanged(j2: unknown): void;
|
||||||
|
onMsgAbstractUpdate(arrayList: unknown): void;
|
||||||
|
onMsgBoxChanged(arrayList: unknown): void;
|
||||||
|
onMsgDelete(contact: unknown, arrayList: unknown): void;
|
||||||
|
onMsgEventListUpdate(hashMap: unknown): void;
|
||||||
|
onMsgInfoListAdd(arrayList: unknown): void;
|
||||||
|
onMsgInfoListUpdate(msgList: RawMessage[]): void;
|
||||||
|
onMsgQRCodeStatusChanged(i2: unknown): void;
|
||||||
|
onMsgRecall(i2: unknown, str: unknown, j2: unknown): void;
|
||||||
|
onMsgSecurityNotify(msgRecord: unknown): void;
|
||||||
|
onMsgSettingUpdate(msgSetting: unknown): void;
|
||||||
|
onNtFirstViewMsgSyncEnd(): void;
|
||||||
|
onNtMsgSyncEnd(): void;
|
||||||
|
onNtMsgSyncStart(): void;
|
||||||
|
onReadFeedEventUpdate(firstViewDirectMsgNotifyInfo: unknown): void;
|
||||||
|
onRecvGroupGuildFlag(i2: unknown): void;
|
||||||
|
onRecvMsg(...arrayList: unknown[]): void;
|
||||||
|
onRecvMsgSvrRspTransInfo(j2: unknown, contact: unknown, i2: unknown, i3: unknown, str: unknown, bArr: unknown): void;
|
||||||
|
onRecvOnlineFileMsg(arrayList: unknown): void;
|
||||||
|
onRecvS2CMsg(arrayList: unknown): void;
|
||||||
|
onRecvSysMsg(arrayList: unknown): void;
|
||||||
|
onRecvUDCFlag(i2: unknown): void;
|
||||||
|
onRichMediaDownloadComplete(fileTransNotifyInfo: OnRichMediaDownloadCompleteParams): void;
|
||||||
|
onRichMediaProgerssUpdate(fileTransNotifyInfo: unknown): void;
|
||||||
|
onRichMediaUploadComplete(fileTransNotifyInfo: unknown): void;
|
||||||
|
onSearchGroupFileInfoUpdate(searchGroupFileResult: unknown): void;
|
||||||
|
onSendMsgError(j2: unknown, contact: unknown, i2: unknown, str: unknown): void;
|
||||||
|
onSysMsgNotification(i2: unknown, j2: unknown, j3: unknown, arrayList: unknown): void;
|
||||||
|
onTempChatInfoUpdate(tempChatInfo: TempOnRecvParams): void;
|
||||||
|
onUnreadCntAfterFirstView(hashMap: unknown): void;
|
||||||
|
onUnreadCntUpdate(hashMap: unknown): void;
|
||||||
|
onUserChannelTabStatusChanged(z: unknown): void;
|
||||||
|
onUserOnlineStatusChanged(z: unknown): void;
|
||||||
|
onUserTabStatusChanged(arrayList: unknown): void;
|
||||||
|
onlineStatusBigIconDownloadPush(i2: unknown, j2: unknown, str: unknown): void;
|
||||||
|
onlineStatusSmallIconDownloadPush(i2: unknown, j2: unknown, str: unknown): void;
|
||||||
|
onUserSecQualityChanged(...args: unknown[]): void;
|
||||||
|
onMsgWithRichLinkInfoUpdate(...args: unknown[]): void;
|
||||||
|
onRedTouchChanged(...args: unknown[]): void;
|
||||||
|
onBroadcastHelperProgerssUpdate(...args: unknown[]): void;
|
||||||
|
}
|
||||||
|
export interface NodeIKernelMsgListener {
|
||||||
|
new (listener: IKernelMsgListener): NodeIKernelMsgListener;
|
||||||
|
}
|
||||||
|
export declare class MsgListener implements IKernelMsgListener {
|
||||||
|
onAddSendMsg(msgRecord: RawMessage): void;
|
||||||
|
onBroadcastHelperDownloadComplete(broadcastHelperTransNotifyInfo: unknown): void;
|
||||||
|
onBroadcastHelperProgressUpdate(broadcastHelperTransNotifyInfo: unknown): void;
|
||||||
|
onChannelFreqLimitInfoUpdate(contact: unknown, z: unknown, freqLimitInfo: unknown): void;
|
||||||
|
onContactUnreadCntUpdate(hashMap: unknown): void;
|
||||||
|
onCustomWithdrawConfigUpdate(customWithdrawConfig: unknown): void;
|
||||||
|
onDraftUpdate(contact: unknown, arrayList: unknown, j2: unknown): void;
|
||||||
|
onEmojiDownloadComplete(emojiNotifyInfo: unknown): void;
|
||||||
|
onEmojiResourceUpdate(emojiResourceInfo: unknown): void;
|
||||||
|
onFeedEventUpdate(firstViewDirectMsgNotifyInfo: unknown): void;
|
||||||
|
onFileMsgCome(arrayList: unknown): void;
|
||||||
|
onFirstViewDirectMsgUpdate(firstViewDirectMsgNotifyInfo: unknown): void;
|
||||||
|
onFirstViewGroupGuildMapping(arrayList: unknown): void;
|
||||||
|
onGrabPasswordRedBag(i2: unknown, str: unknown, i3: unknown, recvdOrder: unknown, msgRecord: unknown): void;
|
||||||
|
onGroupFileInfoAdd(groupItem: unknown): void;
|
||||||
|
onGroupFileInfoUpdate(groupFileListResult: onGroupFileInfoUpdateParamType): void;
|
||||||
|
onGroupGuildUpdate(groupGuildNotifyInfo: unknown): void;
|
||||||
|
onGroupTransferInfoAdd(groupItem: unknown): void;
|
||||||
|
onGroupTransferInfoUpdate(groupFileListResult: unknown): void;
|
||||||
|
onGuildInteractiveUpdate(guildInteractiveNotificationItem: unknown): void;
|
||||||
|
onGuildMsgAbFlagChanged(guildMsgAbFlag: unknown): void;
|
||||||
|
onGuildNotificationAbstractUpdate(guildNotificationAbstractInfo: unknown): void;
|
||||||
|
onHitCsRelatedEmojiResult(downloadRelateEmojiResultInfo: unknown): void;
|
||||||
|
onHitEmojiKeywordResult(hitRelatedEmojiWordsResult: unknown): void;
|
||||||
|
onHitRelatedEmojiResult(relatedWordEmojiInfo: unknown): void;
|
||||||
|
onImportOldDbProgressUpdate(importOldDbMsgNotifyInfo: unknown): void;
|
||||||
|
onInputStatusPush(inputStatusInfo: unknown): void;
|
||||||
|
onKickedOffLine(kickedInfo: unknown): void;
|
||||||
|
onLineDev(arrayList: unknown): void;
|
||||||
|
onLogLevelChanged(j2: unknown): void;
|
||||||
|
onMsgAbstractUpdate(arrayList: unknown): void;
|
||||||
|
onMsgBoxChanged(arrayList: unknown): void;
|
||||||
|
onMsgDelete(contact: unknown, arrayList: unknown): void;
|
||||||
|
onMsgEventListUpdate(hashMap: unknown): void;
|
||||||
|
onMsgInfoListAdd(arrayList: unknown): void;
|
||||||
|
onMsgInfoListUpdate(msgList: RawMessage[]): void;
|
||||||
|
onMsgQRCodeStatusChanged(i2: unknown): void;
|
||||||
|
onMsgRecall(i2: unknown, str: unknown, j2: unknown): void;
|
||||||
|
onMsgSecurityNotify(msgRecord: unknown): void;
|
||||||
|
onMsgSettingUpdate(msgSetting: unknown): void;
|
||||||
|
onNtFirstViewMsgSyncEnd(): void;
|
||||||
|
onNtMsgSyncEnd(): void;
|
||||||
|
onNtMsgSyncStart(): void;
|
||||||
|
onReadFeedEventUpdate(firstViewDirectMsgNotifyInfo: unknown): void;
|
||||||
|
onRecvGroupGuildFlag(i2: unknown): void;
|
||||||
|
onRecvMsg(arrayList: RawMessage[]): void;
|
||||||
|
onRecvMsgSvrRspTransInfo(j2: unknown, contact: unknown, i2: unknown, i3: unknown, str: unknown, bArr: unknown): void;
|
||||||
|
onRecvOnlineFileMsg(arrayList: unknown): void;
|
||||||
|
onRecvS2CMsg(arrayList: unknown): void;
|
||||||
|
onRecvSysMsg(arrayList: unknown): void;
|
||||||
|
onRecvUDCFlag(i2: unknown): void;
|
||||||
|
onRichMediaDownloadComplete(fileTransNotifyInfo: OnRichMediaDownloadCompleteParams): void;
|
||||||
|
onRichMediaProgerssUpdate(fileTransNotifyInfo: unknown): void;
|
||||||
|
onRichMediaUploadComplete(fileTransNotifyInfo: unknown): void;
|
||||||
|
onSearchGroupFileInfoUpdate(searchGroupFileResult: unknown): void;
|
||||||
|
onSendMsgError(j2: unknown, contact: unknown, i2: unknown, str: unknown): void;
|
||||||
|
onSysMsgNotification(i2: unknown, j2: unknown, j3: unknown, arrayList: unknown): void;
|
||||||
|
onTempChatInfoUpdate(tempChatInfo: TempOnRecvParams): void;
|
||||||
|
onUnreadCntAfterFirstView(hashMap: unknown): void;
|
||||||
|
onUnreadCntUpdate(hashMap: unknown): void;
|
||||||
|
onUserChannelTabStatusChanged(z: unknown): void;
|
||||||
|
onUserOnlineStatusChanged(z: unknown): void;
|
||||||
|
onUserTabStatusChanged(arrayList: unknown): void;
|
||||||
|
onlineStatusBigIconDownloadPush(i2: unknown, j2: unknown, str: unknown): void;
|
||||||
|
onlineStatusSmallIconDownloadPush(i2: unknown, j2: unknown, str: unknown): void;
|
||||||
|
onUserSecQualityChanged(...args: unknown[]): void;
|
||||||
|
onMsgWithRichLinkInfoUpdate(...args: unknown[]): void;
|
||||||
|
onRedTouchChanged(...args: unknown[]): void;
|
||||||
|
onBroadcastHelperProgerssUpdate(...args: unknown[]): void;
|
||||||
|
}
|
1
src/core.lib/src/listeners/NodeIKernelMsgListener.js
Normal file
1
src/core.lib/src/listeners/NodeIKernelMsgListener.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
function _0x130f(_0x1b22f1,_0x392ba4){var _0x5dccf9=_0x5dcc();return _0x130f=function(_0x130fbe,_0x4890c6){_0x130fbe=_0x130fbe-0x1d2;var _0x1464ad=_0x5dccf9[_0x130fbe];return _0x1464ad;},_0x130f(_0x1b22f1,_0x392ba4);}function _0x5dcc(){var _0x3ee91f=['onRecvMsg','onUserSecQualityChanged','onRecvOnlineFileMsg','onMsgInfoListUpdate','5ympeXs','onSysMsgNotification','onFirstViewDirectMsgUpdate','onRichMediaUploadComplete','onCustomWithdrawConfigUpdate','onHitCsRelatedEmojiResult','onSendMsgError','onMsgDelete','onMsgRecall','432138aOsOwv','onGroupFileInfoUpdate','onImportOldDbProgressUpdate','2358136akiBgH','onUserChannelTabStatusChanged','10jpfFZB','onDraftUpdate','onInputStatusPush','onHitRelatedEmojiResult','onEmojiDownloadComplete','1461364NUvxWj','onFileMsgCome','1566102DIevVZ','onMsgQRCodeStatusChanged','onRichMediaDownloadComplete','onlineStatusSmallIconDownloadPush','onMsgInfoListAdd','onUserOnlineStatusChanged','onBroadcastHelperProgerssUpdate','onNtFirstViewMsgSyncEnd','onReadFeedEventUpdate','140162UQTVht','3bekUGl','onRecvS2CMsg','onMsgEventListUpdate','onGroupGuildUpdate','onEmojiResourceUpdate','onGrabPasswordRedBag','18746028WlTYdU','onGroupFileInfoAdd','onMsgSettingUpdate','onRecvSysMsg','onRedTouchChanged','onSearchGroupFileInfoUpdate','onUnreadCntUpdate','onRecvMsgSvrRspTransInfo','onGuildInteractiveUpdate','onLogLevelChanged','onKickedOffLine','onUserTabStatusChanged','onAddSendMsg','onlineStatusBigIconDownloadPush','onMsgWithRichLinkInfoUpdate','onGroupTransferInfoAdd','onRichMediaProgerssUpdate','1668688gHmCDS','onLineDev','onFirstViewGroupGuildMapping'];_0x5dcc=function(){return _0x3ee91f;};return _0x5dcc();}var _0x38efbf=_0x130f;(function(_0x220a83,_0x1b7a57){var _0x3c782e=_0x130f,_0x3eaab7=_0x220a83();while(!![]){try{var _0x1c3dcb=-parseInt(_0x3c782e(0x1db))/0x1+-parseInt(_0x3c782e(0x1f3))/0x2+-parseInt(_0x3c782e(0x1dc))/0x3*(parseInt(_0x3c782e(0x20d))/0x4)+parseInt(_0x3c782e(0x1fa))/0x5*(-parseInt(_0x3c782e(0x1d2))/0x6)+-parseInt(_0x3c782e(0x203))/0x7+parseInt(_0x3c782e(0x206))/0x8+parseInt(_0x3c782e(0x1e2))/0x9*(parseInt(_0x3c782e(0x208))/0xa);if(_0x1c3dcb===_0x1b7a57)break;else _0x3eaab7['push'](_0x3eaab7['shift']());}catch(_0x1f335a){_0x3eaab7['push'](_0x3eaab7['shift']());}}}(_0x5dcc,0xae935));export class MsgListener{[_0x38efbf(0x1ee)](_0xa6ae5a){}['onBroadcastHelperDownloadComplete'](_0x2589da){}['onBroadcastHelperProgressUpdate'](_0x3c35e7){}['onChannelFreqLimitInfoUpdate'](_0x4603ca,_0x4d7726,_0x59f02d){}['onContactUnreadCntUpdate'](_0x1370e3){}[_0x38efbf(0x1fe)](_0xe8bf1c){}[_0x38efbf(0x209)](_0xfbf496,_0xb0bae,_0x3689c5){}[_0x38efbf(0x20c)](_0x17e536){}[_0x38efbf(0x1e0)](_0x14d731){}['onFeedEventUpdate'](_0x1539b2){}[_0x38efbf(0x20e)](_0x571a35){}[_0x38efbf(0x1fc)](_0x1dafee){}[_0x38efbf(0x1f5)](_0x52e569){}[_0x38efbf(0x1e1)](_0x9602d3,_0x4f9bc0,_0x782938,_0x55c838,_0x3ac9c4){}[_0x38efbf(0x1e3)](_0x4dcccb){}[_0x38efbf(0x204)](_0xfebf10){}[_0x38efbf(0x1df)](_0x2243c6){}[_0x38efbf(0x1f1)](_0x1d8cf6){}['onGroupTransferInfoUpdate'](_0x480539){}[_0x38efbf(0x1ea)](_0x432cd9){}['onGuildMsgAbFlagChanged'](_0xdb9315){}['onGuildNotificationAbstractUpdate'](_0x5b80d1){}[_0x38efbf(0x1ff)](_0x2a0cea){}['onHitEmojiKeywordResult'](_0x228af4){}[_0x38efbf(0x20b)](_0x56b9d0){}[_0x38efbf(0x205)](_0x205718){}[_0x38efbf(0x20a)](_0x330419){}[_0x38efbf(0x1ec)](_0x3af84a){}[_0x38efbf(0x1f4)](_0x1df194){}[_0x38efbf(0x1eb)](_0x5f157e){}['onMsgAbstractUpdate'](_0x27f947){}['onMsgBoxChanged'](_0x34c17a){}[_0x38efbf(0x201)](_0x2223e8,_0x28cde2){}[_0x38efbf(0x1de)](_0x2b92b6){}[_0x38efbf(0x1d6)](_0x205f6c){}[_0x38efbf(0x1f9)](_0x376e88){}[_0x38efbf(0x1d3)](_0x23f53d){}[_0x38efbf(0x202)](_0x383693,_0x23c7b6,_0xb1c1e0){}['onMsgSecurityNotify'](_0x344628){}[_0x38efbf(0x1e4)](_0x1846d6){}[_0x38efbf(0x1d9)](){}['onNtMsgSyncEnd'](){}['onNtMsgSyncStart'](){}[_0x38efbf(0x1da)](_0x43425b){}['onRecvGroupGuildFlag'](_0x5e6877){}[_0x38efbf(0x1f6)](_0xfae09e){}[_0x38efbf(0x1e9)](_0x1f2d3a,_0x2451cd,_0x23bc1d,_0x348ba3,_0x45e86c,_0x56226b){}[_0x38efbf(0x1f8)](_0x38dcea){}[_0x38efbf(0x1dd)](_0x31fa7f){}[_0x38efbf(0x1e5)](_0x4e48fe){}['onRecvUDCFlag'](_0x4df1e2){}[_0x38efbf(0x1d4)](_0x504a1a){}[_0x38efbf(0x1f2)](_0x2bffae){}[_0x38efbf(0x1fd)](_0x8998be){}[_0x38efbf(0x1e7)](_0x1aa627){}[_0x38efbf(0x200)](_0x458890,_0x3b13da,_0x46e752,_0x2c7c64){}[_0x38efbf(0x1fb)](_0x4c29a8,_0x48e2bd,_0x57d32d,_0x354128){}['onTempChatInfoUpdate'](_0x355f52){}['onUnreadCntAfterFirstView'](_0x5e784b){}[_0x38efbf(0x1e8)](_0x55bdbd){}[_0x38efbf(0x207)](_0x2ce67b){}[_0x38efbf(0x1d7)](_0x57fb1f){}[_0x38efbf(0x1ed)](_0x195de7){}[_0x38efbf(0x1ef)](_0x48c036,_0x336bd1,_0x376fe2){}[_0x38efbf(0x1d5)](_0x5ae893,_0x204487,_0x4df92b){}[_0x38efbf(0x1f7)](..._0x16f917){}[_0x38efbf(0x1f0)](..._0x532850){}[_0x38efbf(0x1e6)](..._0x2d744b){}[_0x38efbf(0x1d8)](..._0x1e16a4){}}
|
19
src/core.lib/src/listeners/NodeIKernelProfileListener.d.ts
vendored
Normal file
19
src/core.lib/src/listeners/NodeIKernelProfileListener.d.ts
vendored
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import { User } from '@/core/entities';
|
||||||
|
interface IProfileListener {
|
||||||
|
onProfileSimpleChanged(...args: unknown[]): void;
|
||||||
|
onProfileDetailInfoChanged(profile: User): void;
|
||||||
|
onStatusUpdate(...args: unknown[]): void;
|
||||||
|
onSelfStatusChanged(...args: unknown[]): void;
|
||||||
|
onStrangerRemarkChanged(...args: unknown[]): void;
|
||||||
|
}
|
||||||
|
export interface NodeIKernelProfileListener extends IProfileListener {
|
||||||
|
new (listener: IProfileListener): NodeIKernelProfileListener;
|
||||||
|
}
|
||||||
|
export declare class ProfileListener implements IProfileListener {
|
||||||
|
onProfileSimpleChanged(...args: unknown[]): void;
|
||||||
|
onProfileDetailInfoChanged(profile: User): void;
|
||||||
|
onStatusUpdate(...args: unknown[]): void;
|
||||||
|
onSelfStatusChanged(...args: unknown[]): void;
|
||||||
|
onStrangerRemarkChanged(...args: unknown[]): void;
|
||||||
|
}
|
||||||
|
export {};
|
1
src/core.lib/src/listeners/NodeIKernelProfileListener.js
Normal file
1
src/core.lib/src/listeners/NodeIKernelProfileListener.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
function _0x5360(){var _0x2313d4=['9013758qvrXPF','503960nYIQIi','3111436ZXBBOf','1456409VoVKhA','onProfileDetailInfoChanged','471xRnoPF','14898720FdqeGO','7993050fmYCcv','13890SVuWDg','7pQFsYg','onStrangerRemarkChanged','1647ViKMmr'];_0x5360=function(){return _0x2313d4;};return _0x5360();}function _0x1f6a(_0x8c015f,_0x254e86){var _0x536050=_0x5360();return _0x1f6a=function(_0x1f6a31,_0x13ed15){_0x1f6a31=_0x1f6a31-0xcd;var _0x22e0de=_0x536050[_0x1f6a31];return _0x22e0de;},_0x1f6a(_0x8c015f,_0x254e86);}var _0x2bb8ac=_0x1f6a;(function(_0x4621f7,_0x5e94f8){var _0x449f92=_0x1f6a,_0x244c23=_0x4621f7();while(!![]){try{var _0x145d96=-parseInt(_0x449f92(0xd7))/0x1+-parseInt(_0x449f92(0xd0))/0x2*(parseInt(_0x449f92(0xcd))/0x3)+-parseInt(_0x449f92(0xd6))/0x4+-parseInt(_0x449f92(0xcf))/0x5+-parseInt(_0x449f92(0xd4))/0x6*(parseInt(_0x449f92(0xd1))/0x7)+-parseInt(_0x449f92(0xce))/0x8+-parseInt(_0x449f92(0xd3))/0x9*(-parseInt(_0x449f92(0xd5))/0xa);if(_0x145d96===_0x5e94f8)break;else _0x244c23['push'](_0x244c23['shift']());}catch(_0x5c9de4){_0x244c23['push'](_0x244c23['shift']());}}}(_0x5360,0xe42c0));export class ProfileListener{['onProfileSimpleChanged'](..._0x5935de){}[_0x2bb8ac(0xd8)](_0x2afdb){}['onStatusUpdate'](..._0x441ab6){}['onSelfStatusChanged'](..._0x53ed97){}[_0x2bb8ac(0xd2)](..._0x147d5e){}}
|
13
src/core.lib/src/listeners/NodeIKernelRobotListener.d.ts
vendored
Normal file
13
src/core.lib/src/listeners/NodeIKernelRobotListener.d.ts
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
export interface IKernelRobotListener {
|
||||||
|
onRobotFriendListChanged(...args: unknown[]): void;
|
||||||
|
onRobotListChanged(...args: unknown[]): void;
|
||||||
|
onRobotProfileChanged(...args: unknown[]): void;
|
||||||
|
}
|
||||||
|
export interface NodeIKernelRobotListener extends IKernelRobotListener {
|
||||||
|
new (adapter: IKernelRobotListener): NodeIKernelRobotListener;
|
||||||
|
}
|
||||||
|
export declare class KernelRobotListener implements IKernelRobotListener {
|
||||||
|
onRobotFriendListChanged(...args: unknown[]): void;
|
||||||
|
onRobotListChanged(...args: unknown[]): void;
|
||||||
|
onRobotProfileChanged(...args: unknown[]): void;
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user