mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2024-11-21 09:36:35 +00:00
fix: login
This commit is contained in:
parent
8a8aa0016e
commit
6bce4533a3
@ -10,7 +10,7 @@ import {
|
|||||||
NapCatCore,
|
NapCatCore,
|
||||||
InstanceContext,
|
InstanceContext,
|
||||||
WrapperNodeApi,
|
WrapperNodeApi,
|
||||||
NodeIQQNTWrapperSession
|
NodeIQQNTWrapperSession,
|
||||||
} from '@/core';
|
} from '@/core';
|
||||||
import { QQBasicInfoWrapper } from '@/common/utils/QQBasicInfo';
|
import { QQBasicInfoWrapper } from '@/common/utils/QQBasicInfo';
|
||||||
import { hostname, systemVersion } from '@/common/utils/system';
|
import { hostname, systemVersion } from '@/common/utils/system';
|
||||||
@ -21,7 +21,6 @@ import path from 'path';
|
|||||||
import fs from 'fs';
|
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 { program } from 'commander';
|
import { program } from 'commander';
|
||||||
import qrcode from 'qrcode-terminal';
|
import qrcode from 'qrcode-terminal';
|
||||||
|
|
||||||
@ -64,9 +63,9 @@ export async function NCoreInitShell() {
|
|||||||
global_path_config: {
|
global_path_config: {
|
||||||
desktopGlobalPath: dataPathGlobal,
|
desktopGlobalPath: dataPathGlobal,
|
||||||
},
|
},
|
||||||
thumb_config: { maxSide: 324, minSide: 48, longLimit: 6, density: 2 }
|
thumb_config: { maxSide: 324, minSide: 48, longLimit: 6, density: 2 },
|
||||||
},
|
},
|
||||||
new wrapper.NodeIGlobalAdapter(new GlobalAdapter())
|
new wrapper.NodeIGlobalAdapter(new GlobalAdapter()),
|
||||||
);
|
);
|
||||||
loginService.initConfig({
|
loginService.initConfig({
|
||||||
machineId: '',
|
machineId: '',
|
||||||
@ -74,7 +73,7 @@ export async function NCoreInitShell() {
|
|||||||
platVer: systemVersion,
|
platVer: systemVersion,
|
||||||
commonPath: dataPathGlobal,
|
commonPath: dataPathGlobal,
|
||||||
clientVer: basicInfoWrapper.getFullQQVesion(),
|
clientVer: basicInfoWrapper.getFullQQVesion(),
|
||||||
hostName: hostname
|
hostName: hostname,
|
||||||
});
|
});
|
||||||
|
|
||||||
let quickLoginUin = cmdOptions.qq; // undefined | 'true' | string
|
let quickLoginUin = cmdOptions.qq; // undefined | 'true' | string
|
||||||
@ -88,7 +87,7 @@ export async function NCoreInitShell() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const selfInfo = await new Promise<SelfInfo>((resolve) => {
|
const selfInfo = await new Promise<SelfInfo>((resolve, reject) => {
|
||||||
const loginListener = new LoginListener();
|
const loginListener = new LoginListener();
|
||||||
|
|
||||||
// from constructor
|
// from constructor
|
||||||
@ -100,36 +99,46 @@ export async function NCoreInitShell() {
|
|||||||
uid: loginResult.uid,
|
uid: loginResult.uid,
|
||||||
uin: loginResult.uin,
|
uin: loginResult.uin,
|
||||||
nick: '', // 获取不到
|
nick: '', // 获取不到
|
||||||
online: true
|
online: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
loginListener.onQRCodeGetPicture = ({ pngBase64QrcodeData, qrcodeUrl }) => {
|
loginListener.onQRCodeGetPicture = ({ pngBase64QrcodeData, qrcodeUrl }) => {
|
||||||
const realBase64 = pngBase64QrcodeData.replace(/^data:image\/\w+;base64,/, '');
|
const realBase64 = pngBase64QrcodeData.replace(/^data:image\/\w+;base64,/, '');
|
||||||
const buffer = Buffer.from(realBase64, 'base64');
|
const buffer = Buffer.from(realBase64, 'base64');
|
||||||
logger.logWarn('请扫描下面的二维码,然后在手Q上授权登录:');
|
logger.logWarn('请扫描下面的二维码,然后在手Q上授权登录:');
|
||||||
const qrcodePath = path.join(__dirname, 'qrcode.png');
|
const qrcodePath = path.join(dataPath, 'qrcode.png');
|
||||||
qrcode.generate(qrcodeUrl, { small: true }, (res) => {
|
qrcode.generate(qrcodeUrl, { small: true }, (res) => {
|
||||||
logger.logWarn([
|
logger.logWarn([
|
||||||
res,
|
res,
|
||||||
'二维码解码URL: ' + qrcodeUrl,
|
'二维码解码URL: ' + qrcodeUrl,
|
||||||
'如果控制台二维码无法扫码,可以复制解码url到二维码生成网站生成二维码再扫码,也可以打开下方的二维码路径图片进行扫码。'
|
'如果控制台二维码无法扫码,可以复制解码url到二维码生成网站生成二维码再扫码,也可以打开下方的二维码路径图片进行扫码。',
|
||||||
].join('\n'));
|
].join('\n'));
|
||||||
fs.writeFile(qrcodePath, buffer, {}, () => {
|
fs.writeFile(qrcodePath, buffer, {}, () => {
|
||||||
logger.logWarn('二维码已保存到', qrcodePath);
|
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)) {
|
if (quickLoginUin && historyLoginList.some(u => u.uin === quickLoginUin)) {
|
||||||
logger.log('正在快速登录 ', quickLoginUin);
|
logger.log('正在快速登录 ', quickLoginUin);
|
||||||
loginService.quickLoginWithUin(quickLoginUin);
|
setTimeout(() => {
|
||||||
|
loginService.quickLoginWithUin(quickLoginUin)
|
||||||
|
.then(result => {
|
||||||
|
if (result.loginErrorInfo.errMsg) {
|
||||||
|
logger.logError('快速登录错误:', result.loginErrorInfo.errMsg);
|
||||||
|
reject();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(e => reject(e));
|
||||||
|
}, 1000);
|
||||||
} else {
|
} else {
|
||||||
logger.log('没有 -q 指令指定快速登录,或未曾登录过这个 QQ,将使用二维码登录方式');
|
logger.log('没有 -q 指令指定快速登录,或未曾登录过这个 QQ,将使用二维码登录方式');
|
||||||
if (historyLoginList.length > 0) {
|
if (historyLoginList.length > 0) {
|
||||||
logger.log(`可用于快速登录的 QQ:\n${historyLoginList.map((u, index) => `${index + 1}. ${u.uin} ${u.nickName}`).join('\n')
|
logger.log(`可用于快速登录的 QQ:\n${
|
||||||
|
historyLoginList.map((u, index) => `${index + 1}. ${u.uin} ${u.nickName}`).join('\n')
|
||||||
}`);
|
}`);
|
||||||
}
|
}
|
||||||
loginService.getQRCodePicture();
|
loginService.getQRCodePicture();
|
||||||
@ -140,30 +149,39 @@ export async function NCoreInitShell() {
|
|||||||
// AFTER LOGGING IN
|
// AFTER LOGGING IN
|
||||||
|
|
||||||
// from initSession
|
// from initSession
|
||||||
|
await new Promise<void>(async (resolve, reject) => {
|
||||||
const sessionConfig = await genSessionConfig(
|
const sessionConfig = await genSessionConfig(
|
||||||
basicInfoWrapper.QQVersionAppid!,
|
basicInfoWrapper.QQVersionAppid!,
|
||||||
basicInfoWrapper.getFullQQVesion(),
|
basicInfoWrapper.getFullQQVesion(),
|
||||||
selfInfo.uin,
|
selfInfo.uin,
|
||||||
selfInfo.uid,
|
selfInfo.uid,
|
||||||
dataPath
|
dataPath,
|
||||||
);
|
);
|
||||||
const sessionListener = new SessionListener();
|
const sessionListener = new SessionListener();
|
||||||
sessionListener.onSessionInitComplete = (r: unknown) => {
|
sessionListener.onSessionInitComplete = (r: unknown) => {
|
||||||
if (r !== 0) {
|
if (r === 0) {
|
||||||
throw r;
|
resolve();
|
||||||
|
} else {
|
||||||
|
reject(r);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
session.init(
|
session.init(
|
||||||
sessionConfig,
|
sessionConfig,
|
||||||
new wrapper.NodeIDependsAdapter(new DependsAdapter()),
|
new wrapper.NodeIDependsAdapter(new DependsAdapter()),
|
||||||
new wrapper.NodeIDispatcherAdapter(new DispatcherAdapter()),
|
new wrapper.NodeIDispatcherAdapter(new DispatcherAdapter()),
|
||||||
new wrapper.NodeIKernelSessionListener(sessionListener)
|
new wrapper.NodeIKernelSessionListener(sessionListener),
|
||||||
);
|
);
|
||||||
|
logger.log('debug init')
|
||||||
try {
|
try {
|
||||||
session.startNT(0);
|
session.startNT(0);
|
||||||
} catch (__) {
|
} catch (_) { /* Empty */
|
||||||
session.startNT(); // may still throw error; we do not catch that
|
try {
|
||||||
|
session.startNT();
|
||||||
|
} catch (e) {
|
||||||
|
reject('init failed ' + e);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
// Initialization end!
|
// Initialization end!
|
||||||
|
|
||||||
const accountDataPath = path.resolve(dataPath, './NapCat/data');
|
const accountDataPath = path.resolve(dataPath, './NapCat/data');
|
||||||
@ -177,7 +195,7 @@ export async function NCoreInitShell() {
|
|||||||
loginService,
|
loginService,
|
||||||
selfInfo,
|
selfInfo,
|
||||||
basicInfoWrapper,
|
basicInfoWrapper,
|
||||||
pathWrapper
|
pathWrapper,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,11 +218,12 @@ export class NapCatShell {
|
|||||||
session,
|
session,
|
||||||
logger,
|
logger,
|
||||||
loginService,
|
loginService,
|
||||||
basicInfoWrapper
|
basicInfoWrapper,
|
||||||
};
|
};
|
||||||
this.core = new NapCatCore(this.context, selfInfo);
|
this.core = new NapCatCore(this.context, selfInfo);
|
||||||
|
|
||||||
new NapCatOneBot11Adapter(this.core, this.context, pathWrapper);
|
// TODO: complete ob11 adapter initialization logic
|
||||||
|
// new NapCatOneBot11Adapter(this.core, this.context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user