mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2026-02-28 15:50:27 +00:00
Compare commits
31 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c34812bc9c | ||
|
|
d93b430034 | ||
|
|
c91e1378cf | ||
|
|
cad567dc3f | ||
|
|
82c8de00d0 | ||
|
|
f17abccfdc | ||
|
|
35af50bb73 | ||
|
|
5c72f771c3 | ||
|
|
62c9246368 | ||
|
|
d622178b25 | ||
|
|
9887eb8565 | ||
|
|
2f8569f30c | ||
|
|
82d0c51716 | ||
|
|
37fb2d68d7 | ||
|
|
a240f93784 | ||
|
|
172a75b514 | ||
|
|
beef1233fa | ||
|
|
8f69e2424a | ||
|
|
f3156b1843 | ||
|
|
61a16b44a4 | ||
|
|
7b17ef44dd | ||
|
|
2c166299a3 | ||
|
|
75d2611eda | ||
|
|
e2d2e65620 | ||
|
|
f479fccf3e | ||
|
|
45652612b4 | ||
|
|
54266f97f8 | ||
|
|
687a5f5708 | ||
|
|
3dab2b4361 | ||
|
|
74be268dbe | ||
|
|
8b3f60628e |
23
.github/workflows/release.yml
vendored
23
.github/workflows/release.yml
vendored
@@ -10,7 +10,7 @@ permissions: write-all
|
||||
|
||||
env:
|
||||
OPENROUTER_API_URL: https://91vip.futureppo.top/v1/chat/completions
|
||||
OPENROUTER_MODEL: "gemini-3-flash-preview"
|
||||
OPENROUTER_MODEL: "glm-4.7"
|
||||
RELEASE_NAME: "NapCat"
|
||||
|
||||
jobs:
|
||||
@@ -396,7 +396,7 @@ jobs:
|
||||
--arg system "$SYSTEM_PROMPT" \
|
||||
--arg user "$USER_CONTENT" \
|
||||
--arg model "$OPENROUTER_MODEL" \
|
||||
'{model: $model, messages:[{role:"system", content:$system},{role:"user", content:$user}], temperature:0.2, max_tokens:1500}')
|
||||
'{model: $model, messages:[{role:"system", content:$system},{role:"user", content:$user}], temperature:0.2, max_tokens:5000}')
|
||||
|
||||
echo "=== OpenRouter request body ==="
|
||||
echo "$BODY" | jq .
|
||||
@@ -458,24 +458,23 @@ jobs:
|
||||
pnpm i
|
||||
pnpm run build:openapi
|
||||
|
||||
# 读取并压缩 openapi.json 内容
|
||||
OPENAPI_CONTENT=$(cat packages/napcat-schema/openapi.json | tr -d '\n\r\t' | sed 's/ */ /g' | sed 's/"/\\"/g')
|
||||
|
||||
# 构建 JSON 数据
|
||||
JSON_DATA=$(printf '{
|
||||
"input": "%s",
|
||||
"options": {
|
||||
# 使用 jq 安全地构建大型 JSON 数据并保存到文件
|
||||
jq -n --rawfile input packages/napcat-schema/dist/openapi.json \
|
||||
'{
|
||||
input: $input,
|
||||
options: {
|
||||
"endpointOverwriteBehavior": "OVERWRITE_EXISTING",
|
||||
"schemaOverwriteBehavior": "OVERWRITE_EXISTING",
|
||||
"updateFolderOfChangedEndpoint": true,
|
||||
"moduleId": 1140714,
|
||||
"deleteUnmatchedResources": true
|
||||
}
|
||||
}' "$OPENAPI_CONTENT")
|
||||
}' > apifox_payload.json
|
||||
|
||||
# 通过文件形式发送数据,避免命令行长度限制
|
||||
curl --location -g --request POST 'https://api.apifox.com/v1/projects/5348325/import-openapi?locale=zh-CN' \
|
||||
--header 'X-Apifox-Api-Version: 2024-03-28' \
|
||||
--header 'Authorization: Bearer $APIFOX_TOKEN' \
|
||||
--header "Authorization: Bearer $APIFOX_TOKEN" \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data-raw "$JSON_DATA"
|
||||
--data-binary @apifox_payload.json
|
||||
|
||||
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -10,6 +10,9 @@ devconfig/*
|
||||
!.vscode/extensions.json
|
||||
.idea/*
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
|
||||
# Build
|
||||
*.db
|
||||
checkVersion.sh
|
||||
|
||||
@@ -184,6 +184,35 @@ export function stringifyWithBigInt (obj: any) {
|
||||
);
|
||||
}
|
||||
|
||||
export function parseAppidFromMajorV2 (nodeMajor: string): string | undefined {
|
||||
const marker = Buffer.from('QQAppId/', 'utf-8');
|
||||
const filePath = path.resolve(nodeMajor);
|
||||
const fileContent = fs.readFileSync(filePath);
|
||||
|
||||
let searchPosition = 0;
|
||||
while (true) {
|
||||
const index = fileContent.indexOf(marker, searchPosition);
|
||||
if (index === -1) {
|
||||
break;
|
||||
}
|
||||
|
||||
const start = index + marker.length;
|
||||
const end = fileContent.indexOf(0x00, start);
|
||||
if (end === -1) {
|
||||
break;
|
||||
}
|
||||
const content = fileContent.subarray(start, end);
|
||||
const str = content.toString('utf-8');
|
||||
if (/^\d+$/.test(str)) {
|
||||
return str;
|
||||
}
|
||||
|
||||
searchPosition = end + 1;
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
export function parseAppidFromMajor (nodeMajor: string): string | undefined {
|
||||
const hexSequence = 'A4 09 00 00 00 35';
|
||||
const sequenceBytes = Buffer.from(hexSequence.replace(/ /g, ''), 'hex');
|
||||
|
||||
8
packages/napcat-core/external/appid.json
vendored
8
packages/napcat-core/external/appid.json
vendored
@@ -527,8 +527,12 @@
|
||||
"appid": 537337594,
|
||||
"qua": "V1_MAC_NQ_6.9.88_44725_GW_B"
|
||||
},
|
||||
"3.2.25-45627": {
|
||||
"3.2.25-45758": {
|
||||
"appid": 537340249,
|
||||
"qua": "V1_LNX_NQ_3.2.25_45627_GW_B"
|
||||
"qua": "V1_LNX_NQ_3.2.25_45758_GW_B"
|
||||
},
|
||||
"9.9.27-45758": {
|
||||
"appid": 537340213,
|
||||
"qua": "V1_WIN_NQ_9.9.27_45758_GW_B"
|
||||
}
|
||||
}
|
||||
16
packages/napcat-core/external/napcat.json
vendored
16
packages/napcat-core/external/napcat.json
vendored
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"fileLog": false,
|
||||
"consoleLog": true,
|
||||
"fileLogLevel": "debug",
|
||||
"consoleLogLevel": "info",
|
||||
"packetBackend": "auto",
|
||||
"packetServer": "",
|
||||
"o3HookMode": 1
|
||||
}
|
||||
"fileLog": false,
|
||||
"consoleLog": true,
|
||||
"fileLogLevel": "debug",
|
||||
"consoleLogLevel": "info",
|
||||
"packetBackend": "auto",
|
||||
"packetServer": "",
|
||||
"o3HookMode": 0
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
import fs from 'node:fs';
|
||||
import { systemPlatform } from 'napcat-common/src/system';
|
||||
import { getDefaultQQVersionConfigInfo, getQQPackageInfoPath, getQQVersionConfigPath, parseAppidFromMajor } from 'napcat-common/src/helper';
|
||||
import { getDefaultQQVersionConfigInfo, getQQPackageInfoPath, getQQVersionConfigPath, parseAppidFromMajor, parseAppidFromMajorV2 } from 'napcat-common/src/helper';
|
||||
import AppidTable from '@/napcat-core/external/appid.json';
|
||||
import { LogWrapper } from './log';
|
||||
import { getMajorPath } from '@/napcat-core/index';
|
||||
@@ -107,7 +107,13 @@ export class QQBasicInfoWrapper {
|
||||
if (!this.QQMainPath) {
|
||||
throw new Error('QQMainPath未定义 无法通过Major获取Appid');
|
||||
}
|
||||
const majorPath = getMajorPath(QQVersion, this.QQMainPath);
|
||||
const majorPath = getMajorPath(this.QQMainPath, QQVersion);
|
||||
// 优先通过 QQAppId/ 标记搜索
|
||||
const appidV2 = parseAppidFromMajorV2(majorPath);
|
||||
if (appidV2) {
|
||||
return appidV2;
|
||||
}
|
||||
// 回落到旧方式
|
||||
const appid = parseAppidFromMajor(majorPath);
|
||||
return appid;
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@ import { NodeIKernelMsgListener, NodeIKernelProfileListener } from '@/napcat-cor
|
||||
import { proxiedListenerOf } from '@/napcat-core/helper/proxy-handler';
|
||||
import { NTQQPacketApi } from './apis/packet';
|
||||
import { NativePacketHandler } from './packet/handler/client';
|
||||
import { Napi2NativeLoader } from './packet/handler/napi2nativeLoader';
|
||||
import { container, ReceiverServiceRegistry } from './packet/handler/serviceRegister';
|
||||
import { appEvent } from './packet/handler/eventList';
|
||||
import { TypedEventEmitter } from './packet/handler/typeEvent';
|
||||
@@ -314,6 +315,7 @@ export interface InstanceContext {
|
||||
readonly basicInfoWrapper: QQBasicInfoWrapper;
|
||||
readonly pathWrapper: NapCatPathWrapper;
|
||||
readonly packetHandler: NativePacketHandler;
|
||||
readonly napi2nativeLoader: Napi2NativeLoader;
|
||||
}
|
||||
|
||||
export interface StableNTApiWrapper {
|
||||
|
||||
@@ -1,11 +1,8 @@
|
||||
import path, { dirname } from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
import fs from 'fs';
|
||||
import { constants } from 'node:os';
|
||||
import { LogStack } from '@/napcat-core/packet/context/clientContext';
|
||||
import { NapCoreContext } from '@/napcat-core/packet/context/napCoreContext';
|
||||
import { PacketLogger } from '@/napcat-core/packet/context/loggerContext';
|
||||
import { OidbPacket, PacketBuf } from '@/napcat-core/packet/transformer/base';
|
||||
import { Napi2NativeLoader } from '@/napcat-core/packet/handler/napi2nativeLoader';
|
||||
export interface RecvPacket {
|
||||
type: string, // 仅recv
|
||||
data: RecvPacketData;
|
||||
@@ -17,48 +14,36 @@ export interface RecvPacketData {
|
||||
data: Buffer;
|
||||
}
|
||||
|
||||
// 0 send 1 recv
|
||||
export interface NativePacketExportType {
|
||||
initHook?: (send: string, recv: string) => boolean;
|
||||
}
|
||||
|
||||
export class NativePacketClient {
|
||||
protected readonly napcore: NapCoreContext;
|
||||
protected readonly logger: PacketLogger;
|
||||
protected readonly cb = new Map<string, (json: RecvPacketData) => Promise<any> | any>(); // hash-type callback
|
||||
protected readonly napi2nativeLoader: Napi2NativeLoader;
|
||||
logStack: LogStack;
|
||||
available: boolean = false;
|
||||
private readonly supportedPlatforms = ['win32.x64', 'linux.x64', 'linux.arm64', 'darwin.x64', 'darwin.arm64'];
|
||||
private readonly MoeHooExport: { exports: NativePacketExportType; } = { exports: {} };
|
||||
|
||||
constructor (napCore: NapCoreContext, logger: PacketLogger, logStack: LogStack) {
|
||||
constructor (napCore: NapCoreContext, logger: PacketLogger, logStack: LogStack, napi2nativeLoader: Napi2NativeLoader) {
|
||||
this.napcore = napCore;
|
||||
this.logger = logger;
|
||||
this.logStack = logStack;
|
||||
this.napi2nativeLoader = napi2nativeLoader;
|
||||
}
|
||||
|
||||
check (): boolean {
|
||||
const platform = process.platform + '.' + process.arch;
|
||||
if (!this.supportedPlatforms.includes(platform)) {
|
||||
this.logStack.pushLogWarn(`NativePacketClient: 不支持的平台: ${platform}`);
|
||||
return false;
|
||||
}
|
||||
const moehoo_path = path.join(dirname(fileURLToPath(import.meta.url)), './native/napi2native/napi2native.' + platform + '.node');
|
||||
if (!fs.existsSync(moehoo_path)) {
|
||||
this.logStack.pushLogWarn(`NativePacketClient: 缺失运行时文件: ${moehoo_path}`);
|
||||
if (!this.napi2nativeLoader.loaded) {
|
||||
this.logStack.pushLogWarn('NativePacketClient: Napi2NativeLoader 未成功加载');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
async init (_pid: number, recv: string, send: string): Promise<void> {
|
||||
const platform = process.platform + '.' + process.arch;
|
||||
const isNewQQ = this.napcore.basicInfo.requireMinNTQQBuild('40824');
|
||||
if (isNewQQ) {
|
||||
const moehoo_path = path.join(dirname(fileURLToPath(import.meta.url)), './native/napi2native/napi2native.' + platform + '.node');
|
||||
process.dlopen(this.MoeHooExport, moehoo_path, constants.dlopen.RTLD_LAZY);
|
||||
this.MoeHooExport?.exports.initHook?.(send, recv);
|
||||
this.available = true;
|
||||
const success = this.napi2nativeLoader.initHook(send, recv);
|
||||
if (success) {
|
||||
this.available = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ import { NativePacketClient } from '@/napcat-core/packet/client/nativeClient';
|
||||
import { OidbPacket } from '@/napcat-core/packet/transformer/base';
|
||||
import { PacketLogger } from '@/napcat-core/packet/context/loggerContext';
|
||||
import { NapCoreContext } from '@/napcat-core/packet/context/napCoreContext';
|
||||
import { Napi2NativeLoader } from '@/napcat-core/packet/handler/napi2nativeLoader';
|
||||
|
||||
export class LogStack {
|
||||
private stack: string[] = [];
|
||||
@@ -43,12 +44,14 @@ export class PacketClientContext {
|
||||
private readonly napCore: NapCoreContext;
|
||||
private readonly logger: PacketLogger;
|
||||
private readonly logStack: LogStack;
|
||||
private readonly napi2nativeLoader: Napi2NativeLoader;
|
||||
private readonly _client: NativePacketClient;
|
||||
|
||||
constructor (napCore: NapCoreContext, logger: PacketLogger) {
|
||||
constructor (napCore: NapCoreContext, logger: PacketLogger, napi2nativeLoader: Napi2NativeLoader) {
|
||||
this.napCore = napCore;
|
||||
this.logger = logger;
|
||||
this.logStack = new LogStack(logger);
|
||||
this.napi2nativeLoader = napi2nativeLoader;
|
||||
this._client = this.newClient();
|
||||
}
|
||||
|
||||
@@ -64,14 +67,14 @@ export class PacketClientContext {
|
||||
await this._client.init(pid, recv, send);
|
||||
}
|
||||
|
||||
async sendOidbPacket<T extends boolean = false>(pkt: OidbPacket, rsp?: T, timeout?: number): Promise<T extends true ? Buffer : void> {
|
||||
async sendOidbPacket<T extends boolean = false> (pkt: OidbPacket, rsp?: T, timeout?: number): Promise<T extends true ? Buffer : void> {
|
||||
const raw = await this._client.sendOidbPacket(pkt, rsp, timeout);
|
||||
return raw.data as T extends true ? Buffer : void;
|
||||
}
|
||||
|
||||
private newClient (): NativePacketClient {
|
||||
this.logger.info('使用 NativePacketClient 作为后端');
|
||||
const client = new NativePacketClient(this.napCore, this.logger, this.logStack);
|
||||
const client = new NativePacketClient(this.napCore, this.logger, this.logStack, this.napi2nativeLoader);
|
||||
if (!client.check()) {
|
||||
throw new Error('[Core] [Packet] NativePacketClient 不可用,NapCat.Packet将不会加载!');
|
||||
}
|
||||
|
||||
@@ -34,5 +34,9 @@ export class NapCoreContext {
|
||||
return this.core.configLoader.configData;
|
||||
}
|
||||
|
||||
get napi2nativeLoader () {
|
||||
return this.core.context.napi2nativeLoader;
|
||||
}
|
||||
|
||||
sendSsoCmdReqByContend = (cmd: string, data: Buffer) => this.core.context.session.getMsgService().sendSsoCmdReqByContend(cmd, data);
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ export class PacketContext {
|
||||
this.msgConverter = new PacketMsgConverter();
|
||||
this.napcore = new NapCoreContext(core);
|
||||
this.logger = new PacketLogger(this.napcore);
|
||||
this.client = new PacketClientContext(this.napcore, this.logger);
|
||||
this.client = new PacketClientContext(this.napcore, this.logger, this.napcore.napi2nativeLoader);
|
||||
this.highway = new PacketHighwayContext(this.napcore, this.logger, this.client);
|
||||
this.operation = new PacketOperationContext(this);
|
||||
}
|
||||
|
||||
81
packages/napcat-core/packet/handler/napi2nativeLoader.ts
Normal file
81
packages/napcat-core/packet/handler/napi2nativeLoader.ts
Normal file
@@ -0,0 +1,81 @@
|
||||
import path, { dirname } from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
import fs from 'fs';
|
||||
import { constants } from 'node:os';
|
||||
import { LogWrapper } from '../../helper/log';
|
||||
|
||||
export interface Napi2NativeExportType {
|
||||
initHook?: (send: string, recv: string) => boolean;
|
||||
setVerbose?: (verbose: boolean) => void; // 默认关闭日志
|
||||
enableAllBypasses?: () => void;
|
||||
}
|
||||
|
||||
export class Napi2NativeLoader {
|
||||
private readonly supportedPlatforms = ['win32.x64', 'linux.x64', 'linux.arm64', 'darwin.x64', 'darwin.arm64'];
|
||||
private readonly exports: { exports: Napi2NativeExportType; } = { exports: {} };
|
||||
protected readonly logger: LogWrapper;
|
||||
private _loaded: boolean = false;
|
||||
|
||||
constructor ({ logger }: { logger: LogWrapper; }) {
|
||||
this.logger = logger;
|
||||
this.load();
|
||||
}
|
||||
|
||||
private load (): void {
|
||||
const platform = process.platform + '.' + process.arch;
|
||||
|
||||
if (!this.supportedPlatforms.includes(platform)) {
|
||||
this.logger.logWarn(`Napi2NativeLoader: 不支持的平台: ${platform}`);
|
||||
this._loaded = false;
|
||||
return;
|
||||
}
|
||||
|
||||
const nativeModulePath = path.join(
|
||||
dirname(fileURLToPath(import.meta.url)),
|
||||
'./native/napi2native/napi2native.' + platform + '.node'
|
||||
);
|
||||
|
||||
if (!fs.existsSync(nativeModulePath)) {
|
||||
this.logger.logWarn(`Napi2NativeLoader: 缺失运行时文件: ${nativeModulePath}`);
|
||||
this._loaded = false;
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
process.dlopen(this.exports, nativeModulePath, constants.dlopen.RTLD_LAZY);
|
||||
this._loaded = true;
|
||||
this.logger.log('[Napi2NativeLoader] 加载成功');
|
||||
} catch (error) {
|
||||
this.logger.logError('Napi2NativeLoader 加载出错:', error);
|
||||
this._loaded = false;
|
||||
}
|
||||
}
|
||||
|
||||
get loaded (): boolean {
|
||||
return this._loaded;
|
||||
}
|
||||
|
||||
get nativeExports (): Napi2NativeExportType {
|
||||
return this.exports.exports;
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化 Hook
|
||||
* @param send send 偏移地址
|
||||
* @param recv recv 偏移地址
|
||||
* @returns 是否初始化成功
|
||||
*/
|
||||
initHook (send: string, recv: string): boolean {
|
||||
if (!this._loaded) {
|
||||
this.logger.logWarn('Napi2NativeLoader 未成功加载,无法初始化 Hook');
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
return this.nativeExports.initHook?.(send, recv) ?? false;
|
||||
} catch (error) {
|
||||
this.logger.logError('Napi2NativeLoader initHook 出错:', error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
7
packages/napcat-core/services/NodeIKernelAVSDKService.ts
Normal file
7
packages/napcat-core/services/NodeIKernelAVSDKService.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
export interface NodeIKernelAVSDKService {
|
||||
addKernelAVSDKListener (listener: unknown): number;
|
||||
|
||||
removeKernelAVSDKListener (listenerId: number): void;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
15
packages/napcat-core/services/NodeIKernelAddBuddyService.ts
Normal file
15
packages/napcat-core/services/NodeIKernelAddBuddyService.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
export interface NodeIKernelAddBuddyService {
|
||||
addBuddy (arg1: string, arg2: unknown, arg3: unknown): unknown;
|
||||
|
||||
getAddBuddyRequestTag (arg1: string, arg2: unknown, arg3: unknown): unknown;
|
||||
|
||||
getBuddySetting (arg1: string, arg2: unknown, arg3: unknown): unknown;
|
||||
|
||||
getSmartInfo (arg1: string, arg2: unknown, arg3: unknown): unknown;
|
||||
|
||||
queryUinSafetyFlag (arg1: string, arg2: unknown, arg3: unknown): unknown;
|
||||
|
||||
requestInfoByAccount (arg1: string, arg2: unknown, arg3: unknown): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
@@ -2,17 +2,17 @@ import { AlbumCommentReplyContent, AlbumFeedLikePublish, AlbumListRequest, Album
|
||||
|
||||
export interface NodeIKernelAlbumService {
|
||||
|
||||
setAlbumServiceInfo(...args: unknown[]): unknown;// needs 3 arguments
|
||||
setAlbumServiceInfo (arg1: string, arg2: string, arg3: string): unknown;// needs 3 arguments
|
||||
|
||||
getMainPage(...args: unknown[]): unknown;// needs 2 arguments
|
||||
getMainPage (arg1: unknown, arg2: unknown): unknown;// needs 2 arguments
|
||||
|
||||
getAlbumList(params: {
|
||||
getAlbumList (params: {
|
||||
qun_id: string,
|
||||
attach_info: string,
|
||||
seq: number,
|
||||
request_time_line: {
|
||||
request_invoke_time: string
|
||||
}
|
||||
request_invoke_time: string;
|
||||
};
|
||||
}): Promise<{
|
||||
response: {
|
||||
seq: number,
|
||||
@@ -21,57 +21,57 @@ export interface NodeIKernelAlbumService {
|
||||
trace_id: string,
|
||||
is_from_cache: boolean,
|
||||
request_time_line: unknown,
|
||||
album_list: Array<{ name: string, album_id: string }>,
|
||||
album_list: Array<{ name: string, album_id: string; }>,
|
||||
attach_info: string,
|
||||
has_more: boolean,
|
||||
right: unknown,
|
||||
banner: unknown
|
||||
}
|
||||
}>
|
||||
getAlbumInfo(...args: unknown[]): unknown;// needs 1 arguments
|
||||
banner: unknown;
|
||||
};
|
||||
}>;
|
||||
getAlbumInfo (arg: unknown): unknown;// needs 1 arguments
|
||||
|
||||
deleteAlbum(...args: unknown[]): unknown;// needs 3 arguments
|
||||
deleteAlbum (arg1: number, arg2: string, arg3: string): unknown;// needs 3 arguments
|
||||
|
||||
addAlbum(...args: unknown[]): unknown;// needs 2 arguments
|
||||
addAlbum (arg1: unknown, arg2: unknown): unknown;// needs 2 arguments
|
||||
|
||||
deleteMedias(seq: number, group_code: string, album_id: string, media_ids: string[], ban_ids: unknown[]): Promise<unknown>;// needs 4 arguments
|
||||
deleteMedias (seq: number, group_code: string, album_id: string, media_ids: string[], ban_ids: unknown[]): Promise<unknown>;// needs 4 arguments
|
||||
|
||||
modifyAlbum(...args: unknown[]): unknown;// needs 3 arguments
|
||||
modifyAlbum (arg1: number, arg2: unknown, arg3: Array<unknown>[]): unknown;// needs 3 arguments
|
||||
|
||||
getMediaList(param: AlbumListRequest): Promise<{
|
||||
getMediaList (param: AlbumListRequest): Promise<{
|
||||
response: {
|
||||
seq: number,
|
||||
result: number,
|
||||
errMs: string, // 没错就是errMs不是errMsg
|
||||
trace_id: string,
|
||||
request_time_line: unknown,
|
||||
}
|
||||
};
|
||||
}>;// needs 1 arguments
|
||||
|
||||
quoteToQzone(...args: unknown[]): unknown;// needs 1 arguments
|
||||
quoteToQzone (arg: unknown): unknown;// needs 1 arguments
|
||||
|
||||
quoteToQunAlbum(...args: unknown[]): unknown;// needs 1 arguments
|
||||
quoteToQunAlbum (arg: unknown): unknown;// needs 1 arguments
|
||||
|
||||
queryQuoteToQunAlbumStatus(...args: unknown[]): unknown;// needs 1 arguments
|
||||
queryQuoteToQunAlbumStatus (arg: unknown): unknown;// needs 1 arguments
|
||||
|
||||
getQunFeeds(...args: unknown[]): unknown;// needs 1 arguments
|
||||
getQunFeeds (arg: unknown): unknown;// needs 1 arguments
|
||||
|
||||
getQunFeedDetail(...args: unknown[]): unknown;// needs 1 arguments
|
||||
getQunFeedDetail (arg: unknown): unknown;// needs 1 arguments
|
||||
|
||||
getQunNoticeList(...args: unknown[]): unknown;// needs 4 arguments
|
||||
getQunNoticeList (arg1: number, arg2: unknown, arg3: string, arg4: string): unknown;// needs 4 arguments
|
||||
|
||||
getQunComment(...args: unknown[]): unknown;// needs 1 arguments
|
||||
getQunComment (arg: unknown): unknown;// needs 1 arguments
|
||||
|
||||
getQunLikes(...args: unknown[]): unknown;// needs 4 arguments
|
||||
getQunLikes (arg1: number, arg2: unknown, arg3: string, arg4: string): unknown;// needs 4 arguments
|
||||
|
||||
deleteQunFeed(...args: unknown[]): unknown;// needs 1 arguments
|
||||
deleteQunFeed (arg: unknown): unknown;// needs 1 arguments
|
||||
// seq random
|
||||
// stCommonExt {"map_info":[],"map_bytes_info":[],"map_user_account":[]}
|
||||
// qunId string
|
||||
doQunComment(seq: number, ext: {
|
||||
doQunComment (seq: number, ext: {
|
||||
map_info: unknown[],
|
||||
map_bytes_info: unknown[],
|
||||
map_user_account: unknown[]
|
||||
map_user_account: unknown[];
|
||||
},
|
||||
qunId: string,
|
||||
commentType: number,
|
||||
@@ -79,23 +79,23 @@ export interface NodeIKernelAlbumService {
|
||||
content: AlbumCommentReplyContent,
|
||||
): Promise<unknown>;// needs 6 arguments
|
||||
|
||||
doQunReply(...args: unknown[]): unknown;// needs 7 arguments
|
||||
doQunReply (arg1: number, arg2: unknown, arg3: string, arg4: number, arg5: unknown, arg6: unknown, arg7: unknown): unknown;// needs 7 arguments
|
||||
|
||||
doQunLike(
|
||||
doQunLike (
|
||||
seq: number,
|
||||
ext: {
|
||||
map_info: unknown[],
|
||||
map_bytes_info: unknown[],
|
||||
map_user_account: unknown[]
|
||||
map_user_account: unknown[];
|
||||
},
|
||||
param: {
|
||||
// {"id":"421_1_0_1012959257|V61Yiali4PELg90bThrH4Bo2iI1M5Kab|V5bCgAxMDEyOTU5MjU3e*KqaLVYdic!^||^421_1_0_1012959257|V61Yiali4PELg90bThrH4Bo2iI1M5Kab|17560336594^||^1","status":1}
|
||||
id: string,
|
||||
status: number
|
||||
status: number;
|
||||
},
|
||||
like: AlbumFeedLikePublish
|
||||
): Promise<unknown>;// needs 5 arguments
|
||||
|
||||
getRedPoints(...args: unknown[]): unknown;// needs 3 arguments
|
||||
getRedPoints (arg1: string, arg2: number, arg3: string): unknown;// needs 3 arguments
|
||||
|
||||
}
|
||||
|
||||
@@ -13,13 +13,13 @@ export interface NodeIKernelAvatarService {
|
||||
|
||||
forceDownloadGroupAvatar(arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
getGroupPortraitPath(arg1: unknown, arg2: unknown, arg3: unknown): unknown;
|
||||
getGroupPortraitPath(arg1: string, arg2: number, arg3: number): unknown;
|
||||
|
||||
forceDownloadGroupPortrait(arg1: unknown, arg2: unknown, arg3: unknown): unknown;
|
||||
forceDownloadGroupPortrait(arg1: string, arg2: number, arg3: number): unknown;
|
||||
|
||||
getAvatarPaths(arg1: unknown, arg2: unknown): unknown;
|
||||
getAvatarPaths(arg1: Array<unknown>[], arg2: number): unknown;
|
||||
|
||||
getGroupAvatarPaths(arg1: unknown, arg2: unknown): unknown;
|
||||
getGroupAvatarPaths(arg1: Array<unknown>[], arg2: string): unknown;
|
||||
|
||||
getConfGroupAvatarPaths(arg: unknown): unknown;
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
export interface NodeIKernelBdhUploadService {
|
||||
addKernelBdhUploadListener (listener: unknown): number;
|
||||
|
||||
removeKernelBdhUploadListener (listenerId: number): void;
|
||||
|
||||
setBdhTestEnv (arg1: string, arg2: number): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
@@ -130,5 +130,21 @@ export interface NodeIKernelBuddyService {
|
||||
|
||||
getBuddyRecommendContactArkJson (uid: string, phoneNumber: string): Promise<GeneralCallResult & { arkMsg: string; }>;
|
||||
|
||||
checkIsBuddyAsync (uid: string): Promise<unknown>;
|
||||
|
||||
areBuddies (callFrom: string, uids: string[]): unknown;
|
||||
|
||||
getCategoryById (id: number): unknown;
|
||||
|
||||
addCategoryV2 (name: string, buddyUids?: unknown): Promise<unknown>;
|
||||
|
||||
isNull (): boolean;
|
||||
|
||||
getAddFriendBlockedList (): unknown;
|
||||
|
||||
getAddFriendBlockedRedPoint (): unknown;
|
||||
|
||||
reportAddFriendBlocked (): unknown;
|
||||
|
||||
setWXMsgNotify (arg: unknown): unknown;
|
||||
}
|
||||
|
||||
@@ -1,91 +1,91 @@
|
||||
import { GeneralCallResult } from './common';
|
||||
|
||||
export interface NodeIKernelCollectionService {
|
||||
addKernelCollectionListener(...args: unknown[]): void;// needs 1 arguments
|
||||
addKernelCollectionListener (listener: unknown): void;// needs 1 arguments
|
||||
|
||||
removeKernelCollectionListener(listenerId: number): void;
|
||||
removeKernelCollectionListener (listenerId: number): void;
|
||||
|
||||
getCollectionItemList(param: {
|
||||
getCollectionItemList (param: {
|
||||
category: number,
|
||||
groupId: number,
|
||||
forceSync: boolean,
|
||||
forceFromDb: boolean,
|
||||
timeStamp: string,
|
||||
count: number,
|
||||
searchDown: boolean
|
||||
searchDown: boolean;
|
||||
}): Promise<GeneralCallResult &
|
||||
{
|
||||
collectionSearchList: {
|
||||
collectionItemList: Array<
|
||||
{
|
||||
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
|
||||
}
|
||||
}
|
||||
>;
|
||||
{
|
||||
collectionSearchList: {
|
||||
collectionItemList: Array<
|
||||
{
|
||||
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;
|
||||
};
|
||||
}
|
||||
>;
|
||||
|
||||
getCollectionContent(...args: unknown[]): unknown;// needs 5 arguments
|
||||
getCollectionContent (arg1: string, arg2: number, arg3: string, arg4: string, arg5: boolean): unknown;// needs 5 arguments
|
||||
|
||||
getCollectionCustomGroupList(...args: unknown[]): unknown;// needs 0 arguments
|
||||
getCollectionCustomGroupList (): unknown;// needs 0 arguments
|
||||
|
||||
getCollectionUserInfo(...args: unknown[]): unknown;// needs 0 arguments
|
||||
getCollectionUserInfo (): unknown;// needs 0 arguments
|
||||
|
||||
searchCollectionItemList(...args: unknown[]): unknown;// needs 2 arguments
|
||||
searchCollectionItemList (arg1: string, arg2: unknown): unknown;// needs 2 arguments
|
||||
|
||||
addMsgToCollection(...args: unknown[]): unknown;// needs 2 arguments
|
||||
addMsgToCollection (arg1: unknown, arg2: unknown): unknown;// needs 2 arguments
|
||||
|
||||
collectionArkShare(...args: unknown[]): unknown;// needs 1 arguments
|
||||
collectionArkShare (arg: unknown): unknown;// needs 1 arguments
|
||||
|
||||
collectionFileForward(...args: unknown[]): unknown;// needs 3 arguments
|
||||
collectionFileForward (arg1: number, arg2: string, arg3: unknown): unknown;// needs 3 arguments
|
||||
|
||||
downloadCollectionFile(...args: unknown[]): unknown;// needs 4 arguments
|
||||
downloadCollectionFile (arg1: string, arg2: string, arg3: unknown, arg4: string): unknown;// needs 4 arguments
|
||||
|
||||
downloadCollectionFileThumbPic(...args: unknown[]): unknown;// needs 4 arguments
|
||||
downloadCollectionFileThumbPic (arg1: string, arg2: string, arg3: unknown, arg4: number): unknown;// needs 4 arguments
|
||||
|
||||
downloadCollectionPic(...args: unknown[]): unknown;// needs 3 arguments
|
||||
downloadCollectionPic (arg1: string, arg2: string, arg3: unknown): unknown;// needs 3 arguments
|
||||
|
||||
cancelDownloadCollectionFile(...args: unknown[]): unknown;// needs 1 arguments
|
||||
cancelDownloadCollectionFile (arg: unknown): unknown;// needs 1 arguments
|
||||
|
||||
deleteCollectionItemList(...args: unknown[]): unknown;// needs 1 arguments
|
||||
deleteCollectionItemList (arg: unknown): unknown;// needs 1 arguments
|
||||
|
||||
editCollectionItem(...args: unknown[]): unknown;// needs 2 arguments
|
||||
editCollectionItem (arg1: unknown, arg2: unknown): unknown;// needs 2 arguments
|
||||
|
||||
getEditPicInfoByPath(...args: unknown[]): unknown;// needs 1 arguments
|
||||
getEditPicInfoByPath (arg: unknown): unknown;// needs 1 arguments
|
||||
|
||||
collectionFastUpload(...args: unknown[]): unknown;// needs 1 arguments
|
||||
collectionFastUpload (arg: unknown): unknown;// needs 1 arguments
|
||||
|
||||
editCollectionItemAfterFastUpload(...args: unknown[]): unknown;// needs 2 arguments
|
||||
editCollectionItemAfterFastUpload (arg1: unknown, arg2: unknown): unknown;// needs 2 arguments
|
||||
|
||||
createNewCollectionItem(...args: unknown[]): unknown;// needs 1 arguments
|
||||
createNewCollectionItem (arg: unknown): unknown;// needs 1 arguments
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
export interface NodeIKernelConfigMgrService {
|
||||
addKernelConfigMgrListener (listener: unknown): number;
|
||||
|
||||
removeKernelConfigMgrListener (listenerId: number): void;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
@@ -1,9 +1,9 @@
|
||||
export interface NodeIKernelDbToolsService {
|
||||
|
||||
depositDatabase(...args: unknown[]): unknown;
|
||||
depositDatabase (arg: unknown): unknown;
|
||||
|
||||
backupDatabase(...args: unknown[]): unknown;
|
||||
backupDatabase (arg: unknown): unknown;
|
||||
|
||||
retrieveDatabase(...args: unknown[]): unknown;
|
||||
retrieveDatabase (arg: unknown): unknown;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
export interface NodeIKernelDirectSessionService {
|
||||
addKernelDirectSessionListener (listener: unknown): number;
|
||||
|
||||
removeKernelDirectSessionListener (listenerId: number): void;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
@@ -1,3 +1,13 @@
|
||||
export interface NodeIKernelECDHService {
|
||||
sendOIDBECRequest: (data: Uint8Array) => Promise<Uint8Array>;
|
||||
|
||||
init (): unknown;
|
||||
|
||||
setIsDebug (isDebug: boolean): unknown;
|
||||
|
||||
setGuid (guid: string): unknown;
|
||||
|
||||
sendOIDBRequest (cmd: number, serviceType: number, subCmd: number, data: string, extraData: unknown): Promise<unknown>;
|
||||
|
||||
sendSSORequest (cmd: string, serviceType: number, data: string, extraData: unknown): Promise<unknown>;
|
||||
}
|
||||
|
||||
5
packages/napcat-core/services/NodeIKernelEmojiService.ts
Normal file
5
packages/napcat-core/services/NodeIKernelEmojiService.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
export interface NodeIKernelEmojiService {
|
||||
getAIGCEmojiList (arg1: unknown, arg2: boolean): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
19
packages/napcat-core/services/NodeIKernelFeedService.ts
Normal file
19
packages/napcat-core/services/NodeIKernelFeedService.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
export interface NodeIKernelFeedService {
|
||||
addKernelFeedListener (listener: unknown): number;
|
||||
|
||||
removeKernelFeedListener (listenerId: number): void;
|
||||
|
||||
getChannelDraft (arg1: string, arg2: number): unknown;
|
||||
|
||||
getFeedCount (arg: unknown): unknown;
|
||||
|
||||
getFeedLikeUserList (arg1: unknown, arg2: number): unknown;
|
||||
|
||||
getFeedRichMediaFilePath (arg1: number, arg2: string, arg3: string, arg4: number, arg5: boolean): unknown;
|
||||
|
||||
getJoinedRecommendItems (arg1: unknown, arg2: boolean): unknown;
|
||||
|
||||
setChannelDraft (arg1: string, arg2: string, arg3: number): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
@@ -1,37 +1,41 @@
|
||||
import { NodeIKernelFileAssistantListener } from '@/napcat-core/index';
|
||||
|
||||
export interface NodeIKernelFileAssistantService {
|
||||
addKernelFileAssistantListener(listener: NodeIKernelFileAssistantListener): unknown;
|
||||
addKernelFileAssistantListener (listener: NodeIKernelFileAssistantListener): unknown;
|
||||
|
||||
removeKernelFileAssistantListener(arg1: unknown[]): unknown;
|
||||
removeKernelFileAssistantListener (arg1: unknown[]): unknown;
|
||||
|
||||
getFileAssistantList(arg1: unknown[]): unknown;
|
||||
getFileAssistantList (arg1: unknown[]): unknown;
|
||||
|
||||
getMoreFileAssistantList(arg1: unknown[]): unknown;
|
||||
getMoreFileAssistantList (arg1: unknown[]): unknown;
|
||||
|
||||
getFileSessionList(): unknown;
|
||||
getFileSessionList (): unknown;
|
||||
|
||||
searchFile(keywords: string[], params: { resultType: number, pageLimit: number }, resultId: number): number;
|
||||
searchFile (keywords: string[], params: { resultType: number, pageLimit: number; }, resultId: number): number;
|
||||
|
||||
resetSearchFileSortType(arg1: unknown, arg2: unknown, arg3: unknown): unknown;
|
||||
resetSearchFileSortType (arg1: number, arg2: number, arg3: number): unknown;
|
||||
|
||||
searchMoreFile(arg1: unknown[]): unknown;
|
||||
searchMoreFile (arg1: unknown[]): unknown;
|
||||
|
||||
cancelSearchFile(arg1: unknown, arg2: unknown, arg3: unknown): unknown;
|
||||
cancelSearchFile (arg1: number, arg2: number, arg3: string): unknown;
|
||||
|
||||
downloadFile(fileIds: string[]): { result: number, errMsg: string };
|
||||
downloadFile (fileIds: string[]): { result: number, errMsg: string; };
|
||||
|
||||
forwardFile(arg1: unknown, arg2: unknown, arg3: unknown): unknown;
|
||||
forwardFile (arg1: unknown, arg2: unknown, arg3: unknown): unknown;
|
||||
|
||||
cancelFileAction(arg1: unknown[]): unknown;
|
||||
cancelFileAction (arg1: unknown[]): unknown;
|
||||
|
||||
retryFileAction(arg1: unknown[]): unknown;
|
||||
retryFileAction (arg1: unknown[]): unknown;
|
||||
|
||||
deleteFile(arg1: unknown[]): unknown;
|
||||
deleteFile (arg1: unknown[]): unknown;
|
||||
|
||||
saveAs(arg1: unknown, arg2: unknown): unknown;
|
||||
saveAs (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
saveAsWithRename(arg1: unknown, arg2: unknown, arg3: unknown): unknown;
|
||||
saveAsWithRename (arg1: string, arg2: string, arg3: string): unknown;
|
||||
|
||||
isNull(): boolean;
|
||||
getFilePathCount (arg: unknown): unknown;
|
||||
|
||||
updateRecentOperateForMsg (arg: unknown): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
export interface NodeIKernelFileBridgeClientService {
|
||||
addKernelFileBridgeClientListener (listener: unknown): number;
|
||||
|
||||
removeKernelFileBridgeClientListener (listenerId: number): void;
|
||||
|
||||
getPageContent (arg1: boolean, arg2: string): unknown;
|
||||
|
||||
getThumbnail (arg1: boolean, arg2: string, arg3: unknown): unknown;
|
||||
|
||||
searchFolderForFiles (arg1: string, arg2: string, arg3: string): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
export interface NodeIKernelFileBridgeHostService {
|
||||
addKernelFileBridgeHostListener (listener: unknown): number;
|
||||
|
||||
removeKernelFileBridgeHostListener (listenerId: number): void;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
@@ -24,13 +24,13 @@ export interface NodeIKernelFlashTransferService {
|
||||
seq: number;
|
||||
}>; // 2 arg 重点 // 自动上传
|
||||
|
||||
createMergeShareTask (...args: unknown[]): unknown; // 2 arg
|
||||
createMergeShareTask (arg1: unknown, arg2: unknown): unknown; // 2 arg
|
||||
|
||||
updateFlashTransfer (...args: unknown[]): unknown; // 2 arg
|
||||
updateFlashTransfer (arg1: unknown, arg2: unknown): unknown; // 2 arg
|
||||
|
||||
getFileSetList (...args: unknown[]): unknown; // 1 arg
|
||||
getFileSetList (arg: unknown): unknown; // 1 arg
|
||||
|
||||
getFileSetListCount (...args: unknown[]): unknown; // 1 arg
|
||||
getFileSetListCount (arg: unknown): unknown; // 1 arg
|
||||
|
||||
/**
|
||||
* 获取file set 的信息
|
||||
@@ -50,11 +50,11 @@ export interface NodeIKernelFlashTransferService {
|
||||
rsp: FileListResponse;
|
||||
}>; // 1 arg 这个方法QQ有bug??? 并没有,是我参数有问题
|
||||
|
||||
getDownloadedFileCount (...args: unknown[]): unknown; // 1 arg
|
||||
getDownloadedFileCount (arg: unknown): unknown; // 1 arg
|
||||
|
||||
getLocalFileList (...args: unknown[]): unknown; // 3 arg
|
||||
getLocalFileList (arg1: number, arg2: string, arg3: Array<unknown>[]): unknown; // 3 arg
|
||||
|
||||
batchRemoveUserFileSetHistory (...args: unknown[]): unknown; // 1 arg
|
||||
batchRemoveUserFileSetHistory (arg: unknown): unknown; // 1 arg
|
||||
|
||||
/**
|
||||
* 获取分享链接
|
||||
@@ -73,26 +73,26 @@ export interface NodeIKernelFlashTransferService {
|
||||
fileSetId: string;
|
||||
}>; // 1 arg code == share code
|
||||
|
||||
batchRemoveFile (...args: unknown[]): unknown; // 1 arg
|
||||
batchRemoveFile (arg: unknown): unknown; // 1 arg
|
||||
|
||||
checkUploadPathValid (...args: unknown[]): unknown; // 1 arg
|
||||
checkUploadPathValid (arg: unknown): unknown; // 1 arg
|
||||
|
||||
cleanFailedFiles (...args: unknown[]): unknown; // 2 arg
|
||||
cleanFailedFiles (arg1: number, arg2: Array<unknown>[]): unknown; // 2 arg
|
||||
|
||||
/**
|
||||
* 暂停所有的任务
|
||||
*/
|
||||
resumeAllUnfinishedTasks (): unknown; // 0 arg !!
|
||||
|
||||
addFileSetUploadListener (...args: unknown[]): unknown; // 1 arg
|
||||
addFileSetUploadListener (listener: unknown): unknown; // 1 arg
|
||||
|
||||
removeFileSetUploadListener (...args: unknown[]): unknown; // 1 arg
|
||||
removeFileSetUploadListener (listenerId: unknown): unknown; // 1 arg
|
||||
|
||||
/**
|
||||
* 开始上传任务 适用于已暂停的
|
||||
* @param fileSetId
|
||||
*/
|
||||
startFileSetUpload (fileSetId: string): void; // 1 arg 并不是新建任务,应该是暂停后的启动
|
||||
startFileSetUpload (fileSetId: unknown): void; // 1 arg 并不是新建任务,应该是暂停后的启动
|
||||
|
||||
/**
|
||||
* 结束,无法再次启动
|
||||
@@ -110,27 +110,27 @@ export interface NodeIKernelFlashTransferService {
|
||||
* 继续上传
|
||||
* @param args
|
||||
*/
|
||||
resumeFileSetUpload (...args: unknown[]): unknown; // 1 arg 继续
|
||||
resumeFileSetUpload (fileSetId: unknown): unknown; // 1 arg 继续
|
||||
|
||||
pauseFileUpload (...args: unknown[]): unknown; // 1 arg
|
||||
pauseFileUpload (arg: unknown): unknown; // 1 arg
|
||||
|
||||
resumeFileUpload (...args: unknown[]): unknown; // 1 arg
|
||||
resumeFileUpload (arg: unknown): unknown; // 1 arg
|
||||
|
||||
stopFileUpload (...args: unknown[]): unknown; // 1 arg
|
||||
stopFileUpload (arg: unknown): unknown; // 1 arg
|
||||
|
||||
asyncGetThumbnailPath (...args: unknown[]): unknown; // 2 arg
|
||||
asyncGetThumbnailPath (arg1: unknown, arg2: unknown): unknown; // 2 arg
|
||||
|
||||
setDownLoadDefaultFileDir (...args: unknown[]): unknown; // 1 arg
|
||||
setDownLoadDefaultFileDir (dir: unknown): unknown; // 1 arg
|
||||
|
||||
setFileSetDownloadDir (...args: unknown[]): unknown; // 2 arg
|
||||
setFileSetDownloadDir (arg1: unknown, arg2: unknown): unknown; // 2 arg
|
||||
|
||||
getFileSetDownloadDir (...args: unknown[]): unknown; // 1 arg
|
||||
getFileSetDownloadDir (arg: unknown): unknown; // 1 arg
|
||||
|
||||
setFlashTransferDir (...args: unknown[]): unknown; // 2 arg
|
||||
setFlashTransferDir (arg1: unknown, arg2: unknown): unknown; // 2 arg
|
||||
|
||||
addFileSetDownloadListener (...args: unknown[]): unknown; // 1 arg
|
||||
addFileSetDownloadListener (listener: unknown): unknown; // 1 arg
|
||||
|
||||
removeFileSetDownloadListener (...args: unknown[]): unknown; // 1 arg
|
||||
removeFileSetDownloadListener (listenerId: unknown): unknown; // 1 arg
|
||||
|
||||
/**
|
||||
* 开始下载file set的函数 同开始上传
|
||||
@@ -154,13 +154,13 @@ export interface NodeIKernelFlashTransferService {
|
||||
extraInfo: 0;
|
||||
}>; // 2 arg
|
||||
|
||||
startFileListDownLoad (...args: unknown[]): unknown; // 4 arg // 大概率是选择set里面的部分文件进行下载,没必要,不想写
|
||||
startFileListDownLoad (arg1: string, arg2: number, arg3: Array<unknown>[], arg4: unknown): unknown; // 4 arg // 大概率是选择set里面的部分文件进行下载,没必要,不想写
|
||||
|
||||
pauseFileListDownLoad (...args: unknown[]): unknown; // 2 arg
|
||||
pauseFileListDownLoad (arg1: unknown, arg2: unknown): unknown; // 2 arg
|
||||
|
||||
resumeFileListDownLoad (...args: unknown[]): unknown; // 2 arg
|
||||
resumeFileListDownLoad (arg1: unknown, arg2: unknown): unknown; // 2 arg
|
||||
|
||||
stopFileListDownLoad (...args: unknown[]): unknown; // 2 arg
|
||||
stopFileListDownLoad (arg1: unknown, arg2: unknown): unknown; // 2 arg
|
||||
|
||||
startThumbnailListDownload (fileSetId: string): Promise<GeneralCallResult>; // 1 arg // 缩略图下载
|
||||
|
||||
@@ -174,31 +174,31 @@ export interface NodeIKernelFlashTransferService {
|
||||
expireTimestampSeconds: string;
|
||||
}>; // 1 arg
|
||||
|
||||
startFileListDownLoadBySessionId (...args: unknown[]): unknown; // 2 arg
|
||||
startFileListDownLoadBySessionId (arg1: unknown, arg2: unknown): unknown; // 2 arg
|
||||
|
||||
addFileSetSimpleStatusListener (...args: unknown[]): unknown; // 2 arg
|
||||
addFileSetSimpleStatusListener (arg1: unknown, arg2: unknown): unknown; // 2 arg
|
||||
|
||||
addFileSetSimpleStatusMonitoring (...args: unknown[]): unknown; // 2 arg
|
||||
addFileSetSimpleStatusMonitoring (arg1: unknown, arg2: unknown): unknown; // 2 arg
|
||||
|
||||
removeFileSetSimpleStatusMonitoring (...args: unknown[]): unknown; // 2 arg
|
||||
removeFileSetSimpleStatusMonitoring (arg1: unknown, arg2: unknown): unknown; // 2 arg
|
||||
|
||||
removeFileSetSimpleStatusListener (...args: unknown[]): unknown; // 1 arg
|
||||
removeFileSetSimpleStatusListener (arg: unknown): unknown; // 1 arg
|
||||
|
||||
addDesktopFileSetSimpleStatusListener (...args: unknown[]): unknown; // 1 arg
|
||||
addDesktopFileSetSimpleStatusListener (arg: unknown): unknown; // 1 arg
|
||||
|
||||
addDesktopFileSetSimpleStatusMonitoring (...args: unknown[]): unknown; // 1 arg
|
||||
addDesktopFileSetSimpleStatusMonitoring (arg: unknown): unknown; // 1 arg
|
||||
|
||||
removeDesktopFileSetSimpleStatusMonitoring (...args: unknown[]): unknown; // 1 arg
|
||||
removeDesktopFileSetSimpleStatusMonitoring (arg: unknown): unknown; // 1 arg
|
||||
|
||||
removeDesktopFileSetSimpleStatusListener (...args: unknown[]): unknown; // 1 arg
|
||||
removeDesktopFileSetSimpleStatusListener (arg: unknown): unknown; // 1 arg
|
||||
|
||||
addFileSetSimpleUploadInfoListener (...args: unknown[]): unknown; // 1 arg
|
||||
addFileSetSimpleUploadInfoListener (arg: unknown): unknown; // 1 arg
|
||||
|
||||
addFileSetSimpleUploadInfoMonitoring (...args: unknown[]): unknown; // 1 arg
|
||||
addFileSetSimpleUploadInfoMonitoring (arg: unknown): unknown; // 1 arg
|
||||
|
||||
removeFileSetSimpleUploadInfoMonitoring (...args: unknown[]): unknown; // 1 arg
|
||||
removeFileSetSimpleUploadInfoMonitoring (arg: unknown): unknown; // 1 arg
|
||||
|
||||
removeFileSetSimpleUploadInfoListener (...args: unknown[]): unknown; // 1 arg
|
||||
removeFileSetSimpleUploadInfoListener (arg: unknown): unknown; // 1 arg
|
||||
/**
|
||||
* 发送闪传消息
|
||||
* @param sendArgs
|
||||
@@ -211,9 +211,9 @@ export interface NodeIKernelFlashTransferService {
|
||||
};
|
||||
}>; // 1 arg 估计是file set id
|
||||
|
||||
addFlashTransferTaskInfoListener (...args: unknown[]): unknown; // 1 arg
|
||||
addFlashTransferTaskInfoListener (listener: unknown): unknown; // 1 arg
|
||||
|
||||
removeFlashTransferTaskInfoListener (...args: unknown[]): unknown; // 1 arg
|
||||
removeFlashTransferTaskInfoListener (listenerId: unknown): unknown; // 1 arg
|
||||
|
||||
retrieveLocalLastFailedSetTasksInfo (): unknown; // 0 arg
|
||||
|
||||
@@ -227,77 +227,77 @@ export interface NodeIKernelFlashTransferService {
|
||||
};
|
||||
}>; // 1 arg
|
||||
|
||||
getLocalFileListByStatuses (...args: unknown[]): unknown; // 1 arg
|
||||
getLocalFileListByStatuses (arg: unknown): unknown; // 1 arg
|
||||
|
||||
addTransferStateListener (...args: unknown[]): unknown; // 1 arg
|
||||
addTransferStateListener (listener: unknown): unknown; // 1 arg
|
||||
|
||||
removeTransferStateListener (...args: unknown[]): unknown; // 1 arg
|
||||
removeTransferStateListener (listenerId: unknown): unknown; // 1 arg
|
||||
|
||||
getFileSetFirstClusteringList (...args: unknown[]): unknown; // 3 arg
|
||||
getFileSetFirstClusteringList (arg1: number, arg2: string, arg3: number): unknown; // 3 arg
|
||||
|
||||
getFileSetClusteringList (...args: unknown[]): unknown; // 1 arg
|
||||
getFileSetClusteringList (arg: unknown): unknown; // 1 arg
|
||||
|
||||
addFileSetClusteringListListener (...args: unknown[]): unknown; // 1 arg
|
||||
addFileSetClusteringListListener (listener: unknown): unknown; // 1 arg
|
||||
|
||||
removeFileSetClusteringListListener (...args: unknown[]): unknown; // 1 arg
|
||||
removeFileSetClusteringListListener (listenerId: unknown): unknown; // 1 arg
|
||||
|
||||
getFileSetClusteringDetail (...args: unknown[]): unknown; // 1 arg
|
||||
getFileSetClusteringDetail (arg: unknown): unknown; // 1 arg
|
||||
|
||||
doAIOFlashTransferBubbleActionWithStatus (...args: unknown[]): unknown; // 4 arg
|
||||
doAIOFlashTransferBubbleActionWithStatus (arg1: string, arg2: number, arg3: number, arg4: unknown): unknown; // 4 arg
|
||||
|
||||
getFilesTransferProgress (...args: unknown[]): unknown; // 1 arg
|
||||
getFilesTransferProgress (arg: unknown): unknown; // 1 arg
|
||||
|
||||
pollFilesTransferProgress (...args: unknown[]): unknown; // 1 arg
|
||||
pollFilesTransferProgress (arg: unknown): unknown; // 1 arg
|
||||
|
||||
cancelPollFilesTransferProgress (...args: unknown[]): unknown; // 1 arg
|
||||
cancelPollFilesTransferProgress (arg: unknown): unknown; // 1 arg
|
||||
|
||||
checkDownloadStatusBeforeLocalFileOper (...args: unknown[]): unknown; // 3 arg
|
||||
checkDownloadStatusBeforeLocalFileOper (arg1: number, arg2: string, arg3: string): unknown; // 3 arg
|
||||
|
||||
getCompressedFileFolder (...args: unknown[]): unknown; // 1 arg
|
||||
getCompressedFileFolder (arg: unknown): unknown; // 1 arg
|
||||
|
||||
addFolderListener (...args: unknown[]): unknown; // 1 arg
|
||||
addFolderListener (listener: unknown): unknown; // 1 arg
|
||||
|
||||
removeFolderListener (...args: unknown[]): unknown;
|
||||
removeFolderListener (listenerId: unknown): unknown;
|
||||
|
||||
addCompressedFileListener (...args: unknown[]): unknown;
|
||||
addCompressedFileListener (listener: unknown): unknown;
|
||||
|
||||
removeCompressedFileListener (...args: unknown[]): unknown;
|
||||
removeCompressedFileListener (listenerId: unknown): unknown;
|
||||
|
||||
getFileCategoryList (...args: unknown[]): unknown;
|
||||
getFileCategoryList (arg: unknown): unknown;
|
||||
|
||||
addDeviceStatusListener (...args: unknown[]): unknown;
|
||||
addDeviceStatusListener (listener: unknown): unknown;
|
||||
|
||||
removeDeviceStatusListener (...args: unknown[]): unknown;
|
||||
removeDeviceStatusListener (listenerId: unknown): unknown;
|
||||
|
||||
checkDeviceStatus (...args: unknown[]): unknown;
|
||||
checkDeviceStatus (arg: unknown): unknown;
|
||||
|
||||
pauseAllTasks (...args: unknown[]): unknown; // 2 arg
|
||||
pauseAllTasks (arg1: number, arg2: number): unknown; // 2 arg
|
||||
|
||||
resumePausedTasksAfterDeviceStatus (...args: unknown[]): unknown;
|
||||
resumePausedTasksAfterDeviceStatus (arg: unknown): unknown;
|
||||
|
||||
onSystemGoingToSleep (...args: unknown[]): unknown;
|
||||
onSystemGoingToSleep (arg: unknown): unknown;
|
||||
|
||||
onSystemWokeUp (...args: unknown[]): unknown;
|
||||
onSystemWokeUp (arg: unknown): unknown;
|
||||
|
||||
getFileMetas (...args: unknown[]): unknown;
|
||||
getFileMetas (arg: unknown): unknown;
|
||||
|
||||
addDownloadCntStatisticsListener (...args: unknown[]): unknown;
|
||||
addDownloadCntStatisticsListener (listener: unknown): unknown;
|
||||
|
||||
removeDownloadCntStatisticsListener (...args: unknown[]): unknown;
|
||||
removeDownloadCntStatisticsListener (listenerId: unknown): unknown;
|
||||
|
||||
detectPrivacyInfoInPaths (...args: unknown[]): unknown;
|
||||
detectPrivacyInfoInPaths (arg: unknown): unknown;
|
||||
|
||||
getFileThumbnailUrl (...args: unknown[]): unknown;
|
||||
getFileThumbnailUrl (arg: unknown): unknown;
|
||||
|
||||
handleDownloadFinishAfterSaveToAlbum (...args: unknown[]): unknown;
|
||||
handleDownloadFinishAfterSaveToAlbum (arg: unknown): unknown;
|
||||
|
||||
checkBatchFilesDownloadStatus (...args: unknown[]): unknown;
|
||||
checkBatchFilesDownloadStatus (arg: unknown): unknown;
|
||||
|
||||
onCheckAlbumStorageStatusResult (...args: unknown[]): unknown;
|
||||
onCheckAlbumStorageStatusResult (arg: unknown): unknown;
|
||||
|
||||
addFileAlbumStorageListener (...args: unknown[]): unknown;
|
||||
addFileAlbumStorageListener (listener: unknown): unknown;
|
||||
|
||||
removeFileAlbumStorageListener (...args: unknown[]): unknown;
|
||||
removeFileAlbumStorageListener (listenerId: unknown): unknown;
|
||||
|
||||
refreshFolderStatus (...args: unknown[]): unknown;
|
||||
refreshFolderStatus (arg: unknown): unknown;
|
||||
}
|
||||
|
||||
@@ -16,29 +16,29 @@ import { GeneralCallResult } from '@/napcat-core/services/common';
|
||||
|
||||
export interface NodeIKernelGroupService {
|
||||
|
||||
modifyGroupExtInfoV2(groupExtInfo: GroupExtInfo, groupExtFilter: GroupExtFilter): Promise<GeneralCallResult &
|
||||
{
|
||||
result: {
|
||||
groupCode: string,
|
||||
result: number
|
||||
}
|
||||
}>;
|
||||
modifyGroupExtInfoV2 (groupExtInfo: GroupExtInfo, groupExtFilter: GroupExtFilter): Promise<GeneralCallResult &
|
||||
{
|
||||
result: {
|
||||
groupCode: string,
|
||||
result: number;
|
||||
};
|
||||
}>;
|
||||
|
||||
// --->
|
||||
// 待启用 For Next Version 3.2.0
|
||||
// isTroopMember ? 0 : 111
|
||||
getGroupMemberMaxNum(groupCode: string, serviceType: number): Promise<unknown>;
|
||||
getGroupMemberMaxNum (groupCode: string, serviceType: number): Promise<unknown>;
|
||||
|
||||
getAllGroupPrivilegeFlag(troopUinList: string[], serviceType: number): Promise<unknown>;
|
||||
getAllGroupPrivilegeFlag (troopUinList: string[], serviceType: number): Promise<unknown>;
|
||||
// <---
|
||||
getGroupExt0xEF0Info(enableGroupCodes: string[], bannedGroupCodes: string[], filter: GroupExt0xEF0InfoFilter, forceFetch: boolean):
|
||||
Promise<GeneralCallResult & { result: { groupExtInfos: Map<string, unknown> } }>;
|
||||
getGroupExt0xEF0Info (enableGroupCodes: string[], bannedGroupCodes: string[], filter: GroupExt0xEF0InfoFilter, forceFetch: boolean):
|
||||
Promise<GeneralCallResult & { result: { groupExtInfos: Map<string, unknown>; }; }>;
|
||||
|
||||
kickMemberV2(param: KickMemberV2Req): Promise<GeneralCallResult>;
|
||||
kickMemberV2 (param: KickMemberV2Req): Promise<GeneralCallResult>;
|
||||
|
||||
quitGroupV2(param: { groupCode: string; needDeleteLocalMsg: boolean; }): Promise<GeneralCallResult>;
|
||||
quitGroupV2 (param: { groupCode: string; needDeleteLocalMsg: boolean; }): Promise<GeneralCallResult>;
|
||||
|
||||
getMemberCommonInfo(Req: {
|
||||
getMemberCommonInfo (Req: {
|
||||
groupCode: string,
|
||||
startUin: string,
|
||||
identifyFlag: string,
|
||||
@@ -54,39 +54,39 @@ export interface NodeIKernelGroupService {
|
||||
memberNum: number,
|
||||
filterMethod: string,
|
||||
onlineFlag: string,
|
||||
realSpecialTitleFlag: number
|
||||
realSpecialTitleFlag: number;
|
||||
}): Promise<unknown>;
|
||||
|
||||
getGroupMemberLevelInfo(groupCode: string): Promise<unknown>;
|
||||
getGroupMemberLevelInfo (groupCode: string): Promise<unknown>;
|
||||
|
||||
getGroupInfoForJoinGroup(groupCode: string, needPrivilegeFlag: boolean, serviceType: number): Promise<unknown>;
|
||||
getGroupInfoForJoinGroup (groupCode: string, needPrivilegeFlag: boolean, serviceType: number): Promise<unknown>;
|
||||
|
||||
getGroupHonorList(req: { groupCodes: Array<string> }): Promise<unknown>;
|
||||
getGroupHonorList (req: { groupCodes: Array<string>; }): Promise<unknown>;
|
||||
|
||||
getUinByUids(uins: string[]): Promise<{
|
||||
getUinByUids (uins: string[]): Promise<{
|
||||
errCode: number,
|
||||
errMsg: string,
|
||||
uins: Map<string, string>
|
||||
uins: Map<string, string>;
|
||||
}>;
|
||||
|
||||
getUidByUins(uins: string[]): Promise<{
|
||||
getUidByUins (uins: string[]): Promise<{
|
||||
errCode: number,
|
||||
errMsg: string,
|
||||
uids: Map<string, string>
|
||||
uids: Map<string, string>;
|
||||
}>;
|
||||
|
||||
checkGroupMemberCache(arrayList: Array<string>): Promise<unknown>;
|
||||
checkGroupMemberCache (arrayList: Array<string>): Promise<unknown>;
|
||||
|
||||
getGroupLatestEssenceList(groupCode: string): Promise<unknown>;
|
||||
getGroupLatestEssenceList (groupCode: string): Promise<unknown>;
|
||||
|
||||
shareDigest(Req: {
|
||||
shareDigest (Req: {
|
||||
appId: string,
|
||||
appType: number,
|
||||
msgStyle: number,
|
||||
recvUin: string,
|
||||
sendType: number,
|
||||
clientInfo: {
|
||||
platform: number
|
||||
platform: number;
|
||||
},
|
||||
richMsg: {
|
||||
usingArk: boolean,
|
||||
@@ -94,122 +94,122 @@ export interface NodeIKernelGroupService {
|
||||
summary: string,
|
||||
url: string,
|
||||
pictureUrl: string,
|
||||
brief: string
|
||||
}
|
||||
brief: string;
|
||||
};
|
||||
}): Promise<unknown>;
|
||||
|
||||
isEssenceMsg(req: { groupCode: string, msgRandom: number, msgSeq: number }): Promise<unknown>;
|
||||
isEssenceMsg (req: { groupCode: string, msgRandom: number, msgSeq: number; }): Promise<unknown>;
|
||||
|
||||
queryCachedEssenceMsg(req: { groupCode: string, msgRandom: number, msgSeq: number }): Promise<{ items: Array<unknown> }>;
|
||||
queryCachedEssenceMsg (req: { groupCode: string, msgRandom: number, msgSeq: number; }): Promise<{ items: Array<unknown>; }>;
|
||||
|
||||
fetchGroupEssenceList(req: {
|
||||
fetchGroupEssenceList (req: {
|
||||
groupCode: string,
|
||||
pageStart: number,
|
||||
pageLimit: number
|
||||
}, Arg: unknown): Promise<unknown>;
|
||||
pageLimit: number;
|
||||
}, Arg: string): Promise<unknown>;
|
||||
|
||||
getAllMemberList(groupCode: string, forceFetch: boolean): Promise<{
|
||||
getAllMemberList (groupCode: string, forceFetch: boolean): Promise<{
|
||||
errCode: number,
|
||||
errMsg: string,
|
||||
result: {
|
||||
ids: Array<{
|
||||
uid: string,
|
||||
index: number// 0
|
||||
index: number;// 0
|
||||
}>,
|
||||
infos: Map<string, GroupMember>,
|
||||
finish: true,
|
||||
hasRobot: false
|
||||
}
|
||||
hasRobot: false;
|
||||
};
|
||||
}>;
|
||||
|
||||
setHeader(uid: string, path: string): Promise<GeneralCallResult>;
|
||||
setHeader (uid: string, path: string): Promise<GeneralCallResult>;
|
||||
|
||||
addKernelGroupListener(listener: NodeIKernelGroupListener): number;
|
||||
addKernelGroupListener (listener: NodeIKernelGroupListener): number;
|
||||
|
||||
removeKernelGroupListener(listenerId: number): void;
|
||||
removeKernelGroupListener (listenerId: number): void;
|
||||
|
||||
createMemberListScene(groupCode: string, scene: string): string;
|
||||
createMemberListScene (groupCode: string, scene: string): string;
|
||||
|
||||
destroyMemberListScene(SceneId: string): void;
|
||||
destroyMemberListScene (SceneId: string): void;
|
||||
|
||||
getNextMemberList(sceneId: string, groupMemberInfoListId: { index: number, uid: string } | undefined, num: number): Promise<{
|
||||
getNextMemberList (sceneId: string, groupMemberInfoListId: { index: number, uid: string; } | undefined, num: number): Promise<{
|
||||
errCode: number,
|
||||
errMsg: string,
|
||||
result: { ids: string[], infos: Map<string, GroupMember>, finish: boolean, hasRobot: boolean }
|
||||
result: { ids: string[], infos: Map<string, GroupMember>, finish: boolean, hasRobot: boolean; };
|
||||
}>;
|
||||
|
||||
getPrevMemberList(): unknown;
|
||||
getPrevMemberList (): unknown;
|
||||
|
||||
monitorMemberList(): unknown;
|
||||
monitorMemberList (): unknown;
|
||||
|
||||
searchMember(sceneId: string, keywords: string[]): unknown;
|
||||
searchMember (sceneId: string, keywords: string[]): unknown;
|
||||
|
||||
getMemberInfo(group_id: string, uids: string[], forceFetch: boolean): Promise<GeneralCallResult>;
|
||||
getMemberInfo (group_id: string, uids: string[], forceFetch: boolean): Promise<GeneralCallResult>;
|
||||
|
||||
kickMember(groupCode: string, memberUids: string[], refuseForever: boolean, kickReason: string): Promise<void>;
|
||||
kickMember (groupCode: string, memberUids: string[], refuseForever: boolean, kickReason: string): Promise<void>;
|
||||
|
||||
modifyMemberRole(groupCode: string, uid: string, role: NTGroupMemberRole): void;
|
||||
modifyMemberRole (groupCode: string, uid: string, role: NTGroupMemberRole): void;
|
||||
|
||||
modifyMemberCardName(groupCode: string, uid: string, cardName: string): void;
|
||||
modifyMemberCardName (groupCode: string, uid: string, cardName: string): void;
|
||||
|
||||
getTransferableMemberInfo(groupCode: string): unknown;// 获取整个群的
|
||||
getTransferableMemberInfo (groupCode: string): unknown;// 获取整个群的
|
||||
|
||||
transferGroup(uid: string): void;
|
||||
transferGroup (uid: string): void;
|
||||
|
||||
getGroupList(force: boolean): Promise<GeneralCallResult>;
|
||||
getGroupList (force: boolean): Promise<GeneralCallResult>;
|
||||
|
||||
getGroupExtList(force: boolean): Promise<GeneralCallResult>;
|
||||
getGroupExtList (force: boolean): Promise<GeneralCallResult>;
|
||||
|
||||
getGroupDetailInfo(groupCode: string, groupInfoSource: GroupInfoSource): Promise<GeneralCallResult>;
|
||||
getGroupDetailInfo (groupCode: string, groupInfoSource: GroupInfoSource): Promise<GeneralCallResult>;
|
||||
|
||||
getMemberExtInfo(param: GroupExtParam): Promise<unknown>;// req
|
||||
getMemberExtInfo (param: GroupExtParam): Promise<unknown>;// req
|
||||
|
||||
getGroupAllInfo(groupId: string, sourceId: number): Promise<unknown>;
|
||||
getGroupAllInfo (groupId: string, sourceId: number): Promise<unknown>;
|
||||
|
||||
getDiscussExistInfo(): unknown;
|
||||
getDiscussExistInfo (): unknown;
|
||||
|
||||
getGroupConfMember(): unknown;
|
||||
getGroupConfMember (): unknown;
|
||||
|
||||
getGroupMsgMask(): unknown;
|
||||
getGroupMsgMask (): unknown;
|
||||
|
||||
getGroupPortrait(): void;
|
||||
getGroupPortrait (): void;
|
||||
|
||||
modifyGroupName(groupCode: string, groupName: string, isNormalMember: boolean): Promise<GeneralCallResult>;
|
||||
modifyGroupName (groupCode: string, groupName: string, isNormalMember: boolean): Promise<GeneralCallResult>;
|
||||
|
||||
modifyGroupRemark(groupCode: string, remark: string): Promise<GeneralCallResult>;
|
||||
modifyGroupRemark (groupCode: string, remark: string): Promise<GeneralCallResult>;
|
||||
|
||||
modifyGroupDetailInfo(groupCode: string, arg: unknown): void;
|
||||
modifyGroupDetailInfo (groupCode: string, arg: unknown): void;
|
||||
|
||||
// 第二个参数在大多数情况为0 设置群成员权限 例如上传群文件权限和群成员付费/加入邀请加入时为8
|
||||
modifyGroupDetailInfoV2(param: GroupDetailInfoV2Param, arg: number): Promise<GeneralCallResult>;
|
||||
modifyGroupDetailInfoV2 (param: GroupDetailInfoV2Param, arg: number): Promise<GeneralCallResult>;
|
||||
|
||||
setGroupMsgMask(groupCode: string, arg: unknown): void;
|
||||
setGroupMsgMask (groupCode: string, arg: unknown): void;
|
||||
|
||||
changeGroupShieldSettingTemp(groupCode: string, arg: unknown): void;
|
||||
changeGroupShieldSettingTemp (groupCode: string, arg: unknown): void;
|
||||
|
||||
inviteToGroup(arg: unknown): void;
|
||||
inviteToGroup (arg: unknown): void;
|
||||
|
||||
inviteMembersToGroup(args: unknown[]): void;
|
||||
inviteMembersToGroup (args: unknown[]): void;
|
||||
|
||||
inviteMembersToGroupWithMsg(args: unknown): void;
|
||||
inviteMembersToGroupWithMsg (args: unknown): void;
|
||||
|
||||
createGroup(arg: unknown): void;
|
||||
createGroup (arg: unknown): void;
|
||||
|
||||
createGroupWithMembers(arg: unknown): void;
|
||||
createGroupWithMembers (arg: unknown): void;
|
||||
|
||||
quitGroup(groupCode: string): void;
|
||||
quitGroup (groupCode: string): void;
|
||||
|
||||
destroyGroup(groupCode: string): void;
|
||||
destroyGroup (groupCode: string): void;
|
||||
|
||||
getSingleScreenNotifies(doubt: boolean, startSeq: string, count: number): Promise<GeneralCallResult>;
|
||||
getSingleScreenNotifies (doubt: boolean, startSeq: string, count: number): Promise<GeneralCallResult>;
|
||||
|
||||
clearGroupNotifies(groupCode: string): void;
|
||||
clearGroupNotifies (groupCode: string): void;
|
||||
|
||||
getGroupNotifiesUnreadCount(doubt: boolean): Promise<GeneralCallResult>;
|
||||
getGroupNotifiesUnreadCount (doubt: boolean): Promise<GeneralCallResult>;
|
||||
|
||||
clearGroupNotifiesUnreadCount(doubt: boolean): void;
|
||||
clearGroupNotifiesUnreadCount (doubt: boolean): void;
|
||||
|
||||
operateSysNotify(
|
||||
operateSysNotify (
|
||||
doubt: boolean,
|
||||
operateMsg: {
|
||||
operateType: NTGroupRequestOperateTypes,
|
||||
@@ -217,80 +217,277 @@ export interface NodeIKernelGroupService {
|
||||
seq: string,
|
||||
type: GroupNotifyMsgType,
|
||||
groupCode: string,
|
||||
postscript: string
|
||||
}
|
||||
postscript: string;
|
||||
};
|
||||
}): Promise<void>;
|
||||
|
||||
setTop(groupCode: string, isTop: boolean): void;
|
||||
setTop (groupCode: string, isTop: boolean): void;
|
||||
|
||||
getGroupBulletin(groupCode: string): unknown;
|
||||
getGroupBulletin (groupCode: string): unknown;
|
||||
|
||||
deleteGroupBulletin(groupCode: string, seq: string, noticeId: string): void;
|
||||
deleteGroupBulletin (groupCode: string, seq: string, noticeId: string): void;
|
||||
|
||||
publishGroupBulletin(groupCode: string, pskey: string, data: unknown): Promise<GeneralCallResult>;
|
||||
publishGroupBulletin (groupCode: string, pskey: string, data: unknown): Promise<GeneralCallResult>;
|
||||
|
||||
publishInstructionForNewcomers(groupCode: string, arg: unknown): void;
|
||||
publishInstructionForNewcomers (groupCode: string, arg: unknown): void;
|
||||
|
||||
uploadGroupBulletinPic(groupCode: string, pskey: string, imagePath: string): Promise<GeneralCallResult & {
|
||||
uploadGroupBulletinPic (groupCode: string, pskey: string, imagePath: string): Promise<GeneralCallResult & {
|
||||
errCode: number;
|
||||
picInfo?: {
|
||||
id: string,
|
||||
width: number,
|
||||
height: number
|
||||
}
|
||||
height: number;
|
||||
};
|
||||
}>;
|
||||
|
||||
downloadGroupBulletinRichMedia(groupCode: string): unknown;
|
||||
downloadGroupBulletinRichMedia (groupCode: string): unknown;
|
||||
|
||||
getGroupBulletinList(groupCode: string): unknown;
|
||||
getGroupBulletinList (groupCode: string): unknown;
|
||||
|
||||
getGroupStatisticInfo(groupCode: string): unknown;
|
||||
getGroupStatisticInfo (groupCode: string): unknown;
|
||||
|
||||
getGroupRemainAtTimes(groupCode: string): Promise<Omit<GeneralCallResult, 'result'> & {
|
||||
getGroupRemainAtTimes (groupCode: string): Promise<Omit<GeneralCallResult, 'result'> & {
|
||||
errCode: number,
|
||||
atInfo: {
|
||||
canAtAll: boolean
|
||||
RemainAtAllCountForUin: number
|
||||
RemainAtAllCountForGroup: number
|
||||
atTimesMsg: string
|
||||
canNotAtAllMsg: ''
|
||||
}
|
||||
canAtAll: boolean;
|
||||
RemainAtAllCountForUin: number;
|
||||
RemainAtAllCountForGroup: number;
|
||||
atTimesMsg: string;
|
||||
canNotAtAllMsg: '';
|
||||
};
|
||||
}>;
|
||||
|
||||
getJoinGroupNoVerifyFlag(groupCode: string): unknown;
|
||||
getJoinGroupNoVerifyFlag (groupCode: string): unknown;
|
||||
|
||||
getGroupArkInviteState(groupCode: string): unknown;
|
||||
getGroupArkInviteState (groupCode: string): unknown;
|
||||
|
||||
reqToJoinGroup(groupCode: string, arg: unknown): void;
|
||||
reqToJoinGroup (groupCode: string, arg: unknown): void;
|
||||
|
||||
setGroupShutUp(groupCode: string, shutUp: boolean): Promise<GeneralCallResult>;
|
||||
setGroupShutUp (groupCode: string, shutUp: boolean): Promise<GeneralCallResult>;
|
||||
|
||||
getGroupShutUpMemberList(groupCode: string): Promise<GeneralCallResult>;
|
||||
getGroupShutUpMemberList (groupCode: string): Promise<GeneralCallResult>;
|
||||
|
||||
setMemberShutUp(groupCode: string, memberTimes: { uid: string, timeStamp: number }[]): Promise<GeneralCallResult>;
|
||||
setMemberShutUp (groupCode: string, memberTimes: { uid: string, timeStamp: number; }[]): Promise<GeneralCallResult>;
|
||||
|
||||
getGroupRecommendContactArkJson(groupCode: string): Promise<GeneralCallResult & { arkJson: string }>;
|
||||
getGroupRecommendContactArkJson (groupCode: string): Promise<GeneralCallResult & { arkJson: string; }>;
|
||||
|
||||
getJoinGroupLink(param: {
|
||||
getJoinGroupLink (param: {
|
||||
groupCode: string,
|
||||
srcId: number, // 73
|
||||
needShortUrl: boolean, // true
|
||||
additionalParam: string// ''
|
||||
}): Promise<GeneralCallResult & { url?: string }>;
|
||||
additionalParam: string;// ''
|
||||
}): Promise<GeneralCallResult & { url?: string; }>;
|
||||
|
||||
modifyGroupExtInfo(groupCode: string, arg: unknown): void;
|
||||
modifyGroupExtInfo (groupCode: string, arg: unknown): void;
|
||||
|
||||
addGroupEssence(param: {
|
||||
groupCode: string
|
||||
addGroupEssence (param: {
|
||||
groupCode: string;
|
||||
msgRandom: number,
|
||||
msgSeq: number
|
||||
msgSeq: number;
|
||||
}): Promise<unknown>;
|
||||
|
||||
removeGroupEssence(param: {
|
||||
groupCode: string
|
||||
removeGroupEssence (param: {
|
||||
groupCode: string;
|
||||
msgRandom: number,
|
||||
msgSeq: number
|
||||
msgSeq: number;
|
||||
}): Promise<unknown>;
|
||||
|
||||
isNull(): boolean;
|
||||
isNull (): boolean;
|
||||
|
||||
// --- Methods from IDA binary analysis ---
|
||||
clearGroupNotifyLocalUnreadCount (groupCode: string, arg: number): unknown;
|
||||
|
||||
getCardAppList (groupCode: string, arg: boolean): unknown;
|
||||
|
||||
getGroupBulletinDetail (arg1: string, arg2: string, arg3: string, arg4: boolean): unknown;
|
||||
|
||||
getGroupBulletinReadUsers (arg1: string, arg2: string, arg3: string, arg4: number, arg5: number, arg6: number): unknown;
|
||||
|
||||
getGroupDetailInfoByFilter (arg1: unknown, arg2: number, arg3: number, arg4: boolean): unknown;
|
||||
|
||||
getGroupDetailInfoForMqq (arg1: string, arg2: number, arg3: number, arg4: boolean): unknown;
|
||||
|
||||
getMemberInfoForMqq (arg1: string, arg2: Array<unknown>[], arg3: boolean): unknown;
|
||||
|
||||
getMemberInfoForMqqV2 (arg1: string, arg2: Array<unknown>[], arg3: boolean, arg4: string): unknown;
|
||||
|
||||
getRecGroups (arg1: string, arg2: unknown, arg3: string): unknown;
|
||||
|
||||
getSingleScreenNotifiesV2 (arg1: boolean, arg2: string, arg3: number, arg4: number): unknown;
|
||||
|
||||
modifyWxNotifyStatus (arg1: string, arg2: number): unknown;
|
||||
|
||||
operateSpecialFocus (arg1: string, arg2: Array<unknown>[], arg3: number): unknown;
|
||||
|
||||
remindGroupBulletinRead (arg1: string, arg2: string, arg3: string): unknown;
|
||||
|
||||
transferGroupV2 (arg1: string, arg2: string, arg3: string): unknown;
|
||||
|
||||
operateSysNotifyV2 (arg1: unknown, arg2: unknown): Promise<unknown>;
|
||||
|
||||
getAllMemberListV2 (groupCode: string, arg: unknown): unknown;
|
||||
|
||||
createGroupV2 (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
modifyGroupExtInfoV2 (groupExtInfo: GroupExtInfo, groupExtFilter: GroupExtFilter): Promise<GeneralCallResult & {
|
||||
result: { groupCode: string, result: number; };
|
||||
}>;
|
||||
|
||||
modifyGroupDetailInfoV2 (param: GroupDetailInfoV2Param, arg: number): Promise<GeneralCallResult>;
|
||||
|
||||
setGroupMsgMaskV2 (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
getGroupSquareRedpointInfo (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
getGroupSquareHomeHead (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
getCapsuleApp (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
getCapsuleAppPro (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
getMemberInfoCache (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
getGroupSecLevelInfo (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
getSubGroupInfo (arg: unknown): unknown;
|
||||
|
||||
getSwitchStatusForEssenceMsg (arg: unknown): unknown;
|
||||
|
||||
getTeamUpDetail (arg: unknown): unknown;
|
||||
|
||||
getTeamUpList (arg: unknown): unknown;
|
||||
|
||||
getTeamUpMembers (arg: unknown): unknown;
|
||||
|
||||
getTeamUpTemplateList (arg: unknown): unknown;
|
||||
|
||||
getTopicPage (arg1: string, arg2: string, arg3: string, arg4: string): unknown;
|
||||
|
||||
getTopicRecall (arg: unknown): unknown;
|
||||
|
||||
getWxNotifyStatus (arg: unknown): unknown;
|
||||
|
||||
getGroupPayToJoinStatus (arg: unknown): unknown;
|
||||
|
||||
getGroupSeqAndJoinTimeForGrayTips (arg: unknown): unknown;
|
||||
|
||||
getGroupTagRecords (arg: unknown): unknown;
|
||||
|
||||
getGroupBindGuilds (arg: unknown): unknown;
|
||||
|
||||
getGroupFlagForThirdApp (arg: unknown): unknown;
|
||||
|
||||
getGroupMsgLimitFreq (arg: unknown): unknown;
|
||||
|
||||
getGroupMedalList (arg: unknown): unknown;
|
||||
|
||||
getGroupDBVersion (arg: unknown): unknown;
|
||||
|
||||
getGroupInviteNoAuthLimitNum (arg: unknown): unknown;
|
||||
|
||||
getAIOBindGuildInfo (arg: unknown): unknown;
|
||||
|
||||
getAppCenter (arg: unknown): unknown;
|
||||
|
||||
getAICommonVoice (arg: unknown): unknown;
|
||||
|
||||
groupBlacklistDelApply (arg: unknown): unknown;
|
||||
|
||||
groupBlacklistGetAllApply (arg: unknown): unknown;
|
||||
|
||||
fetchGroupNotify (arg: unknown): unknown;
|
||||
|
||||
queryJoinGroupCanNoVerify (arg: unknown): unknown;
|
||||
|
||||
halfScreenPullNotice (arg: unknown): unknown;
|
||||
|
||||
halfScreenReportClick (arg: unknown): unknown;
|
||||
|
||||
joinGroup (arg: unknown): unknown;
|
||||
|
||||
listAllAIVoice (arg: unknown): unknown;
|
||||
|
||||
miniAppGetGroupInfo (arg: unknown): unknown;
|
||||
|
||||
postTeamUp (arg: unknown): unknown;
|
||||
|
||||
queryAIOBindGuild (arg: unknown): unknown;
|
||||
|
||||
removeGroupFromGroupList (arg: unknown): unknown;
|
||||
|
||||
saveAIVoice (arg: unknown): unknown;
|
||||
|
||||
setActiveExtGroup (arg: unknown): unknown;
|
||||
|
||||
setAIOBindGuild (arg: unknown): unknown;
|
||||
|
||||
setCapsuleSwitch (arg: unknown): unknown;
|
||||
|
||||
setGroupAppList (arg: unknown): unknown;
|
||||
|
||||
setGroupGeoInfo (arg: unknown): unknown;
|
||||
|
||||
setGroupRelationToGuild (arg: unknown): unknown;
|
||||
|
||||
setRcvJoinVerifyMsg (arg: unknown): unknown;
|
||||
|
||||
teamUpCreateGroup (arg: unknown): unknown;
|
||||
|
||||
teamUpInviteToGroup (arg: unknown): unknown;
|
||||
|
||||
teamUpRequestToJoin (arg: unknown): unknown;
|
||||
|
||||
teamUpSubmitDeadline (arg: unknown): unknown;
|
||||
|
||||
topicFeedback (arg: unknown): unknown;
|
||||
|
||||
topicReport (arg: unknown): unknown;
|
||||
|
||||
shareTopic (arg: unknown): unknown;
|
||||
|
||||
unbindAllGuilds (arg: unknown): unknown;
|
||||
|
||||
updateGroupInfoByMqq (arg: unknown): unknown;
|
||||
|
||||
updateMemberInfoByMqq (arg: unknown): unknown;
|
||||
|
||||
updateTeamUp (arg: unknown): unknown;
|
||||
|
||||
applyTeamUp (arg: unknown): unknown;
|
||||
|
||||
deleteTeamUp (arg: unknown): unknown;
|
||||
|
||||
getFindPageRecommendGroup (arg: unknown): unknown;
|
||||
|
||||
getTransferableMemberInfo (groupCode: string): unknown;
|
||||
|
||||
createGroupProfileShare (arg: unknown): unknown;
|
||||
|
||||
destroyMemberListScene (sceneId: string): void;
|
||||
|
||||
clearGroupSquareRedpointCache (arg: unknown): unknown;
|
||||
|
||||
checkGroupMemberCache (arrayList: Array<string>): Promise<unknown>;
|
||||
|
||||
cleanCapsuleCache (arg: unknown): unknown;
|
||||
|
||||
downloadGroupBulletinRichMedia (groupCode: string): unknown;
|
||||
|
||||
kickMemberV2 (param: KickMemberV2Req): Promise<GeneralCallResult>;
|
||||
|
||||
destroyGroupV2 (arg: unknown): unknown;
|
||||
|
||||
quitGroupV2 (param: { groupCode: string; needDeleteLocalMsg: boolean; }): Promise<GeneralCallResult>;
|
||||
|
||||
inviteToGroupV2 (arg: unknown): unknown;
|
||||
|
||||
getGroupMsgMask (): unknown;
|
||||
|
||||
batchQueryCachedGroupDetailInfo (arg: unknown): unknown;
|
||||
|
||||
getGroupMemberLevelInfo (groupCode: string): Promise<unknown>;
|
||||
|
||||
getIllegalMemberList (arg: unknown): unknown;
|
||||
|
||||
getGroupRecommendContactArkJsonToWechat (arg: unknown): unknown;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
export interface NodeIKernelGroupTabService {
|
||||
addListener (listener: unknown): number;
|
||||
|
||||
removeListener (listenerId: number): void;
|
||||
|
||||
getGroupTab (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
15
packages/napcat-core/services/NodeIKernelHandOffService.ts
Normal file
15
packages/napcat-core/services/NodeIKernelHandOffService.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
export interface NodeIKernelHandOffService {
|
||||
addKernelHandOffListener (listener: unknown): number;
|
||||
|
||||
removeKernelHandOffListener (listenerId: number): void;
|
||||
|
||||
changeHandOffActivities (arg: unknown): unknown;
|
||||
|
||||
deleteRecentHandOffActivities (arg: unknown): unknown;
|
||||
|
||||
getHandOffActivities (arg: unknown): unknown;
|
||||
|
||||
sendCapsulePanelActivities (arg1: string, arg2: unknown): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
export interface NodeIKernelLiteBusinessService {
|
||||
addListener (listener: unknown): number;
|
||||
|
||||
removeListener (listenerId: number): void;
|
||||
|
||||
clearLiteBusiness (arg1: string, arg2: unknown): unknown;
|
||||
|
||||
clickLiteAction (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
exposeLiteAction (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
getLiteBusiness (arg1: string, arg2: unknown): unknown;
|
||||
|
||||
getRevealTofuAuthority (arg: unknown): unknown;
|
||||
|
||||
recentRevealExposure (arg: unknown): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
7
packages/napcat-core/services/NodeIKernelLockService.ts
Normal file
7
packages/napcat-core/services/NodeIKernelLockService.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
export interface NodeIKernelLockService {
|
||||
addKernelLockListener (listener: unknown): number;
|
||||
|
||||
removeKernelLockListener (listenerId: number): void;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
@@ -63,7 +63,9 @@ export interface QuickLoginResult {
|
||||
export interface NodeIKernelLoginService {
|
||||
getMsfStatus: () => number;
|
||||
|
||||
setLoginMiscData (arg0: string, value: string): unknown;
|
||||
setLoginMiscData (key: string, value: string): unknown;
|
||||
|
||||
getLoginMiscData (key: string): Promise<GeneralCallResult & { value: string; }>;
|
||||
|
||||
getMachineGuid (): string;
|
||||
|
||||
@@ -73,14 +75,12 @@ export interface NodeIKernelLoginService {
|
||||
|
||||
addKernelLoginListener (listener: NodeIKernelLoginListener): number;
|
||||
|
||||
removeKernelLoginListener (listener: number): void;
|
||||
removeKernelLoginListener (listenerId: number): void;
|
||||
|
||||
initConfig (config: LoginInitConfig): void;
|
||||
|
||||
getLoginMiscData (data: string): Promise<GeneralCallResult & { value: string; }>;
|
||||
|
||||
getLoginList (): Promise<{
|
||||
result: number, // 0是ok
|
||||
result: number,
|
||||
LocalLoginInfoList: LoginListItem[];
|
||||
}>;
|
||||
|
||||
@@ -89,4 +89,32 @@ export interface NodeIKernelLoginService {
|
||||
passwordLogin (param: PasswordLoginArgType): Promise<QuickLoginResult>;
|
||||
|
||||
getQRCodePicture (): boolean;
|
||||
|
||||
destroy (): unknown;
|
||||
|
||||
cancel (): unknown;
|
||||
|
||||
abortPolling (): unknown;
|
||||
|
||||
startPolling (): unknown;
|
||||
|
||||
deleteLoginInfo (arg: unknown): unknown;
|
||||
|
||||
isHasLoginInfo (uin: string): boolean;
|
||||
|
||||
loadNoLoginUnitedConfig (arg: unknown): unknown;
|
||||
|
||||
loginUnusualDevice (arg: unknown): unknown;
|
||||
|
||||
registerUnitedConfigPushGroupList (groupList: unknown): unknown;
|
||||
|
||||
resetLoginInfo (arg: unknown): unknown;
|
||||
|
||||
setAutoLogin (arg: unknown): unknown;
|
||||
|
||||
setRemerberPwd (remember: boolean): unknown;
|
||||
|
||||
online (): unknown;
|
||||
|
||||
offline (): unknown;
|
||||
}
|
||||
|
||||
@@ -6,6 +6,9 @@ enum ProxyType {
|
||||
}
|
||||
export interface NodeIKernelMSFService {
|
||||
getServerTime (): string;
|
||||
getMsfStatus (): number;
|
||||
online (): unknown;
|
||||
offline (): unknown;
|
||||
setNetworkProxy (param: {
|
||||
userName: string,
|
||||
userPwd: string,
|
||||
@@ -50,4 +53,5 @@ export interface NodeIKernelMSFService {
|
||||
accountType: number,
|
||||
transInfoMap: Map<string, unknown>;
|
||||
}): Promise<Buffer>;
|
||||
onMsfPushForTesting (arg1: unknown, arg2: unknown): unknown;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
export interface NodeIKernelMiniAppService {
|
||||
addKernelMiniAppListener (listener: unknown): number;
|
||||
|
||||
removeKernelMiniAppListener (listenerId: number): void;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
@@ -1,27 +1,27 @@
|
||||
export interface NodeIKernelMsgBackupService {
|
||||
addKernelMsgBackupListener(listener: unknown): number;
|
||||
addKernelMsgBackupListener (listener: unknown): number;
|
||||
|
||||
removeKernelMsgBackupListener(listenerId: number): void;
|
||||
removeKernelMsgBackupListener (listenerId: number): void;
|
||||
|
||||
getMsgBackupLocation(...args: unknown[]): unknown;// needs 0 arguments
|
||||
getMsgBackupLocation (): unknown;// needs 0 arguments
|
||||
|
||||
setMsgBackupLocation(...args: unknown[]): unknown;// needs 1 arguments
|
||||
setMsgBackupLocation (arg: unknown): unknown;// needs 1 arguments
|
||||
|
||||
requestMsgBackup(...args: unknown[]): unknown;// needs 0 arguments
|
||||
requestMsgBackup (): unknown;// needs 0 arguments
|
||||
|
||||
requestMsgRestore(...args: unknown[]): unknown;// needs 1 arguments
|
||||
requestMsgRestore (arg: unknown): unknown;// needs 1 arguments
|
||||
|
||||
requestMsgMigrate(...args: unknown[]): unknown;// needs 1 arguments
|
||||
requestMsgMigrate (arg: unknown): unknown;// needs 1 arguments
|
||||
|
||||
getLocalStorageBackup(...args: unknown[]): unknown;// needs 0 arguments
|
||||
getLocalStorageBackup (): unknown;// needs 0 arguments
|
||||
|
||||
deleteLocalBackup(...args: unknown[]): unknown;// needs 1 arguments
|
||||
deleteLocalBackup (arg: unknown): unknown;// needs 1 arguments
|
||||
|
||||
clearCache(...args: unknown[]): unknown;// needs 0 arguments
|
||||
clearCache (): unknown;// needs 0 arguments
|
||||
|
||||
start(...args: unknown[]): unknown;// needs 1 arguments
|
||||
start (arg: unknown): unknown;// needs 1 arguments
|
||||
|
||||
stop(...args: unknown[]): unknown;// needs 1 arguments
|
||||
stop (arg: unknown): unknown;// needs 1 arguments
|
||||
|
||||
pause(...args: unknown[]): unknown;// needs 2 arguments
|
||||
pause (arg1: unknown, arg2: unknown): unknown;// needs 2 arguments
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { ElementType, MessageElement, Peer, RawMessage, FileElement, SendMessageElement } from '@/napcat-core/types';
|
||||
import { ElementType, MessageElement, Peer, RawMessage, FileElement, SendMessageElement, AvRecordElement, TofuRecordElement } from '@/napcat-core/types';
|
||||
import { NodeIKernelMsgListener } from '@/napcat-core/listeners/NodeIKernelMsgListener';
|
||||
import { GeneralCallResult } from '@/napcat-core/services/common';
|
||||
import { MsgReqType, QueryMsgsParams, TmpChatInfoApi } from '@/napcat-core/types/msg';
|
||||
import { MsgReqType, QueryMsgsParams, TmpChatInfoApi, MsgTypeFilter, MsgIdentity, SgrpStreamParams, GrayTipJsonInfo, ForwardFileInfo, LocalGrayTipInfo, TokenInfo, BackGroundInfo } from '@/napcat-core/types/msg';
|
||||
|
||||
export interface NodeIKernelMsgService {
|
||||
buildMultiForwardMsg (req: { srcMsgIds: Array<string>, srcContact: Peer; }): Promise<GeneralCallResult & { rspInfo: { elements: unknown; }; }>;
|
||||
@@ -10,21 +10,21 @@ export interface NodeIKernelMsgService {
|
||||
|
||||
addKernelMsgListener (nodeIKernelMsgListener: NodeIKernelMsgListener): number;
|
||||
|
||||
sendMsg (msgId: string, peer: Peer, msgElements: SendMessageElement[], map: Map<unknown, unknown>): Promise<GeneralCallResult>;
|
||||
sendMsg (msgId: string, peer: Peer, msgElements: SendMessageElement[], map: Map<number, unknown>): Promise<GeneralCallResult>;
|
||||
|
||||
recallMsg (peer: Peer, msgIds: string[]): Promise<GeneralCallResult>;
|
||||
|
||||
addKernelMsgImportToolListener (arg: unknown): unknown;
|
||||
addKernelMsgImportToolListener (listener: unknown): string;
|
||||
|
||||
removeKernelMsgListener (args: unknown): unknown;
|
||||
removeKernelMsgListener (listenerId: string): void;
|
||||
|
||||
addKernelTempChatSigListener (...args: unknown[]): unknown;
|
||||
addKernelTempChatSigListener (listener: unknown): string;
|
||||
|
||||
removeKernelTempChatSigListener (...args: unknown[]): unknown;
|
||||
removeKernelTempChatSigListener (listenerId: string): void;
|
||||
|
||||
setAutoReplyTextList (AutoReplyText: Array<unknown>, i2: number): unknown;
|
||||
|
||||
getAutoReplyTextList (...args: unknown[]): unknown;
|
||||
getAutoReplyTextList (): unknown;
|
||||
|
||||
getOnLineDev (): void;
|
||||
|
||||
@@ -52,85 +52,85 @@ export interface NodeIKernelMsgService {
|
||||
|
||||
downloadOnlineStatusCommonByUrl (arg0: string, arg1: string): unknown;
|
||||
|
||||
setToken (arg: unknown): unknown;
|
||||
setToken (tokenInfo: TokenInfo): Promise<GeneralCallResult>;
|
||||
|
||||
switchForeGround (): unknown;
|
||||
|
||||
switchBackGround (arg: unknown): unknown;
|
||||
switchBackGround (info: BackGroundInfo): Promise<GeneralCallResult>;
|
||||
|
||||
setTokenForMqq (token: string): unknown;
|
||||
|
||||
switchForeGroundForMqq (...args: unknown[]): unknown;
|
||||
switchForeGroundForMqq (data: string | Uint8Array): Promise<GeneralCallResult>;
|
||||
|
||||
switchBackGroundForMqq (...args: unknown[]): unknown;
|
||||
switchBackGroundForMqq (data: string | Uint8Array): Promise<GeneralCallResult>;
|
||||
|
||||
getMsgSetting (...args: unknown[]): unknown;
|
||||
getMsgSetting (): unknown;
|
||||
|
||||
setMsgSetting (...args: unknown[]): unknown;
|
||||
setMsgSetting (setting: unknown): unknown;
|
||||
|
||||
addSendMsg (...args: unknown[]): unknown;
|
||||
addSendMsg (msgId: string, peer: Peer, msgElements: SendMessageElement[], map: Map<number, unknown>): unknown;
|
||||
|
||||
cancelSendMsg (peer: Peer, msgId: string): Promise<void>;
|
||||
|
||||
switchToOfflineSendMsg (peer: Peer, MsgId: string): unknown;
|
||||
|
||||
reqToOfflineSendMsg (...args: unknown[]): unknown;
|
||||
reqToOfflineSendMsg (peer: Peer, msgId: string): unknown;
|
||||
|
||||
refuseReceiveOnlineFileMsg (peer: Peer, MsgId: string): unknown;
|
||||
|
||||
resendMsg (peer: Peer, msgId: string): Promise<void>;
|
||||
|
||||
recallMsg (...args: unknown[]): unknown;
|
||||
reeditRecallMsg (peer: Peer, msgId: string): unknown;
|
||||
|
||||
reeditRecallMsg (...args: unknown[]): unknown;
|
||||
forwardMsg (msgIds: string[], peer: Peer, dstPeers: Peer[], commentElements: unknown): Promise<GeneralCallResult>;
|
||||
|
||||
forwardMsg (...args: unknown[]): Promise<GeneralCallResult>;
|
||||
forwardMsgWithComment (msgIds: string[], srcContact: Peer, dstContacts: Peer[], commentElements: Array<unknown>, arg5: unknown): unknown;
|
||||
|
||||
forwardMsgWithComment (...args: unknown[]): unknown;
|
||||
forwardSubMsgWithComment (msgIds: string[], subMsgIds: string[], srcContact: Peer, dstContacts: Peer[], commentElements: Array<unknown>, arg6: unknown): unknown;
|
||||
|
||||
forwardSubMsgWithComment (...args: unknown[]): unknown;
|
||||
forwardRichMsgInVist (richMsgInfos: Array<unknown>, dstContacts: Peer[]): unknown;
|
||||
|
||||
forwardRichMsgInVist (...args: unknown[]): unknown;
|
||||
forwardFile (fileInfo: ForwardFileInfo, peer: Peer): unknown;
|
||||
|
||||
forwardFile (...args: unknown[]): unknown;
|
||||
multiForwardMsg (peer: Peer, srcContact: Peer, msgIds: string[]): unknown;
|
||||
|
||||
multiForwardMsg (...args: unknown[]): unknown;
|
||||
multiForwardMsgWithComment (msgInfos: Array<unknown>, srcContact: Peer, dstContact: Peer, commentElements: Array<unknown>, arg5: unknown): unknown;
|
||||
|
||||
multiForwardMsgWithComment (...args: unknown[]): unknown;
|
||||
deleteRecallMsg (peer: Peer, msgId: string): unknown;
|
||||
|
||||
deleteRecallMsg (...args: unknown[]): unknown;
|
||||
deleteRecallMsgForLocal (peer: Peer, msgId: string): unknown;
|
||||
|
||||
deleteRecallMsgForLocal (...args: unknown[]): unknown;
|
||||
addLocalGrayTipMsg (peer: Peer, grayTipInfo: LocalGrayTipInfo, isUnread: boolean): unknown;
|
||||
|
||||
addLocalGrayTipMsg (...args: unknown[]): unknown;
|
||||
addLocalJsonGrayTipMsg (arg1: Peer, arg2: GrayTipJsonInfo, arg3: boolean, arg4: boolean): unknown;
|
||||
|
||||
addLocalJsonGrayTipMsg (...args: unknown[]): unknown;
|
||||
addLocalJsonGrayTipMsgExt (arg1: Peer, arg2: MsgIdentity, arg3: GrayTipJsonInfo, arg4: boolean, arg5: boolean): unknown;
|
||||
|
||||
addLocalJsonGrayTipMsgExt (...args: unknown[]): unknown;
|
||||
IsLocalJsonTipValid (tipType: number): boolean;
|
||||
|
||||
IsLocalJsonTipValid (...args: unknown[]): unknown;
|
||||
addLocalAVRecordMsg (peer: Peer, avRecord: AvRecordElement): unknown;
|
||||
|
||||
addLocalAVRecordMsg (...args: unknown[]): unknown;
|
||||
|
||||
addLocalTofuRecordMsg (...args: unknown[]): unknown;
|
||||
addLocalTofuRecordMsg (peer: Peer, tofuRecord: TofuRecordElement): unknown;
|
||||
|
||||
addLocalRecordMsg (Peer: Peer, msgId: string, ele: MessageElement, attr: Array<unknown> | number, front: boolean): Promise<unknown>;
|
||||
|
||||
addLocalRecordMsgWithExtInfos (peer: Peer, msgId: string, extInfos: unknown): unknown;
|
||||
|
||||
deleteMsg (Peer: Peer, msgIds: Array<string>): Promise<unknown>;
|
||||
|
||||
updateElementExtBufForUI (...args: unknown[]): unknown;
|
||||
updateElementExtBufForUI (arg1: Peer, arg2: string, arg3: string, arg4: string | Uint8Array): unknown;
|
||||
|
||||
updateMsgRecordExtPbBufForUI (...args: unknown[]): unknown;
|
||||
updateMsgRecordExtPbBufForUI (arg1: Peer, arg2: string, arg3: unknown): unknown;
|
||||
|
||||
startMsgSync (...args: unknown[]): unknown;
|
||||
startMsgSync (): unknown;
|
||||
|
||||
startGuildMsgSync (...args: unknown[]): unknown;
|
||||
startGuildMsgSync (): unknown;
|
||||
|
||||
isGuildChannelSync (...args: unknown[]): unknown;
|
||||
isGuildChannelSync (): unknown;
|
||||
|
||||
getMsgUniqueId (UniqueId: string): string;
|
||||
|
||||
isMsgMatched (...args: unknown[]): unknown;
|
||||
isMsgMatched (matchInfo: unknown): unknown;
|
||||
|
||||
getOnlineFileMsgs (peer: Peer): Promise<GeneralCallResult & {
|
||||
msgList: {
|
||||
@@ -147,7 +147,7 @@ export interface NodeIKernelMsgService {
|
||||
}[]; // 一大坨,懒得写
|
||||
}>;
|
||||
|
||||
getAllOnlineFileMsgs (...args: unknown[]): unknown;
|
||||
getAllOnlineFileMsgs (): unknown;
|
||||
|
||||
getLatestDbMsgs (peer: Peer, cnt: number): Promise<GeneralCallResult & {
|
||||
msgList: RawMessage[];
|
||||
@@ -171,7 +171,7 @@ export interface NodeIKernelMsgService {
|
||||
}>;
|
||||
|
||||
// @deprecated
|
||||
getMsgsWithMsgTimeAndClientSeqForC2C (...args: unknown[]): Promise<GeneralCallResult & { msgList: RawMessage[]; }>;
|
||||
getMsgsWithMsgTimeAndClientSeqForC2C (peer: Peer, arg2: string, arg3: string, arg4: number, arg5: boolean, arg6: boolean, arg7: boolean): Promise<GeneralCallResult & { msgList: RawMessage[]; }>;
|
||||
|
||||
getMsgsWithStatus (params: {
|
||||
peer: Peer;
|
||||
@@ -186,6 +186,7 @@ export interface NodeIKernelMsgService {
|
||||
getMsgsBySeqRange (peer: Peer, startSeq: string, endSeq: string): Promise<GeneralCallResult & {
|
||||
msgList: RawMessage[];
|
||||
}>;
|
||||
|
||||
// @deprecated
|
||||
getMsgsBySeqAndCount (peer: Peer, seq: string, count: number, desc: boolean, isReverseOrder: boolean): Promise<GeneralCallResult & {
|
||||
msgList: RawMessage[];
|
||||
@@ -211,19 +212,19 @@ export interface NodeIKernelMsgService {
|
||||
|
||||
getSourceOfReplyMsgByClientSeqAndTime (peer: Peer, clientSeq: string, time: string, replyMsgId: string): Promise<GeneralCallResult & { msgList: RawMessage[]; }>;
|
||||
|
||||
getMsgsByTypeFilter (peer: Peer, msgId: string, cnt: unknown, queryOrder: boolean, typeFilter: {
|
||||
getMsgsByTypeFilter (peer: Peer, msgId: string, cnt: Array<unknown>, queryOrder: boolean, typeFilter: {
|
||||
type: number,
|
||||
subtype: Array<number>;
|
||||
}): Promise<GeneralCallResult & { msgList: RawMessage[]; }>;
|
||||
|
||||
getMsgsByTypeFilters (peer: Peer, msgId: string, cnt: unknown, queryOrder: boolean, typeFilters: Array<{
|
||||
getMsgsByTypeFilters (peer: Peer, msgId: string, cnt: number, queryOrder: boolean, typeFilters: Array<{
|
||||
type: number,
|
||||
subtype: Array<number>;
|
||||
}>): Promise<GeneralCallResult & { msgList: RawMessage[]; }>;
|
||||
|
||||
getMsgWithAbstractByFilterParam (...args: unknown[]): Promise<GeneralCallResult & { msgList: RawMessage[]; }>;
|
||||
getMsgWithAbstractByFilterParam (arg1: Peer, arg2: string, arg3: string, arg4: number, arg5: MsgTypeFilter): Promise<GeneralCallResult & { msgList: RawMessage[]; }>;
|
||||
|
||||
queryMsgsWithFilter (...args: unknown[]): Promise<GeneralCallResult & { msgList: RawMessage[]; }>;
|
||||
queryMsgsWithFilter (msgId: string, msgTime: string, param: QueryMsgsParams): Promise<GeneralCallResult & { msgList: RawMessage[]; }>;
|
||||
|
||||
// queryMsgsWithFilterVer2(MsgId: string, MsgTime: string, param: QueryMsgsParams): Promise<unknown>;
|
||||
|
||||
@@ -235,11 +236,11 @@ export interface NodeIKernelMsgService {
|
||||
msgList: RawMessage[];
|
||||
}>;
|
||||
|
||||
setMsgRichInfoFlag (...args: unknown[]): unknown;
|
||||
setMsgRichInfoFlag (flag: boolean): void;
|
||||
|
||||
queryPicOrVideoMsgs (msgId: string, msgTime: string, megSeq: string, param: QueryMsgsParams): Promise<unknown>;
|
||||
|
||||
queryPicOrVideoMsgsDesktop (...args: unknown[]): unknown;
|
||||
queryPicOrVideoMsgsDesktop (msgId: string, msgTime: string, msgSeq: string, param: QueryMsgsParams): unknown;
|
||||
|
||||
queryEmoticonMsgs (msgId: string, msgTime: string, msgSeq: string, Params: QueryMsgsParams): Promise<unknown>;
|
||||
|
||||
@@ -247,81 +248,81 @@ export interface NodeIKernelMsgService {
|
||||
|
||||
queryMsgsAndAbstractsWithFilter (msgId: string, msgTime: string, megSeq: string, param: QueryMsgsParams): unknown;
|
||||
|
||||
setFocusOnGuild (...args: unknown[]): unknown;
|
||||
setFocusOnGuild (arg: unknown): unknown;
|
||||
|
||||
setFocusSession (...args: unknown[]): unknown;
|
||||
setFocusSession (arg: unknown): unknown;
|
||||
|
||||
enableFilterUnreadInfoNotify (...args: unknown[]): unknown;
|
||||
enableFilterUnreadInfoNotify (arg: unknown): unknown;
|
||||
|
||||
enableFilterMsgAbstractNotify (...args: unknown[]): unknown;
|
||||
enableFilterMsgAbstractNotify (arg: unknown): unknown;
|
||||
|
||||
onScenesChangeForSilenceMode (...args: unknown[]): unknown;
|
||||
onScenesChangeForSilenceMode (arg: unknown): unknown;
|
||||
|
||||
getContactUnreadCnt (...args: unknown[]): unknown;
|
||||
getContactUnreadCnt (peers: Peer[]): unknown;
|
||||
|
||||
getUnreadCntInfo (...args: unknown[]): unknown;
|
||||
getUnreadCntInfo (arg: unknown): unknown;
|
||||
|
||||
getGuildUnreadCntInfo (...args: unknown[]): unknown;
|
||||
getGuildUnreadCntInfo (arg: unknown): unknown;
|
||||
|
||||
getGuildUnreadCntTabInfo (...args: unknown[]): unknown;
|
||||
getGuildUnreadCntTabInfo (arg: unknown): unknown;
|
||||
|
||||
getAllGuildUnreadCntInfo (...args: unknown[]): unknown;
|
||||
getAllGuildUnreadCntInfo (arg: unknown): unknown;
|
||||
|
||||
getAllJoinGuildCnt (...args: unknown[]): unknown;
|
||||
getAllJoinGuildCnt (arg: unknown): unknown;
|
||||
|
||||
getAllDirectSessionUnreadCntInfo (...args: unknown[]): unknown;
|
||||
getAllDirectSessionUnreadCntInfo (arg: unknown): unknown;
|
||||
|
||||
getCategoryUnreadCntInfo (...args: unknown[]): unknown;
|
||||
getCategoryUnreadCntInfo (arg: unknown): unknown;
|
||||
|
||||
getGuildFeedsUnreadCntInfo (...args: unknown[]): unknown;
|
||||
getGuildFeedsUnreadCntInfo (arg: unknown): unknown;
|
||||
|
||||
setUnVisibleChannelCntInfo (...args: unknown[]): unknown;
|
||||
setUnVisibleChannelCntInfo (arg: unknown): unknown;
|
||||
|
||||
setUnVisibleChannelTypeCntInfo (...args: unknown[]): unknown;
|
||||
setUnVisibleChannelTypeCntInfo (arg: unknown): unknown;
|
||||
|
||||
setVisibleGuildCntInfo (...args: unknown[]): unknown;
|
||||
setVisibleGuildCntInfo (arg: unknown): unknown;
|
||||
|
||||
setMsgRead (peer: Peer): Promise<GeneralCallResult>;
|
||||
|
||||
setAllC2CAndGroupMsgRead (): Promise<unknown>;
|
||||
|
||||
setGuildMsgRead (...args: unknown[]): unknown;
|
||||
setGuildMsgRead (arg: unknown): unknown;
|
||||
|
||||
setAllGuildMsgRead (...args: unknown[]): unknown;
|
||||
setAllGuildMsgRead (arg: unknown): unknown;
|
||||
|
||||
setMsgReadAndReport (...args: unknown[]): unknown;
|
||||
setMsgReadAndReport (peer: Peer, msg: RawMessage): unknown;
|
||||
|
||||
setSpecificMsgReadAndReport (...args: unknown[]): unknown;
|
||||
setSpecificMsgReadAndReport (arg1: Peer, arg2: string): unknown;
|
||||
|
||||
setLocalMsgRead (...args: unknown[]): unknown;
|
||||
setLocalMsgRead (peer: Peer): unknown;
|
||||
|
||||
setGroupGuildMsgRead (...args: unknown[]): unknown;
|
||||
setGroupGuildMsgRead (arg: unknown): unknown;
|
||||
|
||||
getGuildGroupTransData (...args: unknown[]): unknown;
|
||||
getGuildGroupTransData (arg: unknown): unknown;
|
||||
|
||||
setGroupGuildBubbleRead (...args: unknown[]): unknown;
|
||||
setGroupGuildBubbleRead (arg: unknown): unknown;
|
||||
|
||||
getGuildGroupBubble (...args: unknown[]): unknown;
|
||||
getGuildGroupBubble (arg: unknown): unknown;
|
||||
|
||||
fetchGroupGuildUnread (...args: unknown[]): unknown;
|
||||
fetchGroupGuildUnread (arg: unknown): unknown;
|
||||
|
||||
setGroupGuildFlag (...args: unknown[]): unknown;
|
||||
setGroupGuildFlag (arg: unknown): unknown;
|
||||
|
||||
setGuildUDCFlag (...args: unknown[]): unknown;
|
||||
setGuildUDCFlag (arg: unknown): unknown;
|
||||
|
||||
setGuildTabUserFlag (...args: unknown[]): unknown;
|
||||
setGuildTabUserFlag (arg: unknown): unknown;
|
||||
|
||||
setBuildMode (flag: number/* 0 1 3 */): unknown;
|
||||
|
||||
setConfigurationServiceData (...args: unknown[]): unknown;
|
||||
setConfigurationServiceData (arg: unknown): unknown;
|
||||
|
||||
setMarkUnreadFlag (...args: unknown[]): unknown;
|
||||
setMarkUnreadFlag (peer: Peer, unread: boolean): unknown;
|
||||
|
||||
getChannelEventFlow (...args: unknown[]): unknown;
|
||||
getChannelEventFlow (arg: unknown): unknown;
|
||||
|
||||
getMsgEventFlow (...args: unknown[]): unknown;
|
||||
getMsgEventFlow (arg: unknown): unknown;
|
||||
|
||||
getRichMediaFilePathForMobileQQSend (...args: unknown[]): unknown;
|
||||
getRichMediaFilePathForMobileQQSend (arg: unknown): unknown;
|
||||
|
||||
getRichMediaFilePathForGuild (arg: {
|
||||
md5HexStr: string,
|
||||
@@ -334,15 +335,15 @@ export interface NodeIKernelMsgService {
|
||||
file_uuid: '';
|
||||
}): string;
|
||||
|
||||
assembleMobileQQRichMediaFilePath (...args: unknown[]): unknown;
|
||||
assembleMobileQQRichMediaFilePath (arg: unknown): unknown;
|
||||
|
||||
getFileThumbSavePathForSend (thumbSize: number, createNeed: boolean): string;
|
||||
|
||||
getFileThumbSavePath (...args: unknown[]): unknown;
|
||||
getFileThumbSavePath (arg1: string, arg2: number, arg3: boolean): unknown;
|
||||
|
||||
translatePtt2Text (msgId: string, peer: Peer, msgElement: MessageElement): unknown;
|
||||
|
||||
setPttPlayedState (...args: unknown[]): unknown;
|
||||
setPttPlayedState (arg1: string, arg2: Peer, arg3: string): unknown;
|
||||
|
||||
fetchFavEmojiList (str: string, num: number, backward: boolean, forceRefresh: boolean): Promise<GeneralCallResult & {
|
||||
emojiInfoList: Array<{
|
||||
@@ -368,49 +369,49 @@ export interface NodeIKernelMsgService {
|
||||
}>;
|
||||
}>;
|
||||
|
||||
addFavEmoji (...args: unknown[]): unknown;
|
||||
addFavEmoji (arg: unknown): unknown;
|
||||
|
||||
fetchMarketEmoticonList (...args: unknown[]): unknown;
|
||||
fetchMarketEmoticonList (arg1: number, arg2: number): unknown;
|
||||
|
||||
fetchMarketEmoticonShowImage (...args: unknown[]): unknown;
|
||||
fetchMarketEmoticonShowImage (arg: unknown): unknown;
|
||||
|
||||
fetchMarketEmoticonAioImage (...args: unknown[]): unknown;
|
||||
fetchMarketEmoticonAioImage (arg: unknown): unknown;
|
||||
|
||||
fetchMarketEmotionJsonFile (...args: unknown[]): unknown;
|
||||
fetchMarketEmotionJsonFile (arg: unknown): unknown;
|
||||
|
||||
getMarketEmoticonPath (...args: unknown[]): unknown;
|
||||
getMarketEmoticonPath (arg1: number, arg2: Array<unknown>[], arg3: number): unknown;
|
||||
|
||||
getMarketEmoticonPathBySync (...args: unknown[]): unknown;
|
||||
getMarketEmoticonPathBySync (arg1: number, arg2: Array<unknown>[], arg3: number): unknown;
|
||||
|
||||
fetchMarketEmoticonFaceImages (...args: unknown[]): unknown;
|
||||
fetchMarketEmoticonFaceImages (arg: unknown): unknown;
|
||||
|
||||
fetchMarketEmoticonAuthDetail (...args: unknown[]): unknown;
|
||||
fetchMarketEmoticonAuthDetail (arg: unknown): unknown;
|
||||
|
||||
getFavMarketEmoticonInfo (...args: unknown[]): unknown;
|
||||
getFavMarketEmoticonInfo (tabId: number, emojiId: string): unknown;
|
||||
|
||||
addRecentUsedFace (...args: unknown[]): unknown;
|
||||
addRecentUsedFace (arg: unknown): unknown;
|
||||
|
||||
getRecentUsedFaceList (...args: unknown[]): unknown;
|
||||
getRecentUsedFaceList (arg: unknown): unknown;
|
||||
|
||||
getMarketEmoticonEncryptKeys (...args: unknown[]): unknown;
|
||||
getMarketEmoticonEncryptKeys (arg1: number, arg2: Array<unknown>[]): unknown;
|
||||
|
||||
downloadEmojiPic (...args: unknown[]): unknown;
|
||||
downloadEmojiPic (arg1: number, arg2: Array<unknown>[], arg3: number, arg4: Map<unknown, unknown>): unknown;
|
||||
|
||||
deleteFavEmoji (...args: unknown[]): unknown;
|
||||
deleteFavEmoji (arg: unknown): unknown;
|
||||
|
||||
modifyFavEmojiDesc (...args: unknown[]): unknown;
|
||||
modifyFavEmojiDesc (arg: unknown): unknown;
|
||||
|
||||
queryFavEmojiByDesc (...args: unknown[]): unknown;
|
||||
queryFavEmojiByDesc (arg: unknown): unknown;
|
||||
|
||||
getHotPicInfoListSearchString (...args: unknown[]): unknown;
|
||||
getHotPicInfoListSearchString (arg1: string, arg2: string, arg3: number, arg4: number, arg5: boolean): unknown;
|
||||
|
||||
getHotPicSearchResult (...args: unknown[]): unknown;
|
||||
getHotPicSearchResult (arg: unknown): unknown;
|
||||
|
||||
getHotPicHotWords (...args: unknown[]): unknown;
|
||||
getHotPicHotWords (arg: unknown): unknown;
|
||||
|
||||
getHotPicJumpInfo (...args: unknown[]): unknown;
|
||||
getHotPicJumpInfo (arg: unknown): unknown;
|
||||
|
||||
getEmojiResourcePath (...args: unknown[]): unknown;
|
||||
getEmojiResourcePath (arg: unknown): unknown;
|
||||
|
||||
JoinDragonGroupEmoji (JoinDragonGroupEmojiReq: {
|
||||
latestMsgSeq: string,
|
||||
@@ -419,17 +420,17 @@ export interface NodeIKernelMsgService {
|
||||
peerContact: Peer;
|
||||
}): Promise<unknown>;
|
||||
|
||||
getMsgAbstracts (...args: unknown[]): unknown;
|
||||
getMsgAbstracts (arg: unknown): unknown;
|
||||
|
||||
getMsgAbstract (...args: unknown[]): unknown;
|
||||
getMsgAbstract (arg1: Peer, arg2: string): unknown;
|
||||
|
||||
getMsgAbstractList (...args: unknown[]): unknown;
|
||||
getMsgAbstractList (arg: unknown): unknown;
|
||||
|
||||
getMsgAbstractListBySeqRange (...args: unknown[]): unknown;
|
||||
getMsgAbstractListBySeqRange (arg: unknown): unknown;
|
||||
|
||||
refreshMsgAbstracts (...args: unknown[]): unknown;
|
||||
refreshMsgAbstracts (arg: unknown): unknown;
|
||||
|
||||
refreshMsgAbstractsByGuildIds (...args: unknown[]): unknown;
|
||||
refreshMsgAbstractsByGuildIds (arg: unknown): unknown;
|
||||
|
||||
getRichMediaElement (arg: {
|
||||
msgId: string,
|
||||
@@ -440,7 +441,7 @@ export interface NodeIKernelMsgService {
|
||||
downloadType: number,
|
||||
}): Promise<any>;
|
||||
|
||||
cancelGetRichMediaElement (...args: unknown[]): unknown;
|
||||
cancelGetRichMediaElement (arg: unknown): unknown;
|
||||
|
||||
refuseGetRichMediaElement (args: {
|
||||
msgId: string,
|
||||
@@ -451,7 +452,7 @@ export interface NodeIKernelMsgService {
|
||||
downSourceType: number, // 1
|
||||
}): Promise<void>;
|
||||
|
||||
switchToOfflineGetRichMediaElement (...args: unknown[]): unknown;
|
||||
switchToOfflineGetRichMediaElement (arg: unknown): unknown;
|
||||
|
||||
downloadRichMedia (args: {
|
||||
fileModelId: string,
|
||||
@@ -473,21 +474,21 @@ export interface NodeIKernelMsgService {
|
||||
guildId: string;
|
||||
}): Promise<unknown>;
|
||||
|
||||
getFirstUnreadCommonMsg (...args: unknown[]): unknown;
|
||||
getFirstUnreadCommonMsg (arg: unknown): unknown;
|
||||
|
||||
getFirstUnreadAtmeMsg (...args: unknown[]): unknown;
|
||||
getFirstUnreadAtmeMsg (peer: Peer): unknown;
|
||||
|
||||
getFirstUnreadAtallMsg (...args: unknown[]): unknown;
|
||||
getFirstUnreadAtallMsg (peer: Peer): unknown;
|
||||
|
||||
getNavigateInfo (...args: unknown[]): unknown;
|
||||
getNavigateInfo (arg: unknown): unknown;
|
||||
|
||||
getChannelFreqLimitInfo (...args: unknown[]): unknown;
|
||||
getChannelFreqLimitInfo (arg: unknown): unknown;
|
||||
|
||||
getRecentUseEmojiList (...args: unknown[]): unknown;
|
||||
getRecentUseEmojiList (): unknown;
|
||||
|
||||
getRecentEmojiList (...args: unknown[]): unknown;
|
||||
getRecentEmojiList (arg: unknown): unknown;
|
||||
|
||||
setMsgEmojiLikes (...args: unknown[]): unknown;
|
||||
setMsgEmojiLikes (peer: Peer, msgSeq: string, emojiId: string, emojiType: string, setOrCancel: boolean): unknown;
|
||||
|
||||
getMsgEmojiLikesList (peer: Peer, msgSeq: string, emojiId: string, emojiType: string, cookie: string, bForward: boolean, number: number): Promise<{
|
||||
result: number,
|
||||
@@ -503,7 +504,7 @@ export interface NodeIKernelMsgService {
|
||||
isFirstPage: boolean;
|
||||
}>;
|
||||
|
||||
setMsgEmojiLikesForRole (...args: unknown[]): unknown;
|
||||
setMsgEmojiLikesForRole (arg1: Peer, arg2: string, arg3: string, arg4: string, arg5: string, arg6: string, arg7: boolean, arg8: boolean, arg9: SgrpStreamParams): unknown;
|
||||
|
||||
clickInlineKeyboardButton (params: {
|
||||
guildId?: string,
|
||||
@@ -516,7 +517,7 @@ export interface NodeIKernelMsgService {
|
||||
chatType: number; // 1私聊 2群
|
||||
}): Promise<GeneralCallResult & { status: number, promptText: string, promptType: number, promptIcon: number; }>;
|
||||
|
||||
setCurOnScreenMsg (...args: unknown[]): unknown;
|
||||
setCurOnScreenMsg (arg: unknown): unknown;
|
||||
|
||||
setCurOnScreenMsgForMsgEvent (peer: Peer, msgRegList: Map<string, Uint8Array>): void;
|
||||
|
||||
@@ -524,91 +525,91 @@ export interface NodeIKernelMsgService {
|
||||
|
||||
setMiscData (key: string, value: string): unknown;
|
||||
|
||||
getBookmarkData (...args: unknown[]): unknown;
|
||||
getBookmarkData (key: string): unknown;
|
||||
|
||||
setBookmarkData (...args: unknown[]): unknown;
|
||||
setBookmarkData (key: string, value: string): unknown;
|
||||
|
||||
sendShowInputStatusReq (ChatType: number, EventType: number, toUid: string): Promise<unknown>;
|
||||
|
||||
queryCalendar (...args: unknown[]): unknown;
|
||||
queryCalendar (peer: Peer, msgTime: number): unknown;
|
||||
|
||||
queryFirstMsgSeq (peer: Peer, ...args: unknown[]): unknown;
|
||||
queryFirstMsgSeq (peer: Peer, msgTime: number): unknown;
|
||||
|
||||
queryRoamCalendar (...args: unknown[]): unknown;
|
||||
queryRoamCalendar (peer: Peer, msgTime: number): unknown;
|
||||
|
||||
queryFirstRoamMsg (...args: unknown[]): unknown;
|
||||
queryFirstRoamMsg (peer: Peer, msgTime: number): unknown;
|
||||
|
||||
fetchLongMsg (peer: Peer, msgId: string): unknown;
|
||||
|
||||
fetchLongMsgWithCb (...args: unknown[]): unknown;
|
||||
fetchLongMsgWithCb (peer: Peer, msgId: number): unknown;
|
||||
|
||||
setIsStopKernelFetchLongMsg (...args: unknown[]): unknown;
|
||||
setIsStopKernelFetchLongMsg (arg: unknown): unknown;
|
||||
|
||||
insertGameResultAsMsgToDb (...args: unknown[]): unknown;
|
||||
insertGameResultAsMsgToDb (arg: unknown): unknown;
|
||||
|
||||
getMultiMsg (...args: unknown[]): Promise<GeneralCallResult & {
|
||||
getMultiMsg (arg1: Peer, arg2: string, arg3: string): Promise<GeneralCallResult & {
|
||||
msgList: RawMessage[];
|
||||
}>;
|
||||
|
||||
setDraft (...args: unknown[]): unknown;
|
||||
setDraft (arg1: Peer, arg2: Array<unknown>[]): unknown;
|
||||
|
||||
getDraft (...args: unknown[]): unknown;
|
||||
getDraft (peer: Peer): unknown;
|
||||
|
||||
deleteDraft (...args: unknown[]): unknown;
|
||||
deleteDraft (peer: Peer): unknown;
|
||||
|
||||
getRecentHiddenSesionList (...args: unknown[]): unknown;
|
||||
getRecentHiddenSesionList (): unknown;
|
||||
|
||||
setRecentHiddenSession (...args: unknown[]): unknown;
|
||||
setRecentHiddenSession (arg: unknown): unknown;
|
||||
|
||||
delRecentHiddenSession (...args: unknown[]): unknown;
|
||||
delRecentHiddenSession (arg: unknown): unknown;
|
||||
|
||||
getCurHiddenSession (...args: unknown[]): unknown;
|
||||
getCurHiddenSession (): unknown;
|
||||
|
||||
setCurHiddenSession (...args: unknown[]): unknown;
|
||||
setCurHiddenSession (arg: unknown): unknown;
|
||||
|
||||
setReplyDraft (...args: unknown[]): unknown;
|
||||
setReplyDraft (arg1: Peer, arg2: string, arg3: Array<unknown>[]): unknown;
|
||||
|
||||
getReplyDraft (...args: unknown[]): unknown;
|
||||
getReplyDraft (arg1: Peer, arg2: string): unknown;
|
||||
|
||||
deleteReplyDraft (...args: unknown[]): unknown;
|
||||
deleteReplyDraft (arg1: Peer, arg2: string): unknown;
|
||||
|
||||
getFirstUnreadAtMsg (peer: Peer): unknown;
|
||||
|
||||
clearMsgRecords (...args: unknown[]): unknown;
|
||||
clearMsgRecords (peer: Peer): unknown;
|
||||
|
||||
IsExistOldDb (...args: unknown[]): unknown;
|
||||
IsExistOldDb (): unknown;
|
||||
|
||||
canImportOldDbMsg (...args: unknown[]): unknown;
|
||||
canImportOldDbMsg (): unknown;
|
||||
|
||||
setPowerStatus (isPowerOn: boolean): unknown;
|
||||
|
||||
canProcessDataMigration (...args: unknown[]): unknown;
|
||||
canProcessDataMigration (): unknown;
|
||||
|
||||
importOldDbMsg (...args: unknown[]): unknown;
|
||||
importOldDbMsg (): unknown;
|
||||
|
||||
stopImportOldDbMsgAndroid (...args: unknown[]): unknown;
|
||||
stopImportOldDbMsgAndroid (): unknown;
|
||||
|
||||
isMqqDataImportFinished (...args: unknown[]): unknown;
|
||||
isMqqDataImportFinished (): unknown;
|
||||
|
||||
getMqqDataImportTableNames (...args: unknown[]): unknown;
|
||||
getMqqDataImportTableNames (): unknown;
|
||||
|
||||
getCurChatImportStatusByUin (...args: unknown[]): unknown;
|
||||
getCurChatImportStatusByUin (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
getDataImportUserLevel (): unknown;
|
||||
|
||||
getMsgQRCode (...args: unknown[]): unknown;
|
||||
getMsgQRCode (): unknown;
|
||||
|
||||
getGuestMsgAbstracts (...args: unknown[]): unknown;
|
||||
getGuestMsgAbstracts (arg: unknown): unknown;
|
||||
|
||||
getGuestMsgByRange (...args: unknown[]): unknown;
|
||||
getGuestMsgByRange (arg: unknown): unknown;
|
||||
|
||||
getGuestMsgAbstractByRange (...args: unknown[]): unknown;
|
||||
getGuestMsgAbstractByRange (arg: unknown): unknown;
|
||||
|
||||
registerSysMsgNotification (...args: unknown[]): unknown;
|
||||
registerSysMsgNotification (arg1: number, arg2: string, arg3: Array<unknown>[]): unknown;
|
||||
|
||||
unregisterSysMsgNotification (...args: unknown[]): unknown;
|
||||
unregisterSysMsgNotification (arg1: number, arg2: string, arg3: Array<unknown>[]): unknown;
|
||||
|
||||
enterOrExitAio (...args: unknown[]): unknown;
|
||||
enterOrExitAio (arg: unknown): unknown;
|
||||
|
||||
prepareTempChat (args: unknown): unknown;
|
||||
|
||||
@@ -616,66 +617,66 @@ export interface NodeIKernelMsgService {
|
||||
|
||||
getTempChatInfo (ChatType: number, Uid: string): Promise<TmpChatInfoApi>;
|
||||
|
||||
setContactLocalTop (...args: unknown[]): unknown;
|
||||
setContactLocalTop (peer: Peer, isTop: boolean): unknown;
|
||||
|
||||
switchAnonymousChat (...args: unknown[]): unknown;
|
||||
switchAnonymousChat (arg1: string, arg2: boolean): unknown;
|
||||
|
||||
renameAnonyChatNick (...args: unknown[]): unknown;
|
||||
renameAnonyChatNick (arg: unknown): unknown;
|
||||
|
||||
getAnonymousInfo (...args: unknown[]): unknown;
|
||||
getAnonymousInfo (peer: Peer): unknown;
|
||||
|
||||
updateAnonymousInfo (...args: unknown[]): unknown;
|
||||
updateAnonymousInfo (peer: Peer, arg2: unknown): unknown;
|
||||
|
||||
sendSummonMsg (peer: Peer, MsgElement: unknown, MsgAttributeInfo: unknown): Promise<unknown>;// 频道的东西
|
||||
|
||||
outputGuildUnreadInfo (...args: unknown[]): unknown;
|
||||
outputGuildUnreadInfo (arg: unknown): unknown;
|
||||
|
||||
checkMsgWithUrl (...args: unknown[]): unknown;
|
||||
checkMsgWithUrl (arg: unknown): unknown;
|
||||
|
||||
checkTabListStatus (...args: unknown[]): unknown;
|
||||
checkTabListStatus (): unknown;
|
||||
|
||||
getABatchOfContactMsgBoxInfo (...args: unknown[]): unknown;
|
||||
getABatchOfContactMsgBoxInfo (arg: unknown): unknown;
|
||||
|
||||
insertMsgToMsgBox (peer: Peer, msgId: string, arg: 2006): unknown;
|
||||
|
||||
isHitEmojiKeyword (...args: unknown[]): unknown;
|
||||
isHitEmojiKeyword (arg: unknown): unknown;
|
||||
|
||||
getKeyWordRelatedEmoji (...args: unknown[]): unknown;
|
||||
getKeyWordRelatedEmoji (arg: unknown): unknown;
|
||||
|
||||
recordEmoji (...args: unknown[]): unknown;
|
||||
recordEmoji (type: number, emojiList: Array<unknown>): unknown;
|
||||
|
||||
fetchGetHitEmotionsByWord (args: unknown): Promise<unknown>;// 表情推荐?
|
||||
|
||||
deleteAllRoamMsgs (...args: unknown[]): unknown;// 漫游消息?
|
||||
deleteAllRoamMsgs (arg1: number, arg2: string): unknown;// 漫游消息?
|
||||
|
||||
packRedBag (...args: unknown[]): unknown;
|
||||
packRedBag (arg: unknown): unknown;
|
||||
|
||||
grabRedBag (...args: unknown[]): unknown;
|
||||
grabRedBag (arg: unknown): unknown;
|
||||
|
||||
pullDetail (...args: unknown[]): unknown;
|
||||
pullDetail (arg: unknown): unknown;
|
||||
|
||||
selectPasswordRedBag (...args: unknown[]): unknown;
|
||||
selectPasswordRedBag (arg: unknown): unknown;
|
||||
|
||||
pullRedBagPasswordList (...args: unknown[]): unknown;
|
||||
pullRedBagPasswordList (): unknown;
|
||||
|
||||
requestTianshuAdv (...args: unknown[]): unknown;
|
||||
requestTianshuAdv (arg: unknown): unknown;
|
||||
|
||||
tianshuReport (...args: unknown[]): unknown;
|
||||
tianshuReport (arg: unknown): unknown;
|
||||
|
||||
tianshuMultiReport (...args: unknown[]): unknown;
|
||||
tianshuMultiReport (arg: unknown): unknown;
|
||||
|
||||
GetMsgSubType (a0: number, a1: number): unknown;
|
||||
|
||||
setIKernelPublicAccountAdapter (...args: unknown[]): unknown;
|
||||
setIKernelPublicAccountAdapter (arg: unknown): unknown;
|
||||
|
||||
// tempChatGameSession有关
|
||||
createUidFromTinyId (fromTinyId: string, toTinyId: string): string;
|
||||
|
||||
dataMigrationGetDataAvaiableContactList (...args: unknown[]): unknown;
|
||||
dataMigrationGetDataAvaiableContactList (): unknown;
|
||||
|
||||
dataMigrationGetMsgList (...args: unknown[]): unknown;
|
||||
dataMigrationGetMsgList (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
dataMigrationStopOperation (...args: unknown[]): unknown;
|
||||
dataMigrationStopOperation (arg: unknown): unknown;
|
||||
|
||||
dataMigrationImportMsgPbRecord (DataMigrationMsgInfo: Array<{
|
||||
extensionData: string;// "Hex"
|
||||
@@ -696,38 +697,37 @@ export interface NodeIKernelMsgService {
|
||||
msgType: number;
|
||||
}): unknown;
|
||||
|
||||
dataMigrationGetResourceLocalDestinyPath (...args: unknown[]): unknown;
|
||||
dataMigrationGetResourceLocalDestinyPath (arg: unknown): unknown;
|
||||
|
||||
dataMigrationSetIOSPathPrefix (...args: unknown[]): unknown;
|
||||
dataMigrationSetIOSPathPrefix (arg: unknown): unknown;
|
||||
|
||||
getServiceAssistantSwitch (...args: unknown[]): unknown;
|
||||
getServiceAssistantSwitch (arg: unknown): unknown;
|
||||
|
||||
setServiceAssistantSwitch (...args: unknown[]): unknown;
|
||||
setServiceAssistantSwitch (arg: unknown): unknown;
|
||||
|
||||
setSubscribeFolderUsingSmallRedPoint (...args: unknown[]): unknown;
|
||||
setSubscribeFolderUsingSmallRedPoint (arg: unknown): unknown;
|
||||
|
||||
clearGuildNoticeRedPoint (...args: unknown[]): unknown;
|
||||
clearGuildNoticeRedPoint (arg: unknown): unknown;
|
||||
|
||||
clearFeedNoticeRedPoint (...args: unknown[]): unknown;
|
||||
clearFeedNoticeRedPoint (arg: unknown): unknown;
|
||||
|
||||
clearFeedSquareRead (...args: unknown[]): unknown;
|
||||
clearFeedSquareRead (arg: unknown): unknown;
|
||||
|
||||
IsC2CStyleChatType (...args: unknown[]): unknown;
|
||||
IsC2CStyleChatType (chatType: unknown): unknown;
|
||||
|
||||
IsTempChatType (uin: number): unknown;// 猜的
|
||||
|
||||
getGuildInteractiveNotification (...args: unknown[]): unknown;
|
||||
getGuildInteractiveNotification (arg: unknown): unknown;
|
||||
|
||||
getGuildNotificationAbstract (...args: unknown[]): unknown;
|
||||
getGuildNotificationAbstract (arg: unknown): unknown;
|
||||
|
||||
setFocusOnBase (...args: unknown[]): unknown;
|
||||
setFocusOnBase (arg: unknown): unknown;
|
||||
|
||||
queryArkInfo (...args: unknown[]): unknown;
|
||||
queryArkInfo (arg: unknown): unknown;
|
||||
|
||||
queryUserSecQuality (...args: unknown[]): unknown;
|
||||
queryUserSecQuality (): unknown;
|
||||
|
||||
getGuildMsgAbFlag (...args: unknown[]): unknown;
|
||||
getGuildMsgAbFlag (arg: unknown): unknown;
|
||||
|
||||
getGroupMsgStorageTime (): unknown;
|
||||
|
||||
}
|
||||
|
||||
11
packages/napcat-core/services/NodeIKernelNearbyProService.ts
Normal file
11
packages/napcat-core/services/NodeIKernelNearbyProService.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
export interface NodeIKernelNearbyProService {
|
||||
addKernelNearbyProListener (listener: unknown): number;
|
||||
|
||||
removeKernelNearbyProListener (listenerId: number): void;
|
||||
|
||||
fetchNearbyProUserInfo (arg1: unknown[], arg2: unknown, arg3: boolean): unknown;
|
||||
|
||||
setCommonExtInfo (arg: unknown): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
@@ -14,4 +14,118 @@ export interface NodeIKernelNodeMiscService {
|
||||
startNewMiniApp (appfile: string, params: string): unknown;
|
||||
|
||||
getQimei36WithNewSdk (): Promise<string>;
|
||||
|
||||
adaptMiniAppShareInfo (arg: unknown): unknown;
|
||||
|
||||
addBind (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
changeSendKey (arg: unknown): unknown;
|
||||
|
||||
checkIfHaveAvailableSidecarDevice (arg: unknown): unknown;
|
||||
|
||||
clearQzoneUnreadCount (arg: unknown): unknown;
|
||||
|
||||
clearQzoneUnreadCountWithRedDot (arg: unknown): unknown;
|
||||
|
||||
closeWXMiniApp (arg: unknown): unknown;
|
||||
|
||||
delBind (arg: unknown): unknown;
|
||||
|
||||
deleteShareFile (arg: unknown): unknown;
|
||||
|
||||
dispatchWmpfEvent (arg: unknown): unknown;
|
||||
|
||||
doAction (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
doPostAction (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
downloadMiniApp (arg: unknown): unknown;
|
||||
|
||||
downloadMiniGame (arg: unknown): unknown;
|
||||
|
||||
encodeAES (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
flashWindowInTaskbar (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
getAppLaunchInfo (arg: unknown): unknown;
|
||||
|
||||
getCurWindowInfo (arg: unknown): unknown;
|
||||
|
||||
getCurWindowInfoExceptList (arg: unknown): unknown;
|
||||
|
||||
getMiniGameV2EngineConfig (arg: unknown): unknown;
|
||||
|
||||
getMyAppList (arg: unknown): unknown;
|
||||
|
||||
getOpenAuth (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
getQQlevelInfo (arg: unknown): unknown;
|
||||
|
||||
getQzoneUnreadCount (arg: unknown): unknown;
|
||||
|
||||
installApp (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
isAppInstalled (arg: unknown): unknown;
|
||||
|
||||
isOldQQRunning (arg: unknown): unknown;
|
||||
|
||||
judgeTimingRequest (arg: unknown): unknown;
|
||||
|
||||
listenWindowEvents (arg: unknown): unknown;
|
||||
|
||||
loginWXMiniApp (arg: unknown): unknown;
|
||||
|
||||
openFileAndDirSelectDlg (arg: unknown): unknown;
|
||||
|
||||
prefetch (arg: unknown): unknown;
|
||||
|
||||
qqConnectBatchShare (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
qqConnectShare (arg: unknown): unknown;
|
||||
|
||||
qqConnectShareCheck (arg: unknown): unknown;
|
||||
|
||||
registerSchemes (arg: unknown): unknown;
|
||||
|
||||
registerScreenCaptureShortcutWithKeycode (arg: unknown): unknown;
|
||||
|
||||
registerScreenRecordShortcutWithKeycode (arg: unknown): unknown;
|
||||
|
||||
removeQuarantineAttribute (arg: unknown): unknown;
|
||||
|
||||
reportExecuteRequest (arg: unknown): unknown;
|
||||
|
||||
scanQBar (arg: unknown): unknown;
|
||||
|
||||
sendMessageResponseToWX (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
sendRequestToApiGateway (arg: unknown): unknown;
|
||||
|
||||
sendWXCustomMenuClickedAction (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
setBackgroudWindowLevel (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
setMiniGameVersion (arg: unknown): unknown;
|
||||
|
||||
setVulkanEnable (arg: unknown): unknown;
|
||||
|
||||
setWindowLevelNT (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
setWindowsMenuInstallStatus (arg: unknown): unknown;
|
||||
|
||||
setWXCustomMenuConfig (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
startNewApp (arg: unknown): unknown;
|
||||
|
||||
startScreenCapture (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
stopFlashWindow (arg: unknown): unknown;
|
||||
|
||||
unlistenWindowEvents (arg: unknown): unknown;
|
||||
|
||||
unregisterHotkey (arg: unknown): unknown;
|
||||
|
||||
writeBitmapToClipboard (arg: unknown): unknown;
|
||||
|
||||
writeClipboard (arg1: unknown, arg2: unknown): unknown;
|
||||
}
|
||||
|
||||
@@ -1,36 +1,29 @@
|
||||
export interface NodeIKernelOnlineStatusService {
|
||||
|
||||
addKernelOnlineStatusListener(listener: unknown): number;
|
||||
addKernelOnlineStatusListener (listener: unknown): number;
|
||||
|
||||
removeKernelOnlineStatusListener(listenerId: number): void;
|
||||
removeKernelOnlineStatusListener (listenerId: number): void;
|
||||
|
||||
getShouldShowAIOStatusAnimation(arg: unknown): unknown;
|
||||
getShouldShowAIOStatusAnimation (arg: unknown): unknown;
|
||||
|
||||
setReadLikeList(arg: unknown): unknown;
|
||||
setReadLikeList (arg: unknown): unknown;
|
||||
|
||||
getLikeList(arg: unknown): unknown;
|
||||
getLikeList (arg: unknown): Promise<unknown>;
|
||||
|
||||
setLikeStatus(arg: unknown): unknown;
|
||||
setLikeStatus (arg: unknown): Promise<unknown>;
|
||||
|
||||
getAggregationPageEntrance(): unknown;
|
||||
setOnlineStatusLiteBusinessSwitch (enabled: boolean): void;
|
||||
|
||||
didClickAggregationPageEntrance(): unknown;
|
||||
getAggregationPageEntrance (): unknown;
|
||||
|
||||
getAggregationGroupModels(): unknown;
|
||||
didClickAggregationPageEntrance (): unknown;
|
||||
|
||||
// {
|
||||
// "businessType": 1,
|
||||
// "uins": [
|
||||
// "1627126029",
|
||||
// "66600000",
|
||||
// "71702575"
|
||||
// ]
|
||||
// }
|
||||
getAggregationGroupModels (): unknown;
|
||||
|
||||
checkLikeStatus(param: {
|
||||
checkLikeStatus (param: {
|
||||
businessType: number,
|
||||
uins: string[]
|
||||
uins: string[];
|
||||
}): Promise<unknown>;
|
||||
|
||||
isNull(): boolean;
|
||||
isNull (): boolean;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
export interface NodeIKernelPersonalAlbumService {
|
||||
addAlbumPermissions (arg: unknown): unknown;
|
||||
|
||||
addComment (arg: unknown): unknown;
|
||||
|
||||
addReply (arg: unknown): unknown;
|
||||
|
||||
createAlbum (arg: unknown): unknown;
|
||||
|
||||
delBatchPhoto (arg: unknown): unknown;
|
||||
|
||||
deleteAlbum (arg: unknown): unknown;
|
||||
|
||||
deleteComment (arg: unknown): unknown;
|
||||
|
||||
deleteReply (arg: unknown): unknown;
|
||||
|
||||
doLike (arg: unknown): unknown;
|
||||
|
||||
editAlbum (arg: unknown): unknown;
|
||||
|
||||
editTravelAlbumScence (arg: unknown): unknown;
|
||||
|
||||
forwardAlbumToQzone (arg: unknown): unknown;
|
||||
|
||||
getAlbumInviteJoinPage (arg: unknown): unknown;
|
||||
|
||||
getAlbumJoinApprovalPage (arg: unknown): unknown;
|
||||
|
||||
getAlbumList (arg: unknown): unknown;
|
||||
|
||||
getAlbumMemberList (arg: unknown): unknown;
|
||||
|
||||
getCommentList (arg: unknown): unknown;
|
||||
|
||||
getLayerTailpageRecommend (arg: unknown): unknown;
|
||||
|
||||
getPhotoList (arg: unknown): unknown;
|
||||
|
||||
getPhotoListByTimeLine (arg: unknown): unknown;
|
||||
|
||||
getPhotoTabByTimeLine (arg: unknown): unknown;
|
||||
|
||||
getShareInfo (arg: unknown): unknown;
|
||||
|
||||
getVideoTabByTimeLine (arg: unknown): unknown;
|
||||
|
||||
inviteCheckForLoversAlbum (arg: unknown): unknown;
|
||||
|
||||
joinShareAlbum (arg: unknown): unknown;
|
||||
|
||||
moveBatchPhoto (arg: unknown): unknown;
|
||||
|
||||
queryAlbum (arg: unknown): unknown;
|
||||
|
||||
quitSharedAlbum (arg: unknown): unknown;
|
||||
|
||||
removeAlbumMember (arg: unknown): unknown;
|
||||
|
||||
respondToJoinRequest (arg: unknown): unknown;
|
||||
|
||||
sendAlbumInvitation (arg: unknown): unknown;
|
||||
|
||||
setAlbumServiceInfo (arg1: string, arg2: string, arg3: string): unknown;
|
||||
|
||||
setTopAlbum (arg: unknown): unknown;
|
||||
|
||||
unLike (arg: unknown): unknown;
|
||||
|
||||
updateAlbumMember (arg: unknown): unknown;
|
||||
|
||||
verifyAlbumQuestion (arg: unknown): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
@@ -1,37 +1,37 @@
|
||||
import { BuddyProfileLikeReq, GeneralCallResult, NTVoteInfo } from '@/napcat-core/index';
|
||||
|
||||
export interface NodeIKernelProfileLikeService {
|
||||
addKernelProfileLikeListener(listener: unknown): number;
|
||||
addKernelProfileLikeListener (listener: unknown): number;
|
||||
|
||||
removeKernelProfileLikeListener(listenerId: unknown): void;
|
||||
removeKernelProfileLikeListener (listenerId: number): void;
|
||||
|
||||
setBuddyProfileLike(...args: unknown[]): { result: number, errMsg: string, succCounts: number };
|
||||
setBuddyProfileLike (arg: unknown): Promise<{ result: number, errMsg: string, succCounts: number; }>;
|
||||
|
||||
getBuddyProfileLike(req: BuddyProfileLikeReq): Promise<GeneralCallResult & {
|
||||
getBuddyProfileLike (req: BuddyProfileLikeReq): Promise<GeneralCallResult & {
|
||||
info: {
|
||||
userLikeInfos: Array<{
|
||||
uid: string,
|
||||
time: string,
|
||||
favoriteInfo: {
|
||||
userInfos: Array<NTVoteInfo>, // 哪些人点我
|
||||
userInfos: Array<NTVoteInfo>,
|
||||
total_count: number,
|
||||
last_time: number,
|
||||
today_count: number
|
||||
today_count: number;
|
||||
},
|
||||
voteInfo: {
|
||||
total_count: number,
|
||||
new_count: number,
|
||||
new_nearby_count: number,
|
||||
last_visit_time: number,
|
||||
userInfos: Array<NTVoteInfo>, // 点过哪些人
|
||||
}
|
||||
userInfos: Array<NTVoteInfo>;
|
||||
};
|
||||
}>,
|
||||
friendMaxVotes: number,
|
||||
start: number
|
||||
}
|
||||
start: number;
|
||||
};
|
||||
}>;
|
||||
|
||||
getProfileLikeScidResourceInfo(...args: unknown[]): void;
|
||||
getProfileLikeScidResourceInfo (arg: unknown): void;
|
||||
|
||||
isNull(): boolean;
|
||||
isNull (): boolean;
|
||||
}
|
||||
|
||||
@@ -3,80 +3,94 @@ import { BizKey, ModifyProfileParams, NodeIKernelProfileListener, ProfileBizType
|
||||
import { GeneralCallResult } from '@/napcat-core/services/common';
|
||||
|
||||
export interface NodeIKernelProfileService {
|
||||
getOtherFlag(callfrom: string, uids: string[]): Promise<Map<string, unknown>>;
|
||||
getOtherFlag (callfrom: string, uids: string[]): Promise<Map<string, unknown>>;
|
||||
|
||||
getVasInfo(callfrom: string, uids: string[]): Promise<Map<string, unknown>>;
|
||||
getVasInfo (callfrom: string, uids: string[]): Promise<Map<string, unknown>>;
|
||||
|
||||
getRelationFlag(callfrom: string, uids: string[]): Promise<Map<string, unknown>>;
|
||||
getRelationFlag (callfrom: string, uids: string[]): Promise<Map<string, unknown>>;
|
||||
|
||||
getUidByUin(callfrom: string, uin: Array<string>): Map<string, string>;
|
||||
getUidByUin (callfrom: string, uin: Array<string>): Map<string, string>;
|
||||
|
||||
getUinByUid(callfrom: string, uid: Array<string>): Map<string, string>;
|
||||
getUinByUid (callfrom: string, uid: Array<string>): Map<string, string>;
|
||||
|
||||
getCoreAndBaseInfo(callfrom: string, uids: string[]): Promise<Map<string, SimpleInfo>>;
|
||||
getCoreAndBaseInfo (callfrom: string, uids: string[]): Promise<Map<string, SimpleInfo>>;
|
||||
|
||||
fetchUserDetailInfo(trace: string, uids: string[], source: UserDetailSource, bizType: ProfileBizType[]): Promise<GeneralCallResult &
|
||||
{
|
||||
source: UserDetailSource,
|
||||
// uid -> detail
|
||||
detail: Map<string, UserDetailInfoListenerArg>,
|
||||
}
|
||||
>;
|
||||
fetchUserDetailInfo (trace: string, uids: string[], source: UserDetailSource, bizType: ProfileBizType[]): Promise<GeneralCallResult &
|
||||
{
|
||||
source: UserDetailSource,
|
||||
// uid -> detail
|
||||
detail: Map<string, UserDetailInfoListenerArg>,
|
||||
}
|
||||
>;
|
||||
|
||||
addKernelProfileListener(listener: NodeIKernelProfileListener): number;
|
||||
addKernelProfileListener (listener: NodeIKernelProfileListener): number;
|
||||
|
||||
removeKernelProfileListener(listenerId: number): void;
|
||||
removeKernelProfileListener (listenerId: number): void;
|
||||
|
||||
prepareRegionConfig(...args: unknown[]): unknown;
|
||||
prepareRegionConfig (): unknown;
|
||||
|
||||
getLocalStrangerRemark(): Promise<AnyCnameRecord>;
|
||||
getLocalStrangerRemark (): Promise<AnyCnameRecord>;
|
||||
|
||||
enumCountryOptions(): Array<string>;
|
||||
enumCountryOptions (): Array<string>;
|
||||
|
||||
enumProvinceOptions(country: string): Array<string>;
|
||||
enumProvinceOptions (country: string): Array<string>;
|
||||
|
||||
enumCityOptions(country: string, province: string): unknown;
|
||||
enumCityOptions (country: string, province: string): unknown;
|
||||
|
||||
enumAreaOptions(...args: unknown[]): unknown;
|
||||
enumAreaOptions (arg1: string, arg2: string, arg3: string): unknown;
|
||||
|
||||
modifySelfProfile(...args: unknown[]): Promise<unknown>;
|
||||
modifySelfProfile (param: unknown): Promise<unknown>;
|
||||
|
||||
modifyDesktopMiniProfile(param: ModifyProfileParams): Promise<GeneralCallResult>;
|
||||
modifyDesktopMiniProfile (param: ModifyProfileParams): Promise<GeneralCallResult>;
|
||||
|
||||
setNickName(nickName: string): Promise<unknown>;
|
||||
setNickName (nickName: string): Promise<unknown>;
|
||||
|
||||
setLongNick(longNick: string): Promise<unknown>;
|
||||
setLongNick (longNick: string): Promise<unknown>;
|
||||
|
||||
setBirthday(...args: unknown[]): Promise<unknown>;
|
||||
setBirthday (year: number, month: number, day: number): Promise<unknown>;
|
||||
|
||||
setGander(...args: unknown[]): Promise<unknown>;
|
||||
setGander (gender: unknown): Promise<unknown>;
|
||||
|
||||
setHeader(arg: string): Promise<GeneralCallResult>;
|
||||
setHeader (arg: string): Promise<GeneralCallResult>;
|
||||
|
||||
setRecommendImgFlag(...args: unknown[]): Promise<unknown>;
|
||||
setRecommendImgFlag (flag: unknown): Promise<unknown>;
|
||||
|
||||
getUserSimpleInfo(force: boolean, uids: string[]): Promise<unknown>;
|
||||
getUserSimpleInfo (force: boolean, uids: string[]): Promise<unknown>;
|
||||
|
||||
getUserDetailInfo(uid: string): Promise<unknown>;
|
||||
getUserDetailInfo (uid: string): Promise<unknown>;
|
||||
|
||||
getUserDetailInfoWithBizInfo(uid: string, Biz: BizKey[]): Promise<GeneralCallResult>;
|
||||
getUserDetailInfoWithBizInfo (uid: string, Biz: BizKey[]): Promise<GeneralCallResult>;
|
||||
|
||||
getUserDetailInfoByUin(uin: string): Promise<UserDetailInfoByUin>;
|
||||
getUserDetailInfoByUin (uin: string): Promise<UserDetailInfoByUin>;
|
||||
|
||||
getZplanAvatarInfos(args: string[]): Promise<unknown>;
|
||||
getZplanAvatarInfos (args: string[]): Promise<unknown>;
|
||||
|
||||
getStatus(uid: string): Promise<unknown>;
|
||||
getStatus (uid: string): Promise<unknown>;
|
||||
|
||||
startStatusPolling(isForceReset: boolean): Promise<unknown>;
|
||||
startStatusPolling (isForceReset: boolean): Promise<unknown>;
|
||||
|
||||
getSelfStatus(): Promise<unknown>;
|
||||
getSelfStatus (): Promise<unknown>;
|
||||
|
||||
setdisableEmojiShortCuts(...args: unknown[]): unknown;
|
||||
setdisableEmojiShortCuts (arg: unknown): unknown;
|
||||
|
||||
getProfileQzonePicInfo(uid: string, type: number, force: boolean): Promise<unknown>;
|
||||
getProfileQzonePicInfo (uid: string, type: number, force: boolean): Promise<unknown>;
|
||||
|
||||
// UserRemarkServiceImpl::getStrangerRemarkByUid []
|
||||
getCoreInfo(sceneId: string, arg: unknown[]): unknown;
|
||||
getCoreInfo (sceneId: string, arg: unknown[]): unknown;
|
||||
|
||||
isNull(): boolean;
|
||||
isNull (): boolean;
|
||||
|
||||
addKernelProfileListenerForUICache (listener: unknown): number;
|
||||
|
||||
asyncGetCoreInfo (callfrom: string, uids: string[]): unknown;
|
||||
|
||||
getIntimate (uid: string, arg: unknown): unknown;
|
||||
|
||||
getStatusInfo (uid: string, arg: unknown): unknown;
|
||||
|
||||
getStockLocalData (key: string, arg: unknown): unknown;
|
||||
|
||||
updateProfileData (uid: string, data: unknown): unknown;
|
||||
|
||||
updateStockLocalData (key: string, data: unknown): unknown;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
export interface NodeIKernelPublicAccountService {
|
||||
addListener (listener: unknown): number;
|
||||
|
||||
removeListener (listenerId: number): void;
|
||||
|
||||
follow (arg: unknown): unknown;
|
||||
|
||||
queryTemplateInfo (arg: unknown): unknown;
|
||||
|
||||
subscribeTemplate (arg: unknown): unknown;
|
||||
|
||||
unfollow (arg: unknown): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
19
packages/napcat-core/services/NodeIKernelQQPlayService.ts
Normal file
19
packages/napcat-core/services/NodeIKernelQQPlayService.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
export interface NodeIKernelQQPlayService {
|
||||
addKernelQQPlayListener (listener: unknown): number;
|
||||
|
||||
removeKernelQQPlayListener (listenerId: number): void;
|
||||
|
||||
createLnkShortcut (arg1: string, arg2: string, arg3: string, arg4: string): unknown;
|
||||
|
||||
getSystemRegValue (arg1: number, arg2: string, arg3: string): unknown;
|
||||
|
||||
setSystemRegValue (arg1: number, arg2: string, arg3: string, arg4: string): unknown;
|
||||
|
||||
sendMsg2Simulator (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
setForegroundWindow (arg: unknown): unknown;
|
||||
|
||||
startSimulator (arg: unknown): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
21
packages/napcat-core/services/NodeIKernelQiDianService.ts
Normal file
21
packages/napcat-core/services/NodeIKernelQiDianService.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
export interface NodeIKernelQiDianService {
|
||||
addKernelQiDianListener (listener: unknown): number;
|
||||
|
||||
removeKernelQiDianListener (listenerId: number): void;
|
||||
|
||||
requestExtUinForRemoteControl (arg1: string, arg2: string, arg3: number): unknown;
|
||||
|
||||
requestMainUinForRemoteControl (arg: unknown): unknown;
|
||||
|
||||
requestNaviConfig (arg: unknown): unknown;
|
||||
|
||||
requestQidianUidFromUin (arg: unknown): unknown;
|
||||
|
||||
requestWpaCorpInfo (arg: unknown): unknown;
|
||||
|
||||
requestWpaSigT (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
requestWpaUserInfo (arg: unknown): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
13
packages/napcat-core/services/NodeIKernelRDeliveryService.ts
Normal file
13
packages/napcat-core/services/NodeIKernelRDeliveryService.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
export interface NodeIKernelRDeliveryService {
|
||||
addDataChangeListener (listener: unknown): number;
|
||||
|
||||
removeDataChangeListener (listenerId: number): void;
|
||||
|
||||
getRDeliveryDataByKey (arg: unknown): unknown;
|
||||
|
||||
requestBatchRemoteDataByScene (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
requestSingleRemoteDataByKey (arg1: string, arg2: unknown): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
@@ -4,17 +4,19 @@ import { GeneralCallResult } from '@/napcat-core/services/common';
|
||||
import { FSABRecentContactParams } from '@/napcat-core/types/contact';
|
||||
|
||||
export interface NodeIKernelRecentContactService {
|
||||
setGuildDisplayStatus(...args: unknown[]): unknown; // 2 arguments
|
||||
setGuildDisplayStatus (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
setContactListTop(...args: unknown[]): unknown; // 2 arguments
|
||||
setContactListTop (peer: Peer, isTop: boolean): unknown;
|
||||
|
||||
updateRecentContactExtBufForUI(...args: unknown[]): unknown; // 2 arguments
|
||||
updateRecentContactExtBufForUI (peer: Peer, extBuf: unknown): unknown;
|
||||
|
||||
upsertRecentContactManually(...args: unknown[]): unknown; // 1 arguments
|
||||
upsertRecentContactManually (arg: unknown): unknown;
|
||||
|
||||
enterOrExitMsgList(...args: unknown[]): unknown; // 1 arguments
|
||||
manageContactMergeWindow (arg: unknown): unknown;
|
||||
|
||||
getRecentContactListSnapShot(count: number): Promise<GeneralCallResult & {
|
||||
enterOrExitMsgList (arg: unknown): unknown;
|
||||
|
||||
getRecentContactListSnapShot (count: number): Promise<GeneralCallResult & {
|
||||
info: {
|
||||
errCode: number,
|
||||
errMsg: string,
|
||||
@@ -28,56 +30,56 @@ export interface NodeIKernelRecentContactService {
|
||||
peerUin: string,
|
||||
msgTime: string,
|
||||
chatType: ChatType,
|
||||
msgId: string
|
||||
}>
|
||||
}
|
||||
}>; // 1 arguments
|
||||
msgId: string;
|
||||
}>;
|
||||
};
|
||||
}>;
|
||||
|
||||
clearMsgUnreadCount(...args: unknown[]): unknown; // 1 arguments
|
||||
clearMsgUnreadCount (peer: Peer): unknown;
|
||||
|
||||
getRecentContactListSyncLimit(count: number): unknown;
|
||||
getRecentContactListSyncLimit (count: number): unknown;
|
||||
|
||||
jumpToSpecifyRecentContact(...args: unknown[]): unknown; // 1 arguments
|
||||
jumpToSpecifyRecentContact (arg: unknown): unknown;
|
||||
|
||||
fetchAndSubscribeABatchOfRecentContact(params: FSABRecentContactParams): unknown; // 1 arguments
|
||||
fetchAndSubscribeABatchOfRecentContact (params: FSABRecentContactParams): unknown;
|
||||
|
||||
addRecentContact(peer: Peer): unknown;
|
||||
addRecentContact (peer: Peer): unknown;
|
||||
|
||||
deleteRecentContacts(peer: Peer): unknown; // 猜测
|
||||
deleteRecentContacts (peer: Peer): unknown;
|
||||
|
||||
getContacts(peers: Peer[]): Promise<unknown>;
|
||||
getContacts (peers: Peer[]): Promise<unknown>;
|
||||
|
||||
setThirdPartyBusinessInfos(...args: unknown[]): unknown; // 1 arguments
|
||||
setThirdPartyBusinessInfos (arg: unknown): unknown;
|
||||
|
||||
updateGameMsgConfigs(...args: unknown[]): unknown; // 1 arguments
|
||||
updateGameMsgConfigs (arg: unknown): unknown;
|
||||
|
||||
removeKernelRecentContactListener(listenerid: number): unknown; // 1 arguments
|
||||
removeKernelRecentContactListener (listenerId: number): unknown;
|
||||
|
||||
addKernelRecentContactListener(listener: NodeIKernelRecentContactListener): void;
|
||||
addKernelRecentContactListener (listener: NodeIKernelRecentContactListener): void;
|
||||
|
||||
clearRecentContactsByChatType(...args: unknown[]): unknown; // 1 arguments
|
||||
clearRecentContactsByChatType (chatType: ChatType): unknown;
|
||||
|
||||
upInsertModule(...args: unknown[]): unknown; // 1 arguments
|
||||
upInsertModule (arg: unknown): unknown;
|
||||
|
||||
jumpToSpecifyRecentContactVer2(...args: unknown[]): unknown; // 1 arguments
|
||||
jumpToSpecifyRecentContactVer2 (arg: unknown): unknown;
|
||||
|
||||
deleteRecentContactsVer2(...args: unknown[]): unknown; // 1 arguments
|
||||
deleteRecentContactsVer2 (arg: unknown): unknown;
|
||||
|
||||
getRecentContactList(): Promise<unknown>;
|
||||
getRecentContactList (): Promise<unknown>;
|
||||
|
||||
getMsgUnreadCount(): unknown;
|
||||
getMsgUnreadCount (): unknown;
|
||||
|
||||
clearRecentContacts(): unknown;
|
||||
clearRecentContacts (): unknown;
|
||||
|
||||
getServiceAssistantRecentContactInfos(): unknown;
|
||||
getServiceAssistantRecentContactInfos (): unknown;
|
||||
|
||||
getRecentContactInfos(): unknown;
|
||||
getRecentContactInfos (): unknown;
|
||||
|
||||
getUnreadDetailsInfos(): unknown;
|
||||
getUnreadDetailsInfos (): unknown;
|
||||
|
||||
cleanAllModule(): unknown;
|
||||
cleanAllModule (): unknown;
|
||||
|
||||
setAllGameMsgRead(): unknown;
|
||||
setAllGameMsgRead (): unknown;
|
||||
|
||||
getRecentContactListSync(): unknown;
|
||||
getRecentContactListSync (): unknown;
|
||||
}
|
||||
|
||||
17
packages/napcat-core/services/NodeIKernelRemotingService.ts
Normal file
17
packages/napcat-core/services/NodeIKernelRemotingService.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
export interface NodeIKernelRemotingService {
|
||||
addKernelRemotingListener (listener: unknown): number;
|
||||
|
||||
removeKernelRemotingListener (listenerId: number): void;
|
||||
|
||||
accept (arg1: string, arg2: boolean): unknown;
|
||||
|
||||
setPenetrateBuffer (arg1: number, arg2: number, arg3: string): unknown;
|
||||
|
||||
startRemotingClient (arg: unknown): unknown;
|
||||
|
||||
startRemotingInvite (arg: unknown): unknown;
|
||||
|
||||
stopRemoting (arg: unknown): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
@@ -62,7 +62,7 @@ export interface NodeIKernelRichMediaService {
|
||||
// KHAND,
|
||||
// KAUTO
|
||||
// }
|
||||
getVideoPlayUrl(peer: Peer, msgId: string, elemId: string, videoCodecFormat: number, VideoRequestWay: number): Promise<unknown>;
|
||||
getVideoPlayUrl (peer: Peer, msgId: string, elemId: string, videoCodecFormat: number, VideoRequestWay: number): Promise<unknown>;
|
||||
|
||||
// exParams (RMReqExParams)
|
||||
// this.downSourceType = i2;
|
||||
@@ -81,9 +81,9 @@ export interface NodeIKernelRichMediaService {
|
||||
// public static final int KTRIGGERTYPEAUTO = 1;
|
||||
// public static final int KTRIGGERTYPEMANUAL = 0;
|
||||
|
||||
getVideoPlayUrlV2(peer: Peer, msgId: string, elemId: string, videoCodecFormat: number, exParams: {
|
||||
getVideoPlayUrlV2 (peer: Peer, msgId: string, elemId: string, videoCodecFormat: number, exParams: {
|
||||
downSourceType: number,
|
||||
triggerType: number
|
||||
triggerType: number;
|
||||
}): Promise<GeneralCallResult & {
|
||||
urlResult: {
|
||||
v4IpUrl: [],
|
||||
@@ -91,15 +91,15 @@ export interface NodeIKernelRichMediaService {
|
||||
domainUrl: Array<{
|
||||
url: string,
|
||||
isHttps: boolean,
|
||||
httpsDomain: string
|
||||
httpsDomain: string;
|
||||
}>,
|
||||
videoCodecFormat: number
|
||||
}
|
||||
videoCodecFormat: number;
|
||||
};
|
||||
}>;
|
||||
|
||||
getRichMediaFileDir(elementType: number, downType: number, isTemp: boolean): unknown;
|
||||
getRichMediaFileDir (elementType: number, downType: number, isTemp: boolean): unknown;
|
||||
|
||||
getVideoPlayUrlInVisit(arg: {
|
||||
getVideoPlayUrlInVisit (arg: {
|
||||
downloadType: number,
|
||||
thumbSize: number,
|
||||
msgId: string,
|
||||
@@ -111,17 +111,17 @@ export interface NodeIKernelRichMediaService {
|
||||
peerUid: string,
|
||||
guildId: string,
|
||||
ele: MessageElement,
|
||||
useHttps: boolean
|
||||
useHttps: boolean;
|
||||
}): Promise<unknown>;
|
||||
|
||||
isFileExpired(arg: number): unknown;
|
||||
isFileExpired (arg: number): unknown;
|
||||
|
||||
deleteGroupFolder(GroupCode: string, FolderId: string): Promise<GeneralCallResult & {
|
||||
groupFileCommonResult: { retCode: number, retMsg: string, clientWording: string }
|
||||
deleteGroupFolder (GroupCode: string, FolderId: string): Promise<GeneralCallResult & {
|
||||
groupFileCommonResult: { retCode: number, retMsg: string, clientWording: string; };
|
||||
}>;
|
||||
|
||||
// 参数与getVideoPlayUrlInVisit一样
|
||||
downloadRichMediaInVisit(arg: {
|
||||
downloadRichMediaInVisit (arg: {
|
||||
downloadType: number,
|
||||
thumbSize: number,
|
||||
msgId: string,
|
||||
@@ -133,10 +133,10 @@ export interface NodeIKernelRichMediaService {
|
||||
peerUid: string,
|
||||
guildId: string,
|
||||
ele: MessageElement,
|
||||
useHttps: boolean
|
||||
useHttps: boolean;
|
||||
}): unknown;
|
||||
|
||||
downloadFileForModelId(peer: Peer, ModelId: string[], unknown: string): Promise<unknown>;
|
||||
downloadFileForModelId (peer: Peer, ModelId: string[], unknown: string): Promise<unknown>;
|
||||
|
||||
// 第三个参数 Array<Type>
|
||||
// this.fileId = "";
|
||||
@@ -146,83 +146,83 @@ export interface NodeIKernelRichMediaService {
|
||||
// this.fileSize = j2;
|
||||
// this.fileModelId = j3;
|
||||
|
||||
downloadFileForFileUuid(peer: Peer, uuid: string, arg3: {
|
||||
downloadFileForFileUuid (peer: Peer, uuid: string, arg3: {
|
||||
fileId: string,
|
||||
fileName: string,
|
||||
fileSize: string,
|
||||
fileModelId: string
|
||||
fileModelId: string;
|
||||
}[]): Promise<unknown>;
|
||||
|
||||
downloadFileByUrlList(fileDownloadTyp: UrlFileDownloadType, urlList: Array<string>): unknown;
|
||||
downloadFileByUrlList (fileDownloadTyp: UrlFileDownloadType, urlList: Array<string>): unknown;
|
||||
|
||||
downloadFileForFileInfo(fileInfo: CommonFileInfo[], savePath: string): unknown;
|
||||
downloadFileForFileInfo (fileInfo: CommonFileInfo[], savePath: string): unknown;
|
||||
|
||||
createGroupFolder(GroupCode: string, FolderName: string): Promise<GeneralCallResult & {
|
||||
resultWithGroupItem: { result: unknown, groupItem: Array<unknown> }
|
||||
createGroupFolder (GroupCode: string, FolderName: string): Promise<GeneralCallResult & {
|
||||
resultWithGroupItem: { result: unknown, groupItem: Array<unknown>; };
|
||||
}>;
|
||||
|
||||
downloadFile(commonFile: CommonFileInfo, arg2: unknown, arg3: unknown, savePath: string): unknown;
|
||||
downloadFile (arg1: unknown, arg2: number, arg3: number, arg4: string): unknown;
|
||||
|
||||
createGroupFolder(arg1: unknown, arg2: unknown): unknown;
|
||||
createGroupFolder (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
downloadGroupFolder(arg1: unknown, arg2: unknown, arg3: unknown): unknown;
|
||||
downloadGroupFolder (arg1: string, arg2: string, arg3: string): unknown;
|
||||
|
||||
renameGroupFolder(arg1: unknown, arg2: unknown, arg3: unknown): unknown;
|
||||
renameGroupFolder (arg1: string, arg2: string, arg3: string): unknown;
|
||||
|
||||
deleteGroupFolder(arg1: unknown, arg2: unknown): unknown;
|
||||
deleteGroupFolder (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
deleteTransferInfo(arg1: unknown, arg2: unknown): unknown;
|
||||
deleteTransferInfo (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
cancelTransferTask(arg1: unknown, arg2: unknown, arg3: unknown): unknown;
|
||||
cancelTransferTask (arg1: Peer, arg2: Array<unknown>[], arg3: string): unknown;
|
||||
|
||||
cancelUrlDownload(arg: unknown): unknown;
|
||||
cancelUrlDownload (arg: unknown): unknown;
|
||||
|
||||
updateOnlineVideoElemStatus(arg: unknown): unknown;
|
||||
updateOnlineVideoElemStatus (arg: unknown): unknown;
|
||||
|
||||
getGroupSpace(arg: unknown): unknown;
|
||||
getGroupSpace (arg: unknown): unknown;
|
||||
|
||||
getGroupFileList(groupCode: string, params: GetFileListParam): Promise<GeneralCallResult & {
|
||||
getGroupFileList (groupCode: string, params: GetFileListParam): Promise<GeneralCallResult & {
|
||||
groupSpaceResult: {
|
||||
retCode: number
|
||||
retMsg: string
|
||||
clientWording: string
|
||||
totalSpace: number
|
||||
usedSpace: number
|
||||
allUpload: boolean
|
||||
}
|
||||
retCode: number;
|
||||
retMsg: string;
|
||||
clientWording: string;
|
||||
totalSpace: number;
|
||||
usedSpace: number;
|
||||
allUpload: boolean;
|
||||
};
|
||||
}>;
|
||||
|
||||
getGroupFileInfo(arg1: unknown, arg2: unknown): unknown;
|
||||
getGroupFileInfo (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
getGroupTransferList(arg1: unknown, arg2: unknown): unknown;
|
||||
getGroupTransferList (arg1: string, arg2: unknown): unknown;
|
||||
|
||||
renameGroupFile(arg1: unknown, arg2: unknown, arg3: unknown, arg4: unknown, arg5: unknown): unknown;
|
||||
renameGroupFile (arg1: string, arg2: number, arg3: string, arg4: string, arg5: string): unknown;
|
||||
|
||||
moveGroupFile(groupCode: string, busId: Array<number>, fileList: Array<string>, currentParentDirectory: string, targetParentDirectory: string): Promise<GeneralCallResult & {
|
||||
moveGroupFile (groupCode: string, busId: Array<number>, fileList: Array<string>, currentParentDirectory: string, targetParentDirectory: string): Promise<GeneralCallResult & {
|
||||
moveGroupFileResult: {
|
||||
result: {
|
||||
retCode: number,
|
||||
retMsg: symbol,
|
||||
clientWording: string
|
||||
clientWording: string;
|
||||
},
|
||||
successFileIdList: Array<string>,
|
||||
failFileIdList: Array<string>
|
||||
}
|
||||
failFileIdList: Array<string>;
|
||||
};
|
||||
}>;
|
||||
|
||||
transGroupFile(groupCode: string, fileId: string): Promise<GeneralCallResult & {
|
||||
transGroupFile (groupCode: string, fileId: string): Promise<GeneralCallResult & {
|
||||
transGroupFileResult: {
|
||||
result: {
|
||||
retCode: number
|
||||
retMsg: string
|
||||
clientWording: string
|
||||
}
|
||||
saveBusId: number
|
||||
saveFilePath: string
|
||||
}
|
||||
retCode: number;
|
||||
retMsg: string;
|
||||
clientWording: string;
|
||||
};
|
||||
saveBusId: number;
|
||||
saveFilePath: string;
|
||||
};
|
||||
}>;
|
||||
|
||||
searchGroupFile(
|
||||
searchGroupFile (
|
||||
keywords: Array<string>,
|
||||
param: {
|
||||
groupIds: Array<string>,
|
||||
@@ -230,55 +230,57 @@ export interface NodeIKernelRichMediaService {
|
||||
context: string,
|
||||
count: number,
|
||||
sortType: number,
|
||||
groupNames: Array<string>
|
||||
groupNames: Array<string>;
|
||||
}): Promise<unknown>;
|
||||
|
||||
searchGroupFileByWord(arg1: unknown, arg2: unknown, arg3: unknown, arg4: unknown, arg5: unknown): unknown;
|
||||
searchGroupFileByWord (arg1: unknown[], arg2: unknown[], arg3: string, arg4: string, arg5: number): unknown;
|
||||
|
||||
deleteGroupFile(GroupCode: string, params: Array<number>, Files: Array<string>): Promise<GeneralCallResult & {
|
||||
deleteGroupFile (GroupCode: string, params: Array<number>, Files: Array<string>): Promise<GeneralCallResult & {
|
||||
transGroupFileResult: {
|
||||
result: unknown
|
||||
successFileIdList: Array<unknown>
|
||||
failFileIdList: Array<unknown>
|
||||
}
|
||||
result: unknown;
|
||||
successFileIdList: Array<unknown>;
|
||||
failFileIdList: Array<unknown>;
|
||||
};
|
||||
}>;
|
||||
|
||||
translateEnWordToZn(words: string[]): Promise<GeneralCallResult & { words: string[] }>;
|
||||
translateEnWordToZn (words: string[]): Promise<GeneralCallResult & { words: string[]; }>;
|
||||
|
||||
getScreenOCR(path: string): Promise<unknown>;
|
||||
getScreenOCR (path: string): Promise<unknown>;
|
||||
|
||||
batchGetGroupFileCount(Gids: Array<string>): Promise<GeneralCallResult & {
|
||||
batchGetGroupFileCount (Gids: Array<string>): Promise<GeneralCallResult & {
|
||||
groupCodes: Array<string>,
|
||||
groupFileCounts: Array<number>
|
||||
groupFileCounts: Array<number>;
|
||||
}>;
|
||||
|
||||
queryPicDownloadSize(arg: unknown): unknown;
|
||||
queryPicDownloadSize (arg: unknown): unknown;
|
||||
|
||||
searchGroupFile(arg1: unknown, arg2: unknown): unknown;
|
||||
searchGroupFile (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
searchMoreGroupFile(arg: unknown): unknown;
|
||||
searchMoreGroupFile (arg: unknown): unknown;
|
||||
|
||||
cancelSearcheGroupFile(arg1: unknown, arg2: unknown, arg3: unknown): unknown;
|
||||
cancelSearcheGroupFile (arg1: number, arg2: number, arg3: string): unknown;
|
||||
|
||||
onlyDownloadFile(peer: Peer, arg2: unknown, arg3: Array<{
|
||||
fileId: string,
|
||||
fileName: string,
|
||||
fileSize: string,
|
||||
fileModelId: string
|
||||
}
|
||||
>): unknown;
|
||||
onlyDownloadFile (arg1: Peer, arg2: string, arg3: Array<unknown>[]): unknown;
|
||||
|
||||
onlyUploadFile(arg1: unknown, arg2: unknown): unknown;
|
||||
onlyUploadFile (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
isExtraLargePic(arg1: unknown, arg2: unknown, arg3: unknown): unknown;
|
||||
isExtraLargePic (arg1: unknown, arg2: unknown, arg3: unknown): unknown;
|
||||
|
||||
uploadRMFileWithoutMsg(arg: {
|
||||
uploadRMFileWithoutMsg (arg: {
|
||||
bizType: RMBizTypeEnum,
|
||||
filePath: string,
|
||||
peerUid: string,
|
||||
transferId: string
|
||||
useNTV2: string
|
||||
transferId: string;
|
||||
useNTV2: string;
|
||||
}): Promise<unknown>;
|
||||
|
||||
isNull(): boolean;
|
||||
isNull (): boolean;
|
||||
|
||||
getRichMediaCodecInfo (arg: unknown): unknown;
|
||||
|
||||
getScreenOCRWithSourceType (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
imageTranslate (arg1: string, arg2: string, arg3: number): unknown;
|
||||
|
||||
downloadFileByUrl (arg1: number, arg2: string, arg3: boolean): unknown;
|
||||
}
|
||||
|
||||
@@ -2,47 +2,127 @@ import { NodeIKernelRobotListener } from '@/napcat-core/listeners';
|
||||
import { GeneralCallResult, Peer } from '..';
|
||||
|
||||
export interface NodeIKernelRobotService {
|
||||
fetchGroupRobotStoreDiscovery(arg: unknown): unknown;
|
||||
addKernelRobotListener (listener: NodeIKernelRobotListener): number;
|
||||
|
||||
sendGroupRobotStoreSearch(arg: unknown): unknown;
|
||||
removeKernelRobotListener (listenerId: number): void;
|
||||
|
||||
fetchGroupRobotStoreCategoryList(arg: unknown): unknown;
|
||||
fetchGroupRobotStoreDiscovery (arg: unknown): unknown;
|
||||
|
||||
FetchSubscribeMsgTemplate(arg: unknown): unknown;
|
||||
fetchGroupRobotStoreCategoryList (arg: unknown): unknown;
|
||||
|
||||
FetchSubcribeMsgTemplateStatus(arg: unknown): unknown;
|
||||
FetchSubscribeMsgTemplate (arg: unknown): unknown;
|
||||
|
||||
SubscribeMsgTemplateSet(arg1: unknown, arg2: unknown): unknown;
|
||||
FetchSubcribeMsgTemplateStatus (arg: unknown): unknown;
|
||||
|
||||
fetchRecentUsedRobots(arg: unknown): unknown;
|
||||
SubscribeMsgTemplateSet (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
fetchShareArkInfo(arg: unknown): unknown;
|
||||
fetchRecentUsedRobots (arg: unknown): unknown;
|
||||
|
||||
addKernelRobotListener(Listener: NodeIKernelRobotListener): number;
|
||||
fetchShareArkInfo (arg: unknown): unknown;
|
||||
|
||||
removeKernelRobotListener(ListenerId: number): unknown;
|
||||
getAllRobotFriendsFromCache (): Promise<unknown>;
|
||||
|
||||
getAllRobotFriendsFromCache(): Promise<unknown>;
|
||||
fetchAllRobots (arg1: boolean, arg2: unknown): unknown;
|
||||
|
||||
fetchAllRobots(arg1: unknown, arg2: unknown): unknown;
|
||||
removeAllRecommendCache (): unknown;
|
||||
|
||||
removeAllRecommendCache(): unknown;
|
||||
setRobotPickTts (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
setRobotPickTts(arg1: unknown, arg2: unknown): unknown;
|
||||
getRobotUinRange (data: unknown): Promise<{ response: { robotUinRanges: Array<unknown>; }; }>;
|
||||
|
||||
getRobotUinRange(data: unknown): Promise<{ response: { robotUinRanges: Array<unknown> } }>;
|
||||
|
||||
getRobotFunctions(peer: Peer, params: {
|
||||
getRobotFunctions (peer: Peer, params: {
|
||||
uins: Array<string>,
|
||||
num: 0,
|
||||
client_info: { platform: 4, version: '', build_num: 9999 },
|
||||
client_info: { platform: 4, version: '', build_num: 9999; },
|
||||
tinyids: [],
|
||||
page: 0,
|
||||
full_fetch: false,
|
||||
scene: 4,
|
||||
filter: 1,
|
||||
bkn: ''
|
||||
}): Promise<GeneralCallResult & { response: { bot_features: Array<unknown>, next_page: number } }>;
|
||||
bkn: '';
|
||||
}): Promise<GeneralCallResult & { response: { bot_features: Array<unknown>, next_page: number; }; }>;
|
||||
|
||||
isNull(): boolean;
|
||||
fetchRobotShareLimit (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
updateGroupRobotProfile (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
sendCommonRobotToGuild (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
sendGroupRobotStoreSearch (arg: unknown): unknown;
|
||||
|
||||
fetchMyRobotLists (arg: unknown): unknown;
|
||||
|
||||
batchGetBotsMenu (arg: unknown): unknown;
|
||||
|
||||
fetchAddRobotGroupList (arg: unknown): unknown;
|
||||
|
||||
getGuildRobotList (arg: unknown): unknown;
|
||||
|
||||
querySessionList (arg: unknown): unknown;
|
||||
|
||||
fetchListRobot (arg: unknown): unknown;
|
||||
|
||||
subscribeGuildGlobalRobot (arg: unknown): unknown;
|
||||
|
||||
addGuildRobot (arg: unknown): unknown;
|
||||
|
||||
upMicGuildRobot (arg: unknown): unknown;
|
||||
|
||||
downMicGuildRobot (arg: unknown): unknown;
|
||||
|
||||
getRedDot (arg: unknown): unknown;
|
||||
|
||||
delRedDot (arg: unknown): unknown;
|
||||
|
||||
changeMyBot (arg: unknown): unknown;
|
||||
|
||||
getAudioLiveRobotStatus (arg: unknown): unknown;
|
||||
|
||||
backFlowRobotCoreInfos (arg: unknown): unknown;
|
||||
|
||||
batchFetchRobotCoreInfos (arg: unknown): unknown;
|
||||
|
||||
queryPicRecomQuestions (arg: unknown): unknown;
|
||||
|
||||
delSessionMsgs (arg: unknown): unknown;
|
||||
|
||||
fetchMobileRobotRecommendCards (arg: unknown): unknown;
|
||||
|
||||
saveSelectedAIModelOrOptIds (arg: unknown): unknown;
|
||||
|
||||
setRobotStoryEnter (arg: unknown): unknown;
|
||||
|
||||
aiGenAvatar (arg: unknown): unknown;
|
||||
|
||||
fetchRobotFeatureWithReq (arg: unknown): unknown;
|
||||
|
||||
fetchGroupRobotProfileWithReq (arg: unknown): unknown;
|
||||
|
||||
setAddRobotToGroup (arg: unknown): unknown;
|
||||
|
||||
setRemoveRobotFromGroup (arg: unknown): unknown;
|
||||
|
||||
FetchGroupRobotInfo (arg: unknown): unknown;
|
||||
|
||||
fetchGuildRobotInfo (arg: unknown): unknown;
|
||||
|
||||
aiGenBotInfo (arg: unknown): unknown;
|
||||
|
||||
fetchAiGenTemplateInfo (arg: unknown): unknown;
|
||||
|
||||
fetchShareInfo (arg: unknown): unknown;
|
||||
|
||||
updateShareInfo (arg: unknown): unknown;
|
||||
|
||||
queryGuildGlobalRobotSubscription (arg: unknown): unknown;
|
||||
|
||||
resetConversation (arg: unknown): unknown;
|
||||
|
||||
setGuildRobotPermission (arg: unknown): unknown;
|
||||
|
||||
fetchGuildRobotPermission (arg: unknown): unknown;
|
||||
|
||||
editSession (arg: unknown): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
|
||||
@@ -3,134 +3,146 @@ import { GeneralCallResult } from './common';
|
||||
|
||||
export interface NodeIKernelSearchService {
|
||||
|
||||
addKernelSearchListener(listener: unknown): number;
|
||||
addKernelSearchListener (listener: unknown): number;
|
||||
|
||||
removeKernelSearchListener(listenerId: number): void;
|
||||
removeKernelSearchListener (listenerId: number): void;
|
||||
|
||||
searchStranger(unknown: string, searchStranger: unknown, searchParams: unknown): Promise<unknown>;
|
||||
searchStranger (keyword: string, searchType: unknown, searchParams: unknown): Promise<unknown>;
|
||||
|
||||
searchGroup(param: {
|
||||
searchGroup (param: {
|
||||
keyWords: string,
|
||||
groupNum: number,
|
||||
exactSearch: boolean,
|
||||
penetrate: string
|
||||
}): Promise<GeneralCallResult>;// needs 1 arguments
|
||||
penetrate: string;
|
||||
}): Promise<GeneralCallResult>;
|
||||
|
||||
searchLocalInfo(keywords: string, type: number/* 4 */): unknown;
|
||||
searchLocalInfo (keywords: string, type: number): unknown;
|
||||
|
||||
cancelSearchLocalInfo(...args: unknown[]): unknown;// needs 3 arguments
|
||||
cancelSearchLocalInfo (arg1: number, arg2: number, arg3: string): unknown;
|
||||
|
||||
searchBuddyChatInfo(...args: unknown[]): unknown;// needs 2 arguments
|
||||
searchBuddyChatInfo (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
searchMoreBuddyChatInfo(...args: unknown[]): unknown;// needs 1 arguments
|
||||
searchMoreBuddyChatInfo (arg: unknown): unknown;
|
||||
|
||||
cancelSearchBuddyChatInfo(...args: unknown[]): unknown;// needs 3 arguments
|
||||
cancelSearchBuddyChatInfo (arg1: number, arg2: number, arg3: string): unknown;
|
||||
|
||||
searchContact(...args: unknown[]): unknown;// needs 2 arguments
|
||||
searchContact (arg1: Array<unknown>[], arg2: unknown): unknown;
|
||||
|
||||
searchMoreContact(...args: unknown[]): unknown;// needs 1 arguments
|
||||
searchMoreContact (arg: unknown): unknown;
|
||||
|
||||
cancelSearchContact(...args: unknown[]): unknown;// needs 3 arguments
|
||||
cancelSearchContact (arg1: number, arg2: number, arg3: string): unknown;
|
||||
|
||||
searchGroupChatInfo(...args: unknown[]): unknown;// needs 3 arguments
|
||||
searchGroupChatInfo (arg1: unknown[], arg2: unknown, arg3: number): unknown;
|
||||
|
||||
resetSearchGroupChatInfoSortType(...args: unknown[]): unknown;// needs 3 arguments
|
||||
resetSearchGroupChatInfoSortType (arg1: number, arg2: number, arg3: number): unknown;
|
||||
|
||||
resetSearchGroupChatInfoFilterMembers(...args: unknown[]): unknown;// needs 3 arguments
|
||||
resetSearchGroupChatInfoFilterMembers (arg1: number, arg2: Array<unknown>[], arg3: number): unknown;
|
||||
|
||||
searchMoreGroupChatInfo(...args: unknown[]): unknown;// needs 1 arguments
|
||||
searchMoreGroupChatInfo (arg: unknown): unknown;
|
||||
|
||||
cancelSearchGroupChatInfo(...args: unknown[]): unknown;// needs 3 arguments
|
||||
cancelSearchGroupChatInfo (arg1: number, arg2: number, arg3: string): unknown;
|
||||
|
||||
searchChatsWithKeywords(...args: unknown[]): unknown;// needs 3 arguments
|
||||
searchChatsWithKeywords (arg1: unknown[], arg2: number, arg3: number): unknown;
|
||||
|
||||
searchMoreChatsWithKeywords(...args: unknown[]): unknown;// needs 1 arguments
|
||||
searchMoreChatsWithKeywords (arg: unknown): unknown;
|
||||
|
||||
cancelSearchChatsWithKeywords(...args: unknown[]): unknown;// needs 3 arguments
|
||||
cancelSearchChatsWithKeywords (arg1: number, arg2: number, arg3: string): unknown;
|
||||
|
||||
searchChatMsgs(...args: unknown[]): unknown;// needs 2 arguments
|
||||
searchChatMsgs (arg1: Array<unknown>[], arg2: unknown): unknown;
|
||||
|
||||
searchMoreChatMsgs(...args: unknown[]): unknown;// needs 1 arguments
|
||||
searchMoreChatMsgs (arg: unknown): unknown;
|
||||
|
||||
cancelSearchChatMsgs(...args: unknown[]): unknown;// needs 3 arguments
|
||||
cancelSearchChatMsgs (arg1: number, arg2: number, arg3: string): unknown;
|
||||
|
||||
searchMsgWithKeywords(keyWords: string[], param: Peer & { searchFields: number, pageLimit: number }): Promise<GeneralCallResult>;
|
||||
searchMsgWithKeywords (keyWords: string[], param: Peer & { searchFields: number, pageLimit: number; }): Promise<GeneralCallResult>;
|
||||
|
||||
searchMoreMsgWithKeywords(...args: unknown[]): unknown;// needs 1 arguments
|
||||
searchMoreMsgWithKeywords (arg: unknown): unknown;
|
||||
|
||||
cancelSearchMsgWithKeywords(...args: unknown[]): unknown;// needs 3 arguments
|
||||
cancelSearchMsgWithKeywords (arg1: number, arg2: number, arg3: string): unknown;
|
||||
|
||||
searchFileWithKeywords(keywords: string[], source: number): Promise<string>;// needs 2 arguments
|
||||
searchFileWithKeywords (keywords: string[], source: number): Promise<string>;
|
||||
|
||||
searchMoreFileWithKeywords(...args: unknown[]): unknown;// needs 1 arguments
|
||||
searchMoreFileWithKeywords (arg: unknown): unknown;
|
||||
|
||||
cancelSearchFileWithKeywords(...args: unknown[]): unknown;// needs 3 arguments
|
||||
cancelSearchFileWithKeywords (arg1: number, arg2: number, arg3: string): unknown;
|
||||
|
||||
searchAtMeChats(...args: unknown[]): unknown;// needs 3 arguments
|
||||
searchFileInFileCenterForPC (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
searchMoreAtMeChats(...args: unknown[]): unknown;// needs 1 arguments
|
||||
searchMoreFileInFileCenter (arg: unknown): unknown;
|
||||
|
||||
cancelSearchAtMeChats(...args: unknown[]): unknown;// needs 3 arguments
|
||||
cancelSearchFileInFileCenter (arg1: number, arg2: number, arg3: string): unknown;
|
||||
|
||||
searchChatAtMeMsgs(...args: unknown[]): unknown;// needs 1 arguments
|
||||
searchAtMeChats (arg1: boolean, arg2: number, arg3: number): unknown;
|
||||
|
||||
searchMoreChatAtMeMsgs(...args: unknown[]): unknown;// needs 1 arguments
|
||||
searchMoreAtMeChats (arg: unknown): unknown;
|
||||
|
||||
cancelSearchChatAtMeMsgs(...args: unknown[]): unknown;// needs 3 arguments
|
||||
cancelSearchAtMeChats (arg1: number, arg2: number, arg3: string): unknown;
|
||||
|
||||
addSearchHistory(param: {
|
||||
type: number, // 4
|
||||
searchChatAtMeMsgs (arg: unknown): unknown;
|
||||
|
||||
searchMoreChatAtMeMsgs (arg: unknown): unknown;
|
||||
|
||||
cancelSearchChatAtMeMsgs (arg1: number, arg2: number, arg3: string): unknown;
|
||||
|
||||
searchRobot (arg: unknown): unknown;
|
||||
|
||||
searchCache (arg1: string, arg2: string, arg3: unknown): unknown;
|
||||
|
||||
addSearchHistory (param: {
|
||||
type: number,
|
||||
contactList: [],
|
||||
id: number, // -1
|
||||
id: number,
|
||||
groupInfos: [],
|
||||
msgs: [],
|
||||
fileInfos: [
|
||||
{
|
||||
chatType: ChatType,
|
||||
buddyChatInfo: Array<{ category_name: string, peerUid: string, peerUin: string, remark: string }>,
|
||||
discussChatInfo: [],
|
||||
groupChatInfo: Array<
|
||||
{
|
||||
groupCode: string,
|
||||
isConf: boolean,
|
||||
hasModifyConfGroupFace: boolean,
|
||||
hasModifyConfGroupName: boolean,
|
||||
groupName: string,
|
||||
remark: string
|
||||
}>,
|
||||
dataLineChatInfo: [],
|
||||
tmpChatInfo: [],
|
||||
msgId: string,
|
||||
msgSeq: string,
|
||||
msgTime: string,
|
||||
senderUid: string,
|
||||
senderNick: string,
|
||||
senderRemark: string,
|
||||
senderCard: string,
|
||||
elemId: string,
|
||||
elemType: string, // 3
|
||||
fileSize: string,
|
||||
filePath: string,
|
||||
fileName: string,
|
||||
hits: Array<
|
||||
{
|
||||
start: 12,
|
||||
end: 14
|
||||
}
|
||||
>
|
||||
}
|
||||
]
|
||||
|
||||
fileInfos: Array<{
|
||||
chatType: ChatType,
|
||||
buddyChatInfo: Array<{ category_name: string, peerUid: string, peerUin: string, remark: string; }>,
|
||||
discussChatInfo: [],
|
||||
groupChatInfo: Array<{
|
||||
groupCode: string,
|
||||
isConf: boolean,
|
||||
hasModifyConfGroupFace: boolean,
|
||||
hasModifyConfGroupName: boolean,
|
||||
groupName: string,
|
||||
remark: string;
|
||||
}>,
|
||||
dataLineChatInfo: [],
|
||||
tmpChatInfo: [],
|
||||
msgId: string,
|
||||
msgSeq: string,
|
||||
msgTime: string,
|
||||
senderUid: string,
|
||||
senderNick: string,
|
||||
senderRemark: string,
|
||||
senderCard: string,
|
||||
elemId: string,
|
||||
elemType: string,
|
||||
fileSize: string,
|
||||
filePath: string,
|
||||
fileName: string,
|
||||
hits: Array<{ start: number, end: number; }>;
|
||||
}>;
|
||||
}): Promise<{
|
||||
result: number,
|
||||
errMsg: string,
|
||||
id?: number
|
||||
id?: number;
|
||||
}>;
|
||||
|
||||
removeSearchHistory(...args: unknown[]): unknown;// needs 1 arguments
|
||||
removeSearchHistory (arg: unknown): unknown;
|
||||
|
||||
searchCache(...args: unknown[]): unknown;// needs 3 arguments
|
||||
addOrUpdateSearchMostUseItem (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
clearSearchCache(...args: unknown[]): unknown;// needs 1 arguments
|
||||
getSearchMostUseItem (arg: unknown): unknown;
|
||||
|
||||
deleteSearchMostUseItem (arg: unknown): unknown;
|
||||
|
||||
deleteGroupHistoryFile (arg: unknown): unknown;
|
||||
|
||||
clearSearchCache (arg: unknown): unknown;
|
||||
|
||||
clearSearchHistory (): unknown;
|
||||
|
||||
loadSearchHistory (): unknown;
|
||||
|
||||
initTokenizeUtil (): unknown;
|
||||
}
|
||||
|
||||
53
packages/napcat-core/services/NodeIKernelSettingService.ts
Normal file
53
packages/napcat-core/services/NodeIKernelSettingService.ts
Normal file
@@ -0,0 +1,53 @@
|
||||
export interface NodeIKernelSettingService {
|
||||
addKernelSettingListener (listener: unknown): number;
|
||||
|
||||
removeKernelSettingListener (listenerId: number): void;
|
||||
|
||||
getSettingForBuffer (key: unknown): unknown;
|
||||
|
||||
getSettingForNum (key: unknown): unknown;
|
||||
|
||||
getSettingForStr (key: unknown): unknown;
|
||||
|
||||
setSettingForBuffer (arg: unknown): unknown;
|
||||
|
||||
setSettingForNum (arg: unknown): unknown;
|
||||
|
||||
setSettingForStr (arg: unknown): unknown;
|
||||
|
||||
setAutoLoginSwitch (enabled: boolean): unknown;
|
||||
|
||||
setNeedConfirmSwitch (enabled: boolean): unknown;
|
||||
|
||||
setPrivacySetting (arg: unknown): unknown;
|
||||
|
||||
setSelfStartSwitch (enabled: boolean): unknown;
|
||||
|
||||
modifyAccount (arg: unknown): unknown;
|
||||
|
||||
verifyNewAccount (arg: unknown): unknown;
|
||||
|
||||
openUrlWithQQBrowser (url: string): unknown;
|
||||
|
||||
openUrlInIM (url: string): unknown;
|
||||
|
||||
clearCache (arg: unknown): unknown;
|
||||
|
||||
destroyAccount (): unknown;
|
||||
|
||||
isQQBrowserInstall (): boolean;
|
||||
|
||||
getSelfStartSwitch (): unknown;
|
||||
|
||||
getAutoLoginSwitch (): unknown;
|
||||
|
||||
getNeedConfirmSwitch (): unknown;
|
||||
|
||||
getPrivacySetting (): unknown;
|
||||
|
||||
scanCache (): unknown;
|
||||
|
||||
getQQBrowserSwitchFromQldQQ (): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
21
packages/napcat-core/services/NodeIKernelSkinService.ts
Normal file
21
packages/napcat-core/services/NodeIKernelSkinService.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
export interface NodeIKernelSkinService {
|
||||
addKernelSkinListener (listener: unknown): number;
|
||||
|
||||
removeKernelSkinListener (listenerId: number): void;
|
||||
|
||||
getRecommendAIOColor (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
getRecommendBubbleColor (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
getThemeInfoFromImage (arg: unknown): unknown;
|
||||
|
||||
previewTheme (arg1: number, arg2: unknown, arg3: unknown): unknown;
|
||||
|
||||
setTemplateCustomPrimaryColor (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
setThemeInfo (arg1: number, arg2: unknown, arg3: unknown): unknown;
|
||||
|
||||
uploadImage (arg: unknown): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
@@ -36,15 +36,15 @@ export interface NodeIKernelStorageCleanService {
|
||||
|
||||
reportData (): unknown;
|
||||
|
||||
getChatCacheInfo (arg1: unknown, arg2: unknown, arg3: unknown, arg4: unknown): unknown;
|
||||
getChatCacheInfo (tableType: number, pageSize: number, order: number, startPosition: number): Promise<unknown>;
|
||||
|
||||
getFileCacheInfo (arg1: unknown, arg2: unknown, arg3: unknown, arg44: unknown, args5: unknown): unknown;
|
||||
getFileCacheInfo (fileType: number, restart: boolean, pageSize: number, lastRecord: number, param: unknown): Promise<unknown>;
|
||||
|
||||
clearChatCacheInfo (arg1: unknown, arg2: unknown): unknown;
|
||||
clearChatCacheInfo (chatInfoList: unknown[], clearKeys: number[]): Promise<unknown>;
|
||||
|
||||
clearCacheDataByKeys (keys: Array<string>): Promise<GeneralCallResult>;
|
||||
|
||||
setSilentScan (is_silent: boolean): unknown;
|
||||
setSilentScan (isSilent: boolean): unknown;
|
||||
|
||||
closeCleanWindow (): unknown;
|
||||
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
export interface NodeIKernelThirdPartySigService {
|
||||
addOnSigChangeListener (listener: unknown): number;
|
||||
|
||||
removeSigChangeListener (listenerId: number): void;
|
||||
|
||||
initConfig (arg: unknown): unknown;
|
||||
|
||||
delThirdPartySigByUin (arg: unknown): unknown;
|
||||
|
||||
getOpenIDByUin (arg1: string, arg2: number, arg3: string): unknown;
|
||||
|
||||
getPT4tokenByUin (arg1: string, arg2: number, arg3: Array<unknown>[]): unknown;
|
||||
|
||||
getThirdPartySigByUin (arg1: string, arg2: number, arg3: number, arg4: number, arg5: string, arg6: string): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
export interface NodeIKernelTianShuService {
|
||||
addKernelTianShuListener(listener:unknown): number;
|
||||
addKernelTianShuListener (listener: unknown): number;
|
||||
|
||||
removeKernelTianShuListener(listenerId:number): void;
|
||||
removeKernelTianShuListener (listenerId: number): void;
|
||||
|
||||
reportTianShuNumeralRed(...args: unknown[]): unknown;// needs 1 arguments
|
||||
reportTianShuNumeralRed (arg: unknown): unknown;// needs 1 arguments
|
||||
|
||||
}
|
||||
|
||||
@@ -2,11 +2,11 @@ import { ForceFetchClientKeyRetType } from './common';
|
||||
|
||||
export interface NodeIKernelTicketService {
|
||||
|
||||
addKernelTicketListener(listener: unknown): number;
|
||||
addKernelTicketListener (listener: unknown): number;
|
||||
|
||||
removeKernelTicketListener(listenerId: number): void;
|
||||
removeKernelTicketListener (listenerId: number): void;
|
||||
|
||||
forceFetchClientKey(arg: string): Promise<ForceFetchClientKeyRetType>;
|
||||
forceFetchClientKey (arg: string): Promise<ForceFetchClientKeyRetType>;
|
||||
|
||||
isNull(): boolean;
|
||||
isNull (): boolean;
|
||||
}
|
||||
|
||||
@@ -2,21 +2,19 @@ import { GeneralCallResult } from './common';
|
||||
|
||||
export interface NodeIKernelTipOffService {
|
||||
|
||||
addKernelTipOffListener(listener: unknown): number;
|
||||
addKernelTipOffListener (listener: unknown): number;
|
||||
|
||||
removeKernelTipOffListener(listenerId: unknown): void;
|
||||
removeKernelTipOffListener (listenerId: number): void;
|
||||
|
||||
tipOffSendJsData(args: unknown[]): Promise<unknown>;// 2
|
||||
tipOffSendJsData (arg1: unknown, arg2: unknown): Promise<unknown>;
|
||||
|
||||
getPskey(domainList: string[], nocache: boolean): Promise<GeneralCallResult & {
|
||||
domainPskeyMap: Map<string, string>
|
||||
getPskey (domainList: string[], nocache: boolean): Promise<GeneralCallResult & {
|
||||
domainPskeyMap: Map<string, string>;
|
||||
}>;
|
||||
|
||||
tipOffSendJsData(args: unknown[]): Promise<unknown>;// 2
|
||||
tipOffMsgs (arg: unknown): Promise<unknown>;
|
||||
|
||||
tipOffMsgs(args: unknown[]): Promise<unknown>;// 1
|
||||
encodeUinAesInfo (arg1: unknown, arg2: unknown): Promise<unknown>;
|
||||
|
||||
encodeUinAesInfo(args: unknown[]): Promise<unknown>;// 2
|
||||
|
||||
isNull(): boolean;
|
||||
isNull (): boolean;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
export interface NodeIKernelUnifySearchService {
|
||||
checkAIAuth (arg: unknown): unknown;
|
||||
|
||||
getNetResultTabs (arg: unknown): unknown;
|
||||
|
||||
getNetSugWords (arg: unknown): unknown;
|
||||
|
||||
getSearchAppendingInfo (arg: unknown): unknown;
|
||||
|
||||
getSearchBoxSugWords (arg: unknown): unknown;
|
||||
|
||||
search (arg: unknown): unknown;
|
||||
|
||||
unifySearch (arg: unknown): unknown;
|
||||
|
||||
unifySearchDiscovery (arg: unknown): unknown;
|
||||
|
||||
unifySearchDiscoveryInCache (arg: unknown): unknown;
|
||||
|
||||
wxSearchReport (arg: unknown): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
@@ -1,17 +1,17 @@
|
||||
export interface NodeIKernelUnitedConfigService {
|
||||
|
||||
addKernelUnitedConfigListener(listener:unknown): number;
|
||||
addKernelUnitedConfigListener (listener: unknown): number;
|
||||
|
||||
removeKernelUnitedConfigListener(listenerId:number): void;
|
||||
removeKernelUnitedConfigListener (listenerId: number): void;
|
||||
|
||||
fetchUnitedSwitchConfig(...args: unknown[]): unknown;// needs 1 arguments
|
||||
fetchUnitedSwitchConfig (configIds: string[]): void;
|
||||
|
||||
isUnitedConfigSwitchOn(...args: unknown[]): unknown;// needs 1 arguments
|
||||
isUnitedConfigSwitchOn (configId: string): boolean;
|
||||
|
||||
registerUnitedConfigPushGroupList(...args: unknown[]): unknown;// needs 1 arguments
|
||||
registerUnitedConfigPushGroupList (groupList: string[]): void;
|
||||
|
||||
fetchUnitedCommendConfig(ids: `${string}`[]): void
|
||||
fetchUnitedCommendConfig (ids: string[]): void;
|
||||
|
||||
loadUnitedConfig(id: string): Promise<unknown>
|
||||
loadUnitedConfig (id: string): Promise<unknown>;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
export interface NodeIKernelVasSystemUpdateService {
|
||||
getResPath (arg: unknown): unknown;
|
||||
|
||||
isExist (arg: unknown): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
export interface NodeIKernelWiFiPhotoClientService {
|
||||
addKernelWiFiPhotoClientListener (listener: unknown): number;
|
||||
|
||||
removeKernelWiFiPhotoClientListener (listenerId: number): void;
|
||||
|
||||
cancelGetPhoto (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
cancelGetPhotoThumbBatch (arg: unknown): unknown;
|
||||
|
||||
cancelRequest (arg: unknown): unknown;
|
||||
|
||||
connectToHostForTest (arg: unknown): unknown;
|
||||
|
||||
deletePhotoBatch (arg: unknown): unknown;
|
||||
|
||||
disconnect (arg: unknown): unknown;
|
||||
|
||||
getAlbumFileSavePath (arg: unknown): unknown;
|
||||
|
||||
getAllPhotoSimpleInfo (arg: unknown): unknown;
|
||||
|
||||
getPhotoAndSaveAs (arg1: string, arg2: string, arg3: string): unknown;
|
||||
|
||||
getPhotoBatch (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
getPhotoInfoBatch (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
getPhotoSimpleInfoForFirstView (arg1: string, arg2: number): unknown;
|
||||
|
||||
getPhotoThumbBatchWithConfig (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
getWiFiPhotoDownFileInfos (arg1: string, arg2: Array<unknown>[]): unknown;
|
||||
|
||||
resumeUncompleteDownloadRecords (arg: unknown): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
export interface NodeIKernelWiFiPhotoHostService {
|
||||
addKernelWiFiPhotoHostListener (listener: unknown): number;
|
||||
|
||||
removeKernelWiFiPhotoHostListener (listenerId: number): void;
|
||||
|
||||
acceptRequest (arg1: number, arg2: unknown): unknown;
|
||||
|
||||
disconnect (arg: unknown): unknown;
|
||||
|
||||
rejectRequest (arg1: number, arg2: number): unknown;
|
||||
|
||||
setAlbumAccessDelegate (arg: unknown): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
export interface NodeIKernelYellowFaceForManagerService {
|
||||
download (arg1: string, arg2: string, arg3: string, arg4: boolean): unknown;
|
||||
|
||||
setHistory (arg: unknown): unknown;
|
||||
|
||||
isNull (): boolean;
|
||||
}
|
||||
@@ -1,11 +1,15 @@
|
||||
import { NodeIO3MiscListener } from '@/napcat-core/listeners/NodeIO3MiscListener';
|
||||
|
||||
export interface NodeIO3MiscService {
|
||||
get(): NodeIO3MiscService;
|
||||
get (): NodeIO3MiscService;
|
||||
|
||||
addO3MiscListener(listeners: NodeIO3MiscListener): number;
|
||||
addO3MiscListener (listener: NodeIO3MiscListener): number;
|
||||
|
||||
setAmgomDataPiece(appid: string, dataPiece: Uint8Array): void;
|
||||
removeO3MiscListener (listenerId: number): void;
|
||||
|
||||
reportAmgomWeather(type: string, uk2: string, arg: Array<string>): void;
|
||||
passthroughO3Data (arg1: unknown, arg2: unknown): unknown;
|
||||
|
||||
reportAmgomWeather (arg1: unknown, arg2: unknown, arg3: unknown): unknown;
|
||||
|
||||
setAmgomDataPiece (appid: string, dataPiece: Uint8Array): void;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
export interface NodeIYellowFaceService {
|
||||
download(resourceConfigJson: string, resourceDir: string, cacheDir: string, force: boolean): void;
|
||||
addListener (listener: unknown): number;
|
||||
|
||||
setHistory(fullMd5: string): void;
|
||||
removeListener (listenerId: number): void;
|
||||
|
||||
download (resourceConfigJson: string, resourceDir: string, cacheDir: string, force: boolean): void;
|
||||
|
||||
setHistory (fullMd5: string): void;
|
||||
|
||||
update (arg: unknown): unknown;
|
||||
}
|
||||
|
||||
@@ -36,6 +36,36 @@ export * from './NodeIKernelDbToolsService';
|
||||
export * from './NodeIKernelTipOffService';
|
||||
export * from './NodeIKernelSearchService';
|
||||
export * from './NodeIKernelCollectionService';
|
||||
// === New service exports from IDA analysis ===
|
||||
export * from './NodeIKernelSettingService';
|
||||
export * from './NodeIKernelQiDianService';
|
||||
export * from './NodeIKernelSkinService';
|
||||
export * from './NodeIKernelQQPlayService';
|
||||
export * from './NodeIKernelRDeliveryService';
|
||||
export * from './NodeIKernelRemotingService';
|
||||
export * from './NodeIKernelLiteBusinessService';
|
||||
export * from './NodeIKernelGroupTabService';
|
||||
export * from './NodeIKernelLockService';
|
||||
export * from './NodeIKernelHandOffService';
|
||||
export * from './NodeIKernelMiniAppService';
|
||||
export * from './NodeIKernelPublicAccountService';
|
||||
export * from './NodeIKernelThirdPartySigService';
|
||||
export * from './NodeIKernelUnifySearchService';
|
||||
export * from './NodeIKernelVasSystemUpdateService';
|
||||
export * from './NodeIKernelPersonalAlbumService';
|
||||
export * from './NodeIKernelConfigMgrService';
|
||||
export * from './NodeIKernelFeedService';
|
||||
export * from './NodeIKernelBdhUploadService';
|
||||
export * from './NodeIKernelDirectSessionService';
|
||||
export * from './NodeIKernelFileBridgeClientService';
|
||||
export * from './NodeIKernelFileBridgeHostService';
|
||||
export * from './NodeIKernelWiFiPhotoHostService';
|
||||
export * from './NodeIKernelWiFiPhotoClientService';
|
||||
export * from './NodeIKernelEmojiService';
|
||||
export * from './NodeIKernelNearbyProService';
|
||||
export * from './NodeIKernelAVSDKService';
|
||||
export * from './NodeIKernelAddBuddyService';
|
||||
export * from './NodeIKernelYellowFaceForManagerService';
|
||||
|
||||
export type ServiceNamingMapping = {
|
||||
NodeIKernelAvatarService: NodeIKernelAvatarService;
|
||||
@@ -53,6 +83,6 @@ export type ServiceNamingMapping = {
|
||||
NodeIKernelRichMediaService: NodeIKernelRichMediaService;
|
||||
NodeIKernelDbToolsService: NodeIKernelDbToolsService;
|
||||
NodeIKernelTipOffService: NodeIKernelTipOffService;
|
||||
NodeIKernelSearchService: NodeIKernelSearchService,
|
||||
NodeIKernelSearchService: NodeIKernelSearchService;
|
||||
NodeIKernelCollectionService: NodeIKernelCollectionService;
|
||||
};
|
||||
|
||||
@@ -323,7 +323,7 @@ export interface FlashTransferInfo {
|
||||
id: string;
|
||||
urls: FlashTransferIcon[];
|
||||
localCachePath: string;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -337,7 +337,7 @@ export interface MarkdownElement {
|
||||
mdExtType?: number;
|
||||
mdExtInfo?: {
|
||||
flashTransferInfo: FlashTransferInfo;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -550,6 +550,96 @@ export interface QueryMsgsParams {
|
||||
isIncludeCurrent: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
* 消息引用标识(msgId + msgSeq + msgTime)
|
||||
*/
|
||||
export interface MsgRef {
|
||||
msgId: string;
|
||||
msgSeq: string;
|
||||
msgTime: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* 消息完整标识(含cliSeq和msgRandom)
|
||||
*/
|
||||
export interface MsgIdentity {
|
||||
msgId: string;
|
||||
msgSeq: string;
|
||||
cliSeq: string;
|
||||
msgTime: string;
|
||||
msgRandom: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* 灰条JSON消息信息
|
||||
*/
|
||||
export interface GrayTipJsonInfo {
|
||||
busiId: number | string;
|
||||
jsonStr: string;
|
||||
recentAbstract: string;
|
||||
isServer: boolean;
|
||||
xmlToJsonParam?: unknown;
|
||||
}
|
||||
|
||||
/**
|
||||
* 转发文件信息
|
||||
*/
|
||||
export interface ForwardFileInfo {
|
||||
targetMsgId: string;
|
||||
targetElemId: string;
|
||||
commonFileInfo: unknown;
|
||||
}
|
||||
|
||||
/**
|
||||
* 本地灰条提示信息
|
||||
*/
|
||||
export interface LocalGrayTipInfo {
|
||||
type: number;
|
||||
robot?: unknown;
|
||||
direct?: unknown;
|
||||
extraJson: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Token设置信息
|
||||
*/
|
||||
export interface TokenInfo {
|
||||
tokenType: number;
|
||||
apnsToken?: string | Uint8Array;
|
||||
voipToken?: string | Uint8Array;
|
||||
profileId?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* 后台切换时的未读计数信息
|
||||
*/
|
||||
export interface BackGroundInfo {
|
||||
c2cUnreadCnt: number;
|
||||
groupUnreadCnt: number;
|
||||
guildUnreadCnt: number;
|
||||
guildPsvboxUnreadCnt: number;
|
||||
verifyUnreadCnt: number;
|
||||
contactUnreadCnt: number;
|
||||
groupUnreadCodes: string[];
|
||||
}
|
||||
|
||||
/**
|
||||
* 消息类型过滤参数
|
||||
*/
|
||||
export interface MsgTypeFilter {
|
||||
filterMsgType: Array<{ type: number; subType: Array<number>; }>;
|
||||
filterSendersUid: string[];
|
||||
}
|
||||
|
||||
/**
|
||||
* 空间流参数
|
||||
*/
|
||||
export interface SgrpStreamParams {
|
||||
sgrpStreamPginSourceName: string;
|
||||
sgrpVisitFrom: string;
|
||||
sgrpSessionId: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* 临时聊天信息API接口
|
||||
*/
|
||||
|
||||
@@ -29,6 +29,28 @@ import { NodeIkernelTestPerformanceService } from './services/NodeIkernelTestPer
|
||||
import { NodeIKernelECDHService } from './services/NodeIKernelECDHService';
|
||||
import { NodeIO3MiscService } from './services/NodeIO3MiscService';
|
||||
import { NodeIKernelFlashTransferService } from './services/NodeIKernelFlashTransferService';
|
||||
import { NodeIKernelOnlineStatusService } from './services/NodeIKernelOnlineStatusService';
|
||||
import { NodeIKernelBaseEmojiService } from './services/NodeIKernelBaseEmojiService';
|
||||
import { NodeIKernelSettingService } from './services/NodeIKernelSettingService';
|
||||
import { NodeIKernelFileAssistantService } from './services/NodeIKernelFileAssistantService';
|
||||
import { NodeIKernelDbToolsService } from './services/NodeIKernelDbToolsService';
|
||||
import { NodeIYellowFaceService } from './services/NodeIYellowFaceService';
|
||||
import { NodeIKernelQiDianService } from './services/NodeIKernelQiDianService';
|
||||
import { NodeIKernelSkinService } from './services/NodeIKernelSkinService';
|
||||
import { NodeIKernelQQPlayService } from './services/NodeIKernelQQPlayService';
|
||||
import { NodeIKernelRDeliveryService } from './services/NodeIKernelRDeliveryService';
|
||||
import { NodeIKernelRemotingService } from './services/NodeIKernelRemotingService';
|
||||
import { NodeIKernelLiteBusinessService } from './services/NodeIKernelLiteBusinessService';
|
||||
import { NodeIKernelGroupTabService } from './services/NodeIKernelGroupTabService';
|
||||
import { NodeIKernelLockService } from './services/NodeIKernelLockService';
|
||||
import { NodeIKernelHandOffService } from './services/NodeIKernelHandOffService';
|
||||
import { NodeIKernelMiniAppService } from './services/NodeIKernelMiniAppService';
|
||||
import { NodeIKernelPublicAccountService } from './services/NodeIKernelPublicAccountService';
|
||||
import { NodeIKernelThirdPartySigService } from './services/NodeIKernelThirdPartySigService';
|
||||
import { NodeIKernelUnifySearchService } from './services/NodeIKernelUnifySearchService';
|
||||
import { NodeIKernelVasSystemUpdateService } from './services/NodeIKernelVasSystemUpdateService';
|
||||
import { NodeIKernelPersonalAlbumService } from './services/NodeIKernelPersonalAlbumService';
|
||||
import { NodeIKernelConfigMgrService } from './services/NodeIKernelConfigMgrService';
|
||||
|
||||
export interface NodeQQNTWrapperUtil {
|
||||
get (): NodeQQNTWrapperUtil;
|
||||
@@ -39,46 +61,46 @@ export interface NodeQQNTWrapperUtil {
|
||||
|
||||
getSsoCmdOfOidbReq (arg1: number, arg2: number): unknown;
|
||||
|
||||
getSsoBufferOfOidbReq (...args: unknown[]): unknown; // 有点看不懂参数定义 待补充 好像是三个参数
|
||||
getSsoBufferOfOidbReq (arg1: unknown, arg2: unknown, arg3: unknown): unknown;
|
||||
|
||||
getOidbRspInfo (arg: string): unknown; // 可能是错的
|
||||
getOidbRspInfo (arg: string): unknown;
|
||||
|
||||
getFileSize (path: string): Promise<number>; // 直接的猜测
|
||||
getFileSize (path: string): Promise<number>;
|
||||
|
||||
genFileMd5Buf (arg: string): unknown; // 可能是错的
|
||||
genFileMd5Buf (arg: string): unknown;
|
||||
|
||||
genFileMd5Hex (path: string): unknown; // 直接的猜测
|
||||
genFileMd5Hex (path: string): unknown;
|
||||
|
||||
genFileShaBuf (path: string): unknown; // 直接的猜测
|
||||
genFileShaBuf (path: string): unknown;
|
||||
|
||||
genFileCumulateSha1 (path: string): unknown; // 直接的猜测
|
||||
genFileCumulateSha1 (path: string): unknown;
|
||||
|
||||
genFileShaHex (path: string): unknown; // 直接的猜测
|
||||
genFileShaHex (path: string): unknown;
|
||||
|
||||
fileIsExist (path: string): unknown;
|
||||
|
||||
startTrace (path: string): unknown; // 可能是错的
|
||||
startTrace (path: string): unknown;
|
||||
|
||||
copyFile (src: string, dst: string): unknown;
|
||||
|
||||
genFileShaAndMd5Hex (path: string, unknown: number): unknown; // 可能是错的
|
||||
genFileShaAndMd5Hex (path: string, unknown: number): unknown;
|
||||
|
||||
setTraceInfo (unknown: unknown): unknown;
|
||||
|
||||
encodeOffLine (unknown: unknown): unknown;
|
||||
|
||||
decodeOffLine (arg: string): unknown; // 可能是错的 传递hex
|
||||
decodeOffLine (arg: string): unknown;
|
||||
|
||||
DecoderRecentInfo (arg: string): unknown; // 可能是错的 传递hex
|
||||
DecoderRecentInfo (arg: string): unknown;
|
||||
|
||||
getPinyin (arg0: string, arg1: boolean): unknown;
|
||||
|
||||
matchInPinyin (arg0: unknown[], arg1: string): unknown; // 参数特复杂 arg0是个复杂数据类型
|
||||
getPinyinExt (arg0: string, arg1: boolean): unknown;
|
||||
|
||||
matchInPinyin (arg0: unknown[], arg1: string): unknown;
|
||||
|
||||
makeDirByPath (arg0: string): unknown;
|
||||
|
||||
emptyWorkingSet (arg0: number): unknown; // 参数是UINT32
|
||||
|
||||
runProcess (arg0: string, arg1: boolean): unknown;
|
||||
|
||||
runProcessArgs (arg0: string, arg1: { [key: string]: string; }, arg2: boolean): unknown;
|
||||
@@ -141,6 +163,24 @@ export interface NodeQQNTWrapperUtil {
|
||||
|
||||
isNull (): unknown;
|
||||
|
||||
deletePath (path: string): unknown;
|
||||
|
||||
calculateDirectoryTotalSize (path: string): unknown;
|
||||
|
||||
GetBaseEmojiPathByIds (arg: unknown): unknown;
|
||||
|
||||
SetMobileBaseEmojiPath (arg0: unknown, arg1: unknown): unknown;
|
||||
|
||||
setCreateThumbailSupportedFileExtensions (arg0: unknown, arg1: unknown): unknown;
|
||||
|
||||
setFileDropNativeWindowHide (arg: unknown): unknown;
|
||||
|
||||
setFileDropWindowNativeWindowHandle (arg: unknown): unknown;
|
||||
|
||||
startListenFileDragEvent (arg: unknown): unknown;
|
||||
|
||||
stopAccessingSecurityScopedResource (arg: unknown): unknown;
|
||||
|
||||
createThumbnailImage (
|
||||
serviceName: string,
|
||||
filePath: string,
|
||||
@@ -180,6 +220,43 @@ export interface NodeIQQNTWrapperSession {
|
||||
|
||||
startNT (): void;
|
||||
|
||||
// === Session lifecycle ===
|
||||
close (arg: unknown): void;
|
||||
|
||||
onLine (arg: unknown): void;
|
||||
|
||||
offLine (arg: unknown): void;
|
||||
|
||||
disableIpDirect (arg: unknown): void;
|
||||
|
||||
getAccountPath (arg: unknown): string;
|
||||
|
||||
updateTicket (arg: unknown): void;
|
||||
|
||||
// === SSO/Network dispatch ===
|
||||
onDispatchPush (arg1: unknown, arg2: unknown): void;
|
||||
|
||||
onDispatchPushWithJson (arg1: unknown, arg2: unknown): void;
|
||||
|
||||
onDispatchRequestReply (arg1: unknown, arg2: unknown, arg3: unknown): void;
|
||||
|
||||
onMsfPush (arg1: unknown, arg2: unknown, arg3: unknown): void;
|
||||
|
||||
onNetReply (arg1: unknown, arg2: unknown, arg3: unknown, arg4: unknown): void;
|
||||
|
||||
onSendOidbReply (arg1: unknown, arg2: unknown, arg3: unknown, arg4: unknown, arg5: unknown): void;
|
||||
|
||||
onSendSSOReply (arg1: unknown, arg2: unknown, arg3: unknown, arg4: unknown, arg5: unknown): void;
|
||||
|
||||
onUIConfigUpdate (arg1: unknown, arg2: unknown): void;
|
||||
|
||||
setOnMsfStatusChanged (arg1: unknown, arg2: unknown, arg3: unknown): void;
|
||||
|
||||
setOnNetworkChanged (arg: unknown): void;
|
||||
|
||||
setOnWeakNetChanged (arg: unknown): void;
|
||||
|
||||
// === Service getters ===
|
||||
getBdhUploadService (): unknown;
|
||||
|
||||
getECDHService (): NodeIKernelECDHService;
|
||||
@@ -220,47 +297,47 @@ export interface NodeIQQNTWrapperSession {
|
||||
|
||||
getDirectSessionService (): unknown;
|
||||
|
||||
getRDeliveryService (): unknown;
|
||||
getRDeliveryService (): NodeIKernelRDeliveryService;
|
||||
|
||||
getAvatarService (): NodeIKernelAvatarService;
|
||||
|
||||
getFeedChannelService (): unknown;
|
||||
|
||||
getYellowFaceService (): unknown;
|
||||
getYellowFaceService (): NodeIYellowFaceService;
|
||||
|
||||
getCollectionService (): NodeIKernelCollectionService;
|
||||
|
||||
getSettingService (): unknown;
|
||||
getSettingService (): NodeIKernelSettingService;
|
||||
|
||||
getQiDianService (): unknown;
|
||||
getQiDianService (): NodeIKernelQiDianService;
|
||||
|
||||
getFileAssistantService (): unknown;
|
||||
getFileAssistantService (): NodeIKernelFileAssistantService;
|
||||
|
||||
getGuildService (): unknown;
|
||||
|
||||
getSkinService (): unknown;
|
||||
getSkinService (): NodeIKernelSkinService;
|
||||
|
||||
getTestPerformanceService (): NodeIkernelTestPerformanceService;
|
||||
|
||||
getQQPlayService (): unknown;
|
||||
getQQPlayService (): NodeIKernelQQPlayService;
|
||||
|
||||
getDbToolsService (): unknown;
|
||||
getDbToolsService (): NodeIKernelDbToolsService;
|
||||
|
||||
getUixConvertService (): NodeIKernelUixConvertService;
|
||||
|
||||
getOnlineStatusService (): unknown;
|
||||
getOnlineStatusService (): NodeIKernelOnlineStatusService;
|
||||
|
||||
getRemotingService (): unknown;
|
||||
getRemotingService (): NodeIKernelRemotingService;
|
||||
|
||||
getGroupTabService (): unknown;
|
||||
getGroupTabService (): NodeIKernelGroupTabService;
|
||||
|
||||
getGroupSchoolService (): unknown;
|
||||
|
||||
getLiteBusinessService (): unknown;
|
||||
getLiteBusinessService (): NodeIKernelLiteBusinessService;
|
||||
|
||||
getGuildMsgService (): unknown;
|
||||
|
||||
getLockService (): unknown;
|
||||
getLockService (): NodeIKernelLockService;
|
||||
|
||||
getMSFService (): NodeIKernelMSFService;
|
||||
|
||||
@@ -270,7 +347,29 @@ export interface NodeIQQNTWrapperSession {
|
||||
|
||||
getRecentContactService (): NodeIKernelRecentContactService;
|
||||
|
||||
getConfigMgrService (): unknown;
|
||||
getConfigMgrService (): NodeIKernelConfigMgrService;
|
||||
|
||||
getBaseEmojiService (): NodeIKernelBaseEmojiService;
|
||||
|
||||
getHandOffService (): NodeIKernelHandOffService;
|
||||
|
||||
getMiniAppService (): NodeIKernelMiniAppService;
|
||||
|
||||
getPublicAccountService (): NodeIKernelPublicAccountService;
|
||||
|
||||
getThirdPartySigService (): NodeIKernelThirdPartySigService;
|
||||
|
||||
getUnifySearchService (): NodeIKernelUnifySearchService;
|
||||
|
||||
getVasSystemUpdateService (): NodeIKernelVasSystemUpdateService;
|
||||
|
||||
getPersonalAlbumService (): NodeIKernelPersonalAlbumService;
|
||||
|
||||
getGProGuildMsgService (): unknown;
|
||||
|
||||
getFileBridgeHostService (): unknown;
|
||||
|
||||
getWiFiPhotoClientService (): unknown;
|
||||
}
|
||||
|
||||
export interface EnginInitDesktopConfig {
|
||||
@@ -291,6 +390,14 @@ export interface NodeIQQNTWrapperEngine {
|
||||
get (): NodeIQQNTWrapperEngine;
|
||||
|
||||
initWithDeskTopConfig (config: EnginInitDesktopConfig, nodeIGlobalAdapter: NodeIGlobalAdapter): void;
|
||||
|
||||
initWithMobileConfig (config: unknown, nodeIGlobalAdapter: NodeIGlobalAdapter): void;
|
||||
|
||||
initLog (arg: unknown): void;
|
||||
|
||||
setLogLevel (arg: unknown): void;
|
||||
|
||||
onSendSSOReply (arg1: unknown, arg2: unknown, arg3: unknown, arg4: unknown, arg5: unknown): void;
|
||||
}
|
||||
|
||||
export interface WrapperNodeApi {
|
||||
|
||||
21
packages/napcat-dpapi/LICENSE
Normal file
21
packages/napcat-dpapi/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2023 Xavier Monin
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
4
packages/napcat-dpapi/README.md
Normal file
4
packages/napcat-dpapi/README.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# @primno/dpapi
|
||||
|
||||
## 协议与说明
|
||||
全部遵守原仓库要求
|
||||
65
packages/napcat-dpapi/index.ts
Normal file
65
packages/napcat-dpapi/index.ts
Normal file
@@ -0,0 +1,65 @@
|
||||
/**
|
||||
* napcat-dpapi - Windows DPAPI wrapper
|
||||
*
|
||||
* Loads the native @primno+dpapi.node addon from the runtime
|
||||
* native/dpapi/ directory using process.dlopen, consistent
|
||||
* with how other native modules (ffmpeg, packet, pty) are loaded.
|
||||
*/
|
||||
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import path, { dirname } from 'node:path';
|
||||
|
||||
export type DataProtectionScope = 'CurrentUser' | 'LocalMachine';
|
||||
|
||||
export interface DpapiBindings {
|
||||
protectData (dataToEncrypt: Uint8Array, optionalEntropy: Uint8Array | null, scope: DataProtectionScope): Uint8Array;
|
||||
unprotectData (encryptData: Uint8Array, optionalEntropy: Uint8Array | null, scope: DataProtectionScope): Uint8Array;
|
||||
}
|
||||
|
||||
let dpapiBindings: DpapiBindings | null = null;
|
||||
let loadError: Error | null = null;
|
||||
|
||||
function getAddonPath (): string {
|
||||
// At runtime, import.meta.url resolves to dist/ directory.
|
||||
// Native files are at dist/native/dpapi/{platform}-{arch}/@primno+dpapi.node
|
||||
const importDir = dirname(fileURLToPath(import.meta.url));
|
||||
const platform = process.platform; // 'win32'
|
||||
const arch = process.arch; // 'x64' or 'arm64'
|
||||
return path.join(importDir, 'native', 'dpapi', `${platform}-${arch}`, '@primno+dpapi.node');
|
||||
}
|
||||
|
||||
function loadDpapi (): DpapiBindings {
|
||||
if (dpapiBindings) {
|
||||
return dpapiBindings;
|
||||
}
|
||||
if (loadError) {
|
||||
throw loadError;
|
||||
}
|
||||
try {
|
||||
const addonPath = getAddonPath();
|
||||
const nativeModule: { exports: DpapiBindings } = { exports: {} as DpapiBindings };
|
||||
process.dlopen(nativeModule, addonPath);
|
||||
dpapiBindings = nativeModule.exports;
|
||||
return dpapiBindings;
|
||||
} catch (e) {
|
||||
loadError = e as Error;
|
||||
throw new Error(`Failed to load DPAPI native addon: ${(e as Error).message}`);
|
||||
}
|
||||
}
|
||||
|
||||
export const isPlatformSupported = process.platform === 'win32';
|
||||
|
||||
export function protectData (data: Uint8Array, optionalEntropy: Uint8Array | null, scope: DataProtectionScope): Uint8Array {
|
||||
return loadDpapi().protectData(data, optionalEntropy, scope);
|
||||
}
|
||||
|
||||
export function unprotectData (data: Uint8Array, optionalEntropy: Uint8Array | null, scope: DataProtectionScope): Uint8Array {
|
||||
return loadDpapi().unprotectData(data, optionalEntropy, scope);
|
||||
}
|
||||
|
||||
export const Dpapi = {
|
||||
protectData,
|
||||
unprotectData,
|
||||
};
|
||||
|
||||
export default Dpapi;
|
||||
18
packages/napcat-dpapi/package.json
Normal file
18
packages/napcat-dpapi/package.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "napcat-dpapi",
|
||||
"version": "0.0.1",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"main": "index.ts",
|
||||
"exports": {
|
||||
".": {
|
||||
"import": "./index.ts"
|
||||
}
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^22.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18.0.0"
|
||||
}
|
||||
}
|
||||
10
packages/napcat-dpapi/tsconfig.json
Normal file
10
packages/napcat-dpapi/tsconfig.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"extends": "../../tsconfig.base.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "./dist",
|
||||
"rootDir": "."
|
||||
},
|
||||
"include": [
|
||||
"./**/*.ts"
|
||||
]
|
||||
}
|
||||
@@ -2,6 +2,7 @@ import { NapCatPathWrapper } from 'napcat-common/src/path';
|
||||
import { InitWebUi, WebUiConfig, webUiRuntimePort } from 'napcat-webui-backend/index';
|
||||
import { NapCatAdapterManager } from 'napcat-adapter';
|
||||
import { NativePacketHandler } from 'napcat-core/packet/handler/client';
|
||||
import { Napi2NativeLoader } from 'napcat-core/packet/handler/napi2nativeLoader';
|
||||
import { FFmpegService } from 'napcat-core/helper/ffmpeg/ffmpeg';
|
||||
import { logSubscription, LogWrapper } from 'napcat-core/helper/log';
|
||||
import { QQBasicInfoWrapper } from '@/napcat-core/helper/qq-basic-info';
|
||||
@@ -40,6 +41,16 @@ export async function NCoreInitFramework (
|
||||
const basicInfoWrapper = new QQBasicInfoWrapper({ logger });
|
||||
const wrapper = loadQQWrapper(basicInfoWrapper.QQMainPath, basicInfoWrapper.getFullQQVersion());
|
||||
const nativePacketHandler = new NativePacketHandler({ logger }); // 初始化 NativePacketHandler 用于后续使用
|
||||
const napi2nativeLoader = new Napi2NativeLoader({ logger }); // 初始化 Napi2NativeLoader 用于后续使用
|
||||
//console.log('[NapCat] [Napi2NativeLoader]', napi2nativeLoader.nativeExports.enableAllBypasses?.());
|
||||
if (process.env['NAPCAT_DISABLE_BYPASS'] !== '1') {
|
||||
const bypassEnabled = napi2nativeLoader.nativeExports.enableAllBypasses?.();
|
||||
if (bypassEnabled) {
|
||||
logger.log('[NapCat] Napi2NativeLoader: 已启用Bypass');
|
||||
}
|
||||
} else {
|
||||
logger.log('[NapCat] Napi2NativeLoader: Bypass已通过环境变量禁用');
|
||||
}
|
||||
// nativePacketHandler.onAll((packet) => {
|
||||
// console.log('[Packet]', packet.uin, packet.cmd, packet.hex_data);
|
||||
// });
|
||||
@@ -73,11 +84,12 @@ export async function NCoreInitFramework (
|
||||
// 过早进入会导致addKernelMsgListener等Listener添加失败
|
||||
// await sleep(2500);
|
||||
// 初始化 NapCatFramework
|
||||
const loaderObject = new NapCatFramework(wrapper, session, logger, selfInfo, basicInfoWrapper, pathWrapper, nativePacketHandler);
|
||||
const loaderObject = new NapCatFramework(wrapper, session, logger, selfInfo, basicInfoWrapper, pathWrapper, nativePacketHandler, napi2nativeLoader);
|
||||
await loaderObject.core.initCore();
|
||||
|
||||
// 启动WebUi
|
||||
WebUiDataRuntime.setWorkingEnv(NapCatCoreWorkingEnv.Framework);
|
||||
WebUiDataRuntime.setQQDataPath(loaderObject.core.dataPath);
|
||||
InitWebUi(logger, pathWrapper, logSubscription, statusHelperSubscription).then().catch(e => logger.logError(e));
|
||||
// 使用 NapCatAdapterManager 统一管理协议适配器
|
||||
const adapterManager = new NapCatAdapterManager(loaderObject.core, loaderObject.context, pathWrapper);
|
||||
@@ -100,10 +112,12 @@ export class NapCatFramework {
|
||||
selfInfo: SelfInfo,
|
||||
basicInfoWrapper: QQBasicInfoWrapper,
|
||||
pathWrapper: NapCatPathWrapper,
|
||||
packetHandler: NativePacketHandler
|
||||
packetHandler: NativePacketHandler,
|
||||
napi2nativeLoader: Napi2NativeLoader
|
||||
) {
|
||||
this.context = {
|
||||
packetHandler,
|
||||
napi2nativeLoader,
|
||||
workingEnv: NapCatCoreWorkingEnv.Framework,
|
||||
wrapper,
|
||||
session,
|
||||
|
||||
BIN
packages/napcat-native/dpapi/win32-arm64/@primno+dpapi.node
Normal file
BIN
packages/napcat-native/dpapi/win32-arm64/@primno+dpapi.node
Normal file
Binary file not shown.
BIN
packages/napcat-native/dpapi/win32-x64/@primno+dpapi.node
Normal file
BIN
packages/napcat-native/dpapi/win32-x64/@primno+dpapi.node
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
packages/napcat-native/napi2native/ffmpeg.dll
Normal file
BIN
packages/napcat-native/napi2native/ffmpeg.dll
Normal file
Binary file not shown.
Binary file not shown.
@@ -17,7 +17,7 @@ export const OB11UserSchema = Type.Object({
|
||||
login_days: Type.Optional(Type.Number({ description: '登录天数' })),
|
||||
categoryName: Type.Optional(Type.String({ description: '分组名称' })),
|
||||
categoryId: Type.Optional(Type.Number({ description: '分组ID' })),
|
||||
}, { description: 'OneBot 11 用户信息' });
|
||||
}, { $id: 'OB11User', description: 'OneBot 11 用户信息' });
|
||||
|
||||
export const OB11GroupSchema = Type.Object({
|
||||
group_all_shut: Type.Number({ description: '是否全员禁言' }),
|
||||
@@ -26,7 +26,7 @@ export const OB11GroupSchema = Type.Object({
|
||||
group_name: Type.String({ description: '群名称' }),
|
||||
member_count: Type.Optional(Type.Number({ description: '成员人数' })),
|
||||
max_member_count: Type.Optional(Type.Number({ description: '最大成员人数' })),
|
||||
}, { description: 'OneBot 11 群信息' });
|
||||
}, { $id: 'OB11Group', description: 'OneBot 11 群信息' });
|
||||
|
||||
export const OB11GroupMemberSchema = Type.Object({
|
||||
group_id: Type.Number({ description: '群号' }),
|
||||
@@ -48,7 +48,7 @@ export const OB11GroupMemberSchema = Type.Object({
|
||||
shut_up_timestamp: Type.Optional(Type.Number({ description: '禁言截止时间戳' })),
|
||||
is_robot: Type.Optional(Type.Boolean({ description: '是否为机器人' })),
|
||||
qage: Type.Optional(Type.Number({ description: 'Q龄' })),
|
||||
}, { description: 'OneBot 11 群成员信息' });
|
||||
}, { $id: 'OB11GroupMember', description: 'OneBot 11 群成员信息' });
|
||||
|
||||
export const OB11NotifySchema = Type.Object({
|
||||
request_id: Type.Number({ description: '请求ID' }),
|
||||
@@ -60,7 +60,7 @@ export const OB11NotifySchema = Type.Object({
|
||||
checked: Type.Boolean({ description: '是否已处理' }),
|
||||
actor: Type.Number({ description: '操作者QQ' }),
|
||||
requester_nick: Type.String({ description: '申请者昵称' }),
|
||||
}, { description: 'OneBot 11 通知信息' });
|
||||
}, { $id: 'OB11Notify', description: 'OneBot 11 通知信息' });
|
||||
|
||||
export const lastestMessageSchema = Type.Object({
|
||||
self_id: Type.Number({ description: '发送者QQ号' }),
|
||||
@@ -82,7 +82,7 @@ export const lastestMessageSchema = Type.Object({
|
||||
post_type: Type.String({ description: '发布类型' }),
|
||||
group_id: Type.Number({ description: '群号' }),
|
||||
group_name: Type.String({ description: '群名称' }),
|
||||
}, { description: '最后一条消息' });
|
||||
}, { $id: 'OB11LatestMessage', description: '最后一条消息' });
|
||||
|
||||
export const OB11MessageSchema = Type.Intersect([
|
||||
lastestMessageSchema,
|
||||
@@ -95,4 +95,4 @@ export const OB11MessageSchema = Type.Intersect([
|
||||
likes_cnt: Type.String({ description: '点赞数' }),
|
||||
})),
|
||||
}, { description: 'OneBot 11 消息信息' })
|
||||
]);
|
||||
], { $id: 'OB11ActionMessage', description: 'OneBot 11 消息信息' });
|
||||
@@ -13,6 +13,8 @@ export interface PluginPackageJson {
|
||||
main?: string;
|
||||
description?: string;
|
||||
author?: string;
|
||||
homepage?: string;
|
||||
repository?: string | { type: string; url: string; };
|
||||
}
|
||||
|
||||
// ==================== 插件配置 Schema ====================
|
||||
|
||||
@@ -325,8 +325,11 @@ export const OB11MessageDataSchema = Type.Union([
|
||||
OB11MessageDiceSchema,
|
||||
OB11MessageRPSSchema,
|
||||
OB11MessageContactSchema,
|
||||
OB11MessageLocationSchema,
|
||||
OB11MessageJsonSchema,
|
||||
OB11MessageXmlSchema,
|
||||
OB11MessageMarkdownSchema,
|
||||
OB11MessageMiniAppSchema,
|
||||
OB11MessageNodeSchema,
|
||||
OB11MessageForwardSchema,
|
||||
OB11MessageOnlineFileSchema,
|
||||
|
||||
@@ -2,13 +2,16 @@ import { getAllHandlers } from '@/napcat-onebot/action/index';
|
||||
import { AutoRegisterRouter } from '@/napcat-onebot/action/auto-register';
|
||||
import { writeFileSync, existsSync } from 'node:fs';
|
||||
import { resolve, dirname } from 'node:path';
|
||||
import { TSchema } from '@sinclair/typebox';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import { OneBotAction } from '@/napcat-onebot/action/OneBotAction';
|
||||
import { TSchema } from '@sinclair/typebox';
|
||||
import { OneBotAction, ActionExamples } from '@/napcat-onebot/action/OneBotAction';
|
||||
import { napCatVersion } from 'napcat-common/src/version';
|
||||
import * as MessageSchemas from '@/napcat-onebot/types/message';
|
||||
import * as ActionSchemas from '@/napcat-onebot/action/schemas';
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = dirname(__filename);
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* 基础类型 */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
interface ActionSchemaInfo {
|
||||
payload?: TSchema;
|
||||
@@ -21,52 +24,524 @@ interface ActionSchemaInfo {
|
||||
errorExamples?: Array<{ code: number, description: string; }>;
|
||||
}
|
||||
|
||||
type JsonObject = { [key: string]: unknown; };
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = dirname(__filename);
|
||||
|
||||
const OPENAPI_OUTPUT_PATH = resolve(__dirname, 'openapi.json');
|
||||
const MISSING_REPORT_PATH = resolve(__dirname, 'missing_props.log');
|
||||
|
||||
export const actionSchemas: Record<string, ActionSchemaInfo> = {};
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* 日志工具 */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* 统一日志前缀,方便在构建日志中快速检索。
|
||||
*/
|
||||
const LOG_SCOPE = '[napcat-schema]';
|
||||
|
||||
function logSection (title: string) {
|
||||
console.log(`\n${LOG_SCOPE} ── ${title}`);
|
||||
}
|
||||
|
||||
function logInfo (message: string) {
|
||||
console.log(`${LOG_SCOPE} ℹ ${message}`);
|
||||
}
|
||||
|
||||
function logWarn (message: string) {
|
||||
console.warn(`${LOG_SCOPE} ⚠ ${message}`);
|
||||
}
|
||||
|
||||
function logSuccess (message: string) {
|
||||
console.log(`${LOG_SCOPE} ✅ ${message}`);
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* OpenAPI 基础组件(固定部分) */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
const BaseResponseSchema: JsonObject = {
|
||||
type: 'object',
|
||||
'x-schema-id': 'BaseResponse',
|
||||
properties: {
|
||||
status: { type: 'string', description: '状态 (ok/failed)' },
|
||||
retcode: { type: 'number', description: '返回码' },
|
||||
data: { description: '业务数据(具体结构由各接口定义)' },
|
||||
message: { type: 'string', description: '消息' },
|
||||
wording: { type: 'string', description: '提示' },
|
||||
stream: {
|
||||
type: 'string',
|
||||
description: '流式响应',
|
||||
enum: ['stream-action', 'normal-action']
|
||||
}
|
||||
},
|
||||
required: ['status', 'retcode']
|
||||
};
|
||||
|
||||
const EmptyDataSchema: JsonObject = {
|
||||
description: '无数据',
|
||||
type: 'null'
|
||||
};
|
||||
|
||||
const DEFAULT_SUCCESS_EXAMPLE_VALUE = {
|
||||
status: 'ok',
|
||||
retcode: 0,
|
||||
data: {},
|
||||
message: '',
|
||||
wording: '',
|
||||
stream: 'normal-action'
|
||||
} as const;
|
||||
|
||||
const DEFAULT_ERROR_EXAMPLE_DEFINITIONS = ActionExamples.Common.errors;
|
||||
|
||||
const SUCCESS_DEFAULT_EXAMPLE_KEY = 'Success_Default';
|
||||
|
||||
function isObjectRecord (value: unknown): value is Record<string, unknown> {
|
||||
return !!value && typeof value === 'object' && !Array.isArray(value);
|
||||
}
|
||||
|
||||
function isEmptyObject (value: unknown): value is Record<string, never> {
|
||||
return isObjectRecord(value) && Object.keys(value).length === 0;
|
||||
}
|
||||
|
||||
function isEmptyArray (value: unknown): value is [] {
|
||||
return Array.isArray(value) && value.length === 0;
|
||||
}
|
||||
|
||||
function isMeaninglessSuccessExampleData (value: unknown): boolean {
|
||||
return value === null || isEmptyObject(value) || isEmptyArray(value);
|
||||
}
|
||||
|
||||
function resolveCommonErrorExampleKey (error: { code: number, description: string; }): string | null {
|
||||
const matched = DEFAULT_ERROR_EXAMPLE_DEFINITIONS.find(
|
||||
item => item.code === error.code && item.description === error.description
|
||||
);
|
||||
return matched ? `Error_${matched.code}` : null;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* 通用工具函数 */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* 深拷贝 schema,优先使用 structuredClone,失败时回落到 JSON 序列化。
|
||||
*/
|
||||
function cloneSchema<T> (schema: T): T {
|
||||
if (typeof globalThis.structuredClone === 'function') {
|
||||
try {
|
||||
return globalThis.structuredClone(schema);
|
||||
} catch {
|
||||
// fallback
|
||||
}
|
||||
}
|
||||
return JSON.parse(JSON.stringify(schema)) as T;
|
||||
}
|
||||
|
||||
/**
|
||||
* 在 anyOf/oneOf 中,将“多个单值 enum 分支 + 可选 nullable 分支”压缩为单个 enum。
|
||||
*
|
||||
* 例:
|
||||
* - anyOf: [{ type:'string', enum:['a'] }, { type:'string', enum:['b'] }]
|
||||
* -> { type:'string', enum:['a','b'] }
|
||||
*/
|
||||
function collapseSingleValueEnumCombinator (items: unknown[]): Record<string, unknown> | null {
|
||||
const enumValues: unknown[] = [];
|
||||
let type: string | undefined;
|
||||
let nullable = false;
|
||||
|
||||
for (const item of items) {
|
||||
if (!item || typeof item !== 'object') {
|
||||
return null;
|
||||
}
|
||||
|
||||
const branch = item as Record<string, unknown>;
|
||||
|
||||
// 兼容仅有 nullable 的分支
|
||||
if (branch['nullable'] === true && Object.keys(branch).length === 1) {
|
||||
nullable = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
const branchEnum = branch['enum'];
|
||||
if (!Array.isArray(branchEnum) || branchEnum.length !== 1) {
|
||||
return null;
|
||||
}
|
||||
|
||||
enumValues.push(branchEnum[0]);
|
||||
|
||||
if (typeof branch['type'] === 'string') {
|
||||
if (!type) {
|
||||
type = branch['type'];
|
||||
} else if (type !== branch['type']) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (enumValues.length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const merged: Record<string, unknown> = { enum: [...new Set(enumValues)] };
|
||||
if (type) {
|
||||
merged['type'] = type;
|
||||
}
|
||||
if (nullable) {
|
||||
merged['nullable'] = true;
|
||||
}
|
||||
return merged;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将 TypeBox/JSON-Schema 映射为 OpenAPI 3.1 兼容结构。
|
||||
*
|
||||
* 关键规则:
|
||||
* - $id -> x-schema-id(保留标识用于后续 $ref 替换)
|
||||
* - const -> enum:[const]
|
||||
* - type:'void' / type:'undefined' -> type:'null'
|
||||
* - nullable:true -> type 包含 'null'
|
||||
* - anyOf/oneOf 的简单 enum 分支做压缩
|
||||
*/
|
||||
function sanitizeSchemaForOpenAPI<T> (schema: T): T {
|
||||
const walk = (value: unknown): unknown => {
|
||||
if (Array.isArray(value)) {
|
||||
return value.map(walk);
|
||||
}
|
||||
|
||||
if (value && typeof value === 'object') {
|
||||
const obj = value as Record<string, unknown>;
|
||||
const next: Record<string, unknown> = {};
|
||||
|
||||
for (const [key, child] of Object.entries(obj)) {
|
||||
// 特殊处理 properties 容器:只遍历每个属性的 schema,避免将容器对象误判为 schema 元对象
|
||||
if (key === 'properties' && child && typeof child === 'object' && !Array.isArray(child)) {
|
||||
const cleanProps: Record<string, unknown> = {};
|
||||
for (const [propName, propSchema] of Object.entries(child as Record<string, unknown>)) {
|
||||
cleanProps[propName] = walk(propSchema);
|
||||
}
|
||||
next[key] = cleanProps;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (key === '$id') {
|
||||
if (typeof child === 'string' && child.length > 0) {
|
||||
next['x-schema-id'] = child;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if (key === 'const') {
|
||||
next['enum'] = [child];
|
||||
continue;
|
||||
}
|
||||
|
||||
if (key === 'type' && typeof child === 'string') {
|
||||
if (child === 'void' || child === 'undefined') {
|
||||
next['type'] = 'null';
|
||||
} else {
|
||||
next['type'] = child;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if (key === 'type' && Array.isArray(child)) {
|
||||
const types = child
|
||||
.filter((t): t is string => typeof t === 'string')
|
||||
.map(t => (t === 'void' || t === 'undefined') ? 'null' : t);
|
||||
|
||||
const normalizedTypes = [...new Set(types)];
|
||||
if (normalizedTypes.length === 0) {
|
||||
next['type'] = 'null';
|
||||
} else if (normalizedTypes.length === 1) {
|
||||
next['type'] = normalizedTypes[0];
|
||||
} else {
|
||||
next['type'] = normalizedTypes;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((key === 'anyOf' || key === 'oneOf') && Array.isArray(child)) {
|
||||
const normalized = child.map(walk);
|
||||
const mergedEnum = collapseSingleValueEnumCombinator(normalized);
|
||||
if (mergedEnum) {
|
||||
Object.assign(next, mergedEnum);
|
||||
} else {
|
||||
next[key] = normalized;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
next[key] = walk(child);
|
||||
}
|
||||
|
||||
// OpenAPI 3.1:将 nullable 归一到 type 包含 null
|
||||
if (next['nullable'] === true) {
|
||||
const currentType = next['type'];
|
||||
if (typeof currentType === 'string') {
|
||||
next['type'] = currentType === 'null' ? 'null' : [currentType, 'null'];
|
||||
} else if (Array.isArray(currentType)) {
|
||||
const normalizedTypes = [
|
||||
...new Set(currentType
|
||||
.filter((t): t is string => typeof t === 'string')
|
||||
.map(t => (t === 'void' || t === 'undefined') ? 'null' : t)
|
||||
.concat('null'))
|
||||
];
|
||||
next['type'] = normalizedTypes.length === 1 ? normalizedTypes[0] : normalizedTypes;
|
||||
} else if (!('anyOf' in next) && !('oneOf' in next) && !('allOf' in next) && !('$ref' in next)) {
|
||||
next['type'] = 'null';
|
||||
}
|
||||
delete next['nullable'];
|
||||
}
|
||||
|
||||
// 兜底:仅有描述/元信息但缺少 type 时,补 object,避免严格校验失败
|
||||
if (
|
||||
!('type' in next)
|
||||
&& !('$ref' in next)
|
||||
&& !('anyOf' in next)
|
||||
&& !('oneOf' in next)
|
||||
&& !('allOf' in next)
|
||||
&& !('enum' in next)
|
||||
&& !('properties' in next)
|
||||
&& !('items' in next)
|
||||
) {
|
||||
const schemaMetaKeys = [
|
||||
'description', 'title', 'default', 'examples', 'example',
|
||||
'deprecated', 'readOnly', 'writeOnly', 'x-schema-id'
|
||||
];
|
||||
|
||||
if (schemaMetaKeys.some(key => key in next)) {
|
||||
next['type'] = 'object';
|
||||
}
|
||||
}
|
||||
|
||||
return next;
|
||||
}
|
||||
|
||||
return value;
|
||||
};
|
||||
|
||||
return walk(schema) as T;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Schema 注册 & 引用替换逻辑 */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* 将模块中所有“含 $id 的导出 schema”注册到 components.schemas。
|
||||
*/
|
||||
function registerSchemasFromModule (
|
||||
openapi: JsonObject,
|
||||
source: Record<string, unknown>,
|
||||
sourceName: string
|
||||
) {
|
||||
const components = ((openapi['components'] as JsonObject)['schemas'] as JsonObject);
|
||||
let registeredCount = 0;
|
||||
let duplicatedCount = 0;
|
||||
|
||||
for (const exportedValue of Object.values(source)) {
|
||||
if (!exportedValue || typeof exportedValue !== 'object') {
|
||||
continue;
|
||||
}
|
||||
|
||||
const schema = cloneSchema(exportedValue) as JsonObject;
|
||||
const schemaId = typeof schema['$id'] === 'string' && (schema['$id'] as string).length > 0
|
||||
? schema['$id'] as string
|
||||
: '';
|
||||
|
||||
if (!schemaId) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (components[schemaId]) {
|
||||
duplicatedCount += 1;
|
||||
logWarn(`发现重复 schema id(${sourceName}):${schemaId},将覆盖旧定义`);
|
||||
}
|
||||
|
||||
components[schemaId] = sanitizeSchemaForOpenAPI(schema);
|
||||
registeredCount += 1;
|
||||
}
|
||||
|
||||
logInfo(`${sourceName} 注册完成:${registeredCount} 个 schema,重复 ${duplicatedCount} 个`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 对 components.schemas 做去内联:
|
||||
* - 若子节点含 x-schema-id 且在 components.schemas 可命中
|
||||
* - 则替换为 $ref
|
||||
*
|
||||
* 注意:组件根节点不会替换为自身,避免根级自引用。
|
||||
*/
|
||||
function replaceComponentInlineSchemasWithRefs (openapi: JsonObject) {
|
||||
const components = openapi['components'] as JsonObject | undefined;
|
||||
const schemas = components?.['schemas'] as JsonObject | undefined;
|
||||
|
||||
if (!schemas || typeof schemas !== 'object') {
|
||||
return;
|
||||
}
|
||||
|
||||
const availableSchemaIds = new Set(Object.keys(schemas));
|
||||
let replacedCount = 0;
|
||||
|
||||
const walk = (value: unknown, ownerSchemaId: string): unknown => {
|
||||
if (Array.isArray(value)) {
|
||||
return value.map(item => walk(item, ownerSchemaId));
|
||||
}
|
||||
|
||||
if (value && typeof value === 'object') {
|
||||
const obj = value as JsonObject;
|
||||
const schemaId = obj['x-schema-id'];
|
||||
|
||||
if (
|
||||
typeof schemaId === 'string'
|
||||
&& schemaId !== ownerSchemaId
|
||||
&& availableSchemaIds.has(schemaId)
|
||||
) {
|
||||
replacedCount += 1;
|
||||
return { $ref: `#/components/schemas/${schemaId}` };
|
||||
}
|
||||
|
||||
const next: JsonObject = {};
|
||||
for (const [key, child] of Object.entries(obj)) {
|
||||
next[key] = walk(child, ownerSchemaId);
|
||||
}
|
||||
return next;
|
||||
}
|
||||
|
||||
return value;
|
||||
};
|
||||
|
||||
for (const [schemaId, schema] of Object.entries(schemas)) {
|
||||
schemas[schemaId] = walk(schema, schemaId);
|
||||
}
|
||||
|
||||
logInfo(`components 内联替换完成:${replacedCount} 处`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 对 paths 做去内联:
|
||||
* - 若节点含 x-schema-id 且在 components.schemas 可命中
|
||||
* - 则替换为 $ref
|
||||
*/
|
||||
function replacePathInlineSchemasWithRefs (openapi: JsonObject) {
|
||||
const paths = openapi['paths'];
|
||||
const components = openapi['components'] as JsonObject | undefined;
|
||||
const schemas = components?.['schemas'] as JsonObject | undefined;
|
||||
|
||||
if (!paths || typeof paths !== 'object' || !schemas || typeof schemas !== 'object') {
|
||||
return;
|
||||
}
|
||||
|
||||
const availableSchemaIds = new Set(Object.keys(schemas));
|
||||
let replacedCount = 0;
|
||||
|
||||
const walk = (value: unknown): unknown => {
|
||||
if (Array.isArray(value)) {
|
||||
return value.map(walk);
|
||||
}
|
||||
|
||||
if (value && typeof value === 'object') {
|
||||
const obj = value as JsonObject;
|
||||
const schemaId = obj['x-schema-id'];
|
||||
|
||||
if (typeof schemaId === 'string' && availableSchemaIds.has(schemaId)) {
|
||||
replacedCount += 1;
|
||||
return { $ref: `#/components/schemas/${schemaId}` };
|
||||
}
|
||||
|
||||
const next: JsonObject = {};
|
||||
for (const [key, child] of Object.entries(obj)) {
|
||||
next[key] = walk(child);
|
||||
}
|
||||
return next;
|
||||
}
|
||||
|
||||
return value;
|
||||
};
|
||||
|
||||
openapi['paths'] = walk(paths) as JsonObject;
|
||||
logInfo(`paths 内联替换完成:${replacedCount} 处`);
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Action 收集逻辑 */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* 收集全部 action schema 信息。
|
||||
*/
|
||||
export function initSchemas () {
|
||||
const handlers = getAllHandlers(null as any, null as any);
|
||||
|
||||
handlers.forEach(handler => {
|
||||
if (handler.actionName && (handler.actionName as string) !== 'unknown') {
|
||||
const action = handler as OneBotAction<unknown, unknown>;
|
||||
actionSchemas[handler.actionName] = {
|
||||
payload: action.payloadSchema,
|
||||
return: action.returnSchema,
|
||||
summary: action.actionSummary,
|
||||
description: action.actionDescription,
|
||||
tags: action.actionTags,
|
||||
payloadExample: action.payloadExample,
|
||||
returnExample: action.returnExample,
|
||||
errorExamples: action.errorExamples
|
||||
};
|
||||
if (!handler.actionName || (handler.actionName as string) === 'unknown') {
|
||||
return;
|
||||
}
|
||||
|
||||
const action = handler as OneBotAction<unknown, unknown>;
|
||||
actionSchemas[handler.actionName] = {
|
||||
payload: action.payloadSchema,
|
||||
return: action.returnSchema,
|
||||
summary: action.actionSummary,
|
||||
description: action.actionDescription,
|
||||
tags: action.actionTags,
|
||||
payloadExample: action.payloadExample,
|
||||
returnExample: action.returnExample,
|
||||
errorExamples: action.errorExamples
|
||||
};
|
||||
});
|
||||
AutoRegisterRouter.forEach((ActionClass) => {
|
||||
|
||||
AutoRegisterRouter.forEach(ActionClass => {
|
||||
const handler = new ActionClass(null as any, null as any);
|
||||
if (handler.actionName && (handler.actionName as string) !== 'unknown') {
|
||||
const action = handler as OneBotAction<unknown, unknown>;
|
||||
actionSchemas[handler.actionName] = {
|
||||
payload: action.payloadSchema,
|
||||
return: action.returnSchema,
|
||||
summary: action.actionSummary,
|
||||
description: action.actionDescription,
|
||||
tags: action.actionTags,
|
||||
payloadExample: action.payloadExample,
|
||||
returnExample: action.returnExample,
|
||||
errorExamples: action.errorExamples
|
||||
};
|
||||
if (!handler.actionName || (handler.actionName as string) === 'unknown') {
|
||||
return;
|
||||
}
|
||||
|
||||
const action = handler as OneBotAction<unknown, unknown>;
|
||||
actionSchemas[handler.actionName] = {
|
||||
payload: action.payloadSchema,
|
||||
return: action.returnSchema,
|
||||
summary: action.actionSummary,
|
||||
description: action.actionDescription,
|
||||
tags: action.actionTags,
|
||||
payloadExample: action.payloadExample,
|
||||
returnExample: action.returnExample,
|
||||
errorExamples: action.errorExamples
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
export function generateOpenAPI () {
|
||||
try {
|
||||
initSchemas();
|
||||
} catch (e) {
|
||||
console.warn('Init schemas partial failure, proceeding with collected data...');
|
||||
}
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* OpenAPI 构建主流程 */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
const openapi: Record<string, unknown> = {
|
||||
openapi: '3.0.1',
|
||||
function createOpenAPIDocument (): Record<string, unknown> {
|
||||
const componentExamples: Record<string, unknown> = {
|
||||
[SUCCESS_DEFAULT_EXAMPLE_KEY]: {
|
||||
summary: '成功响应',
|
||||
value: DEFAULT_SUCCESS_EXAMPLE_VALUE
|
||||
}
|
||||
};
|
||||
|
||||
DEFAULT_ERROR_EXAMPLE_DEFINITIONS.forEach(error => {
|
||||
componentExamples[`Error_${error.code}`] = {
|
||||
summary: error.description,
|
||||
value: {
|
||||
status: 'failed',
|
||||
retcode: error.code,
|
||||
data: null,
|
||||
message: error.description,
|
||||
wording: error.description,
|
||||
stream: 'normal-action'
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
return {
|
||||
openapi: '3.1.0',
|
||||
info: {
|
||||
title: 'NapCat OneBot 11 HTTP API',
|
||||
description: 'NapCatOneBot11 HTTP POST 接口文档',
|
||||
@@ -81,39 +556,43 @@ export function generateOpenAPI () {
|
||||
],
|
||||
paths: {} as Record<string, unknown>,
|
||||
components: {
|
||||
schemas: {},
|
||||
schemas: {
|
||||
BaseResponse: BaseResponseSchema,
|
||||
EmptyData: EmptyDataSchema
|
||||
},
|
||||
examples: componentExamples,
|
||||
responses: {},
|
||||
securitySchemes: {}
|
||||
},
|
||||
servers: [],
|
||||
security: []
|
||||
};
|
||||
}
|
||||
|
||||
for (const [actionName, schemas] of Object.entries(actionSchemas)) {
|
||||
if (!schemas.payload && !schemas.summary) continue;
|
||||
|
||||
const path = '/' + actionName;
|
||||
const cleanPayload = schemas.payload ? JSON.parse(JSON.stringify(schemas.payload)) : { type: 'object', properties: {} };
|
||||
const cleanReturn = schemas.return ? JSON.parse(JSON.stringify(schemas.return)) : { type: 'object', properties: {} };
|
||||
|
||||
// 构造响应示例
|
||||
const responseExamples: Record<string, any> = {
|
||||
'Success': {
|
||||
function buildResponseExamples (schemas: ActionSchemaInfo): Record<string, unknown> {
|
||||
const successData = schemas.returnExample ?? {};
|
||||
const examples: Record<string, any> = {
|
||||
Success: isMeaninglessSuccessExampleData(successData)
|
||||
? { $ref: `#/components/examples/${SUCCESS_DEFAULT_EXAMPLE_KEY}` }
|
||||
: {
|
||||
summary: '成功响应',
|
||||
value: {
|
||||
status: 'ok',
|
||||
retcode: 0,
|
||||
data: schemas.returnExample || {},
|
||||
data: successData,
|
||||
message: '',
|
||||
wording: '',
|
||||
stream: 'normal-action'
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
if (schemas.errorExamples) {
|
||||
schemas.errorExamples.forEach(error => {
|
||||
responseExamples['Error_' + error.code] = {
|
||||
if (schemas.errorExamples) {
|
||||
schemas.errorExamples.forEach(error => {
|
||||
const commonErrorKey = resolveCommonErrorExampleKey(error);
|
||||
examples[`Error_${error.code}`] = commonErrorKey
|
||||
? { $ref: `#/components/examples/${commonErrorKey}` }
|
||||
: {
|
||||
summary: error.description,
|
||||
value: {
|
||||
status: 'failed',
|
||||
@@ -124,23 +603,33 @@ export function generateOpenAPI () {
|
||||
stream: 'normal-action'
|
||||
}
|
||||
};
|
||||
});
|
||||
} else {
|
||||
// 默认提供一个通用错误
|
||||
responseExamples['Generic_Error'] = {
|
||||
summary: '通用错误',
|
||||
value: {
|
||||
status: 'failed',
|
||||
retcode: 1400,
|
||||
data: null,
|
||||
message: '请求参数错误或业务逻辑执行失败',
|
||||
wording: '请求参数错误或业务逻辑执行失败',
|
||||
stream: 'normal-action'
|
||||
}
|
||||
};
|
||||
});
|
||||
return examples;
|
||||
}
|
||||
|
||||
examples['Generic_Error'] = {
|
||||
$ref: '#/components/examples/Error_1400'
|
||||
};
|
||||
|
||||
return examples;
|
||||
}
|
||||
|
||||
function appendActionPaths (openapi: Record<string, unknown>) {
|
||||
const paths = openapi['paths'] as Record<string, any>;
|
||||
|
||||
for (const [actionName, schemas] of Object.entries(actionSchemas)) {
|
||||
if (!schemas.payload && !schemas.summary) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const paths = openapi['paths'] as Record<string, any>;
|
||||
const path = `/${actionName}`;
|
||||
const cleanPayload = schemas.payload
|
||||
? sanitizeSchemaForOpenAPI(cloneSchema(schemas.payload))
|
||||
: { type: 'object', properties: {} };
|
||||
const cleanReturn = schemas.return
|
||||
? sanitizeSchemaForOpenAPI(cloneSchema(schemas.return))
|
||||
: { $ref: '#/components/schemas/EmptyData' };
|
||||
|
||||
paths[path] = {
|
||||
post: {
|
||||
summary: schemas.summary || actionName,
|
||||
@@ -154,7 +643,7 @@ export function generateOpenAPI () {
|
||||
'application/json': {
|
||||
schema: cleanPayload,
|
||||
examples: {
|
||||
'Default': {
|
||||
Default: {
|
||||
summary: '默认请求示例',
|
||||
value: schemas.payloadExample || {}
|
||||
}
|
||||
@@ -168,18 +657,21 @@ export function generateOpenAPI () {
|
||||
content: {
|
||||
'application/json': {
|
||||
schema: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
status: { type: 'string', description: '状态 (ok/failed)' },
|
||||
retcode: { type: 'number', description: '返回码' },
|
||||
data: { ...cleanReturn, description: '数据' },
|
||||
message: { type: 'string', description: '消息' },
|
||||
wording: { type: 'string', description: '提示' },
|
||||
stream: { type: 'string', description: '流式响应', enum: ['stream-action', 'normal-action'] }
|
||||
},
|
||||
required: ['status', 'retcode', 'data']
|
||||
allOf: [
|
||||
{ $ref: '#/components/schemas/BaseResponse' },
|
||||
{
|
||||
type: 'object',
|
||||
required: ['data'],
|
||||
properties: {
|
||||
data: {
|
||||
...(typeof cleanReturn === 'object' && cleanReturn ? cleanReturn : {}),
|
||||
description: '业务数据'
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
examples: responseExamples
|
||||
examples: buildResponseExamples(schemas)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -188,16 +680,46 @@ export function generateOpenAPI () {
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
const outputPath = resolve(__dirname, 'openapi.json');
|
||||
writeFileSync(outputPath, JSON.stringify(openapi, null, 2));
|
||||
console.log('OpenAPI schema (3.0.1 Format) generated at: ' + outputPath);
|
||||
export function generateOpenAPI () {
|
||||
logSection('开始生成 OpenAPI 文档');
|
||||
|
||||
try {
|
||||
initSchemas();
|
||||
logInfo(`已收集 action: ${Object.keys(actionSchemas).length} 个`);
|
||||
} catch {
|
||||
logWarn('初始化 schema 过程中出现部分失败,将继续使用已收集的数据');
|
||||
}
|
||||
|
||||
const openapi = createOpenAPIDocument();
|
||||
|
||||
logSection('注册组件 schema');
|
||||
registerSchemasFromModule(openapi as JsonObject, MessageSchemas, 'types/message.ts');
|
||||
registerSchemasFromModule(openapi as JsonObject, ActionSchemas, 'action/schemas.ts');
|
||||
|
||||
logSection('处理组件内联引用');
|
||||
replaceComponentInlineSchemasWithRefs(openapi as JsonObject);
|
||||
|
||||
logSection('构建 paths');
|
||||
appendActionPaths(openapi);
|
||||
|
||||
logSection('处理 paths 内联引用');
|
||||
replacePathInlineSchemasWithRefs(openapi as JsonObject);
|
||||
|
||||
writeFileSync(OPENAPI_OUTPUT_PATH, JSON.stringify(openapi, null, 2));
|
||||
logSuccess(`OpenAPI 生成完成:${OPENAPI_OUTPUT_PATH}`);
|
||||
|
||||
generateMissingReport();
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* 元数据缺失报告 */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
function generateMissingReport () {
|
||||
const missingReport: string[] = [];
|
||||
|
||||
for (const [actionName, schemas] of Object.entries(actionSchemas)) {
|
||||
const missing: string[] = [];
|
||||
if (!schemas.summary) missing.push('actionSummary');
|
||||
@@ -206,18 +728,20 @@ function generateMissingReport () {
|
||||
if (schemas.returnExample === undefined) missing.push('returnExample');
|
||||
|
||||
if (missing.length > 0) {
|
||||
missingReport.push('[' + actionName + '] 缺失属性: ' + missing.join(', '));
|
||||
missingReport.push(`[${actionName}] 缺失属性: ${missing.join(', ')}`);
|
||||
}
|
||||
}
|
||||
|
||||
const reportPath = resolve(__dirname, 'missing_props.log');
|
||||
if (missingReport.length > 0) {
|
||||
writeFileSync(reportPath, missingReport.join('\n'));
|
||||
console.warn('\n检查到 ' + missingReport.length + ' 个接口存在元数据缺失,报告已保存至: ' + reportPath);
|
||||
} else {
|
||||
if (existsSync(reportPath)) writeFileSync(reportPath, '');
|
||||
console.log('\n所有接口元数据已完整!');
|
||||
writeFileSync(MISSING_REPORT_PATH, missingReport.join('\n'));
|
||||
logWarn(`检查到 ${missingReport.length} 个接口元数据缺失,报告已写入:${MISSING_REPORT_PATH}`);
|
||||
return;
|
||||
}
|
||||
|
||||
if (existsSync(MISSING_REPORT_PATH)) {
|
||||
writeFileSync(MISSING_REPORT_PATH, '');
|
||||
}
|
||||
logSuccess('所有接口元数据完整');
|
||||
}
|
||||
|
||||
generateOpenAPI();
|
||||
|
||||
@@ -30,6 +30,7 @@ import { NodeIO3MiscListener } from 'napcat-core/listeners/NodeIO3MiscListener';
|
||||
import { sleep } from 'napcat-common/src/helper';
|
||||
import { FFmpegService } from '@/napcat-core/helper/ffmpeg/ffmpeg';
|
||||
import { NativePacketHandler } from 'napcat-core/packet/handler/client';
|
||||
import { Napi2NativeLoader } from 'napcat-core/packet/handler/napi2nativeLoader';
|
||||
import { logSubscription, LogWrapper } from '@/napcat-core/helper/log';
|
||||
import { proxiedListenerOf } from '@/napcat-core/helper/proxy-handler';
|
||||
import { QQBasicInfoWrapper } from '@/napcat-core/helper/qq-basic-info';
|
||||
@@ -387,20 +388,29 @@ export async function NCoreInitShell () {
|
||||
handleUncaughtExceptions(logger);
|
||||
await applyPendingUpdates(pathWrapper, logger);
|
||||
|
||||
// 提前初始化 Native 模块(在登录前加载)
|
||||
const basicInfoWrapper = new QQBasicInfoWrapper({ logger });
|
||||
const nativePacketHandler = new NativePacketHandler({ logger });
|
||||
const napi2nativeLoader = new Napi2NativeLoader({ logger });
|
||||
await nativePacketHandler.init(basicInfoWrapper.getFullQQVersion());
|
||||
|
||||
// 初始化 FFmpeg 服务
|
||||
await FFmpegService.init(pathWrapper.binaryPath, logger);
|
||||
|
||||
if (!(process.env['NAPCAT_DISABLE_PIPE'] == '1' || process.env['NAPCAT_WORKER_PROCESS'] == '1')) {
|
||||
if (!(process.env['NAPCAT_DISABLE_PIPE'] === '1' || process.env['NAPCAT_WORKER_PROCESS'] === '1')) {
|
||||
await connectToNamedPipe(logger).catch(e => logger.logError('命名管道连接失败', e));
|
||||
}
|
||||
const basicInfoWrapper = new QQBasicInfoWrapper({ logger });
|
||||
const wrapper = loadQQWrapper(basicInfoWrapper.QQMainPath, basicInfoWrapper.getFullQQVersion());
|
||||
const nativePacketHandler = new NativePacketHandler({ logger }); // 初始化 NativePacketHandler 用于后续使用
|
||||
|
||||
// nativePacketHandler.onAll((packet) => {
|
||||
// console.log('[Packet]', packet.uin, packet.cmd, packet.hex_data);
|
||||
// });
|
||||
await nativePacketHandler.init(basicInfoWrapper.getFullQQVersion());
|
||||
// wrapper.node 加载后立刻启用 Bypass(可通过环境变量禁用)
|
||||
if (process.env['NAPCAT_DISABLE_BYPASS'] !== '1') {
|
||||
const bypassEnabled = napi2nativeLoader.nativeExports.enableAllBypasses?.();
|
||||
if (bypassEnabled) {
|
||||
logger.log('[NapCat] Napi2NativeLoader: 已启用Bypass');
|
||||
}
|
||||
} else {
|
||||
logger.log('[NapCat] Napi2NativeLoader: Bypass已通过环境变量禁用');
|
||||
}
|
||||
|
||||
const o3Service = wrapper.NodeIO3MiscService.get();
|
||||
o3Service.addO3MiscListener(new NodeIO3MiscListener());
|
||||
@@ -425,6 +435,7 @@ export async function NCoreInitShell () {
|
||||
}
|
||||
}
|
||||
const [dataPath, dataPathGlobal] = getDataPaths(wrapper);
|
||||
WebUiDataRuntime.setQQDataPath(dataPath);
|
||||
const systemPlatform = getPlatformType();
|
||||
|
||||
if (!basicInfoWrapper.QQVersionAppid || !basicInfoWrapper.QQVersionQua) throw new Error('QQVersionAppid or QQVersionQua is not defined');
|
||||
@@ -487,7 +498,8 @@ export async function NCoreInitShell () {
|
||||
selfInfo,
|
||||
basicInfoWrapper,
|
||||
pathWrapper,
|
||||
nativePacketHandler
|
||||
nativePacketHandler,
|
||||
napi2nativeLoader
|
||||
).InitNapCat();
|
||||
}
|
||||
|
||||
@@ -502,10 +514,12 @@ export class NapCatShell {
|
||||
selfInfo: SelfInfo,
|
||||
basicInfoWrapper: QQBasicInfoWrapper,
|
||||
pathWrapper: NapCatPathWrapper,
|
||||
packetHandler: NativePacketHandler
|
||||
packetHandler: NativePacketHandler,
|
||||
napi2nativeLoader: Napi2NativeLoader
|
||||
) {
|
||||
this.context = {
|
||||
packetHandler,
|
||||
napi2nativeLoader,
|
||||
workingEnv: NapCatCoreWorkingEnv.Shell,
|
||||
wrapper,
|
||||
session,
|
||||
|
||||
@@ -113,6 +113,42 @@ function forceKillProcess (pid: number): void {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 清理进程树中的残留子进程(Electron 模式专用)
|
||||
* 排除当前主进程和新 worker 进程
|
||||
*/
|
||||
async function cleanupOrphanedProcesses (excludePids: number[]): Promise<void> {
|
||||
if (!isElectron) return;
|
||||
|
||||
try {
|
||||
// 使用 Electron 的 app.getAppMetrics() 获取所有相关进程
|
||||
// @ts-ignore - electron 运行时存在但类型声明可能缺失
|
||||
const electron = await import('electron');
|
||||
if (electron.app && typeof electron.app.getAppMetrics === 'function') {
|
||||
const metrics = electron.app.getAppMetrics();
|
||||
const mainPid = process.pid;
|
||||
|
||||
for (const metric of metrics) {
|
||||
const pid = metric.pid;
|
||||
// 排除主进程、新 worker 进程和明确排除的 PID
|
||||
if (pid === mainPid || excludePids.includes(pid)) {
|
||||
continue;
|
||||
}
|
||||
// 尝试终止残留进程
|
||||
try {
|
||||
process.kill(pid, 'SIGTERM');
|
||||
logger.log(`[NapCat] [Process] 已清理残留进程: PID ${pid} (${metric.type})`);
|
||||
} catch {
|
||||
// 进程可能已经不存在,忽略错误
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
// Electron API 不可用或出错,静默忽略
|
||||
logger.logDebug?.('[NapCat] [Process] 清理残留进程时出错:', error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 重启 Worker 进程
|
||||
*/
|
||||
@@ -166,6 +202,13 @@ export async function restartWorker (secretKey?: string, port?: number): Promise
|
||||
|
||||
// 5. 启动新进程(重启模式不传递快速登录参数,传递密钥和端口)
|
||||
await startWorker(false, secretKey, port);
|
||||
|
||||
// 6. Electron 模式下清理可能残留的子进程
|
||||
if (isElectron && currentWorker?.pid) {
|
||||
const excludePids = [process.pid, currentWorker.pid];
|
||||
await cleanupOrphanedProcesses(excludePids);
|
||||
}
|
||||
|
||||
isRestarting = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -45,6 +45,7 @@ const ShellBaseConfig = (source_map: boolean = false) =>
|
||||
'@/napcat-common': resolve(__dirname, '../napcat-common'),
|
||||
'@/napcat-onebot': resolve(__dirname, '../napcat-onebot'),
|
||||
'@/napcat-pty': resolve(__dirname, '../napcat-pty'),
|
||||
'@/napcat-dpapi': resolve(__dirname, '../napcat-dpapi'),
|
||||
'@/napcat-webui-backend': resolve(__dirname, '../napcat-webui-backend'),
|
||||
'@/napcat-image-size': resolve(__dirname, '../napcat-image-size'),
|
||||
'@/napcat-protocol': resolve(__dirname, '../napcat-protocol'),
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
"json5": "^2.2.3",
|
||||
"multer": "^2.0.1",
|
||||
"napcat-common": "workspace:*",
|
||||
"napcat-dpapi": "workspace:*",
|
||||
"napcat-pty": "workspace:*",
|
||||
"ws": "^8.18.3"
|
||||
},
|
||||
|
||||
@@ -75,6 +75,8 @@ export const GetPluginListHandler: RequestHandler = async (_req, res) => {
|
||||
status: string;
|
||||
hasConfig: boolean;
|
||||
hasPages: boolean;
|
||||
homepage?: string;
|
||||
repository?: string;
|
||||
}> = new Array();
|
||||
|
||||
// 收集所有插件的扩展页面
|
||||
@@ -111,7 +113,11 @@ export const GetPluginListHandler: RequestHandler = async (_req, res) => {
|
||||
author: p.packageJson?.author || '',
|
||||
status,
|
||||
hasConfig: !!(p.runtime.module?.plugin_config_schema || p.runtime.module?.plugin_config_ui),
|
||||
hasPages
|
||||
hasPages,
|
||||
homepage: p.packageJson?.homepage,
|
||||
repository: typeof p.packageJson?.repository === 'string'
|
||||
? p.packageJson.repository
|
||||
: p.packageJson?.repository?.url
|
||||
});
|
||||
|
||||
// 收集插件的扩展页面
|
||||
|
||||
@@ -27,6 +27,22 @@ const PLUGIN_STORE_SOURCES = [
|
||||
// 插件目录 - 使用 pathWrapper
|
||||
const getPluginsDir = () => webUiPathWrapper.pluginPath;
|
||||
|
||||
/**
|
||||
* 验证插件 ID,防止路径注入攻击
|
||||
*/
|
||||
function validatePluginId (id: any): string {
|
||||
if (typeof id !== 'string') {
|
||||
throw new Error('Invalid plugin ID');
|
||||
}
|
||||
// 仅允许字母、数字、点、下划线、连字符,禁止路径遍历字符
|
||||
// 通过 path.basename 进一步确保不包含路径分隔符
|
||||
const safeId = path.basename(id);
|
||||
if (!/^[a-zA-Z0-9._-]+$/.test(safeId) || safeId !== id) {
|
||||
throw new Error('Invalid plugin ID format');
|
||||
}
|
||||
return safeId;
|
||||
}
|
||||
|
||||
// 插件列表缓存
|
||||
let pluginListCache: PluginStoreList | null = null;
|
||||
let cacheTimestamp: number = 0;
|
||||
@@ -40,7 +56,7 @@ async function fetchPluginList (forceRefresh: boolean = false): Promise<PluginSt
|
||||
// 检查缓存(如果不是强制刷新)
|
||||
const now = Date.now();
|
||||
if (!forceRefresh && pluginListCache && (now - cacheTimestamp) < CACHE_TTL) {
|
||||
//console.log('Using cached plugin list');
|
||||
// console.log('Using cached plugin list');
|
||||
return pluginListCache;
|
||||
}
|
||||
|
||||
@@ -64,7 +80,7 @@ async function fetchPluginList (forceRefresh: boolean = false): Promise<PluginSt
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
//console.log(`Successfully fetched plugin list from: ${url}`);
|
||||
// console.log(`Successfully fetched plugin list from: ${url}`);
|
||||
|
||||
// 更新缓存
|
||||
pluginListCache = data as PluginStoreList;
|
||||
@@ -86,7 +102,13 @@ async function fetchPluginList (forceRefresh: boolean = false): Promise<PluginSt
|
||||
* 下载文件,使用镜像系统
|
||||
* 自动识别 GitHub Release URL 并使用镜像加速
|
||||
*/
|
||||
async function downloadFile (url: string, destPath: string, customMirror?: string): Promise<void> {
|
||||
async function downloadFile (
|
||||
url: string,
|
||||
destPath: string,
|
||||
customMirror?: string,
|
||||
onProgress?: (percent: number, downloaded: number, total: number, speed: number) => void,
|
||||
timeout: number = 120000 // 默认120秒超时
|
||||
): Promise<void> {
|
||||
try {
|
||||
let downloadUrl: string;
|
||||
|
||||
@@ -126,7 +148,7 @@ async function downloadFile (url: string, destPath: string, customMirror?: strin
|
||||
headers: {
|
||||
'User-Agent': 'NapCat-WebUI',
|
||||
},
|
||||
signal: AbortSignal.timeout(120000), // 实际下载120秒超时
|
||||
signal: AbortSignal.timeout(timeout), // 使用传入的超时时间
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
@@ -137,9 +159,45 @@ async function downloadFile (url: string, destPath: string, customMirror?: strin
|
||||
throw new Error('Response body is null');
|
||||
}
|
||||
|
||||
const totalLength = Number(response.headers.get('content-length')) || 0;
|
||||
|
||||
// 初始进度通知
|
||||
if (onProgress) {
|
||||
onProgress(0, 0, totalLength, 0);
|
||||
}
|
||||
|
||||
let downloaded = 0;
|
||||
let lastTime = Date.now();
|
||||
let lastDownloaded = 0;
|
||||
|
||||
// 进度监控流
|
||||
// eslint-disable-next-line @stylistic/generator-star-spacing
|
||||
const progressMonitor = async function* (source: any) {
|
||||
for await (const chunk of source) {
|
||||
downloaded += chunk.length;
|
||||
const now = Date.now();
|
||||
const elapsedSinceLast = now - lastTime;
|
||||
|
||||
// 每隔 500ms 或完成时计算一次速度并更新进度
|
||||
if (elapsedSinceLast >= 500 || (totalLength && downloaded === totalLength)) {
|
||||
const percent = totalLength ? Math.round((downloaded / totalLength) * 100) : 0;
|
||||
const speed = (downloaded - lastDownloaded) / (elapsedSinceLast / 1000); // bytes/s
|
||||
|
||||
if (onProgress) {
|
||||
onProgress(percent, downloaded, totalLength, speed);
|
||||
}
|
||||
|
||||
lastTime = now;
|
||||
lastDownloaded = downloaded;
|
||||
}
|
||||
|
||||
yield chunk;
|
||||
}
|
||||
};
|
||||
|
||||
// 写入文件
|
||||
const fileStream = createWriteStream(destPath);
|
||||
await pipeline(response.body as any, fileStream);
|
||||
await pipeline(progressMonitor(response.body), fileStream);
|
||||
|
||||
console.log(`Successfully downloaded to: ${destPath}`);
|
||||
} catch (e: any) {
|
||||
@@ -155,13 +213,15 @@ async function downloadFile (url: string, destPath: string, customMirror?: strin
|
||||
* 解压插件到指定目录
|
||||
*/
|
||||
async function extractPlugin (zipPath: string, pluginId: string): Promise<void> {
|
||||
// 验证 pluginId 确保安全
|
||||
const safeId = validatePluginId(pluginId);
|
||||
const PLUGINS_DIR = getPluginsDir();
|
||||
const pluginDir = path.join(PLUGINS_DIR, pluginId);
|
||||
const pluginDir = path.join(PLUGINS_DIR, safeId);
|
||||
const dataDir = path.join(pluginDir, 'data');
|
||||
const tempDataDir = path.join(PLUGINS_DIR, `${pluginId}.data.backup`);
|
||||
const tempDataDir = path.join(PLUGINS_DIR, `${safeId}.data.backup`);
|
||||
|
||||
console.log(`[extractPlugin] PLUGINS_DIR: ${PLUGINS_DIR}`);
|
||||
console.log(`[extractPlugin] pluginId: ${pluginId}`);
|
||||
console.log(`[extractPlugin] pluginId: ${safeId}`);
|
||||
console.log(`[extractPlugin] Target directory: ${pluginDir}`);
|
||||
console.log(`[extractPlugin] Zip file: ${zipPath}`);
|
||||
|
||||
@@ -210,7 +270,7 @@ async function extractPlugin (zipPath: string, pluginId: string): Promise<void>
|
||||
} catch (e) {
|
||||
// 解压失败时,尝试恢复 data 文件夹
|
||||
if (hasDataBackup && fs.existsSync(tempDataDir)) {
|
||||
console.log(`[extractPlugin] Extract failed, restoring data directory`);
|
||||
console.log('[extractPlugin] Extract failed, restoring data directory');
|
||||
if (!fs.existsSync(pluginDir)) {
|
||||
fs.mkdirSync(pluginDir, { recursive: true });
|
||||
}
|
||||
@@ -224,7 +284,7 @@ async function extractPlugin (zipPath: string, pluginId: string): Promise<void>
|
||||
|
||||
// 列出解压后的文件
|
||||
const files = fs.readdirSync(pluginDir);
|
||||
console.log(`[extractPlugin] Extracted files:`, files);
|
||||
console.log('[extractPlugin] Extracted files:', files);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -246,7 +306,7 @@ export const GetPluginStoreListHandler: RequestHandler = async (req, res) => {
|
||||
*/
|
||||
export const GetPluginStoreDetailHandler: RequestHandler = async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
const id = validatePluginId(req.params['id']);
|
||||
const data = await fetchPluginList();
|
||||
const plugin = data.plugins.find(p => p.id === id);
|
||||
|
||||
@@ -265,12 +325,14 @@ export const GetPluginStoreDetailHandler: RequestHandler = async (req, res) => {
|
||||
*/
|
||||
export const InstallPluginFromStoreHandler: RequestHandler = async (req, res) => {
|
||||
try {
|
||||
const { id, mirror } = req.body;
|
||||
const { id: rawId, mirror } = req.body;
|
||||
|
||||
if (!id) {
|
||||
if (!rawId) {
|
||||
return sendError(res, 'Plugin ID is required');
|
||||
}
|
||||
|
||||
const id = validatePluginId(rawId);
|
||||
|
||||
// 获取插件信息
|
||||
const data = await fetchPluginList();
|
||||
const plugin = data.plugins.find(p => p.id === id);
|
||||
@@ -279,12 +341,21 @@ export const InstallPluginFromStoreHandler: RequestHandler = async (req, res) =>
|
||||
return sendError(res, 'Plugin not found in store');
|
||||
}
|
||||
|
||||
// 检查是否已安装相同版本
|
||||
const pm = getPluginManager();
|
||||
if (pm) {
|
||||
const installedInfo = pm.getPluginInfo(id);
|
||||
if (installedInfo && installedInfo.version === plugin.version) {
|
||||
return sendError(res, '该插件已安装且版本相同,无需重复安装');
|
||||
}
|
||||
}
|
||||
|
||||
// 下载插件
|
||||
const PLUGINS_DIR = getPluginsDir();
|
||||
const tempZipPath = path.join(PLUGINS_DIR, `${id}.temp.zip`);
|
||||
|
||||
try {
|
||||
await downloadFile(plugin.downloadUrl, tempZipPath, mirror);
|
||||
await downloadFile(plugin.downloadUrl, tempZipPath, mirror, undefined, 300000);
|
||||
|
||||
// 解压插件
|
||||
await extractPlugin(tempZipPath, id);
|
||||
@@ -305,7 +376,7 @@ export const InstallPluginFromStoreHandler: RequestHandler = async (req, res) =>
|
||||
|
||||
return sendSuccess(res, {
|
||||
message: 'Plugin installed successfully',
|
||||
plugin: plugin,
|
||||
plugin,
|
||||
installPath: path.join(PLUGINS_DIR, id),
|
||||
});
|
||||
} catch (downloadError: any) {
|
||||
@@ -324,21 +395,29 @@ export const InstallPluginFromStoreHandler: RequestHandler = async (req, res) =>
|
||||
* 安装插件(从商店)- SSE 版本,实时推送进度
|
||||
*/
|
||||
export const InstallPluginFromStoreSSEHandler: RequestHandler = async (req, res) => {
|
||||
const { id, mirror } = req.query;
|
||||
const { id: rawId, mirror } = req.query;
|
||||
|
||||
if (!id || typeof id !== 'string') {
|
||||
if (!rawId || typeof rawId !== 'string') {
|
||||
res.status(400).json({ error: 'Plugin ID is required' });
|
||||
return;
|
||||
}
|
||||
|
||||
let id: string;
|
||||
try {
|
||||
id = validatePluginId(rawId);
|
||||
} catch (err: any) {
|
||||
res.status(400).json({ error: err.message });
|
||||
return;
|
||||
}
|
||||
|
||||
// 设置 SSE 响应头
|
||||
res.setHeader('Content-Type', 'text/event-stream');
|
||||
res.setHeader('Cache-Control', 'no-cache');
|
||||
res.setHeader('Connection', 'keep-alive');
|
||||
res.flushHeaders();
|
||||
|
||||
const sendProgress = (message: string, progress?: number) => {
|
||||
res.write(`data: ${JSON.stringify({ message, progress })}\n\n`);
|
||||
const sendProgress = (message: string, progress?: number, detail?: any) => {
|
||||
res.write(`data: ${JSON.stringify({ message, progress, ...detail })}\n\n`);
|
||||
};
|
||||
|
||||
try {
|
||||
@@ -355,6 +434,18 @@ export const InstallPluginFromStoreSSEHandler: RequestHandler = async (req, res)
|
||||
return;
|
||||
}
|
||||
|
||||
// 检查是否已安装相同版本
|
||||
const pm = getPluginManager();
|
||||
if (pm) {
|
||||
const installedInfo = pm.getPluginInfo(id);
|
||||
if (installedInfo && installedInfo.version === plugin.version) {
|
||||
sendProgress('错误: 该插件已安装且版本相同', 0);
|
||||
res.write(`data: ${JSON.stringify({ error: '该插件已安装且版本相同,无需重复安装' })}\n\n`);
|
||||
res.end();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
sendProgress(`找到插件: ${plugin.name} v${plugin.version}`, 20);
|
||||
sendProgress(`下载地址: ${plugin.downloadUrl}`, 25);
|
||||
|
||||
@@ -368,12 +459,28 @@ export const InstallPluginFromStoreSSEHandler: RequestHandler = async (req, res)
|
||||
|
||||
try {
|
||||
sendProgress('正在下载插件...', 30);
|
||||
await downloadFile(plugin.downloadUrl, tempZipPath, mirror as string | undefined);
|
||||
await downloadFile(plugin.downloadUrl, tempZipPath, mirror as string | undefined, (percent, downloaded, total, speed) => {
|
||||
const overallProgress = 30 + Math.round(percent * 0.5);
|
||||
const downloadedMb = (downloaded / 1024 / 1024).toFixed(1);
|
||||
const totalMb = total ? (total / 1024 / 1024).toFixed(1) : '?';
|
||||
const speedMb = (speed / 1024 / 1024).toFixed(2);
|
||||
const eta = (total > 0 && speed > 0) ? Math.round((total - downloaded) / speed) : -1;
|
||||
|
||||
sendProgress('下载完成,正在解压...', 70);
|
||||
sendProgress(`正在下载插件... ${percent}%`, overallProgress, {
|
||||
downloaded,
|
||||
total,
|
||||
speed,
|
||||
eta,
|
||||
downloadedStr: `${downloadedMb}MB`,
|
||||
totalStr: `${totalMb}MB`,
|
||||
speedStr: `${speedMb}MB/s`,
|
||||
});
|
||||
}, 300000);
|
||||
|
||||
sendProgress('下载完成,正在解压...', 85);
|
||||
await extractPlugin(tempZipPath, id);
|
||||
|
||||
sendProgress('解压完成,正在清理...', 90);
|
||||
sendProgress('解压完成,正在清理...', 95);
|
||||
fs.unlinkSync(tempZipPath);
|
||||
|
||||
// 如果 pluginManager 存在,立即注册或重载插件
|
||||
@@ -393,7 +500,7 @@ export const InstallPluginFromStoreSSEHandler: RequestHandler = async (req, res)
|
||||
res.write(`data: ${JSON.stringify({
|
||||
success: true,
|
||||
message: 'Plugin installed successfully',
|
||||
plugin: plugin,
|
||||
plugin,
|
||||
installPath: path.join(PLUGINS_DIR, id),
|
||||
})}\n\n`);
|
||||
res.end();
|
||||
|
||||
@@ -4,6 +4,36 @@ import { WebUiDataRuntime } from '@/napcat-webui-backend/src/helper/Data';
|
||||
import { WebUiConfig } from '@/napcat-webui-backend/index';
|
||||
import { isEmpty } from '@/napcat-webui-backend/src/utils/check';
|
||||
import { sendError, sendSuccess } from '@/napcat-webui-backend/src/utils/response';
|
||||
import { Registry20Utils, MachineInfoUtils } from '@/napcat-webui-backend/src/utils/guid';
|
||||
import os from 'node:os';
|
||||
|
||||
// 获取 Registry20 路径的辅助函数
|
||||
const getRegistryPath = () => {
|
||||
// 优先从 WebUiDataRuntime 获取早期设置的 dataPath
|
||||
let dataPath = WebUiDataRuntime.getQQDataPath();
|
||||
if (!dataPath) {
|
||||
// 回退: 从 OneBotContext 获取
|
||||
const oneBotContext = WebUiDataRuntime.getOneBotContext();
|
||||
dataPath = oneBotContext?.core?.dataPath;
|
||||
}
|
||||
if (!dataPath) {
|
||||
throw new Error('QQ data path not available yet');
|
||||
}
|
||||
return Registry20Utils.getRegistryPath(dataPath);
|
||||
};
|
||||
|
||||
// 获取 machine-info 路径的辅助函数 (Linux)
|
||||
const getMachineInfoPath = () => {
|
||||
let dataPath = WebUiDataRuntime.getQQDataPath();
|
||||
if (!dataPath) {
|
||||
const oneBotContext = WebUiDataRuntime.getOneBotContext();
|
||||
dataPath = oneBotContext?.core?.dataPath;
|
||||
}
|
||||
if (!dataPath) {
|
||||
throw new Error('QQ data path not available yet');
|
||||
}
|
||||
return MachineInfoUtils.getMachineInfoPath(dataPath);
|
||||
};
|
||||
|
||||
// 获取QQ登录二维码
|
||||
export const QQGetQRcodeHandler: RequestHandler = async (_, res) => {
|
||||
@@ -147,3 +177,239 @@ export const QQPasswordLoginHandler: RequestHandler = async (req, res) => {
|
||||
}
|
||||
return sendSuccess(res, null);
|
||||
};
|
||||
|
||||
// 重置设备信息
|
||||
export const QQResetDeviceIDHandler: RequestHandler = async (_, res) => {
|
||||
try {
|
||||
const registryPath = getRegistryPath();
|
||||
// 自动备份
|
||||
try {
|
||||
await Registry20Utils.backup(registryPath);
|
||||
} catch (e) {
|
||||
// 忽略备份错误(例如文件不存在)
|
||||
}
|
||||
|
||||
await Registry20Utils.delete(registryPath);
|
||||
return sendSuccess(res, { message: 'Device ID reset successfully (Registry20 deleted)' });
|
||||
} catch (e) {
|
||||
return sendError(res, `Failed to reset Device ID: ${(e as Error).message}`);
|
||||
}
|
||||
};
|
||||
|
||||
// 获取设备 GUID
|
||||
export const QQGetDeviceGUIDHandler: RequestHandler = async (_, res) => {
|
||||
try {
|
||||
const registryPath = getRegistryPath();
|
||||
const guid = await Registry20Utils.readGuid(registryPath);
|
||||
return sendSuccess(res, { guid });
|
||||
} catch (e) {
|
||||
// 可能是文件不存在,或者非 Windows 平台,或者解密失败
|
||||
return sendError(res, `Failed to get GUID: ${(e as Error).message}`);
|
||||
}
|
||||
};
|
||||
|
||||
// 设置设备 GUID
|
||||
export const QQSetDeviceGUIDHandler: RequestHandler = async (req, res) => {
|
||||
const { guid } = req.body;
|
||||
if (!guid || typeof guid !== 'string' || guid.length !== 32) {
|
||||
return sendError(res, 'Invalid GUID format, must be 32 hex characters');
|
||||
}
|
||||
try {
|
||||
const registryPath = getRegistryPath();
|
||||
// 自动备份
|
||||
try {
|
||||
await Registry20Utils.backup(registryPath);
|
||||
} catch { }
|
||||
|
||||
await Registry20Utils.writeGuid(registryPath, guid);
|
||||
return sendSuccess(res, { message: 'GUID set successfully' });
|
||||
} catch (e) {
|
||||
return sendError(res, `Failed to set GUID: ${(e as Error).message}`);
|
||||
}
|
||||
};
|
||||
|
||||
// 获取备份列表
|
||||
export const QQGetGUIDBackupsHandler: RequestHandler = async (_, res) => {
|
||||
try {
|
||||
const registryPath = getRegistryPath();
|
||||
const backups = Registry20Utils.getBackups(registryPath);
|
||||
return sendSuccess(res, backups);
|
||||
} catch (e) {
|
||||
return sendError(res, `Failed to get backups: ${(e as Error).message}`);
|
||||
}
|
||||
};
|
||||
|
||||
// 恢复备份
|
||||
export const QQRestoreGUIDBackupHandler: RequestHandler = async (req, res) => {
|
||||
const { backupName } = req.body;
|
||||
if (!backupName) {
|
||||
return sendError(res, 'Backup name is required');
|
||||
}
|
||||
try {
|
||||
const registryPath = getRegistryPath();
|
||||
await Registry20Utils.restore(registryPath, backupName);
|
||||
return sendSuccess(res, { message: 'Restored successfully' });
|
||||
} catch (e) {
|
||||
return sendError(res, `Failed to restore: ${(e as Error).message}`);
|
||||
}
|
||||
};
|
||||
|
||||
// 创建备份
|
||||
export const QQCreateGUIDBackupHandler: RequestHandler = async (_, res) => {
|
||||
try {
|
||||
const registryPath = getRegistryPath();
|
||||
const backupPath = await Registry20Utils.backup(registryPath);
|
||||
return sendSuccess(res, { message: 'Backup created', path: backupPath });
|
||||
} catch (e) {
|
||||
return sendError(res, `Failed to backup: ${(e as Error).message}`);
|
||||
}
|
||||
};
|
||||
|
||||
// 重启NapCat
|
||||
export const QQRestartNapCatHandler: RequestHandler = async (_, res) => {
|
||||
try {
|
||||
const result = await WebUiDataRuntime.requestRestartProcess();
|
||||
if (result.result) {
|
||||
return sendSuccess(res, { message: result.message || 'Restart initiated' });
|
||||
} else {
|
||||
return sendError(res, result.message || 'Restart failed');
|
||||
}
|
||||
} catch (e) {
|
||||
return sendError(res, `Restart error: ${(e as Error).message}`);
|
||||
}
|
||||
};
|
||||
|
||||
// ============================================================
|
||||
// 平台信息 & Linux GUID 管理
|
||||
// ============================================================
|
||||
|
||||
// 获取平台信息
|
||||
export const QQGetPlatformInfoHandler: RequestHandler = async (_, res) => {
|
||||
return sendSuccess(res, { platform: os.platform() });
|
||||
};
|
||||
|
||||
// 获取 Linux MAC 地址 (从 machine-info 文件读取)
|
||||
export const QQGetLinuxMACHandler: RequestHandler = async (_, res) => {
|
||||
try {
|
||||
const machineInfoPath = getMachineInfoPath();
|
||||
const mac = MachineInfoUtils.readMac(machineInfoPath);
|
||||
return sendSuccess(res, { mac });
|
||||
} catch (e) {
|
||||
return sendError(res, `Failed to get MAC: ${(e as Error).message}`);
|
||||
}
|
||||
};
|
||||
|
||||
// 设置 Linux MAC 地址 (写入 machine-info 文件)
|
||||
export const QQSetLinuxMACHandler: RequestHandler = async (req, res) => {
|
||||
const { mac } = req.body;
|
||||
if (!mac || typeof mac !== 'string') {
|
||||
return sendError(res, 'MAC address is required');
|
||||
}
|
||||
try {
|
||||
const machineInfoPath = getMachineInfoPath();
|
||||
// 自动备份
|
||||
try {
|
||||
MachineInfoUtils.backup(machineInfoPath);
|
||||
} catch { }
|
||||
|
||||
MachineInfoUtils.writeMac(machineInfoPath, mac);
|
||||
return sendSuccess(res, { message: 'MAC set successfully' });
|
||||
} catch (e) {
|
||||
return sendError(res, `Failed to set MAC: ${(e as Error).message}`);
|
||||
}
|
||||
};
|
||||
|
||||
// 获取 Linux machine-id
|
||||
export const QQGetLinuxMachineIdHandler: RequestHandler = async (_, res) => {
|
||||
try {
|
||||
const machineId = MachineInfoUtils.readMachineId();
|
||||
return sendSuccess(res, { machineId });
|
||||
} catch (e) {
|
||||
return sendError(res, `Failed to read machine-id: ${(e as Error).message}`);
|
||||
}
|
||||
};
|
||||
|
||||
// 计算 Linux GUID (用于前端实时预览)
|
||||
export const QQComputeLinuxGUIDHandler: RequestHandler = async (req, res) => {
|
||||
const { mac, machineId } = req.body;
|
||||
try {
|
||||
// 如果没传 machineId,从 /etc/machine-id 读取
|
||||
let mid = machineId;
|
||||
if (!mid || typeof mid !== 'string') {
|
||||
try {
|
||||
mid = MachineInfoUtils.readMachineId();
|
||||
} catch {
|
||||
mid = '';
|
||||
}
|
||||
}
|
||||
// 如果没传 mac,从 machine-info 文件读取
|
||||
let macStr = mac;
|
||||
if (!macStr || typeof macStr !== 'string') {
|
||||
try {
|
||||
const machineInfoPath = getMachineInfoPath();
|
||||
macStr = MachineInfoUtils.readMac(machineInfoPath);
|
||||
} catch {
|
||||
macStr = '';
|
||||
}
|
||||
}
|
||||
const guid = MachineInfoUtils.computeGuid(mid, macStr);
|
||||
return sendSuccess(res, { guid, machineId: mid, mac: macStr });
|
||||
} catch (e) {
|
||||
return sendError(res, `Failed to compute GUID: ${(e as Error).message}`);
|
||||
}
|
||||
};
|
||||
|
||||
// 获取 Linux machine-info 备份列表
|
||||
export const QQGetLinuxMachineInfoBackupsHandler: RequestHandler = async (_, res) => {
|
||||
try {
|
||||
const machineInfoPath = getMachineInfoPath();
|
||||
const backups = MachineInfoUtils.getBackups(machineInfoPath);
|
||||
return sendSuccess(res, backups);
|
||||
} catch (e) {
|
||||
return sendError(res, `Failed to get backups: ${(e as Error).message}`);
|
||||
}
|
||||
};
|
||||
|
||||
// 创建 Linux machine-info 备份
|
||||
export const QQCreateLinuxMachineInfoBackupHandler: RequestHandler = async (_, res) => {
|
||||
try {
|
||||
const machineInfoPath = getMachineInfoPath();
|
||||
const backupPath = MachineInfoUtils.backup(machineInfoPath);
|
||||
return sendSuccess(res, { message: 'Backup created', path: backupPath });
|
||||
} catch (e) {
|
||||
return sendError(res, `Failed to backup: ${(e as Error).message}`);
|
||||
}
|
||||
};
|
||||
|
||||
// 恢复 Linux machine-info 备份
|
||||
export const QQRestoreLinuxMachineInfoBackupHandler: RequestHandler = async (req, res) => {
|
||||
const { backupName } = req.body;
|
||||
if (!backupName) {
|
||||
return sendError(res, 'Backup name is required');
|
||||
}
|
||||
try {
|
||||
const machineInfoPath = getMachineInfoPath();
|
||||
MachineInfoUtils.restore(machineInfoPath, backupName);
|
||||
return sendSuccess(res, { message: 'Restored successfully' });
|
||||
} catch (e) {
|
||||
return sendError(res, `Failed to restore: ${(e as Error).message}`);
|
||||
}
|
||||
};
|
||||
|
||||
// 重置 Linux 设备信息 (删除 machine-info)
|
||||
export const QQResetLinuxDeviceIDHandler: RequestHandler = async (_, res) => {
|
||||
try {
|
||||
const machineInfoPath = getMachineInfoPath();
|
||||
// 自动备份
|
||||
try {
|
||||
MachineInfoUtils.backup(machineInfoPath);
|
||||
} catch { }
|
||||
|
||||
MachineInfoUtils.delete(machineInfoPath);
|
||||
return sendSuccess(res, { message: 'Device ID reset successfully (machine-info deleted)' });
|
||||
} catch (e) {
|
||||
return sendError(res, `Failed to reset Device ID: ${(e as Error).message}`);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ const LoginRuntime: LoginRuntimeType = {
|
||||
},
|
||||
QQLoginError: '',
|
||||
QQVersion: 'unknown',
|
||||
QQDataPath: '',
|
||||
OneBotContext: null,
|
||||
onQQLoginStatusChange: async (status: boolean) => {
|
||||
LoginRuntime.QQLoginStatus = status;
|
||||
@@ -167,6 +168,14 @@ export const WebUiDataRuntime = {
|
||||
return LoginRuntime.QQVersion;
|
||||
},
|
||||
|
||||
setQQDataPath (dataPath: string) {
|
||||
LoginRuntime.QQDataPath = dataPath;
|
||||
},
|
||||
|
||||
getQQDataPath (): string {
|
||||
return LoginRuntime.QQDataPath;
|
||||
},
|
||||
|
||||
setWebUiConfigQuickFunction (func: LoginRuntimeType['WebUiConfigQuickFunction']): void {
|
||||
LoginRuntime.WebUiConfigQuickFunction = func;
|
||||
},
|
||||
|
||||
@@ -11,6 +11,22 @@ import {
|
||||
setAutoLoginAccountHandler,
|
||||
QQRefreshQRcodeHandler,
|
||||
QQPasswordLoginHandler,
|
||||
QQResetDeviceIDHandler,
|
||||
QQRestartNapCatHandler,
|
||||
QQGetDeviceGUIDHandler,
|
||||
QQSetDeviceGUIDHandler,
|
||||
QQGetGUIDBackupsHandler,
|
||||
QQRestoreGUIDBackupHandler,
|
||||
QQCreateGUIDBackupHandler,
|
||||
QQGetPlatformInfoHandler,
|
||||
QQGetLinuxMACHandler,
|
||||
QQSetLinuxMACHandler,
|
||||
QQGetLinuxMachineIdHandler,
|
||||
QQComputeLinuxGUIDHandler,
|
||||
QQGetLinuxMachineInfoBackupsHandler,
|
||||
QQCreateLinuxMachineInfoBackupHandler,
|
||||
QQRestoreLinuxMachineInfoBackupHandler,
|
||||
QQResetLinuxDeviceIDHandler,
|
||||
} from '@/napcat-webui-backend/src/api/QQLogin';
|
||||
|
||||
const router: Router = Router();
|
||||
@@ -34,5 +50,41 @@ router.post('/SetQuickLoginQQ', setAutoLoginAccountHandler);
|
||||
router.post('/RefreshQRcode', QQRefreshQRcodeHandler);
|
||||
// router:密码登录
|
||||
router.post('/PasswordLogin', QQPasswordLoginHandler);
|
||||
// router:重置设备信息
|
||||
router.post('/ResetDeviceID', QQResetDeviceIDHandler);
|
||||
// router:重启NapCat
|
||||
router.post('/RestartNapCat', QQRestartNapCatHandler);
|
||||
// router:获取设备GUID
|
||||
router.post('/GetDeviceGUID', QQGetDeviceGUIDHandler);
|
||||
// router:设置设备GUID
|
||||
router.post('/SetDeviceGUID', QQSetDeviceGUIDHandler);
|
||||
// router:获取GUID备份列表
|
||||
router.post('/GetGUIDBackups', QQGetGUIDBackupsHandler);
|
||||
// router:恢复GUID备份
|
||||
router.post('/RestoreGUIDBackup', QQRestoreGUIDBackupHandler);
|
||||
// router:创建GUID备份
|
||||
router.post('/CreateGUIDBackup', QQCreateGUIDBackupHandler);
|
||||
|
||||
// ============================================================
|
||||
// 平台信息 & Linux GUID 管理
|
||||
// ============================================================
|
||||
// router:获取平台信息
|
||||
router.post('/GetPlatformInfo', QQGetPlatformInfoHandler);
|
||||
// router:获取Linux MAC地址
|
||||
router.post('/GetLinuxMAC', QQGetLinuxMACHandler);
|
||||
// router:设置Linux MAC地址
|
||||
router.post('/SetLinuxMAC', QQSetLinuxMACHandler);
|
||||
// router:获取Linux machine-id
|
||||
router.post('/GetLinuxMachineId', QQGetLinuxMachineIdHandler);
|
||||
// router:计算Linux GUID
|
||||
router.post('/ComputeLinuxGUID', QQComputeLinuxGUIDHandler);
|
||||
// router:获取Linux machine-info备份列表
|
||||
router.post('/GetLinuxMachineInfoBackups', QQGetLinuxMachineInfoBackupsHandler);
|
||||
// router:创建Linux machine-info备份
|
||||
router.post('/CreateLinuxMachineInfoBackup', QQCreateLinuxMachineInfoBackupHandler);
|
||||
// router:恢复Linux machine-info备份
|
||||
router.post('/RestoreLinuxMachineInfoBackup', QQRestoreLinuxMachineInfoBackupHandler);
|
||||
// router:重置Linux设备信息
|
||||
router.post('/ResetLinuxDeviceID', QQResetLinuxDeviceIDHandler);
|
||||
|
||||
export { router as QQLoginRouter };
|
||||
|
||||
@@ -49,6 +49,7 @@ export interface LoginRuntimeType {
|
||||
QQLoginInfo: SelfInfo;
|
||||
QQLoginError: string;
|
||||
QQVersion: string;
|
||||
QQDataPath: string;
|
||||
onQQLoginStatusChange: (status: boolean) => Promise<void>;
|
||||
onWebUiTokenChange: (token: string) => Promise<void>;
|
||||
onRefreshQRCode: () => Promise<void>;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user