fix: 修复QQBot启动循环依赖
This commit is contained in:
parent
f8ca44f9d0
commit
ba777ff207
@ -18,7 +18,6 @@ import {
|
||||
import { QqbotRateLimitService } from './qqbot-rate-limit.service';
|
||||
import { QqbotSendAttemptError } from './qqbot-send.error';
|
||||
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 {
|
||||
QqbotSendGroupDto,
|
||||
@ -337,7 +336,7 @@ export class QqbotSendService {
|
||||
}
|
||||
|
||||
private toStrictSendError(err: unknown, sendLogId: null | string) {
|
||||
if (err instanceof QqbotReverseWsActionError) {
|
||||
if (this.isReverseWsActionError(err)) {
|
||||
return new QqbotSendAttemptError({
|
||||
code: err.code,
|
||||
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(
|
||||
strict: boolean,
|
||||
err: unknown,
|
||||
|
||||
22
test/modules/qqbot/core/qqbot-core-injection-cycle.spec.ts
Normal file
22
test/modules/qqbot/core/qqbot-core-injection-cycle.spec.ts
Normal 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);
|
||||
});
|
||||
});
|
||||
});
|
||||
Loading…
Reference in New Issue
Block a user