mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2024-09-28 12:07:57 +00:00
feat: logging in through shell
This commit is contained in:
parent
5990e0c2eb
commit
c304845117
@ -46,9 +46,8 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ajv": "^8.13.0",
|
"ajv": "^8.13.0",
|
||||||
"strtok3":"8.0.1",
|
|
||||||
"chalk": "^5.3.0",
|
"chalk": "^5.3.0",
|
||||||
"commander": "^12.0.0",
|
"commander": "^12.1.0",
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"express": "^5.0.0-beta.2",
|
"express": "^5.0.0-beta.2",
|
||||||
"fast-xml-parser": "^4.3.6",
|
"fast-xml-parser": "^4.3.6",
|
||||||
@ -59,6 +58,7 @@
|
|||||||
"log4js": "^6.9.1",
|
"log4js": "^6.9.1",
|
||||||
"qrcode-terminal": "^0.12.0",
|
"qrcode-terminal": "^0.12.0",
|
||||||
"silk-wasm": "^3.6.1",
|
"silk-wasm": "^3.6.1",
|
||||||
|
"strtok3": "8.0.1",
|
||||||
"ws": "^8.16.0"
|
"ws": "^8.16.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,11 @@ import fs from 'fs';
|
|||||||
import os from 'os';
|
import os from 'os';
|
||||||
import { NodeIKernelLoginService } from '@/core/services';
|
import { NodeIKernelLoginService } from '@/core/services';
|
||||||
import { NapCatOneBot11Adapter } from '@/onebot';
|
import { NapCatOneBot11Adapter } from '@/onebot';
|
||||||
|
import { program } from 'commander';
|
||||||
|
import qrcode from 'qrcode-terminal';
|
||||||
|
|
||||||
|
program.option('-q, --qq [number]', 'QQ号').parse(process.argv);
|
||||||
|
const cmdOptions = program.opts();
|
||||||
|
|
||||||
// NapCat Shell App ES 入口文件
|
// NapCat Shell App ES 入口文件
|
||||||
export async function NCoreInitShell() {
|
export async function NCoreInitShell() {
|
||||||
@ -72,6 +77,17 @@ export async function NCoreInitShell() {
|
|||||||
hostName: hostname
|
hostName: hostname
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let quickLoginUin = cmdOptions.qq; // undefined | 'true' | string
|
||||||
|
const historyLoginList = (await loginService.getLoginList()).LocalLoginInfoList;
|
||||||
|
if (quickLoginUin == 'true') {
|
||||||
|
if (historyLoginList.length > 0) {
|
||||||
|
quickLoginUin = historyLoginList[0].uin;
|
||||||
|
logger.log(`-q 指令指定使用最近的 QQ ${quickLoginUin} 进行快速登录`);
|
||||||
|
} else {
|
||||||
|
quickLoginUin = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const selfInfo = await new Promise<SelfInfo>((resolve) => {
|
const selfInfo = await new Promise<SelfInfo>((resolve) => {
|
||||||
const loginListener = new LoginListener();
|
const loginListener = new LoginListener();
|
||||||
|
|
||||||
@ -86,9 +102,43 @@ export async function NCoreInitShell() {
|
|||||||
nick: '', // 获取不到
|
nick: '', // 获取不到
|
||||||
online: true
|
online: true
|
||||||
});
|
});
|
||||||
|
|
||||||
|
loginListener.onQRCodeGetPicture = ({ pngBase64QrcodeData, qrcodeUrl }) => {
|
||||||
|
const realBase64 = pngBase64QrcodeData.replace(/^data:image\/\w+;base64,/, '');
|
||||||
|
const buffer = Buffer.from(realBase64, 'base64');
|
||||||
|
logger.logWarn('请扫描下面的二维码,然后在手Q上授权登录:');
|
||||||
|
const qrcodePath = path.join(__dirname, 'qrcode.png');
|
||||||
|
qrcode.generate(qrcodeUrl, { small: true }, (res) => {
|
||||||
|
logger.logWarn([
|
||||||
|
res,
|
||||||
|
'二维码解码URL: ' + qrcodeUrl,
|
||||||
|
'如果控制台二维码无法扫码,可以复制解码url到二维码生成网站生成二维码再扫码,也可以打开下方的二维码路径图片进行扫码。'
|
||||||
|
].join('\n'));
|
||||||
|
fs.writeFile(qrcodePath, buffer, {}, () => {
|
||||||
|
logger.logWarn('二维码已保存到', qrcodePath);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
loginService.addKernelLoginListener(new wrapper.NodeIKernelLoginListener(
|
loginService.addKernelLoginListener(new wrapper.NodeIKernelLoginListener(
|
||||||
proxiedListenerOf(loginListener, logger)));
|
proxiedListenerOf(loginListener, logger)));
|
||||||
|
|
||||||
|
if (quickLoginUin && historyLoginList.some(u => u.uin === quickLoginUin)) {
|
||||||
|
logger.log('正在快速登录 ', quickLoginUin);
|
||||||
|
loginService.quickLoginWithUin(quickLoginUin);
|
||||||
|
} else {
|
||||||
|
logger.log('没有 -q 指令指定快速登录,或未曾登录过这个 QQ,将使用二维码登录方式');
|
||||||
|
if (historyLoginList.length > 0) {
|
||||||
|
logger.log(`可用于快速登录的 QQ:\n${
|
||||||
|
historyLoginList.map((u, index) => `${index + 1}. ${u.uin} ${u.nickName}`).join('\n')
|
||||||
|
}`);
|
||||||
|
}
|
||||||
|
loginService.getQRCodePicture();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
// BEFORE LOGGING IN
|
||||||
|
|
||||||
|
// AFTER LOGGING IN
|
||||||
|
|
||||||
// from initSession
|
// from initSession
|
||||||
const sessionConfig = await genSessionConfig(
|
const sessionConfig = await genSessionConfig(
|
||||||
|
Loading…
Reference in New Issue
Block a user