mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-07-19 12:03:37 +00:00
Merge pull request #627 from bietiaop/main
feat: 查看登录QQ信息&获取快速登录列表详细信息&获取nc的包信息&优化了部分写法
This commit is contained in:
@@ -157,9 +157,9 @@ export class NapCatOneBot11Adapter {
|
|||||||
this.initBuddyListener();
|
this.initBuddyListener();
|
||||||
this.initGroupListener();
|
this.initGroupListener();
|
||||||
|
|
||||||
await WebUiDataRuntime.setQQLoginUin(selfInfo.uin.toString());
|
WebUiDataRuntime.setQQLoginInfo(selfInfo);
|
||||||
await WebUiDataRuntime.setQQLoginStatus(true);
|
WebUiDataRuntime.setQQLoginStatus(true);
|
||||||
await 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);
|
||||||
this.context.logger.log(`OneBot11 配置更改:${JSON.stringify(prev)} -> ${JSON.stringify(newConfig)}`);
|
this.context.logger.log(`OneBot11 配置更改:${JSON.stringify(prev)} -> ${JSON.stringify(newConfig)}`);
|
||||||
|
@@ -175,7 +175,9 @@ async function handleLogin(
|
|||||||
|
|
||||||
loginService.getLoginList().then((res) => {
|
loginService.getLoginList().then((res) => {
|
||||||
// 遍历 res.LocalLoginInfoList[x].isQuickLogin是否可以 res.LocalLoginInfoList[x].uin 转为string 加入string[] 最后遍历完成调用WebUiDataRuntime.setQQQuickLoginList
|
// 遍历 res.LocalLoginInfoList[x].isQuickLogin是否可以 res.LocalLoginInfoList[x].uin 转为string 加入string[] 最后遍历完成调用WebUiDataRuntime.setQQQuickLoginList
|
||||||
WebUiDataRuntime.setQQQuickLoginList(res.LocalLoginInfoList.filter((item) => item.isQuickLogin).map((item) => item.uin.toString()));
|
const list = res.LocalLoginInfoList.filter((item) => item.isQuickLogin);
|
||||||
|
WebUiDataRuntime.setQQQuickLoginList(list.map((item) => item.uin.toString()));
|
||||||
|
WebUiDataRuntime.setQQNewLoginList(list);
|
||||||
});
|
});
|
||||||
|
|
||||||
WebUiDataRuntime.setQuickLoginCall(async (uin: string) => {
|
WebUiDataRuntime.setQuickLoginCall(async (uin: string) => {
|
||||||
|
@@ -18,7 +18,7 @@ export const LoginHandler: RequestHandler = async (req, res) => {
|
|||||||
return sendError(res, 'token is empty');
|
return sendError(res, 'token is empty');
|
||||||
}
|
}
|
||||||
// 检查登录频率
|
// 检查登录频率
|
||||||
if (!(await WebUiDataRuntime.checkLoginRate(WebUiConfigData.loginRate))) {
|
if (!WebUiDataRuntime.checkLoginRate(WebUiConfigData.loginRate)) {
|
||||||
return sendError(res, 'login rate limit');
|
return sendError(res, 'login rate limit');
|
||||||
}
|
}
|
||||||
//验证config.token是否等于token
|
//验证config.token是否等于token
|
||||||
|
@@ -1,15 +1,9 @@
|
|||||||
import { RequestHandler } from 'express';
|
import { RequestHandler } from 'express';
|
||||||
|
import { WebUiDataRuntime } from '@webapi/helper/Data';
|
||||||
|
|
||||||
import { sendSuccess } from '@webapi/utils/response';
|
import { sendSuccess } from '@webapi/utils/response';
|
||||||
|
|
||||||
// TODO: Implement LogFileListHandler
|
export const PackageInfoHandler: RequestHandler = (_, res) => {
|
||||||
export const LogFileListHandler: RequestHandler = async (_, res) => {
|
const data = WebUiDataRuntime.getPackageJson();
|
||||||
const fakeData = {
|
sendSuccess(res, data);
|
||||||
uin: 0,
|
|
||||||
nick: 'NapCat',
|
|
||||||
avatar: 'https://q1.qlogo.cn/g?b=qq&nk=0&s=640',
|
|
||||||
status: 'online',
|
|
||||||
boottime: Date.now(),
|
|
||||||
};
|
|
||||||
sendSuccess(res, fakeData);
|
|
||||||
};
|
};
|
||||||
|
@@ -10,15 +10,15 @@ import { sendError, sendSuccess } from '@webapi/utils/response';
|
|||||||
import { isEmpty } from '@webapi/utils/check';
|
import { isEmpty } from '@webapi/utils/check';
|
||||||
|
|
||||||
// 获取OneBot11配置
|
// 获取OneBot11配置
|
||||||
export const OB11GetConfigHandler: RequestHandler = async (_, res) => {
|
export const OB11GetConfigHandler: RequestHandler = (_, res) => {
|
||||||
// 获取QQ登录状态
|
// 获取QQ登录状态
|
||||||
const isLogin = await WebUiDataRuntime.getQQLoginStatus();
|
const isLogin = WebUiDataRuntime.getQQLoginStatus();
|
||||||
// 如果未登录,返回错误
|
// 如果未登录,返回错误
|
||||||
if (!isLogin) {
|
if (!isLogin) {
|
||||||
return sendError(res, 'Not Login');
|
return sendError(res, 'Not Login');
|
||||||
}
|
}
|
||||||
// 获取登录的QQ号
|
// 获取登录的QQ号
|
||||||
const uin = await WebUiDataRuntime.getQQLoginUin();
|
const uin = WebUiDataRuntime.getQQLoginUin();
|
||||||
// 读取配置文件
|
// 读取配置文件
|
||||||
const configFilePath = resolve(webUiPathWrapper.configPath, `./onebot11_${uin}.json`);
|
const configFilePath = resolve(webUiPathWrapper.configPath, `./onebot11_${uin}.json`);
|
||||||
// 尝试解析配置文件
|
// 尝试解析配置文件
|
||||||
@@ -39,7 +39,7 @@ export const OB11GetConfigHandler: RequestHandler = async (_, res) => {
|
|||||||
// 写入OneBot11配置
|
// 写入OneBot11配置
|
||||||
export const OB11SetConfigHandler: RequestHandler = async (req, res) => {
|
export const OB11SetConfigHandler: RequestHandler = async (req, res) => {
|
||||||
// 获取QQ登录状态
|
// 获取QQ登录状态
|
||||||
const isLogin = await WebUiDataRuntime.getQQLoginStatus();
|
const isLogin = WebUiDataRuntime.getQQLoginStatus();
|
||||||
// 如果未登录,返回错误
|
// 如果未登录,返回错误
|
||||||
if (!isLogin) {
|
if (!isLogin) {
|
||||||
return sendError(res, 'Not Login');
|
return sendError(res, 'Not Login');
|
||||||
|
@@ -7,12 +7,12 @@ import { sendError, sendSuccess } from '@webapi/utils/response';
|
|||||||
// 获取QQ登录二维码
|
// 获取QQ登录二维码
|
||||||
export const QQGetQRcodeHandler: RequestHandler = async (req, res) => {
|
export const QQGetQRcodeHandler: RequestHandler = async (req, res) => {
|
||||||
// 判断是否已经登录
|
// 判断是否已经登录
|
||||||
if (await WebUiDataRuntime.getQQLoginStatus()) {
|
if (WebUiDataRuntime.getQQLoginStatus()) {
|
||||||
// 已经登录
|
// 已经登录
|
||||||
return sendError(res, 'QQ Is Logined');
|
return sendError(res, 'QQ Is Logined');
|
||||||
}
|
}
|
||||||
// 获取二维码
|
// 获取二维码
|
||||||
const qrcodeUrl = await WebUiDataRuntime.getQQLoginQrcodeURL();
|
const qrcodeUrl = WebUiDataRuntime.getQQLoginQrcodeURL();
|
||||||
// 判断二维码是否为空
|
// 判断二维码是否为空
|
||||||
if (isEmpty(qrcodeUrl)) {
|
if (isEmpty(qrcodeUrl)) {
|
||||||
return sendError(res, 'QRCode Get Error');
|
return sendError(res, 'QRCode Get Error');
|
||||||
@@ -27,8 +27,8 @@ export const QQGetQRcodeHandler: RequestHandler = async (req, res) => {
|
|||||||
// 获取QQ登录状态
|
// 获取QQ登录状态
|
||||||
export const QQCheckLoginStatusHandler: RequestHandler = async (req, res) => {
|
export const QQCheckLoginStatusHandler: RequestHandler = async (req, res) => {
|
||||||
const data = {
|
const data = {
|
||||||
isLogin: await WebUiDataRuntime.getQQLoginStatus(),
|
isLogin: WebUiDataRuntime.getQQLoginStatus(),
|
||||||
qrcodeurl: await WebUiDataRuntime.getQQLoginQrcodeURL(),
|
qrcodeurl: WebUiDataRuntime.getQQLoginQrcodeURL(),
|
||||||
};
|
};
|
||||||
return sendSuccess(res, data);
|
return sendSuccess(res, data);
|
||||||
};
|
};
|
||||||
@@ -38,7 +38,7 @@ export const QQSetQuickLoginHandler: RequestHandler = async (req, res) => {
|
|||||||
// 获取QQ号
|
// 获取QQ号
|
||||||
const { uin } = req.body;
|
const { uin } = req.body;
|
||||||
// 判断是否已经登录
|
// 判断是否已经登录
|
||||||
const isLogin = await WebUiDataRuntime.getQQLoginStatus();
|
const isLogin = WebUiDataRuntime.getQQLoginStatus();
|
||||||
if (isLogin) {
|
if (isLogin) {
|
||||||
return sendError(res, 'QQ Is Logined');
|
return sendError(res, 'QQ Is Logined');
|
||||||
}
|
}
|
||||||
@@ -53,12 +53,24 @@ export const QQSetQuickLoginHandler: RequestHandler = async (req, res) => {
|
|||||||
return sendError(res, message);
|
return sendError(res, message);
|
||||||
}
|
}
|
||||||
//本来应该验证 但是http不宜这么搞 建议前端验证
|
//本来应该验证 但是http不宜这么搞 建议前端验证
|
||||||
//isLogin = await WebUiDataRuntime.getQQLoginStatus();
|
//isLogin = WebUiDataRuntime.getQQLoginStatus();
|
||||||
return sendSuccess(res, null);
|
return sendSuccess(res, null);
|
||||||
};
|
};
|
||||||
|
|
||||||
// 获取快速登录列表
|
// 获取快速登录列表
|
||||||
export const QQGetQuickLoginListHandler: RequestHandler = async (_, res) => {
|
export const QQGetQuickLoginListHandler: RequestHandler = async (_, res) => {
|
||||||
const quickLoginList = await WebUiDataRuntime.getQQQuickLoginList();
|
const quickLoginList = WebUiDataRuntime.getQQQuickLoginList();
|
||||||
return sendSuccess(res, quickLoginList);
|
return sendSuccess(res, quickLoginList);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 获取快速登录列表(新)
|
||||||
|
export const QQGetLoginListNewHandler: RequestHandler = async (_, res) => {
|
||||||
|
const newLoginList = WebUiDataRuntime.getQQNewLoginList();
|
||||||
|
return sendSuccess(res, newLoginList);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 获取登录的QQ的信息
|
||||||
|
export const getQQLoginInfoHandler: RequestHandler = async (_, res) => {
|
||||||
|
const data = WebUiDataRuntime.getQQLoginInfo();
|
||||||
|
return sendSuccess(res, data);
|
||||||
|
};
|
||||||
|
@@ -1,11 +1,16 @@
|
|||||||
import { OneBotConfig } from '@/onebot/config/config';
|
import type { LoginRuntimeType } from '../types/data';
|
||||||
|
import packageJson from '../../../../package.json';
|
||||||
const LoginRuntime: LoginRuntimeType = {
|
const LoginRuntime: LoginRuntimeType = {
|
||||||
LoginCurrentTime: Date.now(),
|
LoginCurrentTime: Date.now(),
|
||||||
LoginCurrentRate: 0,
|
LoginCurrentRate: 0,
|
||||||
QQLoginStatus: false, //已实现 但太傻了 得去那边注册个回调刷新
|
QQLoginStatus: false, //已实现 但太傻了 得去那边注册个回调刷新
|
||||||
QQQRCodeURL: '',
|
QQQRCodeURL: '',
|
||||||
QQLoginUin: '',
|
QQLoginUin: '',
|
||||||
|
QQLoginInfo: {
|
||||||
|
uid: '',
|
||||||
|
uin: '',
|
||||||
|
nick: '',
|
||||||
|
},
|
||||||
NapCatHelper: {
|
NapCatHelper: {
|
||||||
onOB11ConfigChanged: async () => {
|
onOB11ConfigChanged: async () => {
|
||||||
return;
|
return;
|
||||||
@@ -14,11 +19,13 @@ const LoginRuntime: LoginRuntimeType = {
|
|||||||
return { result: false, message: '' };
|
return { result: false, message: '' };
|
||||||
},
|
},
|
||||||
QQLoginList: [],
|
QQLoginList: [],
|
||||||
|
NewQQLoginList: [],
|
||||||
},
|
},
|
||||||
|
packageJson: packageJson,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const WebUiDataRuntime = {
|
export const WebUiDataRuntime = {
|
||||||
checkLoginRate: async function (RateLimit: number): Promise<boolean> {
|
checkLoginRate(RateLimit: number): boolean {
|
||||||
LoginRuntime.LoginCurrentRate++;
|
LoginRuntime.LoginCurrentRate++;
|
||||||
//console.log(RateLimit, LoginRuntime.LoginCurrentRate, Date.now() - LoginRuntime.LoginCurrentTime);
|
//console.log(RateLimit, LoginRuntime.LoginCurrentRate, Date.now() - LoginRuntime.LoginCurrentTime);
|
||||||
if (Date.now() - LoginRuntime.LoginCurrentTime > 1000 * 60) {
|
if (Date.now() - LoginRuntime.LoginCurrentTime > 1000 * 60) {
|
||||||
@@ -29,51 +36,68 @@ export const WebUiDataRuntime = {
|
|||||||
return LoginRuntime.LoginCurrentRate <= RateLimit;
|
return LoginRuntime.LoginCurrentRate <= RateLimit;
|
||||||
},
|
},
|
||||||
|
|
||||||
getQQLoginStatus: async function (): Promise<boolean> {
|
getQQLoginStatus(): LoginRuntimeType['QQLoginStatus'] {
|
||||||
return LoginRuntime.QQLoginStatus;
|
return LoginRuntime.QQLoginStatus;
|
||||||
},
|
},
|
||||||
|
|
||||||
setQQLoginStatus: async function (status: boolean): Promise<void> {
|
setQQLoginStatus(status: LoginRuntimeType['QQLoginStatus']): void {
|
||||||
LoginRuntime.QQLoginStatus = status;
|
LoginRuntime.QQLoginStatus = status;
|
||||||
},
|
},
|
||||||
|
|
||||||
setQQLoginQrcodeURL: async function (url: string): Promise<void> {
|
setQQLoginQrcodeURL(url: LoginRuntimeType['QQQRCodeURL']): void {
|
||||||
LoginRuntime.QQQRCodeURL = url;
|
LoginRuntime.QQQRCodeURL = url;
|
||||||
},
|
},
|
||||||
|
|
||||||
getQQLoginQrcodeURL: async function (): Promise<string> {
|
getQQLoginQrcodeURL(): LoginRuntimeType['QQQRCodeURL'] {
|
||||||
return LoginRuntime.QQQRCodeURL;
|
return LoginRuntime.QQQRCodeURL;
|
||||||
},
|
},
|
||||||
|
|
||||||
setQQLoginUin: async function (uin: string): Promise<void> {
|
setQQLoginInfo(info: LoginRuntimeType['QQLoginInfo']): void {
|
||||||
LoginRuntime.QQLoginUin = uin;
|
LoginRuntime.QQLoginInfo = info;
|
||||||
|
LoginRuntime.QQLoginUin = info.uin.toString();
|
||||||
},
|
},
|
||||||
|
|
||||||
getQQLoginUin: async function (): Promise<string> {
|
getQQLoginInfo(): LoginRuntimeType['QQLoginInfo'] {
|
||||||
|
return LoginRuntime.QQLoginInfo;
|
||||||
|
},
|
||||||
|
|
||||||
|
getQQLoginUin(): LoginRuntimeType['QQLoginUin'] {
|
||||||
return LoginRuntime.QQLoginUin;
|
return LoginRuntime.QQLoginUin;
|
||||||
},
|
},
|
||||||
|
|
||||||
getQQQuickLoginList: async function (): Promise<any[]> {
|
getQQQuickLoginList(): LoginRuntimeType['NapCatHelper']['QQLoginList'] {
|
||||||
return LoginRuntime.NapCatHelper.QQLoginList;
|
return LoginRuntime.NapCatHelper.QQLoginList;
|
||||||
},
|
},
|
||||||
|
|
||||||
setQQQuickLoginList: async function (list: string[]): Promise<void> {
|
setQQQuickLoginList(list: LoginRuntimeType['NapCatHelper']['QQLoginList']): void {
|
||||||
LoginRuntime.NapCatHelper.QQLoginList = list;
|
LoginRuntime.NapCatHelper.QQLoginList = list;
|
||||||
},
|
},
|
||||||
|
|
||||||
setQuickLoginCall(func: (uin: string) => Promise<{ result: boolean; message: string }>): void {
|
getQQNewLoginList(): LoginRuntimeType['NapCatHelper']['NewQQLoginList'] {
|
||||||
|
return LoginRuntime.NapCatHelper.NewQQLoginList;
|
||||||
|
},
|
||||||
|
|
||||||
|
setQQNewLoginList(list: LoginRuntimeType['NapCatHelper']['NewQQLoginList']): void {
|
||||||
|
LoginRuntime.NapCatHelper.NewQQLoginList = list;
|
||||||
|
},
|
||||||
|
|
||||||
|
setQuickLoginCall(func: LoginRuntimeType['NapCatHelper']['onQuickLoginRequested']): void {
|
||||||
LoginRuntime.NapCatHelper.onQuickLoginRequested = func;
|
LoginRuntime.NapCatHelper.onQuickLoginRequested = func;
|
||||||
},
|
},
|
||||||
|
|
||||||
requestQuickLogin: async function (uin: string): Promise<{ result: boolean; message: string }> {
|
requestQuickLogin: function (uin) {
|
||||||
return await LoginRuntime.NapCatHelper.onQuickLoginRequested(uin);
|
return LoginRuntime.NapCatHelper.onQuickLoginRequested(uin);
|
||||||
},
|
} as LoginRuntimeType['NapCatHelper']['onQuickLoginRequested'],
|
||||||
|
|
||||||
setOnOB11ConfigChanged: async function (func: (ob11: OneBotConfig) => Promise<void>): Promise<void> {
|
setOnOB11ConfigChanged(func: LoginRuntimeType['NapCatHelper']['onOB11ConfigChanged']): void {
|
||||||
LoginRuntime.NapCatHelper.onOB11ConfigChanged = func;
|
LoginRuntime.NapCatHelper.onOB11ConfigChanged = func;
|
||||||
},
|
},
|
||||||
|
|
||||||
setOB11Config: async function (ob11: OneBotConfig): Promise<void> {
|
setOB11Config: function (ob11) {
|
||||||
await LoginRuntime.NapCatHelper.onOB11ConfigChanged(ob11);
|
return LoginRuntime.NapCatHelper.onOB11ConfigChanged(ob11);
|
||||||
|
} as LoginRuntimeType['NapCatHelper']['onOB11ConfigChanged'],
|
||||||
|
|
||||||
|
getPackageJson() {
|
||||||
|
return LoginRuntime.packageJson;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
8
src/webui/src/router/Base.ts
Normal file
8
src/webui/src/router/Base.ts
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import { Router } from 'express';
|
||||||
|
import { PackageInfoHandler } from '../api/BaseInfo';
|
||||||
|
|
||||||
|
const router = Router();
|
||||||
|
// router: 获取nc的package.json信息
|
||||||
|
router.get('/PackageInfo', PackageInfoHandler);
|
||||||
|
|
||||||
|
export { router as BaseRouter };
|
@@ -5,16 +5,22 @@ import {
|
|||||||
QQGetQRcodeHandler,
|
QQGetQRcodeHandler,
|
||||||
QQGetQuickLoginListHandler,
|
QQGetQuickLoginListHandler,
|
||||||
QQSetQuickLoginHandler,
|
QQSetQuickLoginHandler,
|
||||||
|
QQGetLoginListNewHandler,
|
||||||
|
getQQLoginInfoHandler,
|
||||||
} from '@webapi/api/QQLogin';
|
} from '@webapi/api/QQLogin';
|
||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
// router:获取快速登录列表
|
// router:获取快速登录列表
|
||||||
router.all('/GetQuickLoginList', QQGetQuickLoginListHandler);
|
router.all('/GetQuickLoginList', QQGetQuickLoginListHandler);
|
||||||
|
// router:获取快速登录列表(新)
|
||||||
|
router.all('/GetQuickLoginListNew', QQGetLoginListNewHandler);
|
||||||
// router:检查QQ登录状态
|
// router:检查QQ登录状态
|
||||||
router.post('/CheckLoginStatus', QQCheckLoginStatusHandler);
|
router.post('/CheckLoginStatus', QQCheckLoginStatusHandler);
|
||||||
// router:获取QQ登录二维码
|
// router:获取QQ登录二维码
|
||||||
router.post('/GetQQLoginQrcode', QQGetQRcodeHandler);
|
router.post('/GetQQLoginQrcode', QQGetQRcodeHandler);
|
||||||
// router:设置QQ快速登录
|
// router:设置QQ快速登录
|
||||||
router.post('/SetQuickLogin', QQSetQuickLoginHandler);
|
router.post('/SetQuickLogin', QQSetQuickLoginHandler);
|
||||||
|
// router:获取QQ登录信息
|
||||||
|
router.post('/GetQQLoginInfo', getQQLoginInfoHandler);
|
||||||
|
|
||||||
export { router as QQLoginRouter };
|
export { router as QQLoginRouter };
|
||||||
|
@@ -11,6 +11,7 @@ import { sendSuccess } from '@webapi/utils/response';
|
|||||||
import { QQLoginRouter } from '@webapi/router/QQLogin';
|
import { QQLoginRouter } from '@webapi/router/QQLogin';
|
||||||
import { AuthRouter } from '@webapi/router/auth';
|
import { AuthRouter } from '@webapi/router/auth';
|
||||||
import { LogRouter } from '@webapi/router/Log';
|
import { LogRouter } from '@webapi/router/Log';
|
||||||
|
import { BaseRouter } from '@webapi/router/Base';
|
||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
|
|
||||||
@@ -21,6 +22,8 @@ router.use(auth);
|
|||||||
router.all('/test', (_, res) => {
|
router.all('/test', (_, res) => {
|
||||||
return sendSuccess(res);
|
return sendSuccess(res);
|
||||||
});
|
});
|
||||||
|
// router:基础信息相关路由
|
||||||
|
router.use('/base', BaseRouter);
|
||||||
// router:WebUI登录相关路由
|
// router:WebUI登录相关路由
|
||||||
router.use('/auth', AuthRouter);
|
router.use('/auth', AuthRouter);
|
||||||
// router:QQ登录相关路由
|
// router:QQ登录相关路由
|
||||||
|
5
src/webui/src/types/data.d.ts
vendored
5
src/webui/src/types/data.d.ts
vendored
@@ -1,12 +1,17 @@
|
|||||||
|
import type { LoginListItem, SelfInfo } from '@/core';
|
||||||
|
|
||||||
interface LoginRuntimeType {
|
interface LoginRuntimeType {
|
||||||
LoginCurrentTime: number;
|
LoginCurrentTime: number;
|
||||||
LoginCurrentRate: number;
|
LoginCurrentRate: number;
|
||||||
QQLoginStatus: boolean;
|
QQLoginStatus: boolean;
|
||||||
QQQRCodeURL: string;
|
QQQRCodeURL: string;
|
||||||
QQLoginUin: string;
|
QQLoginUin: string;
|
||||||
|
QQLoginInfo: SelfInfo;
|
||||||
NapCatHelper: {
|
NapCatHelper: {
|
||||||
onQuickLoginRequested: (uin: string) => Promise<{ result: boolean; message: string }>;
|
onQuickLoginRequested: (uin: string) => Promise<{ result: boolean; message: string }>;
|
||||||
onOB11ConfigChanged: (ob11: OneBotConfig) => Promise<void>;
|
onOB11ConfigChanged: (ob11: OneBotConfig) => Promise<void>;
|
||||||
QQLoginList: string[];
|
QQLoginList: string[];
|
||||||
|
NewQQLoginList: LoginListItem[];
|
||||||
};
|
};
|
||||||
|
packageJson: object;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user