From e17d1f89ab1b6dc6f7c30d873858045b243b91e6 Mon Sep 17 00:00:00 2001 From: sunlei Date: Mon, 15 Jun 2026 12:09:15 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=94=B6=E6=95=9BQQBot=E6=A0=B8?= =?UTF-8?q?=E5=BF=83=E4=B8=8ENapCat=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../architecture-convergence-inventory.md | 4 +- .../account/qqbot-account-ability.entity.ts | 2 +- .../core}/account/qqbot-account.controller.ts | 2 +- .../qqbot/core}/account/qqbot-account.dto.ts | 2 +- .../core}/account/qqbot-account.entity.ts | 2 +- .../core}/account/qqbot-account.service.ts | 10 +- .../command/qqbot-command-engine.service.ts | 4 +- .../core}/command/qqbot-command-log.entity.ts | 4 +- .../command/qqbot-command-parser.service.ts | 4 +- .../core}/command/qqbot-command.controller.ts | 0 .../qqbot/core}/command/qqbot-command.dto.ts | 2 +- .../core}/command/qqbot-command.entity.ts | 2 +- .../core}/command/qqbot-command.service.ts | 8 +- .../command/qqbot-reply-template.service.ts | 0 .../qqbot/core}/config/qqbot-config.entity.ts | 0 .../core}/config/qqbot-config.service.ts | 2 +- .../connection/qqbot-reverse-ws.service.ts | 4 +- .../qqbot/core/contract}/qqbot.constants.ts | 0 .../qqbot/core/contract}/qqbot.types.ts | 8 +- .../dashboard/qqbot-dashboard.controller.ts | 0 .../dashboard/qqbot-dashboard.service.ts | 0 .../qqbot/core}/dedupe/qqbot-dedupe.entity.ts | 0 .../core}/dedupe/qqbot-dedupe.service.ts | 0 .../core/domain}/qqbot-cooldown.policy.ts | 0 .../core}/event/qqbot-event-normalizer.ts | 2 +- .../qqbot/core}/event/qqbot-event.service.ts | 4 +- .../message/qqbot-conversation.entity.ts | 2 +- .../core}/message/qqbot-message.controller.ts | 0 .../qqbot/core}/message/qqbot-message.dto.ts | 2 +- .../core}/message/qqbot-message.entity.ts | 2 +- .../core}/message/qqbot-message.service.ts | 4 +- .../qqbot/core}/mqtt/qqbot-bus.service.ts | 2 +- .../permission/qqbot-allowlist.entity.ts | 2 +- .../permission/qqbot-blocklist.entity.ts | 2 +- .../permission/qqbot-permission.controller.ts | 0 .../core}/permission/qqbot-permission.dto.ts | 2 +- .../permission/qqbot-permission.service.ts | 4 +- src/modules/qqbot/core/qqbot-core.module.ts | 94 +++++++++---------- .../core}/rule/qqbot-rule-engine.service.ts | 2 +- .../qqbot/core}/rule/qqbot-rule.controller.ts | 0 .../qqbot/core}/rule/qqbot-rule.dto.ts | 2 +- .../qqbot/core}/rule/qqbot-rule.entity.ts | 2 +- .../qqbot/core}/rule/qqbot-rule.service.ts | 6 +- .../core}/send/qqbot-rate-limit.service.ts | 0 .../qqbot/core}/send/qqbot-send-log.entity.ts | 2 +- .../qqbot/core}/send/qqbot-send.controller.ts | 0 .../qqbot/core}/send/qqbot-send.dto.ts | 2 +- .../qqbot/core}/send/qqbot-send.service.ts | 6 +- src/modules/qqbot/napcat/index.ts | 5 + .../qqbot-account-napcat.entity.ts | 2 +- .../qqbot-napcat-container.entity.ts | 2 +- .../login}/qqbot-napcat-login.service.ts | 8 +- .../login}/qqbot-napcat-watchdog.service.ts | 2 +- src/modules/qqbot/napcat/persistence.ts | 8 +- .../napcat/qqbot-napcat-container.service.ts | 12 +-- .../bangDream/qqbot-bangdream.plugin.ts | 2 +- .../ff14Market/qqbot-ff14-market.plugin.ts | 2 +- .../plugins/fflogs/qqbot-fflogs.plugin.ts | 2 +- .../plugins/repeater/qqbot-repeater.plugin.ts | 6 +- .../qqbot-event-plugin-registry.service.ts | 4 +- .../plugin/qqbot-plugin-registry.service.ts | 2 +- src/qqbot/plugin/qqbot-plugin.controller.ts | 2 +- src/qqbot/qqbot.module.ts | 8 -- .../core/qqbot-core-command-contract.spec.ts | 19 ---- .../core/qqbot-core-command-smoke.spec.ts | 33 ++++--- .../core/qqbot-core-module-contract.spec.ts | 64 +++++-------- .../core/qqbot-core-send-contract.spec.ts | 19 ---- .../core/qqbot-core-status-contract.spec.ts | 19 ---- .../qqbot/napcat/device-identity.spec.ts | 2 +- .../plugin-controller-http-smoke.spec.ts | 2 +- .../plugins/plugin-registry-compat.spec.ts | 2 +- .../account/qqbot-account.controller.spec.ts | 14 +-- .../account/qqbot-account.service.spec.ts | 2 +- .../qqbot-napcat-login.service.spec.ts | 6 +- .../qqbot-napcat-watchdog.service.spec.ts | 2 +- .../qqbot-command-parser.service.spec.ts | 4 +- .../qqbot-reverse-ws.service.spec.ts | 4 +- test/qqbot/event/qqbot-event.service.spec.ts | 4 +- .../napcat/qqbot-napcat-captcha-log.spec.ts | 2 +- ...ot-napcat-container-runtime-status.spec.ts | 2 +- .../qqbot-napcat-container.service.spec.ts | 2 +- .../repeater/qqbot-repeater.plugin.spec.ts | 2 +- test/qqbot/qqbot-cooldown.policy.spec.ts | 2 +- .../rule/qqbot-rule-cooldown.service.spec.ts | 2 +- .../send/qqbot-rate-limit.service.spec.ts | 2 +- test/qqbot/send/qqbot-send.service.spec.ts | 2 +- 86 files changed, 206 insertions(+), 277 deletions(-) rename src/{qqbot => modules/qqbot/core}/account/qqbot-account-ability.entity.ts (93%) rename src/{qqbot => modules/qqbot/core}/account/qqbot-account.controller.ts (98%) rename src/{qqbot => modules/qqbot/core}/account/qqbot-account.dto.ts (95%) rename src/{qqbot => modules/qqbot/core}/account/qqbot-account.entity.ts (98%) rename src/{qqbot => modules/qqbot/core}/account/qqbot-account.service.ts (98%) rename src/{qqbot => modules/qqbot/core}/command/qqbot-command-engine.service.ts (97%) rename src/{qqbot => modules/qqbot/core}/command/qqbot-command-log.entity.ts (92%) rename src/{qqbot => modules/qqbot/core}/command/qqbot-command-parser.service.ts (98%) rename src/{qqbot => modules/qqbot/core}/command/qqbot-command.controller.ts (100%) rename src/{qqbot => modules/qqbot/core}/command/qqbot-command.dto.ts (98%) rename src/{qqbot => modules/qqbot/core}/command/qqbot-command.entity.ts (98%) rename src/{qqbot => modules/qqbot/core}/command/qqbot-command.service.ts (97%) rename src/{qqbot => modules/qqbot/core}/command/qqbot-reply-template.service.ts (100%) rename src/{qqbot => modules/qqbot/core}/config/qqbot-config.entity.ts (100%) rename src/{qqbot => modules/qqbot/core}/config/qqbot-config.service.ts (97%) rename src/{qqbot => modules/qqbot/core}/connection/qqbot-reverse-ws.service.ts (98%) rename src/{qqbot => modules/qqbot/core/contract}/qqbot.constants.ts (100%) rename src/{qqbot => modules/qqbot/core/contract}/qqbot.types.ts (96%) rename src/{qqbot => modules/qqbot/core}/dashboard/qqbot-dashboard.controller.ts (100%) rename src/{qqbot => modules/qqbot/core}/dashboard/qqbot-dashboard.service.ts (100%) rename src/{qqbot => modules/qqbot/core}/dedupe/qqbot-dedupe.entity.ts (100%) rename src/{qqbot => modules/qqbot/core}/dedupe/qqbot-dedupe.service.ts (100%) rename src/{qqbot => modules/qqbot/core/domain}/qqbot-cooldown.policy.ts (100%) rename src/{qqbot => modules/qqbot/core}/event/qqbot-event-normalizer.ts (99%) rename src/{qqbot => modules/qqbot/core}/event/qqbot-event.service.ts (96%) rename src/{qqbot => modules/qqbot/core}/message/qqbot-conversation.entity.ts (95%) rename src/{qqbot => modules/qqbot/core}/message/qqbot-message.controller.ts (100%) rename src/{qqbot => modules/qqbot/core}/message/qqbot-message.dto.ts (89%) rename src/{qqbot => modules/qqbot/core}/message/qqbot-message.entity.ts (98%) rename src/{qqbot => modules/qqbot/core}/message/qqbot-message.service.ts (98%) rename src/{qqbot => modules/qqbot/core}/mqtt/qqbot-bus.service.ts (97%) rename src/{qqbot => modules/qqbot/core}/permission/qqbot-allowlist.entity.ts (93%) rename src/{qqbot => modules/qqbot/core}/permission/qqbot-blocklist.entity.ts (93%) rename src/{qqbot => modules/qqbot/core}/permission/qqbot-permission.controller.ts (100%) rename src/{qqbot => modules/qqbot/core}/permission/qqbot-permission.dto.ts (94%) rename src/{qqbot => modules/qqbot/core}/permission/qqbot-permission.service.ts (99%) rename src/{qqbot => modules/qqbot/core}/rule/qqbot-rule-engine.service.ts (96%) rename src/{qqbot => modules/qqbot/core}/rule/qqbot-rule.controller.ts (100%) rename src/{qqbot => modules/qqbot/core}/rule/qqbot-rule.dto.ts (98%) rename src/{qqbot => modules/qqbot/core}/rule/qqbot-rule.entity.ts (98%) rename src/{qqbot => modules/qqbot/core}/rule/qqbot-rule.service.ts (97%) rename src/{qqbot => modules/qqbot/core}/send/qqbot-rate-limit.service.ts (100%) rename src/{qqbot => modules/qqbot/core}/send/qqbot-send-log.entity.ts (94%) rename src/{qqbot => modules/qqbot/core}/send/qqbot-send.controller.ts (100%) rename src/{qqbot => modules/qqbot/core}/send/qqbot-send.dto.ts (90%) rename src/{qqbot => modules/qqbot/core}/send/qqbot-send.service.ts (98%) rename src/{qqbot/napcat => modules/qqbot/napcat/infrastructure/persistence}/qqbot-account-napcat.entity.ts (93%) rename src/{qqbot/napcat => modules/qqbot/napcat/infrastructure/persistence}/qqbot-napcat-container.entity.ts (95%) rename src/{qqbot/account => modules/qqbot/napcat/login}/qqbot-napcat-login.service.ts (99%) rename src/{qqbot/account => modules/qqbot/napcat/login}/qqbot-napcat-watchdog.service.ts (96%) rename src/{ => modules}/qqbot/napcat/qqbot-napcat-container.service.ts (98%) delete mode 100644 src/qqbot/qqbot.module.ts diff --git a/docs/refactor-v3/architecture-convergence-inventory.md b/docs/refactor-v3/architecture-convergence-inventory.md index bb4fa72..3c6dfc4 100644 --- a/docs/refactor-v3/architecture-convergence-inventory.md +++ b/docs/refactor-v3/architecture-convergence-inventory.md @@ -17,6 +17,6 @@ | Admin/Auth/Platform Config | `src/admin/example` if no active route evidence; empty old admin subdirectories | auth/user/role/menu/dept/component/dict/notice/system-log/timezone moved into `src/modules/admin/**`; duplicate old imports removed | route paths and public DTO class names kept | `rg '@/admin/' src test` returns no source hits; admin focused Jest passes | | Blog/WordPress/Asset | old `src/blog`, `src/wordpress`, `src/minio`; legacy module wrappers after local imports replaced | MinIO internal files renamed into Asset module; Blog and WordPress controller/service/entity files moved under target modules | existing route decorators and response DTO behavior | `rg '@/blog/|@/wordpress/|@/minio/' src test` has no hits; Blog/WordPress/Asset focused tests pass | | Runtime/Common | none yet | none yet | current files before migration | baseline only | -| QQBot Core/NapCat | none yet | none yet | current files before migration | baseline only | -| Plugin Platform/Plugins | none yet | none yet | current files before migration | baseline only | +| QQBot Core/NapCat | old `src/qqbot/qqbot.module.ts`; old core and napcat roots after moves | account/command/config/connection/dashboard/dedupe/event/message/mqtt/permission/rule/send moved into `src/modules/qqbot/core`; NapCat login/container/persistence moved into `src/modules/qqbot/napcat` | route decorators, command parsing, send queue, device persistence, captcha, new-device, and manual QR semantics | core and NapCat focused Jest pass; `rg '@/qqbot/' src/modules/qqbot/core src/modules/qqbot/napcat` has no hits | +| Plugin Platform/Plugins | none in Task 4; old `src/qqbot/plugin` intentionally remains as Task 5 debt | none in Task 4; Task 5 will move plugin registry/controller/runtime contracts into `src/modules/qqbot/plugin-platform/**`, then delete old `src/qqbot` root | plugin HTTP routes, platform plugin keys, and legacy key compatibility | current architecture convergence spec remains red only because `src/qqbot/plugin` is still pending for Task 5 | | Admin UI | none yet | none yet | current files before migration | baseline only | diff --git a/src/qqbot/account/qqbot-account-ability.entity.ts b/src/modules/qqbot/core/account/qqbot-account-ability.entity.ts similarity index 93% rename from src/qqbot/account/qqbot-account-ability.entity.ts rename to src/modules/qqbot/core/account/qqbot-account-ability.entity.ts index 5ec7eab..6dd5539 100644 --- a/src/qqbot/account/qqbot-account-ability.entity.ts +++ b/src/modules/qqbot/core/account/qqbot-account-ability.entity.ts @@ -5,7 +5,7 @@ import { KtDateTime, KtUpdateDateColumn, } from '@/common'; -import type { QqbotAccountAbilityType } from '../qqbot.types'; +import type { QqbotAccountAbilityType } from '../contract/qqbot.types'; @Entity('qqbot_account_ability') @Index('uk_qqbot_account_ability', ['accountId', 'abilityType', 'abilityKey'], { diff --git a/src/qqbot/account/qqbot-account.controller.ts b/src/modules/qqbot/core/account/qqbot-account.controller.ts similarity index 98% rename from src/qqbot/account/qqbot-account.controller.ts rename to src/modules/qqbot/core/account/qqbot-account.controller.ts index b0bf89b..8401535 100644 --- a/src/qqbot/account/qqbot-account.controller.ts +++ b/src/modules/qqbot/core/account/qqbot-account.controller.ts @@ -20,7 +20,7 @@ import { QqbotAccountUpdateDto, } from './qqbot-account.dto'; import { QqbotAccountService } from './qqbot-account.service'; -import { QqbotNapcatLoginService } from './qqbot-napcat-login.service'; +import { QqbotNapcatLoginService } from '../../napcat/login/qqbot-napcat-login.service'; import { QqbotReverseWsService } from '../connection/qqbot-reverse-ws.service'; @ApiTags('QQBot - 账号连接') diff --git a/src/qqbot/account/qqbot-account.dto.ts b/src/modules/qqbot/core/account/qqbot-account.dto.ts similarity index 95% rename from src/qqbot/account/qqbot-account.dto.ts rename to src/modules/qqbot/core/account/qqbot-account.dto.ts index bbcb8e9..8449267 100644 --- a/src/qqbot/account/qqbot-account.dto.ts +++ b/src/modules/qqbot/core/account/qqbot-account.dto.ts @@ -1,5 +1,5 @@ import { ApiProperty, ApiPropertyOptional, PartialType } from '@nestjs/swagger'; -import type { QqbotConnectionMode } from '../qqbot.types'; +import type { QqbotConnectionMode } from '../contract/qqbot.types'; export class QqbotAccountBodyDto { @ApiPropertyOptional({ default: 'reverse-ws' }) diff --git a/src/qqbot/account/qqbot-account.entity.ts b/src/modules/qqbot/core/account/qqbot-account.entity.ts similarity index 98% rename from src/qqbot/account/qqbot-account.entity.ts rename to src/modules/qqbot/core/account/qqbot-account.entity.ts index 637a4a4..98373e4 100644 --- a/src/qqbot/account/qqbot-account.entity.ts +++ b/src/modules/qqbot/core/account/qqbot-account.entity.ts @@ -10,7 +10,7 @@ import type { QqbotConnectionMode, QqbotConnectionRole, QqbotConnectionStatus, -} from '../qqbot.types'; +} from '../contract/qqbot.types'; @Entity('qqbot_account') export class QqbotAccount { diff --git a/src/qqbot/account/qqbot-account.service.ts b/src/modules/qqbot/core/account/qqbot-account.service.ts similarity index 98% rename from src/qqbot/account/qqbot-account.service.ts rename to src/modules/qqbot/core/account/qqbot-account.service.ts index 44c4031..a1468a4 100644 --- a/src/qqbot/account/qqbot-account.service.ts +++ b/src/modules/qqbot/core/account/qqbot-account.service.ts @@ -16,19 +16,19 @@ import type { QqbotAccountQueryDto, QqbotAccountUpdateDto, } from './qqbot-account.dto'; -import { QqbotAccountNapcat } from '../napcat/qqbot-account-napcat.entity'; -import { QqbotNapcatContainer } from '../napcat/qqbot-napcat-container.entity'; -import { QqbotNapcatContainerService } from '../napcat/qqbot-napcat-container.service'; +import { QqbotAccountNapcat } from '../../napcat/infrastructure/persistence/qqbot-account-napcat.entity'; +import { QqbotNapcatContainer } from '../../napcat/infrastructure/persistence/qqbot-napcat-container.entity'; +import { QqbotNapcatContainerService } from '../../napcat/qqbot-napcat-container.service'; import { QQBOT_DEFAULT_PAGE_NO, QQBOT_DEFAULT_PAGE_SIZE, -} from '../qqbot.constants'; +} from '../contract/qqbot.constants'; import type { QqbotAccountAbilityType, QqbotAccountListItem, QqbotConnectionRole, QqbotNapcatRuntimeStatusSnapshot, -} from '../qqbot.types'; +} from '../contract/qqbot.types'; const NAPCAT_RUNTIME_CHECK_TTL_MS = 30_000; const NAPCAT_AUTO_LOGIN_CLEANUP_FAILED_MESSAGE = diff --git a/src/qqbot/command/qqbot-command-engine.service.ts b/src/modules/qqbot/core/command/qqbot-command-engine.service.ts similarity index 97% rename from src/qqbot/command/qqbot-command-engine.service.ts rename to src/modules/qqbot/core/command/qqbot-command-engine.service.ts index 34d72fb..c70a01f 100644 --- a/src/qqbot/command/qqbot-command-engine.service.ts +++ b/src/modules/qqbot/core/command/qqbot-command-engine.service.ts @@ -1,7 +1,7 @@ import { Injectable, Logger } from '@nestjs/common'; import { ToolsService } from '@/common'; -import { QqbotPluginRegistryService } from '../plugin/qqbot-plugin-registry.service'; -import type { QqbotNormalizedMessage } from '../qqbot.types'; +import { QqbotPluginRegistryService } from '../../../../qqbot/plugin/qqbot-plugin-registry.service'; +import type { QqbotNormalizedMessage } from '../contract/qqbot.types'; import { QqbotSendService } from '../send/qqbot-send.service'; import type { QqbotCommandTestDto } from './qqbot-command.dto'; import type { QqbotCommand } from './qqbot-command.entity'; diff --git a/src/qqbot/command/qqbot-command-log.entity.ts b/src/modules/qqbot/core/command/qqbot-command-log.entity.ts similarity index 92% rename from src/qqbot/command/qqbot-command-log.entity.ts rename to src/modules/qqbot/core/command/qqbot-command-log.entity.ts index 11fbe97..f26a99c 100644 --- a/src/qqbot/command/qqbot-command-log.entity.ts +++ b/src/modules/qqbot/core/command/qqbot-command-log.entity.ts @@ -5,8 +5,8 @@ import { KtDateTime, KtUpdateDateColumn, } from '@/common'; -import type { QqbotMessageType } from '../qqbot.types'; -import type { QqbotCommandLogStatus } from '../qqbot.types'; +import type { QqbotMessageType } from '../contract/qqbot.types'; +import type { QqbotCommandLogStatus } from '../contract/qqbot.types'; @Entity('qqbot_command_log') export class QqbotCommandLog { diff --git a/src/qqbot/command/qqbot-command-parser.service.ts b/src/modules/qqbot/core/command/qqbot-command-parser.service.ts similarity index 98% rename from src/qqbot/command/qqbot-command-parser.service.ts rename to src/modules/qqbot/core/command/qqbot-command-parser.service.ts index a05bc6c..67c90e6 100644 --- a/src/qqbot/command/qqbot-command-parser.service.ts +++ b/src/modules/qqbot/core/command/qqbot-command-parser.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { DictService } from '@/modules/admin/platform-config/dict/dict.service'; import type { QqbotCommand } from './qqbot-command.entity'; -import type { QqbotNormalizedMessage } from '../qqbot.types'; +import type { QqbotNormalizedMessage } from '../contract/qqbot.types'; import { buildQqbotFf14MarketCatalog, buildQqbotFf14MarketCatalogFromTree, @@ -13,7 +13,7 @@ import { splitQqbotFf14WorldPath, } from '@/modules/qqbot/plugins/ff14Market/qqbot-ff14-worlds'; import type { QqbotFf14MarketCatalog } from '@/modules/qqbot/plugins/ff14Market/qqbot-ff14-market.types'; -import type { QqbotCommandMatchResult } from '../qqbot.types'; +import type { QqbotCommandMatchResult } from '../contract/qqbot.types'; @Injectable() export class QqbotCommandParserService { diff --git a/src/qqbot/command/qqbot-command.controller.ts b/src/modules/qqbot/core/command/qqbot-command.controller.ts similarity index 100% rename from src/qqbot/command/qqbot-command.controller.ts rename to src/modules/qqbot/core/command/qqbot-command.controller.ts diff --git a/src/qqbot/command/qqbot-command.dto.ts b/src/modules/qqbot/core/command/qqbot-command.dto.ts similarity index 98% rename from src/qqbot/command/qqbot-command.dto.ts rename to src/modules/qqbot/core/command/qqbot-command.dto.ts index c816feb..30e3dc3 100644 --- a/src/qqbot/command/qqbot-command.dto.ts +++ b/src/modules/qqbot/core/command/qqbot-command.dto.ts @@ -5,7 +5,7 @@ import type { QqbotCommandParserType, QqbotMessageType, QqbotRuleTargetType, -} from '../qqbot.types'; +} from '../contract/qqbot.types'; export class QqbotCommandQueryDto implements KtPageQuery { @ApiPropertyOptional() diff --git a/src/qqbot/command/qqbot-command.entity.ts b/src/modules/qqbot/core/command/qqbot-command.entity.ts similarity index 98% rename from src/qqbot/command/qqbot-command.entity.ts rename to src/modules/qqbot/core/command/qqbot-command.entity.ts index 97ac788..cb1407d 100644 --- a/src/qqbot/command/qqbot-command.entity.ts +++ b/src/modules/qqbot/core/command/qqbot-command.entity.ts @@ -9,7 +9,7 @@ import { import type { QqbotCommandParserType, QqbotRuleTargetType, -} from '../qqbot.types'; +} from '../contract/qqbot.types'; @Entity('qqbot_command') export class QqbotCommand { diff --git a/src/qqbot/command/qqbot-command.service.ts b/src/modules/qqbot/core/command/qqbot-command.service.ts similarity index 97% rename from src/qqbot/command/qqbot-command.service.ts rename to src/modules/qqbot/core/command/qqbot-command.service.ts index 92a1d36..690b530 100644 --- a/src/qqbot/command/qqbot-command.service.ts +++ b/src/modules/qqbot/core/command/qqbot-command.service.ts @@ -4,22 +4,22 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Not, Repository } from 'typeorm'; import { throwVbenError, ToolsService } from '@/common'; import { QqbotAccountService } from '../account/qqbot-account.service'; -import { QqbotPluginRegistryService } from '../plugin/qqbot-plugin-registry.service'; +import { QqbotPluginRegistryService } from '../../../../qqbot/plugin/qqbot-plugin-registry.service'; import { QQBOT_DEFAULT_PAGE_NO, QQBOT_DEFAULT_PAGE_SIZE, -} from '../qqbot.constants'; +} from '../contract/qqbot.constants'; import type { QqbotCommandParserType, QqbotNormalizedMessage, QqbotRuleTargetType, -} from '../qqbot.types'; +} from '../contract/qqbot.types'; import type { QqbotCommandBodyDto, QqbotCommandQueryDto, QqbotCommandUpdateDto, } from './qqbot-command.dto'; -import { isWithinCooldown } from '../qqbot-cooldown.policy'; +import { isWithinCooldown } from '../domain/qqbot-cooldown.policy'; import { QqbotCommandLog } from './qqbot-command-log.entity'; import { QqbotCommand } from './qqbot-command.entity'; diff --git a/src/qqbot/command/qqbot-reply-template.service.ts b/src/modules/qqbot/core/command/qqbot-reply-template.service.ts similarity index 100% rename from src/qqbot/command/qqbot-reply-template.service.ts rename to src/modules/qqbot/core/command/qqbot-reply-template.service.ts diff --git a/src/qqbot/config/qqbot-config.entity.ts b/src/modules/qqbot/core/config/qqbot-config.entity.ts similarity index 100% rename from src/qqbot/config/qqbot-config.entity.ts rename to src/modules/qqbot/core/config/qqbot-config.entity.ts diff --git a/src/qqbot/config/qqbot-config.service.ts b/src/modules/qqbot/core/config/qqbot-config.service.ts similarity index 97% rename from src/qqbot/config/qqbot-config.service.ts rename to src/modules/qqbot/core/config/qqbot-config.service.ts index 032bdc3..abc1db4 100644 --- a/src/qqbot/config/qqbot-config.service.ts +++ b/src/modules/qqbot/core/config/qqbot-config.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { QqbotConfig } from './qqbot-config.entity'; -import type { QqbotPermissionConfig } from '../qqbot.types'; +import type { QqbotPermissionConfig } from '../contract/qqbot.types'; const QQBOT_PERMISSION_CONFIG_KEYS = { allowlistEnabled: 'permission.allowlistEnabled', diff --git a/src/qqbot/connection/qqbot-reverse-ws.service.ts b/src/modules/qqbot/core/connection/qqbot-reverse-ws.service.ts similarity index 98% rename from src/qqbot/connection/qqbot-reverse-ws.service.ts rename to src/modules/qqbot/core/connection/qqbot-reverse-ws.service.ts index c5337a9..4e4c249 100644 --- a/src/qqbot/connection/qqbot-reverse-ws.service.ts +++ b/src/modules/qqbot/core/connection/qqbot-reverse-ws.service.ts @@ -10,13 +10,13 @@ import { ConfigService } from '@nestjs/config'; import { HttpAdapterHost, ModuleRef } from '@nestjs/core'; import { WebSocket, WebSocketServer } from 'ws'; import { ToolsService } from '@/common'; -import { QQBOT_MQTT_TOPICS, QQBOT_REVERSE_WS_PATH } from '../qqbot.constants'; +import { QQBOT_MQTT_TOPICS, QQBOT_REVERSE_WS_PATH } from '../contract/qqbot.constants'; import type { QqbotConnectionRole, QqbotOneBotActionResponse, QqbotOneBotEvent, QqbotPendingAction, -} from '../qqbot.types'; +} from '../contract/qqbot.types'; import { QqbotAccountService } from '../account/qqbot-account.service'; import { QqbotEventService } from '../event/qqbot-event.service'; import { QqbotBusService } from '../mqtt/qqbot-bus.service'; diff --git a/src/qqbot/qqbot.constants.ts b/src/modules/qqbot/core/contract/qqbot.constants.ts similarity index 100% rename from src/qqbot/qqbot.constants.ts rename to src/modules/qqbot/core/contract/qqbot.constants.ts diff --git a/src/qqbot/qqbot.types.ts b/src/modules/qqbot/core/contract/qqbot.types.ts similarity index 96% rename from src/qqbot/qqbot.types.ts rename to src/modules/qqbot/core/contract/qqbot.types.ts index 01e5a19..f6a54c3 100644 --- a/src/qqbot/qqbot.types.ts +++ b/src/modules/qqbot/core/contract/qqbot.types.ts @@ -1,8 +1,8 @@ import type { QrcodeLookupOptions } from '@/common/types'; -import type { QqbotAccount } from './account/qqbot-account.entity'; -import type { QqbotCommand } from './command/qqbot-command.entity'; -import type { QqbotAllowlist } from './permission/qqbot-allowlist.entity'; -import type { QqbotBlocklist } from './permission/qqbot-blocklist.entity'; +import type { QqbotAccount } from '../account/qqbot-account.entity'; +import type { QqbotCommand } from '../command/qqbot-command.entity'; +import type { QqbotAllowlist } from '../permission/qqbot-allowlist.entity'; +import type { QqbotBlocklist } from '../permission/qqbot-blocklist.entity'; export type { QrcodeLookupOptions } from '@/common/types'; diff --git a/src/qqbot/dashboard/qqbot-dashboard.controller.ts b/src/modules/qqbot/core/dashboard/qqbot-dashboard.controller.ts similarity index 100% rename from src/qqbot/dashboard/qqbot-dashboard.controller.ts rename to src/modules/qqbot/core/dashboard/qqbot-dashboard.controller.ts diff --git a/src/qqbot/dashboard/qqbot-dashboard.service.ts b/src/modules/qqbot/core/dashboard/qqbot-dashboard.service.ts similarity index 100% rename from src/qqbot/dashboard/qqbot-dashboard.service.ts rename to src/modules/qqbot/core/dashboard/qqbot-dashboard.service.ts diff --git a/src/qqbot/dedupe/qqbot-dedupe.entity.ts b/src/modules/qqbot/core/dedupe/qqbot-dedupe.entity.ts similarity index 100% rename from src/qqbot/dedupe/qqbot-dedupe.entity.ts rename to src/modules/qqbot/core/dedupe/qqbot-dedupe.entity.ts diff --git a/src/qqbot/dedupe/qqbot-dedupe.service.ts b/src/modules/qqbot/core/dedupe/qqbot-dedupe.service.ts similarity index 100% rename from src/qqbot/dedupe/qqbot-dedupe.service.ts rename to src/modules/qqbot/core/dedupe/qqbot-dedupe.service.ts diff --git a/src/qqbot/qqbot-cooldown.policy.ts b/src/modules/qqbot/core/domain/qqbot-cooldown.policy.ts similarity index 100% rename from src/qqbot/qqbot-cooldown.policy.ts rename to src/modules/qqbot/core/domain/qqbot-cooldown.policy.ts diff --git a/src/qqbot/event/qqbot-event-normalizer.ts b/src/modules/qqbot/core/event/qqbot-event-normalizer.ts similarity index 99% rename from src/qqbot/event/qqbot-event-normalizer.ts rename to src/modules/qqbot/core/event/qqbot-event-normalizer.ts index a41fea1..ae7090d 100644 --- a/src/qqbot/event/qqbot-event-normalizer.ts +++ b/src/modules/qqbot/core/event/qqbot-event-normalizer.ts @@ -3,7 +3,7 @@ import type { QqbotMessageType, QqbotNormalizedMessage, QqbotOneBotEvent, -} from '../qqbot.types'; +} from '../contract/qqbot.types'; export function isOneBotMessageEvent( payload: QqbotOneBotEvent, diff --git a/src/qqbot/event/qqbot-event.service.ts b/src/modules/qqbot/core/event/qqbot-event.service.ts similarity index 96% rename from src/qqbot/event/qqbot-event.service.ts rename to src/modules/qqbot/core/event/qqbot-event.service.ts index 29428e2..a35621b 100644 --- a/src/qqbot/event/qqbot-event.service.ts +++ b/src/modules/qqbot/core/event/qqbot-event.service.ts @@ -4,11 +4,11 @@ import { SystemNoticePublisher, ToolsService, } from '@/common'; -import { QQBOT_MQTT_TOPICS } from '../qqbot.constants'; +import { QQBOT_MQTT_TOPICS } from '../contract/qqbot.constants'; import { QqbotDedupeService } from '../dedupe/qqbot-dedupe.service'; import { QqbotMessageService } from '../message/qqbot-message.service'; import { QqbotBusService } from '../mqtt/qqbot-bus.service'; -import type { QqbotOneBotEvent } from '../qqbot.types'; +import type { QqbotOneBotEvent } from '../contract/qqbot.types'; import { buildDedupeKey, getOneBotOfflineReason, diff --git a/src/qqbot/message/qqbot-conversation.entity.ts b/src/modules/qqbot/core/message/qqbot-conversation.entity.ts similarity index 95% rename from src/qqbot/message/qqbot-conversation.entity.ts rename to src/modules/qqbot/core/message/qqbot-conversation.entity.ts index f3c0800..2249a47 100644 --- a/src/qqbot/message/qqbot-conversation.entity.ts +++ b/src/modules/qqbot/core/message/qqbot-conversation.entity.ts @@ -6,7 +6,7 @@ import { KtDateTimeColumn, KtUpdateDateColumn, } from '@/common'; -import type { QqbotMessageType } from '../qqbot.types'; +import type { QqbotMessageType } from '../contract/qqbot.types'; @Entity('qqbot_conversation') @Index('idx_qqbot_conversation_target', ['selfId', 'targetType', 'targetId']) diff --git a/src/qqbot/message/qqbot-message.controller.ts b/src/modules/qqbot/core/message/qqbot-message.controller.ts similarity index 100% rename from src/qqbot/message/qqbot-message.controller.ts rename to src/modules/qqbot/core/message/qqbot-message.controller.ts diff --git a/src/qqbot/message/qqbot-message.dto.ts b/src/modules/qqbot/core/message/qqbot-message.dto.ts similarity index 89% rename from src/qqbot/message/qqbot-message.dto.ts rename to src/modules/qqbot/core/message/qqbot-message.dto.ts index 70bc944..3069755 100644 --- a/src/qqbot/message/qqbot-message.dto.ts +++ b/src/modules/qqbot/core/message/qqbot-message.dto.ts @@ -1,5 +1,5 @@ import { ApiPropertyOptional } from '@nestjs/swagger'; -import type { QqbotMessageType } from '../qqbot.types'; +import type { QqbotMessageType } from '../contract/qqbot.types'; export class QqbotConversationQueryDto { @ApiPropertyOptional({ default: 1 }) diff --git a/src/qqbot/message/qqbot-message.entity.ts b/src/modules/qqbot/core/message/qqbot-message.entity.ts similarity index 98% rename from src/qqbot/message/qqbot-message.entity.ts rename to src/modules/qqbot/core/message/qqbot-message.entity.ts index 9d03703..7378d41 100644 --- a/src/qqbot/message/qqbot-message.entity.ts +++ b/src/modules/qqbot/core/message/qqbot-message.entity.ts @@ -6,7 +6,7 @@ import { KtDateTimeColumn, KtUpdateDateColumn, } from '@/common'; -import type { QqbotMessageDirection, QqbotMessageType } from '../qqbot.types'; +import type { QqbotMessageDirection, QqbotMessageType } from '../contract/qqbot.types'; @Entity('qqbot_message') @Index('idx_qqbot_message_self_message', ['selfId', 'messageId']) diff --git a/src/qqbot/message/qqbot-message.service.ts b/src/modules/qqbot/core/message/qqbot-message.service.ts similarity index 98% rename from src/qqbot/message/qqbot-message.service.ts rename to src/modules/qqbot/core/message/qqbot-message.service.ts index c3616ba..ffae476 100644 --- a/src/qqbot/message/qqbot-message.service.ts +++ b/src/modules/qqbot/core/message/qqbot-message.service.ts @@ -8,11 +8,11 @@ import type { QqbotConversationQueryDto, QqbotMessageQueryDto, } from './qqbot-message.dto'; -import type { QqbotMessageType, QqbotNormalizedMessage } from '../qqbot.types'; +import type { QqbotMessageType, QqbotNormalizedMessage } from '../contract/qqbot.types'; import { QQBOT_DEFAULT_PAGE_NO, QQBOT_DEFAULT_PAGE_SIZE, -} from '../qqbot.constants'; +} from '../contract/qqbot.constants'; @Injectable() export class QqbotMessageService { diff --git a/src/qqbot/mqtt/qqbot-bus.service.ts b/src/modules/qqbot/core/mqtt/qqbot-bus.service.ts similarity index 97% rename from src/qqbot/mqtt/qqbot-bus.service.ts rename to src/modules/qqbot/core/mqtt/qqbot-bus.service.ts index 9100f22..da2ef41 100644 --- a/src/qqbot/mqtt/qqbot-bus.service.ts +++ b/src/modules/qqbot/core/mqtt/qqbot-bus.service.ts @@ -8,7 +8,7 @@ import { import { ConfigService } from '@nestjs/config'; import * as mqtt from 'mqtt'; import type { MqttClient } from 'mqtt'; -import type { QqbotBusHandler } from '../qqbot.types'; +import type { QqbotBusHandler } from '../contract/qqbot.types'; @Injectable() export class QqbotBusService implements OnModuleInit, OnModuleDestroy { diff --git a/src/qqbot/permission/qqbot-allowlist.entity.ts b/src/modules/qqbot/core/permission/qqbot-allowlist.entity.ts similarity index 93% rename from src/qqbot/permission/qqbot-allowlist.entity.ts rename to src/modules/qqbot/core/permission/qqbot-allowlist.entity.ts index 11af4d9..8883d5a 100644 --- a/src/qqbot/permission/qqbot-allowlist.entity.ts +++ b/src/modules/qqbot/core/permission/qqbot-allowlist.entity.ts @@ -5,7 +5,7 @@ import { KtDateTime, KtUpdateDateColumn, } from '@/common'; -import type { QqbotPermissionTargetType } from '../qqbot.types'; +import type { QqbotPermissionTargetType } from '../contract/qqbot.types'; @Entity('qqbot_allowlist') export class QqbotAllowlist { diff --git a/src/qqbot/permission/qqbot-blocklist.entity.ts b/src/modules/qqbot/core/permission/qqbot-blocklist.entity.ts similarity index 93% rename from src/qqbot/permission/qqbot-blocklist.entity.ts rename to src/modules/qqbot/core/permission/qqbot-blocklist.entity.ts index 245892c..20f3e8f 100644 --- a/src/qqbot/permission/qqbot-blocklist.entity.ts +++ b/src/modules/qqbot/core/permission/qqbot-blocklist.entity.ts @@ -5,7 +5,7 @@ import { KtDateTime, KtUpdateDateColumn, } from '@/common'; -import type { QqbotPermissionTargetType } from '../qqbot.types'; +import type { QqbotPermissionTargetType } from '../contract/qqbot.types'; @Entity('qqbot_blocklist') export class QqbotBlocklist { diff --git a/src/qqbot/permission/qqbot-permission.controller.ts b/src/modules/qqbot/core/permission/qqbot-permission.controller.ts similarity index 100% rename from src/qqbot/permission/qqbot-permission.controller.ts rename to src/modules/qqbot/core/permission/qqbot-permission.controller.ts diff --git a/src/qqbot/permission/qqbot-permission.dto.ts b/src/modules/qqbot/core/permission/qqbot-permission.dto.ts similarity index 94% rename from src/qqbot/permission/qqbot-permission.dto.ts rename to src/modules/qqbot/core/permission/qqbot-permission.dto.ts index 32ac95b..3a2c0ac 100644 --- a/src/qqbot/permission/qqbot-permission.dto.ts +++ b/src/modules/qqbot/core/permission/qqbot-permission.dto.ts @@ -1,5 +1,5 @@ import { ApiProperty, ApiPropertyOptional, PartialType } from '@nestjs/swagger'; -import type { QqbotPermissionTargetType } from '../qqbot.types'; +import type { QqbotPermissionTargetType } from '../contract/qqbot.types'; export class QqbotPermissionConfigDto { @ApiPropertyOptional({ default: false }) diff --git a/src/qqbot/permission/qqbot-permission.service.ts b/src/modules/qqbot/core/permission/qqbot-permission.service.ts similarity index 99% rename from src/qqbot/permission/qqbot-permission.service.ts rename to src/modules/qqbot/core/permission/qqbot-permission.service.ts index cb6e811..9fd95c8 100644 --- a/src/qqbot/permission/qqbot-permission.service.ts +++ b/src/modules/qqbot/core/permission/qqbot-permission.service.ts @@ -14,12 +14,12 @@ import { QqbotConfigService } from '../config/qqbot-config.service'; import { QQBOT_DEFAULT_PAGE_NO, QQBOT_DEFAULT_PAGE_SIZE, -} from '../qqbot.constants'; +} from '../contract/qqbot.constants'; import type { QqbotNormalizedMessage, QqbotPermissionEntity, QqbotPermissionKind, -} from '../qqbot.types'; +} from '../contract/qqbot.types'; @Injectable() export class QqbotPermissionService { diff --git a/src/modules/qqbot/core/qqbot-core.module.ts b/src/modules/qqbot/core/qqbot-core.module.ts index ede3a9f..203e23d 100644 --- a/src/modules/qqbot/core/qqbot-core.module.ts +++ b/src/modules/qqbot/core/qqbot-core.module.ts @@ -3,47 +3,45 @@ import { ConfigModule } from '@nestjs/config'; import { TypeOrmModule } from '@nestjs/typeorm'; import { AdminAuthGuardModule } from '@/modules/admin/identity/auth/admin-auth-guard.module'; import { DictModule } from '@/modules/admin/platform-config/dict/dict.module'; -import { QqbotAccountAbility } from '@/qqbot/account/qqbot-account-ability.entity'; -import { QqbotAccountController } from '@/qqbot/account/qqbot-account.controller'; -import { QqbotAccount } from '@/qqbot/account/qqbot-account.entity'; -import { QqbotAccountService } from '@/qqbot/account/qqbot-account.service'; -import { QqbotNapcatLoginService } from '@/qqbot/account/qqbot-napcat-login.service'; -import { QqbotNapcatWatchdogService } from '@/qqbot/account/qqbot-napcat-watchdog.service'; -import { QqbotCommandController } from '@/qqbot/command/qqbot-command.controller'; -import { QqbotCommand } from '@/qqbot/command/qqbot-command.entity'; -import { QqbotCommandEngineService } from '@/qqbot/command/qqbot-command-engine.service'; -import { QqbotCommandLog } from '@/qqbot/command/qqbot-command-log.entity'; -import { QqbotCommandParserService } from '@/qqbot/command/qqbot-command-parser.service'; -import { QqbotCommandService } from '@/qqbot/command/qqbot-command.service'; -import { QqbotReplyTemplateService } from '@/qqbot/command/qqbot-reply-template.service'; -import { QqbotReverseWsService } from '@/qqbot/connection/qqbot-reverse-ws.service'; -import { QqbotConfig } from '@/qqbot/config/qqbot-config.entity'; -import { QqbotConfigService } from '@/qqbot/config/qqbot-config.service'; -import { QqbotDashboardController } from '@/qqbot/dashboard/qqbot-dashboard.controller'; -import { QqbotDashboardService } from '@/qqbot/dashboard/qqbot-dashboard.service'; -import { QqbotDedupe } from '@/qqbot/dedupe/qqbot-dedupe.entity'; -import { QqbotDedupeService } from '@/qqbot/dedupe/qqbot-dedupe.service'; -import { QqbotEventService } from '@/qqbot/event/qqbot-event.service'; +import { QqbotAccountAbility } from '@/modules/qqbot/core/account/qqbot-account-ability.entity'; +import { QqbotAccountController } from '@/modules/qqbot/core/account/qqbot-account.controller'; +import { QqbotAccount } from '@/modules/qqbot/core/account/qqbot-account.entity'; +import { QqbotAccountService } from '@/modules/qqbot/core/account/qqbot-account.service'; +import { QqbotNapcatLoginService } from '@/modules/qqbot/napcat/login/qqbot-napcat-login.service'; +import { QqbotNapcatWatchdogService } from '@/modules/qqbot/napcat/login/qqbot-napcat-watchdog.service'; +import { QqbotCommandController } from '@/modules/qqbot/core/command/qqbot-command.controller'; +import { QqbotCommand } from '@/modules/qqbot/core/command/qqbot-command.entity'; +import { QqbotCommandEngineService } from '@/modules/qqbot/core/command/qqbot-command-engine.service'; +import { QqbotCommandLog } from '@/modules/qqbot/core/command/qqbot-command-log.entity'; +import { QqbotCommandParserService } from '@/modules/qqbot/core/command/qqbot-command-parser.service'; +import { QqbotCommandService } from '@/modules/qqbot/core/command/qqbot-command.service'; +import { QqbotReplyTemplateService } from '@/modules/qqbot/core/command/qqbot-reply-template.service'; +import { QqbotReverseWsService } from '@/modules/qqbot/core/connection/qqbot-reverse-ws.service'; +import { QqbotConfig } from '@/modules/qqbot/core/config/qqbot-config.entity'; +import { QqbotConfigService } from '@/modules/qqbot/core/config/qqbot-config.service'; +import { QqbotDashboardController } from '@/modules/qqbot/core/dashboard/qqbot-dashboard.controller'; +import { QqbotDashboardService } from '@/modules/qqbot/core/dashboard/qqbot-dashboard.service'; +import { QqbotDedupe } from '@/modules/qqbot/core/dedupe/qqbot-dedupe.entity'; +import { QqbotDedupeService } from '@/modules/qqbot/core/dedupe/qqbot-dedupe.service'; +import { QqbotEventService } from '@/modules/qqbot/core/event/qqbot-event.service'; import { QqbotPluginHttpClientService } from '@/modules/qqbot/plugin-platform/sdk'; -import { - NapcatDeviceIdentity, - NapcatDeviceIdentityService, -} from '@/modules/qqbot/napcat'; -import { QqbotConversation } from '@/qqbot/message/qqbot-conversation.entity'; -import { QqbotMessageController } from '@/qqbot/message/qqbot-message.controller'; -import { QqbotMessage } from '@/qqbot/message/qqbot-message.entity'; -import { QqbotMessageService } from '@/qqbot/message/qqbot-message.service'; -import { QqbotBusService } from '@/qqbot/mqtt/qqbot-bus.service'; -import { QqbotAccountNapcat } from '@/qqbot/napcat/qqbot-account-napcat.entity'; -import { QqbotNapcatContainer } from '@/qqbot/napcat/qqbot-napcat-container.entity'; -import { QqbotNapcatContainerService } from '@/qqbot/napcat/qqbot-napcat-container.service'; -import { QqbotAllowlist } from '@/qqbot/permission/qqbot-allowlist.entity'; -import { QqbotBlocklist } from '@/qqbot/permission/qqbot-blocklist.entity'; -import { QqbotPermissionController } from '@/qqbot/permission/qqbot-permission.controller'; -import { QqbotPermissionService } from '@/qqbot/permission/qqbot-permission.service'; -import { QqbotEventPluginRegistryService } from '@/qqbot/plugin/qqbot-event-plugin-registry.service'; -import { QqbotPluginController } from '@/qqbot/plugin/qqbot-plugin.controller'; -import { QqbotPluginRegistryService } from '@/qqbot/plugin/qqbot-plugin-registry.service'; +import { NapcatDeviceIdentity } from '@/modules/qqbot/napcat/device/napcat-device-identity.entity'; +import { NapcatDeviceIdentityService } from '@/modules/qqbot/napcat/device/napcat-device-identity.service'; +import { QqbotConversation } from '@/modules/qqbot/core/message/qqbot-conversation.entity'; +import { QqbotMessageController } from '@/modules/qqbot/core/message/qqbot-message.controller'; +import { QqbotMessage } from '@/modules/qqbot/core/message/qqbot-message.entity'; +import { QqbotMessageService } from '@/modules/qqbot/core/message/qqbot-message.service'; +import { QqbotBusService } from '@/modules/qqbot/core/mqtt/qqbot-bus.service'; +import { QqbotAccountNapcat } from '@/modules/qqbot/napcat/infrastructure/persistence/qqbot-account-napcat.entity'; +import { QqbotNapcatContainer } from '@/modules/qqbot/napcat/infrastructure/persistence/qqbot-napcat-container.entity'; +import { QqbotNapcatContainerService } from '@/modules/qqbot/napcat/qqbot-napcat-container.service'; +import { QqbotAllowlist } from '@/modules/qqbot/core/permission/qqbot-allowlist.entity'; +import { QqbotBlocklist } from '@/modules/qqbot/core/permission/qqbot-blocklist.entity'; +import { QqbotPermissionController } from '@/modules/qqbot/core/permission/qqbot-permission.controller'; +import { QqbotPermissionService } from '@/modules/qqbot/core/permission/qqbot-permission.service'; +import { QqbotEventPluginRegistryService } from '../../../qqbot/plugin/qqbot-event-plugin-registry.service'; +import { QqbotPluginController } from '../../../qqbot/plugin/qqbot-plugin.controller'; +import { QqbotPluginRegistryService } from '../../../qqbot/plugin/qqbot-plugin-registry.service'; import { QqbotBangDreamClientService } from '@/modules/qqbot/plugins/bangDream/application/bangdream-client.service'; import { TsuguApplicationService } from '@/modules/qqbot/plugins/bangDream/application/bangdream-application.service'; import { QqbotBangDreamRendererService } from '@/modules/qqbot/plugins/bangDream/application/bangdream-renderer.facade'; @@ -53,14 +51,14 @@ import { QqbotFf14MarketPluginService } from '@/modules/qqbot/plugins/ff14Market import { QqbotFflogsClientService } from '@/modules/qqbot/plugins/fflogs/qqbot-fflogs-client.service'; import { QqbotFflogsPluginService } from '@/modules/qqbot/plugins/fflogs/qqbot-fflogs.plugin'; import { QqbotRepeaterPluginService } from '@/modules/qqbot/plugins/repeater/qqbot-repeater.plugin'; -import { QqbotRuleController } from '@/qqbot/rule/qqbot-rule.controller'; -import { QqbotRule } from '@/qqbot/rule/qqbot-rule.entity'; -import { QqbotRuleEngineService } from '@/qqbot/rule/qqbot-rule-engine.service'; -import { QqbotRuleService } from '@/qqbot/rule/qqbot-rule.service'; -import { QqbotRateLimitService } from '@/qqbot/send/qqbot-rate-limit.service'; -import { QqbotSendController } from '@/qqbot/send/qqbot-send.controller'; -import { QqbotSendLog } from '@/qqbot/send/qqbot-send-log.entity'; -import { QqbotSendService } from '@/qqbot/send/qqbot-send.service'; +import { QqbotRuleController } from '@/modules/qqbot/core/rule/qqbot-rule.controller'; +import { QqbotRule } from '@/modules/qqbot/core/rule/qqbot-rule.entity'; +import { QqbotRuleEngineService } from '@/modules/qqbot/core/rule/qqbot-rule-engine.service'; +import { QqbotRuleService } from '@/modules/qqbot/core/rule/qqbot-rule.service'; +import { QqbotRateLimitService } from '@/modules/qqbot/core/send/qqbot-rate-limit.service'; +import { QqbotSendController } from '@/modules/qqbot/core/send/qqbot-send.controller'; +import { QqbotSendLog } from '@/modules/qqbot/core/send/qqbot-send-log.entity'; +import { QqbotSendService } from '@/modules/qqbot/core/send/qqbot-send.service'; export { QQBOT_CORE_DOMAIN_CONTRACT } from './qqbot-core.contract'; diff --git a/src/qqbot/rule/qqbot-rule-engine.service.ts b/src/modules/qqbot/core/rule/qqbot-rule-engine.service.ts similarity index 96% rename from src/qqbot/rule/qqbot-rule-engine.service.ts rename to src/modules/qqbot/core/rule/qqbot-rule-engine.service.ts index 00bad89..9fe4e8e 100644 --- a/src/qqbot/rule/qqbot-rule-engine.service.ts +++ b/src/modules/qqbot/core/rule/qqbot-rule-engine.service.ts @@ -1,6 +1,6 @@ import { Injectable, Logger } from '@nestjs/common'; import { ToolsService } from '@/common'; -import type { QqbotNormalizedMessage } from '../qqbot.types'; +import type { QqbotNormalizedMessage } from '../contract/qqbot.types'; import { QqbotCommandEngineService } from '../command/qqbot-command-engine.service'; import { QqbotPermissionService } from '../permission/qqbot-permission.service'; import { QqbotRepeaterPluginService } from '@/modules/qqbot/plugins/repeater/qqbot-repeater.plugin'; diff --git a/src/qqbot/rule/qqbot-rule.controller.ts b/src/modules/qqbot/core/rule/qqbot-rule.controller.ts similarity index 100% rename from src/qqbot/rule/qqbot-rule.controller.ts rename to src/modules/qqbot/core/rule/qqbot-rule.controller.ts diff --git a/src/qqbot/rule/qqbot-rule.dto.ts b/src/modules/qqbot/core/rule/qqbot-rule.dto.ts similarity index 98% rename from src/qqbot/rule/qqbot-rule.dto.ts rename to src/modules/qqbot/core/rule/qqbot-rule.dto.ts index 20f2a39..0f33608 100644 --- a/src/qqbot/rule/qqbot-rule.dto.ts +++ b/src/modules/qqbot/core/rule/qqbot-rule.dto.ts @@ -1,5 +1,5 @@ import { ApiProperty, ApiPropertyOptional, PartialType } from '@nestjs/swagger'; -import type { QqbotRuleMatchType, QqbotRuleTargetType } from '../qqbot.types'; +import type { QqbotRuleMatchType, QqbotRuleTargetType } from '../contract/qqbot.types'; export class QqbotRuleBodyDto { @ApiPropertyOptional() diff --git a/src/qqbot/rule/qqbot-rule.entity.ts b/src/modules/qqbot/core/rule/qqbot-rule.entity.ts similarity index 98% rename from src/qqbot/rule/qqbot-rule.entity.ts rename to src/modules/qqbot/core/rule/qqbot-rule.entity.ts index ec53c99..c6911cf 100644 --- a/src/qqbot/rule/qqbot-rule.entity.ts +++ b/src/modules/qqbot/core/rule/qqbot-rule.entity.ts @@ -6,7 +6,7 @@ import { KtDateTimeColumn, KtUpdateDateColumn, } from '@/common'; -import type { QqbotRuleMatchType, QqbotRuleTargetType } from '../qqbot.types'; +import type { QqbotRuleMatchType, QqbotRuleTargetType } from '../contract/qqbot.types'; @Entity('qqbot_rule') export class QqbotRule { diff --git a/src/qqbot/rule/qqbot-rule.service.ts b/src/modules/qqbot/core/rule/qqbot-rule.service.ts similarity index 97% rename from src/qqbot/rule/qqbot-rule.service.ts rename to src/modules/qqbot/core/rule/qqbot-rule.service.ts index 761a7df..0b728ff 100644 --- a/src/qqbot/rule/qqbot-rule.service.ts +++ b/src/modules/qqbot/core/rule/qqbot-rule.service.ts @@ -14,12 +14,12 @@ import type { QqbotNormalizedMessage, QqbotRuleMatchType, QqbotRuleTargetType, -} from '../qqbot.types'; +} from '../contract/qqbot.types'; import { QQBOT_DEFAULT_PAGE_NO, QQBOT_DEFAULT_PAGE_SIZE, -} from '../qqbot.constants'; -import { isWithinCooldown } from '../qqbot-cooldown.policy'; +} from '../contract/qqbot.constants'; +import { isWithinCooldown } from '../domain/qqbot-cooldown.policy'; @Injectable() export class QqbotRuleService { diff --git a/src/qqbot/send/qqbot-rate-limit.service.ts b/src/modules/qqbot/core/send/qqbot-rate-limit.service.ts similarity index 100% rename from src/qqbot/send/qqbot-rate-limit.service.ts rename to src/modules/qqbot/core/send/qqbot-rate-limit.service.ts diff --git a/src/qqbot/send/qqbot-send-log.entity.ts b/src/modules/qqbot/core/send/qqbot-send-log.entity.ts similarity index 94% rename from src/qqbot/send/qqbot-send-log.entity.ts rename to src/modules/qqbot/core/send/qqbot-send-log.entity.ts index b9ba060..c79d74d 100644 --- a/src/qqbot/send/qqbot-send-log.entity.ts +++ b/src/modules/qqbot/core/send/qqbot-send-log.entity.ts @@ -5,7 +5,7 @@ import { KtDateTime, KtUpdateDateColumn, } from '@/common'; -import type { QqbotMessageType, QqbotSendStatus } from '../qqbot.types'; +import type { QqbotMessageType, QqbotSendStatus } from '../contract/qqbot.types'; @Entity('qqbot_send_log') @Index('idx_qqbot_send_log_target', ['selfId', 'targetType', 'targetId']) diff --git a/src/qqbot/send/qqbot-send.controller.ts b/src/modules/qqbot/core/send/qqbot-send.controller.ts similarity index 100% rename from src/qqbot/send/qqbot-send.controller.ts rename to src/modules/qqbot/core/send/qqbot-send.controller.ts diff --git a/src/qqbot/send/qqbot-send.dto.ts b/src/modules/qqbot/core/send/qqbot-send.dto.ts similarity index 90% rename from src/qqbot/send/qqbot-send.dto.ts rename to src/modules/qqbot/core/send/qqbot-send.dto.ts index 55efdb1..b426b08 100644 --- a/src/qqbot/send/qqbot-send.dto.ts +++ b/src/modules/qqbot/core/send/qqbot-send.dto.ts @@ -1,5 +1,5 @@ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; -import type { QqbotMessageType, QqbotSendStatus } from '../qqbot.types'; +import type { QqbotMessageType, QqbotSendStatus } from '../contract/qqbot.types'; export class QqbotSendPrivateDto { @ApiPropertyOptional() diff --git a/src/qqbot/send/qqbot-send.service.ts b/src/modules/qqbot/core/send/qqbot-send.service.ts similarity index 98% rename from src/qqbot/send/qqbot-send.service.ts rename to src/modules/qqbot/core/send/qqbot-send.service.ts index 9f302cc..13f8baf 100644 --- a/src/qqbot/send/qqbot-send.service.ts +++ b/src/modules/qqbot/core/send/qqbot-send.service.ts @@ -4,17 +4,17 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { throwVbenError, ToolsService } from '@/common'; import { QqbotAccountService } from '../account/qqbot-account.service'; -import { QQBOT_MQTT_TOPICS } from '../qqbot.constants'; +import { QQBOT_MQTT_TOPICS } from '../contract/qqbot.constants'; import { QqbotBusService } from '../mqtt/qqbot-bus.service'; import { QqbotMessageService } from '../message/qqbot-message.service'; import type { QqbotMessageType, QqbotReverseActionSender, -} from '../qqbot.types'; +} from '../contract/qqbot.types'; import { QQBOT_DEFAULT_PAGE_NO, QQBOT_DEFAULT_PAGE_SIZE, -} from '../qqbot.constants'; +} from '../contract/qqbot.constants'; import { QqbotRateLimitService } from './qqbot-rate-limit.service'; import { QqbotSendLog } from './qqbot-send-log.entity'; import type { diff --git a/src/modules/qqbot/napcat/index.ts b/src/modules/qqbot/napcat/index.ts index 0463a98..7a6de5e 100644 --- a/src/modules/qqbot/napcat/index.ts +++ b/src/modules/qqbot/napcat/index.ts @@ -1,6 +1,11 @@ export * from './container/napcat-docker-device-options'; export * from './device/napcat-device-identity.entity'; export * from './device/napcat-device-identity.service'; +export * from './infrastructure/persistence/qqbot-account-napcat.entity'; +export * from './infrastructure/persistence/qqbot-napcat-container.entity'; export * from './integration/napcat-login-api.client'; export * from './login/napcat-login-state-machine'; +export * from './login/qqbot-napcat-login.service'; +export * from './login/qqbot-napcat-watchdog.service'; export * from './persistence'; +export * from './qqbot-napcat-container.service'; diff --git a/src/qqbot/napcat/qqbot-account-napcat.entity.ts b/src/modules/qqbot/napcat/infrastructure/persistence/qqbot-account-napcat.entity.ts similarity index 93% rename from src/qqbot/napcat/qqbot-account-napcat.entity.ts rename to src/modules/qqbot/napcat/infrastructure/persistence/qqbot-account-napcat.entity.ts index 5eb4fc8..2b303e1 100644 --- a/src/qqbot/napcat/qqbot-account-napcat.entity.ts +++ b/src/modules/qqbot/napcat/infrastructure/persistence/qqbot-account-napcat.entity.ts @@ -6,7 +6,7 @@ import { KtDateTimeColumn, KtUpdateDateColumn, } from '@/common'; -import type { QqbotAccountNapcatBindStatus } from '../qqbot.types'; +import type { QqbotAccountNapcatBindStatus } from '../../../core/contract/qqbot.types'; @Entity('qqbot_account_napcat') @Index('idx_qqbot_account_napcat_account', ['accountId', 'isDeleted']) diff --git a/src/qqbot/napcat/qqbot-napcat-container.entity.ts b/src/modules/qqbot/napcat/infrastructure/persistence/qqbot-napcat-container.entity.ts similarity index 95% rename from src/qqbot/napcat/qqbot-napcat-container.entity.ts rename to src/modules/qqbot/napcat/infrastructure/persistence/qqbot-napcat-container.entity.ts index 6be40ec..9678ccf 100644 --- a/src/qqbot/napcat/qqbot-napcat-container.entity.ts +++ b/src/modules/qqbot/napcat/infrastructure/persistence/qqbot-napcat-container.entity.ts @@ -6,7 +6,7 @@ import { KtDateTimeColumn, KtUpdateDateColumn, } from '@/common'; -import type { QqbotNapcatContainerStatus } from '../qqbot.types'; +import type { QqbotNapcatContainerStatus } from '../../../core/contract/qqbot.types'; @Entity('qqbot_napcat_container') @Index('uk_qqbot_napcat_container_name', ['name'], { unique: true }) diff --git a/src/qqbot/account/qqbot-napcat-login.service.ts b/src/modules/qqbot/napcat/login/qqbot-napcat-login.service.ts similarity index 99% rename from src/qqbot/account/qqbot-napcat-login.service.ts rename to src/modules/qqbot/napcat/login/qqbot-napcat-login.service.ts index c6dc888..fea7719 100644 --- a/src/qqbot/account/qqbot-napcat-login.service.ts +++ b/src/modules/qqbot/napcat/login/qqbot-napcat-login.service.ts @@ -5,7 +5,7 @@ import { Injectable } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { Observable } from 'rxjs'; import { throwVbenError, ToolsService } from '@/common'; -import { NapcatLoginApiClient } from '@/modules/qqbot/napcat'; +import { NapcatLoginApiClient } from '../integration/napcat-login-api.client'; import type { NapcatApiResponse, NapcatCaptchaLoginResult, @@ -23,9 +23,9 @@ import type { QqbotNapcatRuntime, QrcodeLookupOptions, QrcodeRefreshOptions, -} from '../qqbot.types'; -import { QqbotNapcatContainerService } from '../napcat/qqbot-napcat-container.service'; -import { QqbotAccountService } from './qqbot-account.service'; +} from '../../core/contract/qqbot.types'; +import { QqbotAccountService } from '../../core/account/qqbot-account.service'; +import { QqbotNapcatContainerService } from '../qqbot-napcat-container.service'; @Injectable() export class QqbotNapcatLoginService { diff --git a/src/qqbot/account/qqbot-napcat-watchdog.service.ts b/src/modules/qqbot/napcat/login/qqbot-napcat-watchdog.service.ts similarity index 96% rename from src/qqbot/account/qqbot-napcat-watchdog.service.ts rename to src/modules/qqbot/napcat/login/qqbot-napcat-watchdog.service.ts index 2bf9e8b..03893ed 100644 --- a/src/qqbot/account/qqbot-napcat-watchdog.service.ts +++ b/src/modules/qqbot/napcat/login/qqbot-napcat-watchdog.service.ts @@ -5,7 +5,7 @@ import { OnModuleInit, } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; -import { QqbotAccountService } from './qqbot-account.service'; +import { QqbotAccountService } from '../../core/account/qqbot-account.service'; const DEFAULT_INTERVAL_MS = 120_000; const MIN_INTERVAL_MS = 30_000; diff --git a/src/modules/qqbot/napcat/persistence.ts b/src/modules/qqbot/napcat/persistence.ts index 8f13ce5..f5959d8 100644 --- a/src/modules/qqbot/napcat/persistence.ts +++ b/src/modules/qqbot/napcat/persistence.ts @@ -1,4 +1,6 @@ import { NapcatDeviceIdentity } from './device/napcat-device-identity.entity'; +import { QqbotAccountNapcat } from './infrastructure/persistence/qqbot-account-napcat.entity'; +import { QqbotNapcatContainer } from './infrastructure/persistence/qqbot-napcat-container.entity'; export const NAPCAT_RUNTIME_DOMAIN_CONTRACT = { tables: [ @@ -11,4 +13,8 @@ export const NAPCAT_RUNTIME_DOMAIN_CONTRACT = { ], } as const; -export const NAPCAT_RUNTIME_ENTITIES = [NapcatDeviceIdentity]; +export const NAPCAT_RUNTIME_ENTITIES = [ + NapcatDeviceIdentity, + QqbotAccountNapcat, + QqbotNapcatContainer, +]; diff --git a/src/qqbot/napcat/qqbot-napcat-container.service.ts b/src/modules/qqbot/napcat/qqbot-napcat-container.service.ts similarity index 98% rename from src/qqbot/napcat/qqbot-napcat-container.service.ts rename to src/modules/qqbot/napcat/qqbot-napcat-container.service.ts index efad759..e2d064b 100644 --- a/src/qqbot/napcat/qqbot-napcat-container.service.ts +++ b/src/modules/qqbot/napcat/qqbot-napcat-container.service.ts @@ -8,13 +8,13 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { throwVbenError, ToolsService } from '@/common'; import { - NapcatDeviceIdentityService, toNapcatDockerDeviceOptions, type NapcatDockerDeviceOptions, -} from '@/modules/qqbot/napcat'; -import { QqbotAccount } from '../account/qqbot-account.entity'; -import { QqbotAccountNapcat } from './qqbot-account-napcat.entity'; -import { QqbotNapcatContainer } from './qqbot-napcat-container.entity'; +} from './container/napcat-docker-device-options'; +import { NapcatDeviceIdentityService } from './device/napcat-device-identity.service'; +import { QqbotAccount } from '../core/account/qqbot-account.entity'; +import { QqbotAccountNapcat } from './infrastructure/persistence/qqbot-account-napcat.entity'; +import { QqbotNapcatContainer } from './infrastructure/persistence/qqbot-napcat-container.entity'; import type { NapcatApiResponse, NapcatCredential, @@ -22,7 +22,7 @@ import type { QqbotNapcatRuntime, QqbotNapcatRuntimeLoginStatus, QqbotNapcatRuntimeStatusSnapshot, -} from '../qqbot.types'; +} from '../core/contract/qqbot.types'; type NapcatLoginLogState = 'offline' | 'online' | 'unknown'; diff --git a/src/modules/qqbot/plugins/bangDream/qqbot-bangdream.plugin.ts b/src/modules/qqbot/plugins/bangDream/qqbot-bangdream.plugin.ts index d3151c5..2234283 100644 --- a/src/modules/qqbot/plugins/bangDream/qqbot-bangdream.plugin.ts +++ b/src/modules/qqbot/plugins/bangDream/qqbot-bangdream.plugin.ts @@ -1,6 +1,6 @@ import { Injectable } from '@nestjs/common'; import { formatKtDateTime, ToolsService } from '@/common'; -import type { QqbotIntegrationPlugin } from '@/qqbot/qqbot.types'; +import type { QqbotIntegrationPlugin } from '@/modules/qqbot/core/contract/qqbot.types'; import { BANGDREAM_INPUT_SCHEMA, BANGDREAM_OUTPUT_SCHEMA, diff --git a/src/modules/qqbot/plugins/ff14Market/qqbot-ff14-market.plugin.ts b/src/modules/qqbot/plugins/ff14Market/qqbot-ff14-market.plugin.ts index 7a6dc2b..23c21a6 100644 --- a/src/modules/qqbot/plugins/ff14Market/qqbot-ff14-market.plugin.ts +++ b/src/modules/qqbot/plugins/ff14Market/qqbot-ff14-market.plugin.ts @@ -1,6 +1,6 @@ import { Injectable } from '@nestjs/common'; import { formatKtDateTime, ToolsService } from '@/common'; -import type { QqbotIntegrationPlugin } from '@/qqbot/qqbot.types'; +import type { QqbotIntegrationPlugin } from '@/modules/qqbot/core/contract/qqbot.types'; import { QqbotFf14ClientService } from './qqbot-ff14-client.service'; @Injectable() diff --git a/src/modules/qqbot/plugins/fflogs/qqbot-fflogs.plugin.ts b/src/modules/qqbot/plugins/fflogs/qqbot-fflogs.plugin.ts index cc30007..2f14bc6 100644 --- a/src/modules/qqbot/plugins/fflogs/qqbot-fflogs.plugin.ts +++ b/src/modules/qqbot/plugins/fflogs/qqbot-fflogs.plugin.ts @@ -1,6 +1,6 @@ import { Injectable } from '@nestjs/common'; import { formatKtDateTime, ToolsService } from '@/common'; -import type { QqbotIntegrationPlugin } from '@/qqbot/qqbot.types'; +import type { QqbotIntegrationPlugin } from '@/modules/qqbot/core/contract/qqbot.types'; import { QqbotFflogsClientService } from './qqbot-fflogs-client.service'; @Injectable() diff --git a/src/modules/qqbot/plugins/repeater/qqbot-repeater.plugin.ts b/src/modules/qqbot/plugins/repeater/qqbot-repeater.plugin.ts index e2a5d4b..c44457b 100644 --- a/src/modules/qqbot/plugins/repeater/qqbot-repeater.plugin.ts +++ b/src/modules/qqbot/plugins/repeater/qqbot-repeater.plugin.ts @@ -1,14 +1,14 @@ import { Injectable, Logger } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { ToolsService } from '@/common'; -import { QqbotAccountService } from '@/qqbot/account/qqbot-account.service'; +import { QqbotAccountService } from '@/modules/qqbot/core/account/qqbot-account.service'; import type { QqbotEventPluginDefinition, QqbotEventPluginSummary, QqbotNormalizedMessage, QqbotRepeaterConversationState, -} from '@/qqbot/qqbot.types'; -import { QqbotSendService } from '@/qqbot/send/qqbot-send.service'; +} from '@/modules/qqbot/core/contract/qqbot.types'; +import { QqbotSendService } from '@/modules/qqbot/core/send/qqbot-send.service'; const QQBOT_REPEATER_VERSION = '1.0.0'; const QQBOT_REPEATER_PLUGIN_KEY = 'repeater'; diff --git a/src/qqbot/plugin/qqbot-event-plugin-registry.service.ts b/src/qqbot/plugin/qqbot-event-plugin-registry.service.ts index 5ed28a1..93a062f 100644 --- a/src/qqbot/plugin/qqbot-event-plugin-registry.service.ts +++ b/src/qqbot/plugin/qqbot-event-plugin-registry.service.ts @@ -1,12 +1,12 @@ import { Injectable } from '@nestjs/common'; import { formatKtDateTime, throwVbenError } from '@/common'; -import { QqbotAccountService } from '../account/qqbot-account.service'; +import { QqbotAccountService } from '@/modules/qqbot/core/account/qqbot-account.service'; import { QqbotRepeaterPluginService } from '@/modules/qqbot/plugins/repeater/qqbot-repeater.plugin'; import type { QqbotEventPluginDefinition, QqbotPluginHealth, QqbotPluginOperationSummary, -} from '../qqbot.types'; +} from '@/modules/qqbot/core/contract/qqbot.types'; @Injectable() export class QqbotEventPluginRegistryService { diff --git a/src/qqbot/plugin/qqbot-plugin-registry.service.ts b/src/qqbot/plugin/qqbot-plugin-registry.service.ts index f0c0823..8fb2a60 100644 --- a/src/qqbot/plugin/qqbot-plugin-registry.service.ts +++ b/src/qqbot/plugin/qqbot-plugin-registry.service.ts @@ -9,7 +9,7 @@ import type { QqbotPluginOperationContext, QqbotPluginOperationSummary, QqbotPluginSummary, -} from '../qqbot.types'; +} from '@/modules/qqbot/core/contract/qqbot.types'; @Injectable() export class QqbotPluginRegistryService implements OnModuleInit { diff --git a/src/qqbot/plugin/qqbot-plugin.controller.ts b/src/qqbot/plugin/qqbot-plugin.controller.ts index 0eea114..7c0bb8e 100644 --- a/src/qqbot/plugin/qqbot-plugin.controller.ts +++ b/src/qqbot/plugin/qqbot-plugin.controller.ts @@ -12,7 +12,7 @@ import { JwtAuthGuard } from '@/modules/admin/identity/auth/jwt-auth.guard'; import { vbenSuccess } from '@/common'; import { QqbotEventPluginRegistryService } from './qqbot-event-plugin-registry.service'; import { QqbotPluginRegistryService } from './qqbot-plugin-registry.service'; -import type { QqbotPluginTriggerMode } from '../qqbot.types'; +import type { QqbotPluginTriggerMode } from '@/modules/qqbot/core/contract/qqbot.types'; @ApiTags('QQBot - 插件能力') @Controller('qqbot/plugin') diff --git a/src/qqbot/qqbot.module.ts b/src/qqbot/qqbot.module.ts deleted file mode 100644 index 1d10d12..0000000 --- a/src/qqbot/qqbot.module.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Module } from '@nestjs/common'; -import { QqbotCoreModule } from '@/modules/qqbot/core/qqbot-core.module'; - -@Module({ - imports: [QqbotCoreModule], - exports: [QqbotCoreModule], -}) -export class QqbotModule {} diff --git a/test/modules/qqbot/core/qqbot-core-command-contract.spec.ts b/test/modules/qqbot/core/qqbot-core-command-contract.spec.ts index bf0262a..89fe8df 100644 --- a/test/modules/qqbot/core/qqbot-core-command-contract.spec.ts +++ b/test/modules/qqbot/core/qqbot-core-command-contract.spec.ts @@ -1,22 +1,3 @@ -jest.mock('@/qqbot/qqbot.module', () => ({ - QqbotModule: class QqbotModule {}, -})); -jest.mock('@/qqbot/plugin/qqbot-event-plugin-registry.service', () => ({ - QqbotEventPluginRegistryService: class QqbotEventPluginRegistryService {}, -})); -jest.mock( - '../../../../src/qqbot/plugin/qqbot-event-plugin-registry.service', - () => ({ - QqbotEventPluginRegistryService: class QqbotEventPluginRegistryService {}, - }), -); -jest.mock('@/qqbot/plugin/qqbot-plugin-registry.service', () => ({ - QqbotPluginRegistryService: class QqbotPluginRegistryService {}, -})); -jest.mock('../../../../src/qqbot/plugin/qqbot-plugin-registry.service', () => ({ - QqbotPluginRegistryService: class QqbotPluginRegistryService {}, -})); - import { QQBOT_CORE_DOMAIN_CONTRACT } from '../../../../src/modules/qqbot/core/qqbot-core.contract'; import { readRefactorV3SqlSchema } from '../../../helpers/sql-schema.helper'; diff --git a/test/modules/qqbot/core/qqbot-core-command-smoke.spec.ts b/test/modules/qqbot/core/qqbot-core-command-smoke.spec.ts index b53d445..960b44d 100644 --- a/test/modules/qqbot/core/qqbot-core-command-smoke.spec.ts +++ b/test/modules/qqbot/core/qqbot-core-command-smoke.spec.ts @@ -5,12 +5,6 @@ jest.mock('@/modules/admin/identity/auth/jwt-auth.guard', () => ({ } }, })); -jest.mock('@/qqbot/plugin/qqbot-plugin-registry.service', () => ({ - QqbotPluginRegistryService: class QqbotPluginRegistryService {}, -})); -jest.mock('../../../../src/qqbot/plugin/qqbot-plugin-registry.service', () => ({ - QqbotPluginRegistryService: class QqbotPluginRegistryService {}, -})); import type { INestApplication } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; @@ -19,19 +13,24 @@ import { Test } from '@nestjs/testing'; import * as request from 'supertest'; import { DictService } from '../../../../src/modules/admin/platform-config/dict/dict.service'; import { ToolsService } from '../../../../src/common'; -import { QqbotAccountService } from '../../../../src/qqbot/account/qqbot-account.service'; -import { QqbotCommandController } from '../../../../src/qqbot/command/qqbot-command.controller'; -import { QqbotCommand } from '../../../../src/qqbot/command/qqbot-command.entity'; -import { QqbotCommandEngineService } from '../../../../src/qqbot/command/qqbot-command-engine.service'; -import { QqbotCommandLog } from '../../../../src/qqbot/command/qqbot-command-log.entity'; -import { QqbotCommandParserService } from '../../../../src/qqbot/command/qqbot-command-parser.service'; -import { QqbotCommandService } from '../../../../src/qqbot/command/qqbot-command.service'; -import { QqbotReplyTemplateService } from '../../../../src/qqbot/command/qqbot-reply-template.service'; -import { QqbotPluginRegistryService } from '../../../../src/qqbot/plugin/qqbot-plugin-registry.service'; -import { QqbotSendService } from '../../../../src/qqbot/send/qqbot-send.service'; +import { QqbotAccountService } from '../../../../src/modules/qqbot/core/account/qqbot-account.service'; +import { QqbotCommandController } from '../../../../src/modules/qqbot/core/command/qqbot-command.controller'; +import { QqbotCommand } from '../../../../src/modules/qqbot/core/command/qqbot-command.entity'; +import { QqbotCommandEngineService } from '../../../../src/modules/qqbot/core/command/qqbot-command-engine.service'; +import { QqbotCommandLog } from '../../../../src/modules/qqbot/core/command/qqbot-command-log.entity'; +import { QqbotCommandParserService } from '../../../../src/modules/qqbot/core/command/qqbot-command-parser.service'; +import { QqbotCommandService } from '../../../../src/modules/qqbot/core/command/qqbot-command.service'; +import { QqbotReplyTemplateService } from '../../../../src/modules/qqbot/core/command/qqbot-reply-template.service'; +import { QQBOT_CORE_PROVIDERS } from '../../../../src/modules/qqbot/core/qqbot-core.module'; +import { QqbotSendService } from '../../../../src/modules/qqbot/core/send/qqbot-send.service'; describe('QQBot core command local smoke', () => { let app: INestApplication; + type ProviderClass = new (...args: never[]) => unknown; + const qqbotPluginRegistryProvider = QQBOT_CORE_PROVIDERS.find( + (provider) => + (provider as { name?: string }).name === 'QqbotPluginRegistryService', + ) as ProviderClass; const command = { aliases: '["查歌"]', @@ -104,7 +103,7 @@ describe('QQBot core command local smoke', () => { }, }, { - provide: QqbotPluginRegistryService, + provide: qqbotPluginRegistryProvider, useValue: pluginRegistry, }, { diff --git a/test/modules/qqbot/core/qqbot-core-module-contract.spec.ts b/test/modules/qqbot/core/qqbot-core-module-contract.spec.ts index c8a9157..d2418df 100644 --- a/test/modules/qqbot/core/qqbot-core-module-contract.spec.ts +++ b/test/modules/qqbot/core/qqbot-core-module-contract.spec.ts @@ -1,21 +1,3 @@ -const mockQqbotEventPluginRegistryService = class QqbotEventPluginRegistryService {}; -const mockQqbotPluginRegistryService = class QqbotPluginRegistryService {}; - -jest.mock('@/qqbot/plugin/qqbot-event-plugin-registry.service', () => ({ - QqbotEventPluginRegistryService: mockQqbotEventPluginRegistryService, -})); -jest.mock( - '../../../../src/qqbot/plugin/qqbot-event-plugin-registry.service', - () => ({ - QqbotEventPluginRegistryService: mockQqbotEventPluginRegistryService, - }), -); -jest.mock('@/qqbot/plugin/qqbot-plugin-registry.service', () => ({ - QqbotPluginRegistryService: mockQqbotPluginRegistryService, -})); -jest.mock('../../../../src/qqbot/plugin/qqbot-plugin-registry.service', () => ({ - QqbotPluginRegistryService: mockQqbotPluginRegistryService, -})); jest.mock( '@/modules/qqbot/plugins/bangDream/application/bangdream-client.service', () => ({ @@ -59,6 +41,8 @@ jest.mock('@/modules/qqbot/plugins/repeater/qqbot-repeater.plugin', () => ({ QqbotRepeaterPluginService: class QqbotRepeaterPluginService {}, })); +import { existsSync } from 'fs'; +import { join } from 'path'; import { MODULE_METADATA } from '@nestjs/common/constants'; import { ConfigModule } from '@nestjs/config'; import { TypeOrmModule } from '@nestjs/typeorm'; @@ -66,15 +50,13 @@ import { getMetadataArgsStorage } from 'typeorm'; import { AdminAuthGuardModule } from '../../../../src/modules/admin/identity/auth/admin-auth-guard.module'; import { DictModule } from '../../../../src/modules/admin/platform-config/dict/dict.module'; import { AppModule } from '../../../../src/app.module'; -import { QqbotAccountController } from '../../../../src/qqbot/account/qqbot-account.controller'; -import { QqbotCommandController } from '../../../../src/qqbot/command/qqbot-command.controller'; -import { QqbotDashboardController } from '../../../../src/qqbot/dashboard/qqbot-dashboard.controller'; -import { QqbotMessageController } from '../../../../src/qqbot/message/qqbot-message.controller'; -import { QqbotPermissionController } from '../../../../src/qqbot/permission/qqbot-permission.controller'; -import { QqbotPluginController } from '../../../../src/qqbot/plugin/qqbot-plugin.controller'; -import { QqbotModule } from '../../../../src/qqbot/qqbot.module'; -import { QqbotRuleController } from '../../../../src/qqbot/rule/qqbot-rule.controller'; -import { QqbotSendController } from '../../../../src/qqbot/send/qqbot-send.controller'; +import { QqbotAccountController } from '../../../../src/modules/qqbot/core/account/qqbot-account.controller'; +import { QqbotCommandController } from '../../../../src/modules/qqbot/core/command/qqbot-command.controller'; +import { QqbotDashboardController } from '../../../../src/modules/qqbot/core/dashboard/qqbot-dashboard.controller'; +import { QqbotMessageController } from '../../../../src/modules/qqbot/core/message/qqbot-message.controller'; +import { QqbotPermissionController } from '../../../../src/modules/qqbot/core/permission/qqbot-permission.controller'; +import { QqbotRuleController } from '../../../../src/modules/qqbot/core/rule/qqbot-rule.controller'; +import { QqbotSendController } from '../../../../src/modules/qqbot/core/send/qqbot-send.controller'; import { QQBOT_CORE_CONTROLLERS, QQBOT_CORE_ENTITIES, @@ -157,12 +139,20 @@ describe('QQBot core module contract', () => { }); it('routes QQBot through the core module as the owning Nest boundary', () => { - expect(getModuleMetadata(AppModule, MODULE_METADATA.IMPORTS)).toEqual( + const legacyWrapperName = ['Qqbot', 'Module'].join(''); + const legacyWrapperPath = join( + process.cwd(), + 'src', + 'qqbot', + ['qqbot', 'module.ts'].join('.'), + ); + const appImports = getModuleMetadata(AppModule, MODULE_METADATA.IMPORTS); + + expect(appImports).toEqual( expect.arrayContaining([QqbotCoreModule]), ); - expect(getModuleMetadata(AppModule, MODULE_METADATA.IMPORTS)).not.toEqual( - expect.arrayContaining([QqbotModule]), - ); + expect(getNames(appImports)).not.toContain(legacyWrapperName); + expect(existsSync(legacyWrapperPath)).toBe(false); const coreImports = getModuleMetadata( QqbotCoreModule, @@ -176,7 +166,7 @@ describe('QQBot core module contract', () => { (item) => (item as { module?: unknown }).module === TypeOrmModule, ), ).toBe(true); - expect(coreImports).not.toEqual(expect.arrayContaining([QqbotModule])); + expect(getNames(coreImports)).not.toContain(legacyWrapperName); expect( getModuleMetadata(QqbotCoreModule, MODULE_METADATA.CONTROLLERS), @@ -187,12 +177,6 @@ describe('QQBot core module contract', () => { expect(getModuleMetadata(QqbotCoreModule, MODULE_METADATA.EXPORTS)).toEqual( expect.arrayContaining(QQBOT_CORE_EXPORTS), ); - expect(getModuleMetadata(QqbotModule, MODULE_METADATA.IMPORTS)).toEqual( - expect.arrayContaining([QqbotCoreModule]), - ); - expect(getModuleMetadata(QqbotModule, MODULE_METADATA.EXPORTS)).toEqual( - expect.arrayContaining([QqbotCoreModule]), - ); }); it('makes the legacy QQBot controllers, providers and entities explicit', () => { @@ -203,11 +187,13 @@ describe('QQBot core module contract', () => { QqbotDashboardController, QqbotMessageController, QqbotPermissionController, - QqbotPluginController, QqbotRuleController, QqbotSendController, ]), ); + expect(getNames(QQBOT_CORE_CONTROLLERS)).toEqual( + expect.arrayContaining(['QqbotPluginController']), + ); expect(getNames(QQBOT_CORE_PROVIDERS)).toEqual( expect.arrayContaining([ 'QqbotAccountService', diff --git a/test/modules/qqbot/core/qqbot-core-send-contract.spec.ts b/test/modules/qqbot/core/qqbot-core-send-contract.spec.ts index 82dd3d9..8b3e9af 100644 --- a/test/modules/qqbot/core/qqbot-core-send-contract.spec.ts +++ b/test/modules/qqbot/core/qqbot-core-send-contract.spec.ts @@ -1,22 +1,3 @@ -jest.mock('@/qqbot/qqbot.module', () => ({ - QqbotModule: class QqbotModule {}, -})); -jest.mock('@/qqbot/plugin/qqbot-event-plugin-registry.service', () => ({ - QqbotEventPluginRegistryService: class QqbotEventPluginRegistryService {}, -})); -jest.mock( - '../../../../src/qqbot/plugin/qqbot-event-plugin-registry.service', - () => ({ - QqbotEventPluginRegistryService: class QqbotEventPluginRegistryService {}, - }), -); -jest.mock('@/qqbot/plugin/qqbot-plugin-registry.service', () => ({ - QqbotPluginRegistryService: class QqbotPluginRegistryService {}, -})); -jest.mock('../../../../src/qqbot/plugin/qqbot-plugin-registry.service', () => ({ - QqbotPluginRegistryService: class QqbotPluginRegistryService {}, -})); - import { QQBOT_CORE_DOMAIN_CONTRACT } from '../../../../src/modules/qqbot/core/qqbot-core.contract'; import { readRefactorV3SqlSchema } from '../../../helpers/sql-schema.helper'; diff --git a/test/modules/qqbot/core/qqbot-core-status-contract.spec.ts b/test/modules/qqbot/core/qqbot-core-status-contract.spec.ts index 4f5eca7..67704b2 100644 --- a/test/modules/qqbot/core/qqbot-core-status-contract.spec.ts +++ b/test/modules/qqbot/core/qqbot-core-status-contract.spec.ts @@ -1,22 +1,3 @@ -jest.mock('@/qqbot/qqbot.module', () => ({ - QqbotModule: class QqbotModule {}, -})); -jest.mock('@/qqbot/plugin/qqbot-event-plugin-registry.service', () => ({ - QqbotEventPluginRegistryService: class QqbotEventPluginRegistryService {}, -})); -jest.mock( - '../../../../src/qqbot/plugin/qqbot-event-plugin-registry.service', - () => ({ - QqbotEventPluginRegistryService: class QqbotEventPluginRegistryService {}, - }), -); -jest.mock('@/qqbot/plugin/qqbot-plugin-registry.service', () => ({ - QqbotPluginRegistryService: class QqbotPluginRegistryService {}, -})); -jest.mock('../../../../src/qqbot/plugin/qqbot-plugin-registry.service', () => ({ - QqbotPluginRegistryService: class QqbotPluginRegistryService {}, -})); - import { QQBOT_CORE_DOMAIN_CONTRACT } from '../../../../src/modules/qqbot/core/qqbot-core.contract'; import { readRefactorV3SqlSchema } from '../../../helpers/sql-schema.helper'; diff --git a/test/modules/qqbot/napcat/device-identity.spec.ts b/test/modules/qqbot/napcat/device-identity.spec.ts index e16cda6..fd0d2e7 100644 --- a/test/modules/qqbot/napcat/device-identity.spec.ts +++ b/test/modules/qqbot/napcat/device-identity.spec.ts @@ -7,7 +7,7 @@ import { NAPCAT_RUNTIME_ENTITIES, toNapcatDockerDeviceOptions, } from '../../../../src/modules/qqbot/napcat'; -import { QqbotNapcatContainerService } from '../../../../src/qqbot/napcat/qqbot-napcat-container.service'; +import { QqbotNapcatContainerService } from '../../../../src/modules/qqbot/napcat/qqbot-napcat-container.service'; import { readRefactorV3SqlSchema } from '../../../helpers/sql-schema.helper'; type EntityClass = new (...args: never[]) => unknown; diff --git a/test/modules/qqbot/plugins/plugin-controller-http-smoke.spec.ts b/test/modules/qqbot/plugins/plugin-controller-http-smoke.spec.ts index 6244ca0..032d01f 100644 --- a/test/modules/qqbot/plugins/plugin-controller-http-smoke.spec.ts +++ b/test/modules/qqbot/plugins/plugin-controller-http-smoke.spec.ts @@ -27,7 +27,7 @@ import { QqbotFflogsPluginService } from '../../../../src/modules/qqbot/plugins/ import { QqbotEventPluginRegistryService } from '../../../../src/qqbot/plugin/qqbot-event-plugin-registry.service'; import { QqbotPluginController } from '../../../../src/qqbot/plugin/qqbot-plugin.controller'; import { QqbotPluginRegistryService } from '../../../../src/qqbot/plugin/qqbot-plugin-registry.service'; -import type { QqbotIntegrationPlugin } from '../../../../src/qqbot/qqbot.types'; +import type { QqbotIntegrationPlugin } from '../../../../src/modules/qqbot/core/contract/qqbot.types'; const createPlugin = ( key: string, diff --git a/test/modules/qqbot/plugins/plugin-registry-compat.spec.ts b/test/modules/qqbot/plugins/plugin-registry-compat.spec.ts index 2016e1d..3793652 100644 --- a/test/modules/qqbot/plugins/plugin-registry-compat.spec.ts +++ b/test/modules/qqbot/plugins/plugin-registry-compat.spec.ts @@ -12,7 +12,7 @@ jest.mock('@/modules/qqbot/plugins/fflogs/qqbot-fflogs.plugin', () => ({ })); import { QqbotPluginRegistryService } from '../../../../src/qqbot/plugin/qqbot-plugin-registry.service'; -import type { QqbotIntegrationPlugin } from '../../../../src/qqbot/qqbot.types'; +import type { QqbotIntegrationPlugin } from '../../../../src/modules/qqbot/core/contract/qqbot.types'; const asPluginService = (plugin: QqbotIntegrationPlugin) => ({ diff --git a/test/qqbot/account/qqbot-account.controller.spec.ts b/test/qqbot/account/qqbot-account.controller.spec.ts index 87b8de6..7adbd9c 100644 --- a/test/qqbot/account/qqbot-account.controller.spec.ts +++ b/test/qqbot/account/qqbot-account.controller.spec.ts @@ -5,23 +5,23 @@ jest.mock('@/modules/admin/identity/auth/jwt-auth.guard', () => ({ } }, })); -jest.mock('@/qqbot/account/qqbot-account.service', () => ({ +jest.mock('@/modules/qqbot/core/account/qqbot-account.service', () => ({ QqbotAccountService: class {}, })); -jest.mock('@/qqbot/account/qqbot-napcat-login.service', () => ({ +jest.mock('@/modules/qqbot/napcat/login/qqbot-napcat-login.service', () => ({ QqbotNapcatLoginService: class {}, })); -jest.mock('@/qqbot/connection/qqbot-reverse-ws.service', () => ({ +jest.mock('@/modules/qqbot/core/connection/qqbot-reverse-ws.service', () => ({ QqbotReverseWsService: class {}, })); import * as request from 'supertest'; import { Test } from '@nestjs/testing'; import type { INestApplication } from '@nestjs/common'; -import { QqbotAccountController } from '@/qqbot/account/qqbot-account.controller'; -import { QqbotAccountService } from '@/qqbot/account/qqbot-account.service'; -import { QqbotNapcatLoginService } from '@/qqbot/account/qqbot-napcat-login.service'; -import { QqbotReverseWsService } from '@/qqbot/connection/qqbot-reverse-ws.service'; +import { QqbotAccountController } from '@/modules/qqbot/core/account/qqbot-account.controller'; +import { QqbotAccountService } from '@/modules/qqbot/core/account/qqbot-account.service'; +import { QqbotNapcatLoginService } from '@/modules/qqbot/napcat/login/qqbot-napcat-login.service'; +import { QqbotReverseWsService } from '@/modules/qqbot/core/connection/qqbot-reverse-ws.service'; describe('QqbotAccountController', () => { let app: INestApplication; diff --git a/test/qqbot/account/qqbot-account.service.spec.ts b/test/qqbot/account/qqbot-account.service.spec.ts index d87a1cd..76611b7 100644 --- a/test/qqbot/account/qqbot-account.service.spec.ts +++ b/test/qqbot/account/qqbot-account.service.spec.ts @@ -1,5 +1,5 @@ import { ToolsService } from '@/common'; -import { QqbotAccountService } from '@/qqbot/account/qqbot-account.service'; +import { QqbotAccountService } from '@/modules/qqbot/core/account/qqbot-account.service'; describe('QqbotAccountService', () => { it('stores NapCat login password as encrypted secret and never persists the transport field', async () => { diff --git a/test/qqbot/account/qqbot-napcat-login.service.spec.ts b/test/qqbot/account/qqbot-napcat-login.service.spec.ts index 18918e5..90a796e 100644 --- a/test/qqbot/account/qqbot-napcat-login.service.spec.ts +++ b/test/qqbot/account/qqbot-napcat-login.service.spec.ts @@ -13,9 +13,9 @@ jest.mock('@/common', () => { import { ConfigService } from '@nestjs/config'; import { ToolsService } from '@/common'; -import { QqbotAccountService } from '@/qqbot/account/qqbot-account.service'; -import { QqbotNapcatLoginService } from '@/qqbot/account/qqbot-napcat-login.service'; -import { QqbotNapcatContainerService } from '@/qqbot/napcat/qqbot-napcat-container.service'; +import { QqbotAccountService } from '@/modules/qqbot/core/account/qqbot-account.service'; +import { QqbotNapcatLoginService } from '@/modules/qqbot/napcat/login/qqbot-napcat-login.service'; +import { QqbotNapcatContainerService } from '@/modules/qqbot/napcat/qqbot-napcat-container.service'; describe('QqbotNapcatLoginService', () => { const toolsService = new ToolsService(); diff --git a/test/qqbot/account/qqbot-napcat-watchdog.service.spec.ts b/test/qqbot/account/qqbot-napcat-watchdog.service.spec.ts index b0f9dbc..4317be5 100644 --- a/test/qqbot/account/qqbot-napcat-watchdog.service.spec.ts +++ b/test/qqbot/account/qqbot-napcat-watchdog.service.spec.ts @@ -1,5 +1,5 @@ import { ConfigService } from '@nestjs/config'; -import { QqbotNapcatWatchdogService } from '@/qqbot/account/qqbot-napcat-watchdog.service'; +import { QqbotNapcatWatchdogService } from '@/modules/qqbot/napcat/login/qqbot-napcat-watchdog.service'; function buildService( configValues: Record, diff --git a/test/qqbot/command/qqbot-command-parser.service.spec.ts b/test/qqbot/command/qqbot-command-parser.service.spec.ts index ea8089e..d6739ad 100644 --- a/test/qqbot/command/qqbot-command-parser.service.spec.ts +++ b/test/qqbot/command/qqbot-command-parser.service.spec.ts @@ -27,8 +27,8 @@ jest.mock( ); import { DictService } from '@/modules/admin/platform-config/dict/dict.service'; -import type { QqbotCommand } from '@/qqbot/command/qqbot-command.entity'; -import { QqbotCommandParserService } from '@/qqbot/command/qqbot-command-parser.service'; +import type { QqbotCommand } from '@/modules/qqbot/core/command/qqbot-command.entity'; +import { QqbotCommandParserService } from '@/modules/qqbot/core/command/qqbot-command-parser.service'; describe('QqbotCommandParserService FFLogs parser', () => { const command = { diff --git a/test/qqbot/connection/qqbot-reverse-ws.service.spec.ts b/test/qqbot/connection/qqbot-reverse-ws.service.spec.ts index 96bd2e1..893bd31 100644 --- a/test/qqbot/connection/qqbot-reverse-ws.service.spec.ts +++ b/test/qqbot/connection/qqbot-reverse-ws.service.spec.ts @@ -1,10 +1,10 @@ -jest.mock('@/qqbot/event/qqbot-event.service', () => ({ +jest.mock('@/modules/qqbot/core/event/qqbot-event.service', () => ({ QqbotEventService: class {}, })); import { EventEmitter } from 'events'; import { ToolsService } from '@/common'; -import { QqbotReverseWsService } from '@/qqbot/connection/qqbot-reverse-ws.service'; +import { QqbotReverseWsService } from '@/modules/qqbot/core/connection/qqbot-reverse-ws.service'; class FakeWebSocket extends EventEmitter { closed: Array<{ code?: number; reason?: string }> = []; diff --git a/test/qqbot/event/qqbot-event.service.spec.ts b/test/qqbot/event/qqbot-event.service.spec.ts index a725e53..5fb792f 100644 --- a/test/qqbot/event/qqbot-event.service.spec.ts +++ b/test/qqbot/event/qqbot-event.service.spec.ts @@ -1,8 +1,8 @@ -jest.mock('@/qqbot/rule/qqbot-rule-engine.service', () => ({ +jest.mock('@/modules/qqbot/core/rule/qqbot-rule-engine.service', () => ({ QqbotRuleEngineService: class QqbotRuleEngineService {}, })); -import { QqbotEventService } from '@/qqbot/event/qqbot-event.service'; +import { QqbotEventService } from '@/modules/qqbot/core/event/qqbot-event.service'; describe('QqbotEventService', () => { it('marks account offline with reason when NapCat reports kicked offline notice', async () => { diff --git a/test/qqbot/napcat/qqbot-napcat-captcha-log.spec.ts b/test/qqbot/napcat/qqbot-napcat-captcha-log.spec.ts index e6f3815..c66f536 100644 --- a/test/qqbot/napcat/qqbot-napcat-captcha-log.spec.ts +++ b/test/qqbot/napcat/qqbot-napcat-captcha-log.spec.ts @@ -1,5 +1,5 @@ import { ToolsService } from '@/common'; -import { QqbotNapcatContainerService } from '@/qqbot/napcat/qqbot-napcat-container.service'; +import { QqbotNapcatContainerService } from '@/modules/qqbot/napcat/qqbot-napcat-container.service'; describe('QqbotNapcatContainerService captcha logs', () => { it('extracts captcha url from recent runtime logs', async () => { diff --git a/test/qqbot/napcat/qqbot-napcat-container-runtime-status.spec.ts b/test/qqbot/napcat/qqbot-napcat-container-runtime-status.spec.ts index 31c8a75..1a67924 100644 --- a/test/qqbot/napcat/qqbot-napcat-container-runtime-status.spec.ts +++ b/test/qqbot/napcat/qqbot-napcat-container-runtime-status.spec.ts @@ -9,7 +9,7 @@ jest.mock('@/common', () => { }); import { ToolsService } from '@/common'; -import { QqbotNapcatContainerService } from '@/qqbot/napcat/qqbot-napcat-container.service'; +import { QqbotNapcatContainerService } from '@/modules/qqbot/napcat/qqbot-napcat-container.service'; describe('QqbotNapcatContainerService runtime status', () => { const createService = (repository: { diff --git a/test/qqbot/napcat/qqbot-napcat-container.service.spec.ts b/test/qqbot/napcat/qqbot-napcat-container.service.spec.ts index 8466e2a..36877cd 100644 --- a/test/qqbot/napcat/qqbot-napcat-container.service.spec.ts +++ b/test/qqbot/napcat/qqbot-napcat-container.service.spec.ts @@ -13,7 +13,7 @@ jest.mock('@/common', () => { import { ConfigService } from '@nestjs/config'; import { ToolsService } from '@/common'; -import { QqbotNapcatContainerService } from '@/qqbot/napcat/qqbot-napcat-container.service'; +import { QqbotNapcatContainerService } from '@/modules/qqbot/napcat/qqbot-napcat-container.service'; describe('QqbotNapcatContainerService', () => { it('removes previous account containers when binding a new primary container', async () => { diff --git a/test/qqbot/plugins/repeater/qqbot-repeater.plugin.spec.ts b/test/qqbot/plugins/repeater/qqbot-repeater.plugin.spec.ts index eb59414..6ccf776 100644 --- a/test/qqbot/plugins/repeater/qqbot-repeater.plugin.spec.ts +++ b/test/qqbot/plugins/repeater/qqbot-repeater.plugin.spec.ts @@ -1,6 +1,6 @@ import { ToolsService } from '@/common'; import { QqbotRepeaterPluginService } from '@/modules/qqbot/plugins/repeater/qqbot-repeater.plugin'; -import type { QqbotNormalizedMessage } from '@/qqbot/qqbot.types'; +import type { QqbotNormalizedMessage } from '@/modules/qqbot/core/contract/qqbot.types'; function createMessage(text: string): QqbotNormalizedMessage { return { diff --git a/test/qqbot/qqbot-cooldown.policy.spec.ts b/test/qqbot/qqbot-cooldown.policy.spec.ts index 318893c..6a0b629 100644 --- a/test/qqbot/qqbot-cooldown.policy.spec.ts +++ b/test/qqbot/qqbot-cooldown.policy.spec.ts @@ -2,7 +2,7 @@ import { formatKtDateTime, KtDateTime, KtDateTimeColumn } from '@/common'; import { getEffectiveCooldownMs, isWithinCooldown, -} from '@/qqbot/qqbot-cooldown.policy'; +} from '@/modules/qqbot/core/domain/qqbot-cooldown.policy'; class CooldownEntityFixture { @KtDateTimeColumn() diff --git a/test/qqbot/rule/qqbot-rule-cooldown.service.spec.ts b/test/qqbot/rule/qqbot-rule-cooldown.service.spec.ts index e6b97d4..b9bdc0c 100644 --- a/test/qqbot/rule/qqbot-rule-cooldown.service.spec.ts +++ b/test/qqbot/rule/qqbot-rule-cooldown.service.spec.ts @@ -1,5 +1,5 @@ import { ToolsService } from '@/common'; -import { QqbotRuleService } from '@/qqbot/rule/qqbot-rule.service'; +import { QqbotRuleService } from '@/modules/qqbot/core/rule/qqbot-rule.service'; function createService(config: Record) { return new (QqbotRuleService as any)( diff --git a/test/qqbot/send/qqbot-rate-limit.service.spec.ts b/test/qqbot/send/qqbot-rate-limit.service.spec.ts index 4d84e78..82db747 100644 --- a/test/qqbot/send/qqbot-rate-limit.service.spec.ts +++ b/test/qqbot/send/qqbot-rate-limit.service.spec.ts @@ -1,4 +1,4 @@ -import { QqbotRateLimitService } from '@/qqbot/send/qqbot-rate-limit.service'; +import { QqbotRateLimitService } from '@/modules/qqbot/core/send/qqbot-rate-limit.service'; function createService(config: Record) { return new QqbotRateLimitService({ diff --git a/test/qqbot/send/qqbot-send.service.spec.ts b/test/qqbot/send/qqbot-send.service.spec.ts index e80e5ae..36d7c26 100644 --- a/test/qqbot/send/qqbot-send.service.spec.ts +++ b/test/qqbot/send/qqbot-send.service.spec.ts @@ -1,5 +1,5 @@ import { ToolsService } from '@/common'; -import { QqbotSendService } from '@/qqbot/send/qqbot-send.service'; +import { QqbotSendService } from '@/modules/qqbot/core/send/qqbot-send.service'; describe('QqbotSendService', () => { it('stores summarized CQ image payloads while sending the original message', async () => {