diff --git a/src/onebot/index.ts b/src/onebot/index.ts index a66cf8b1..77402010 100644 --- a/src/onebot/index.ts +++ b/src/onebot/index.ts @@ -13,6 +13,8 @@ import { SendStatusType, NTMsgType, MessageElement, + ElementType, + NTMsgAtType, } from '@/core'; import { OB11ConfigLoader } from '@/onebot/config'; import { @@ -178,6 +180,25 @@ export class NapCatOneBot11Adapter { WebUiDataRuntime.setQQVersion(this.core.context.basicInfoWrapper.getFullQQVersion()); WebUiDataRuntime.setQQLoginInfo(selfInfo); 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) => { const prev = this.configLoader.configData; this.configLoader.save(newConfig); diff --git a/src/webui/index.ts b/src/webui/index.ts index 0af704e9..059efc54 100644 --- a/src/webui/index.ts +++ b/src/webui/index.ts @@ -62,13 +62,13 @@ export async function InitWebUi(logger: LogWrapper, pathWrapper: NapCatPathWrapp webUiPathWrapper = pathWrapper; WebUiConfig = new WebUiConfigWrapper(); const config = await WebUiConfig.GetWebUIConfig(); - + // 检查是否禁用WebUI if (config.disableWebUI) { logger.log('[NapCat] [WebUi] WebUI is disabled by configuration.'); return; } - + const [host, port, token] = await InitPort(config); webUiRuntimePort = port; 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中间件 app.use(express.json()); @@ -177,6 +190,7 @@ export async function InitWebUi(logger: LogWrapper, pathWrapper: NapCatPathWrapp ); } }); + // ------------Over!------------ } diff --git a/src/webui/src/helper/Data.ts b/src/webui/src/helper/Data.ts index c151f003..ef52e0ab 100644 --- a/src/webui/src/helper/Data.ts +++ b/src/webui/src/helper/Data.ts @@ -14,6 +14,12 @@ const LoginRuntime: LoginRuntimeType = { nick: '', }, QQVersion: 'unknown', + onQQLoginStatusChange: async (status: boolean) => { + LoginRuntime.QQLoginStatus = status; + }, + onWebUiTokenChange: async (_token: string) => { + return; + }, NapCatHelper: { onOB11ConfigChanged: async () => { return; @@ -31,6 +37,12 @@ const LoginRuntime: LoginRuntimeType = { }; export const WebUiDataRuntime = { + setWebUiTokenChangeCallback(func: (token: string) => Promise): void { + LoginRuntime.onWebUiTokenChange = func; + }, + getWebUiTokenChangeCallback(): (token: string) => Promise { + return LoginRuntime.onWebUiTokenChange; + }, checkLoginRate(ip: string, RateLimit: number): boolean { const key = `login_rate:${ip}`; const count = store.get(key) || 0; @@ -53,6 +65,14 @@ export const WebUiDataRuntime = { return LoginRuntime.QQLoginStatus; }, + setQQLoginCallback(func: (status: boolean) => Promise): void { + LoginRuntime.onQQLoginStatusChange = func; + }, + + getQQLoginCallback(): (status: boolean) => Promise { + return LoginRuntime.onQQLoginStatusChange; + }, + setQQLoginStatus(status: LoginRuntimeType['QQLoginStatus']): void { LoginRuntime.QQLoginStatus = status; }, diff --git a/src/webui/src/helper/config.ts b/src/webui/src/helper/config.ts index 727680c3..c3e70355 100644 --- a/src/webui/src/helper/config.ts +++ b/src/webui/src/helper/config.ts @@ -13,8 +13,7 @@ import { themeType } from '../types/theme'; const WebUiConfigSchema = Type.Object({ host: Type.String({ default: '0.0.0.0' }), port: Type.Number({ default: 6099 }), - // napcat+<月份日时>,例如 napcat062511 - 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') }), + token: Type.String({ default: 'napcat' }), loginRate: Type.Number({ default: 10 }), autoLoginAccount: Type.String({ default: '' }), theme: themeType, diff --git a/src/webui/src/types/data.d.ts b/src/webui/src/types/data.d.ts index d881a4b0..118a95bb 100644 --- a/src/webui/src/types/data.d.ts +++ b/src/webui/src/types/data.d.ts @@ -9,6 +9,8 @@ interface LoginRuntimeType { QQLoginUin: string; QQLoginInfo: SelfInfo; QQVersion: string; + onQQLoginStatusChange: (status: boolean) => Promise; + onWebUiTokenChange: (token: string) => Promise; WebUiConfigQuickFunction: () => Promise; NapCatHelper: { onQuickLoginRequested: (uin: string) => Promise<{ result: boolean; message: string }>;