from __future__ import annotations import pydantic from ..core import app from . import stage from .resprule import resprule from .bansess import bansess from .cntfilter import cntfilter from .process import process from .longtext import longtext from .respback import respback from .wrapper import wrapper from .preproc import preproc stage_order = [ "GroupRespondRuleCheckStage", "BanSessionCheckStage", "PreContentFilterStage", "PreProcessor", "MessageProcessor", "PostContentFilterStage", "ResponseWrapper", "LongTextProcessStage", "SendResponseBackStage", ] class StageInstContainer(): """阶段实例容器 """ inst_name: str inst: stage.PipelineStage def __init__(self, inst_name: str, inst: stage.PipelineStage): self.inst_name = inst_name self.inst = inst class StageManager: ap: app.Application stage_containers: list[StageInstContainer] def __init__(self, ap: app.Application): self.ap = ap self.stage_containers = [] async def initialize(self): """初始化 """ for name, cls in stage._stage_classes.items(): self.stage_containers.append(StageInstContainer( inst_name=name, inst=cls(self.ap) )) for stage_containers in self.stage_containers: await stage_containers.inst.initialize() # 按照 stage_order 排序 self.stage_containers.sort(key=lambda x: stage_order.index(x.inst_name))