mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2026-01-17 13:50:36 +00:00
Add WebUI token update and callback handling
Introduces callback mechanisms for WebUI token changes and QQ login status updates. The WebUI token is now updated and communicated via a callback after login, and related runtime and type definitions are extended to support these features. Also sets a static default token value in the config schema.
This commit is contained in:
parent
88ee8f89fe
commit
5c120a8231
@ -13,6 +13,8 @@ import {
|
|||||||
SendStatusType,
|
SendStatusType,
|
||||||
NTMsgType,
|
NTMsgType,
|
||||||
MessageElement,
|
MessageElement,
|
||||||
|
ElementType,
|
||||||
|
NTMsgAtType,
|
||||||
} from '@/core';
|
} from '@/core';
|
||||||
import { OB11ConfigLoader } from '@/onebot/config';
|
import { OB11ConfigLoader } from '@/onebot/config';
|
||||||
import {
|
import {
|
||||||
@ -178,6 +180,25 @@ export class NapCatOneBot11Adapter {
|
|||||||
WebUiDataRuntime.setQQVersion(this.core.context.basicInfoWrapper.getFullQQVersion());
|
WebUiDataRuntime.setQQVersion(this.core.context.basicInfoWrapper.getFullQQVersion());
|
||||||
WebUiDataRuntime.setQQLoginInfo(selfInfo);
|
WebUiDataRuntime.setQQLoginInfo(selfInfo);
|
||||||
WebUiDataRuntime.setQQLoginStatus(true);
|
WebUiDataRuntime.setQQLoginStatus(true);
|
||||||
|
WebUiDataRuntime.getQQLoginCallback()(true);
|
||||||
|
let sendWebUiToken = async (token: string) => {
|
||||||
|
await this.core.apis.MsgApi.sendMsg(
|
||||||
|
{ chatType: ChatType.KCHATTYPEC2C, peerUid: selfInfo.uid, guildId: '' },
|
||||||
|
[{
|
||||||
|
elementType: ElementType.TEXT,
|
||||||
|
elementId: '',
|
||||||
|
textElement: {
|
||||||
|
content: 'Update WebUi Token: ' + token,
|
||||||
|
atType: NTMsgAtType.ATTYPEUNKNOWN,
|
||||||
|
atUid: '',
|
||||||
|
atTinyId: '',
|
||||||
|
atNtUid: '',
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
5000
|
||||||
|
)
|
||||||
|
};
|
||||||
|
WebUiDataRuntime.setWebUiTokenChangeCallback(sendWebUiToken);
|
||||||
WebUiDataRuntime.setOnOB11ConfigChanged(async (newConfig) => {
|
WebUiDataRuntime.setOnOB11ConfigChanged(async (newConfig) => {
|
||||||
const prev = this.configLoader.configData;
|
const prev = this.configLoader.configData;
|
||||||
this.configLoader.save(newConfig);
|
this.configLoader.save(newConfig);
|
||||||
|
|||||||
@ -62,13 +62,13 @@ export async function InitWebUi(logger: LogWrapper, pathWrapper: NapCatPathWrapp
|
|||||||
webUiPathWrapper = pathWrapper;
|
webUiPathWrapper = pathWrapper;
|
||||||
WebUiConfig = new WebUiConfigWrapper();
|
WebUiConfig = new WebUiConfigWrapper();
|
||||||
const config = await WebUiConfig.GetWebUIConfig();
|
const config = await WebUiConfig.GetWebUIConfig();
|
||||||
|
|
||||||
// 检查是否禁用WebUI
|
// 检查是否禁用WebUI
|
||||||
if (config.disableWebUI) {
|
if (config.disableWebUI) {
|
||||||
logger.log('[NapCat] [WebUi] WebUI is disabled by configuration.');
|
logger.log('[NapCat] [WebUi] WebUI is disabled by configuration.');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const [host, port, token] = await InitPort(config);
|
const [host, port, token] = await InitPort(config);
|
||||||
webUiRuntimePort = port;
|
webUiRuntimePort = port;
|
||||||
if (port == 0) {
|
if (port == 0) {
|
||||||
@ -90,6 +90,19 @@ export async function InitWebUi(logger: LogWrapper, pathWrapper: NapCatPathWrapp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
WebUiDataRuntime.setQQLoginCallback(async (_status: boolean) => {
|
||||||
|
try {
|
||||||
|
if ((await WebUiConfig.GetWebUIConfig()).defaultToken) {
|
||||||
|
let randomToken = Math.random().toString(36).slice(-8);
|
||||||
|
await WebUiConfig.UpdateWebUIConfig({ token: randomToken });
|
||||||
|
console.log(`[NapCat] [WebUi] Update WebUi Token: ${randomToken}`);
|
||||||
|
await WebUiDataRuntime.getWebUiTokenChangeCallback()(randomToken);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.log(`[NapCat] [WebUi] Update WebUi Token failed.` + error);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
// ------------注册中间件------------
|
// ------------注册中间件------------
|
||||||
// 使用express的json中间件
|
// 使用express的json中间件
|
||||||
app.use(express.json());
|
app.use(express.json());
|
||||||
@ -177,6 +190,7 @@ export async function InitWebUi(logger: LogWrapper, pathWrapper: NapCatPathWrapp
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// ------------Over!------------
|
// ------------Over!------------
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -14,6 +14,12 @@ const LoginRuntime: LoginRuntimeType = {
|
|||||||
nick: '',
|
nick: '',
|
||||||
},
|
},
|
||||||
QQVersion: 'unknown',
|
QQVersion: 'unknown',
|
||||||
|
onQQLoginStatusChange: async (status: boolean) => {
|
||||||
|
LoginRuntime.QQLoginStatus = status;
|
||||||
|
},
|
||||||
|
onWebUiTokenChange: async (_token: string) => {
|
||||||
|
return;
|
||||||
|
},
|
||||||
NapCatHelper: {
|
NapCatHelper: {
|
||||||
onOB11ConfigChanged: async () => {
|
onOB11ConfigChanged: async () => {
|
||||||
return;
|
return;
|
||||||
@ -31,6 +37,12 @@ const LoginRuntime: LoginRuntimeType = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const WebUiDataRuntime = {
|
export const WebUiDataRuntime = {
|
||||||
|
setWebUiTokenChangeCallback(func: (token: string) => Promise<void>): void {
|
||||||
|
LoginRuntime.onWebUiTokenChange = func;
|
||||||
|
},
|
||||||
|
getWebUiTokenChangeCallback(): (token: string) => Promise<void> {
|
||||||
|
return LoginRuntime.onWebUiTokenChange;
|
||||||
|
},
|
||||||
checkLoginRate(ip: string, RateLimit: number): boolean {
|
checkLoginRate(ip: string, RateLimit: number): boolean {
|
||||||
const key = `login_rate:${ip}`;
|
const key = `login_rate:${ip}`;
|
||||||
const count = store.get<number>(key) || 0;
|
const count = store.get<number>(key) || 0;
|
||||||
@ -53,6 +65,14 @@ export const WebUiDataRuntime = {
|
|||||||
return LoginRuntime.QQLoginStatus;
|
return LoginRuntime.QQLoginStatus;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
setQQLoginCallback(func: (status: boolean) => Promise<void>): void {
|
||||||
|
LoginRuntime.onQQLoginStatusChange = func;
|
||||||
|
},
|
||||||
|
|
||||||
|
getQQLoginCallback(): (status: boolean) => Promise<void> {
|
||||||
|
return LoginRuntime.onQQLoginStatusChange;
|
||||||
|
},
|
||||||
|
|
||||||
setQQLoginStatus(status: LoginRuntimeType['QQLoginStatus']): void {
|
setQQLoginStatus(status: LoginRuntimeType['QQLoginStatus']): void {
|
||||||
LoginRuntime.QQLoginStatus = status;
|
LoginRuntime.QQLoginStatus = status;
|
||||||
},
|
},
|
||||||
|
|||||||
@ -13,8 +13,7 @@ import { themeType } from '../types/theme';
|
|||||||
const WebUiConfigSchema = Type.Object({
|
const WebUiConfigSchema = Type.Object({
|
||||||
host: Type.String({ default: '0.0.0.0' }),
|
host: Type.String({ default: '0.0.0.0' }),
|
||||||
port: Type.Number({ default: 6099 }),
|
port: Type.Number({ default: 6099 }),
|
||||||
// napcat+<月份日时>,例如 napcat062511
|
token: Type.String({ default: 'napcat' }),
|
||||||
token: Type.String({ default: 'napcat' + (new Date().getMonth() + 1).toString().padStart(2, '0') + new Date().getDate().toString().padStart(2, '0') + new Date().getHours().toString().padStart(2, '0') }),
|
|
||||||
loginRate: Type.Number({ default: 10 }),
|
loginRate: Type.Number({ default: 10 }),
|
||||||
autoLoginAccount: Type.String({ default: '' }),
|
autoLoginAccount: Type.String({ default: '' }),
|
||||||
theme: themeType,
|
theme: themeType,
|
||||||
|
|||||||
2
src/webui/src/types/data.d.ts
vendored
2
src/webui/src/types/data.d.ts
vendored
@ -9,6 +9,8 @@ interface LoginRuntimeType {
|
|||||||
QQLoginUin: string;
|
QQLoginUin: string;
|
||||||
QQLoginInfo: SelfInfo;
|
QQLoginInfo: SelfInfo;
|
||||||
QQVersion: string;
|
QQVersion: string;
|
||||||
|
onQQLoginStatusChange: (status: boolean) => Promise<void>;
|
||||||
|
onWebUiTokenChange: (token: string) => Promise<void>;
|
||||||
WebUiConfigQuickFunction: () => Promise<void>;
|
WebUiConfigQuickFunction: () => Promise<void>;
|
||||||
NapCatHelper: {
|
NapCatHelper: {
|
||||||
onQuickLoginRequested: (uin: string) => Promise<{ result: boolean; message: string }>;
|
onQuickLoginRequested: (uin: string) => Promise<{ result: boolean; message: string }>;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user