fix: 修复QQBot启动循环依赖

This commit is contained in:
sunlei 2026-07-25 12:28:29 +08:00
parent f8ca44f9d0
commit ba777ff207
2 changed files with 40 additions and 2 deletions

View File

@ -18,7 +18,6 @@ import {
import { QqbotRateLimitService } from './qqbot-rate-limit.service'; import { QqbotRateLimitService } from './qqbot-rate-limit.service';
import { QqbotSendAttemptError } from './qqbot-send.error'; import { QqbotSendAttemptError } from './qqbot-send.error';
import { QqbotSendLog } from '../../infrastructure/persistence/send/qqbot-send-log.entity'; import { QqbotSendLog } from '../../infrastructure/persistence/send/qqbot-send-log.entity';
import { QqbotReverseWsActionError } from '../../infrastructure/integration/connection/qqbot-reverse-ws.service';
import type { QqbotAccount } from '../../infrastructure/persistence/account/qqbot-account.entity'; import type { QqbotAccount } from '../../infrastructure/persistence/account/qqbot-account.entity';
import type { import type {
QqbotSendGroupDto, QqbotSendGroupDto,
@ -337,7 +336,7 @@ export class QqbotSendService {
} }
private toStrictSendError(err: unknown, sendLogId: null | string) { private toStrictSendError(err: unknown, sendLogId: null | string) {
if (err instanceof QqbotReverseWsActionError) { if (this.isReverseWsActionError(err)) {
return new QqbotSendAttemptError({ return new QqbotSendAttemptError({
code: err.code, code: err.code,
message: err.message, message: err.message,
@ -353,6 +352,23 @@ export class QqbotSendService {
}); });
} }
/**
* OneBot WebSocket
* @param err -
* @returns WebSocket
*/
private isReverseWsActionError(
err: unknown,
): err is Error & {
code: 'onebot_disconnected' | 'onebot_timeout';
} {
if (!(err instanceof Error) || err.name !== 'QqbotReverseWsActionError') {
return false;
}
const code = (err as Error & { code?: unknown }).code;
return code === 'onebot_disconnected' || code === 'onebot_timeout';
}
private throwSendFailure( private throwSendFailure(
strict: boolean, strict: boolean,
err: unknown, err: unknown,

View File

@ -0,0 +1,22 @@
describe('QQBot core injection metadata', () => {
it('keeps the command sender dependency defined when the send service loads first', () => {
jest.isolateModules(() => {
const { QqbotSendService } = jest.requireActual<
typeof import('../../../../src/modules/qqbot/core/application/send/qqbot-send.service')
>(
'../../../../src/modules/qqbot/core/application/send/qqbot-send.service',
);
const { QqbotCommandEngineService } = jest.requireActual<
typeof import('../../../../src/modules/qqbot/core/application/command/qqbot-command-engine.service')
>(
'../../../../src/modules/qqbot/core/application/command/qqbot-command-engine.service',
);
const parameterTypes = Reflect.getMetadata(
'design:paramtypes',
QqbotCommandEngineService,
);
expect(parameterTypes[4]).toBe(QqbotSendService);
});
});
});