fix: 修复QQBot启动循环依赖
This commit is contained in:
parent
f8ca44f9d0
commit
ba777ff207
@ -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,
|
||||||
|
|||||||
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