fix: 修复NapCat刷新会话二维码回填
This commit is contained in:
parent
4e386a5043
commit
b8527866af
@ -421,11 +421,12 @@ export class QqbotNapcatLoginService {
|
|||||||
session.errorMessage = status.loginError || undefined;
|
session.errorMessage = status.loginError || undefined;
|
||||||
if (
|
if (
|
||||||
status.qrcodeurl &&
|
status.qrcodeurl &&
|
||||||
session.mode !== 'refresh' &&
|
(session.mode !== 'refresh' || !session.qrcode) &&
|
||||||
!this.toolsService.isNapcatExpiredQrcodeStatus(status)
|
!this.toolsService.isNapcatExpiredQrcodeStatus(status)
|
||||||
) {
|
) {
|
||||||
const qrcodeChanged = session.qrcode !== status.qrcodeurl;
|
const qrcodeChanged = session.qrcode !== status.qrcodeurl;
|
||||||
session.qrcode = status.qrcodeurl;
|
session.qrcode = status.qrcodeurl;
|
||||||
|
session.errorMessage = undefined;
|
||||||
if (qrcodeChanged) {
|
if (qrcodeChanged) {
|
||||||
this.publishScanResultEvent(
|
this.publishScanResultEvent(
|
||||||
session,
|
session,
|
||||||
|
|||||||
@ -3591,6 +3591,38 @@ describe('QqbotNapcatLoginService', () => {
|
|||||||
expect(result.errorMessage).toContain('正在重新生成二维码');
|
expect(result.errorMessage).toContain('正在重新生成二维码');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('accepts qrcode from login status for refresh session without stored qrcode', async () => {
|
||||||
|
(service as any).sessions.set('session-status-qrcode', {
|
||||||
|
accountId: 'account-1',
|
||||||
|
containerId: 'container-status-qrcode',
|
||||||
|
containerName: 'napcat-status-qrcode',
|
||||||
|
createdAt: Date.now(),
|
||||||
|
errorMessage: 'NapCat 正在重新生成二维码,请稍后',
|
||||||
|
expiresAt: Date.now() + 60_000,
|
||||||
|
id: 'session-status-qrcode',
|
||||||
|
mode: 'refresh',
|
||||||
|
status: 'pending',
|
||||||
|
webuiPort: 6106,
|
||||||
|
});
|
||||||
|
jest
|
||||||
|
.spyOn(service as any, 'getSessionContainer')
|
||||||
|
.mockResolvedValue({ id: 'container-status-qrcode' });
|
||||||
|
jest.spyOn(service as any, 'getLoginStatus').mockResolvedValue({
|
||||||
|
isLogin: false,
|
||||||
|
qrcodeurl: 'fresh-status-qrcode',
|
||||||
|
});
|
||||||
|
const getQrcode = jest
|
||||||
|
.spyOn(service as any, 'getQrcode')
|
||||||
|
.mockRejectedValue(new Error('NapCat 二维码仍未刷新'));
|
||||||
|
|
||||||
|
const result = await service.status('session-status-qrcode');
|
||||||
|
|
||||||
|
expect(result.status).toBe('pending');
|
||||||
|
expect(result.qrcode).toBe('fresh-status-qrcode');
|
||||||
|
expect(result.errorMessage).toBeUndefined();
|
||||||
|
expect(getQrcode).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
it('normalizes login status to offline when login info reports offline', async () => {
|
it('normalizes login status to offline when login info reports offline', async () => {
|
||||||
jest
|
jest
|
||||||
.spyOn(service as any, 'postNapcat')
|
.spyOn(service as any, 'postNapcat')
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user