From 34d881426ff6d3fe30ace653f4bdd438e490cd30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Tue, 7 May 2024 20:50:25 +0800 Subject: [PATCH] fear: webui quick login --- src/core | 2 +- src/index.ts | 26 +++++++++++++++++++++++ src/webui/src/api/QQLogin.ts | 40 +++++++++++++++++++++++++----------- src/webui/src/helper/Data.ts | 33 ++++++++++++++++++++++++++--- 4 files changed, 85 insertions(+), 16 deletions(-) diff --git a/src/core b/src/core index 852cad57..8cf3b85f 160000 --- a/src/core +++ b/src/core @@ -1 +1 @@ -Subproject commit 852cad57c43ecc6113516db1abc591fb22e913fd +Subproject commit 8cf3b85ffb49d9cc223d850a2a955b799b841bd7 diff --git a/src/index.ts b/src/index.ts index 21ebc460..d346ab8e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -63,6 +63,32 @@ const quickLoginQQ = cmdOptions.qq; // console.error('登录失败', result); // napCatCore.qrLogin().then().catch(console.error); // }); +napCatCore.getQuickLoginList().then((res) => { + // 遍历 res.LocalLoginInfoList[x].isQuickLogin是否可以可以 res.LocalLoginInfoList[x].uin 转为string 加入string[] 最后遍历完成调用DataRuntime.setQQQuickLoginList + DataRuntime.setQQQuickLoginList(res.LocalLoginInfoList.filter((item) => item.isQuickLogin).map((item) => item.uin.toString())); +}); + +DataRuntime.setQQQuickLogin(async (uin: string) => { + let QuickLogin: Promise<{ result: boolean, message: string }> = new Promise((resolve, reject) => { + if (quickLoginQQ) { + log('正在快速登录 ', quickLoginQQ); + napCatCore.quickLogin(quickLoginQQ).then(res => { + if (res.loginErrorInfo.errMsg) { + resolve({ result: false, message: res.loginErrorInfo.errMsg }); + } + resolve({ result: true, message: '' }); + }).catch((e) => { + console.error(e); + resolve({ result: false, message: '快速登录发生错误' }); + }); + } else { + resolve({ result: false, message: '快速登录失败' }); + } + }); + let result = await QuickLogin; + return result; +}); + if (quickLoginQQ) { log('正在快速登录 ', quickLoginQQ); napCatCore.quickLogin(quickLoginQQ).then(res => { diff --git a/src/webui/src/api/QQLogin.ts b/src/webui/src/api/QQLogin.ts index 5c797726..59be3446 100644 --- a/src/webui/src/api/QQLogin.ts +++ b/src/webui/src/api/QQLogin.ts @@ -1,5 +1,6 @@ import { RequestHandler } from "express"; import { DataRuntime } from "../helper/Data"; +import { sleep } from "@/common/utils/helper"; const isEmpty = (data: any) => data === undefined || data === null || data === ''; export const QQGetQRcodeHandler: RequestHandler = async (req, res) => { if (await DataRuntime.getQQLoginStatus()) { @@ -36,26 +37,41 @@ export const QQCheckLoginStatusHandler: RequestHandler = (req, res) => { }); }; export const QQSetQuickLoginHandler: RequestHandler = async (req, res) => { - // 未完成 - const { token } = req.body; - if (token) { - const isLogin = await DataRuntime.getQQLoginStatus(); + let { uin } = req.body; + let isLogin = await DataRuntime.getQQLoginStatus(); + if (isLogin) { + res.send({ + code: -1, + message: 'QQ Is Logined' + }); + return; } - // 未实现 + if (isEmpty(uin)) { + res.send({ + code: -1, + message: 'uin is empty' + }); + return; + } + let ret = await DataRuntime.getQQQuickLogin(uin); + if (!ret.result) { + res.send({ + code: -1, + message: ret.message + }); + return; + } + //本来应该验证 但是http不宜这么搞 建议前端验证 + //isLogin = await DataRuntime.getQQLoginStatus(); res.send({ code: 0, message: 'success' }); } export const QQGetQuickLoginListHandler: RequestHandler = async (req, res) => { - // 未完成 - const { token } = req.body; - if (token) { - const isLogin = await DataRuntime.getQQLoginStatus(); - } - // 未实现 + const quickLoginList = await DataRuntime.getQQQuickLoginList(); res.send({ code: 0, - message: 'success' + data: quickLoginList }); } \ No newline at end of file diff --git a/src/webui/src/helper/Data.ts b/src/webui/src/helper/Data.ts index 5b1bdd13..ef2da3eb 100644 --- a/src/webui/src/helper/Data.ts +++ b/src/webui/src/helper/Data.ts @@ -1,9 +1,24 @@ -let LoginRuntime = { +interface LoginRuntimeType { + LoginCurrentTime: number; + LoginCurrentRate: number; + QQLoginStatus: boolean; + QQQRCodeURL: string; + QQLoginUin: number; + NapCatHelper: { + CoreQuickLogin: (uin: string) => Promise<{ result: boolean, message: string }>; + QQLoginList: string[] + } +} +let LoginRuntime: LoginRuntimeType = { LoginCurrentTime: Date.now(), LoginCurrentRate: 0, - QQLoginStatus: false, //得去那边注册个回调刷新 + QQLoginStatus: false, //已实现 但太傻了 得去那边注册个回调刷新 QQQRCodeURL: "", - QQLoginUin: 0 + QQLoginUin: 0, + NapCatHelper: { + CoreQuickLogin: async (uin: string) => { return { result: false, message: '' }; }, + QQLoginList: [] + } } export const DataRuntime = { checkLoginRate: async function (RateLimit: number): Promise { @@ -40,5 +55,17 @@ export const DataRuntime = { , getQQLoginUin: async function (): Promise { return LoginRuntime.QQLoginUin; + }, + getQQQuickLoginList: async function (): Promise { + return LoginRuntime.NapCatHelper.QQLoginList; + }, + setQQQuickLoginList: async function (list: string[]): Promise { + LoginRuntime.NapCatHelper.QQLoginList = list; + }, + setQQQuickLogin(func: (uin: string) => Promise<{ result: boolean, message: string }>): void { + LoginRuntime.NapCatHelper.CoreQuickLogin = func; + }, + getQQQuickLogin: async function (uin: string): Promise<{ result: boolean, message: string }> { + return await LoginRuntime.NapCatHelper.CoreQuickLogin(uin); } } \ No newline at end of file