ForcePilot/backend/package/yuxi/channel/application/pipeline/builder.py
Kris 9a8a27bf36 feat(channel): 新增渠道网关模块完整实现
本次提交新增了完整的多渠道消息网关系统,包括:
1. 支持飞书、钉钉、Web、Hook 四种渠道的适配器与配置
2. 领域模型层:消息、会话、绑定、出箱等核心实体
3. 应用服务层:管道、中间件、DTO 与业务逻辑
4. 基础设施层:持久化、过滤器、队列等端口实现
5. 接口层:REST API、SSE、WebSocket 通信端点
6. 前端页面与路由配置,添加渠道管理菜单
7. 新增相关依赖包与 docker-compose 部署配置
2026-05-30 21:53:09 +08:00

63 lines
2.7 KiB
Python

from __future__ import annotations
from yuxi.channel.application.pipeline.middlewares.access_policy_middleware import AccessPolicyMiddleware
from yuxi.channel.application.pipeline.middlewares.auth_middleware import AuthMiddleware
from yuxi.channel.application.pipeline.middlewares.dedup_middleware import DedupMiddleware
from yuxi.channel.application.pipeline.middlewares.enqueue_mq_middleware import EnqueueMQMiddleware
from yuxi.channel.application.pipeline.middlewares.keyword_filter_middleware import KeywordFilterMiddleware
from yuxi.channel.application.pipeline.middlewares.mention_gate_middleware import MentionGateMiddleware
from yuxi.channel.application.pipeline.middlewares.rate_limit_middleware import RateLimitMiddleware
from yuxi.channel.application.pipeline.middlewares.validation_middleware import ValidationMiddleware
from yuxi.channel.application.service.auth_service import AuthService
from yuxi.channel.domain.port.keyword_matcher_port import KeywordMatcherPort
from yuxi.channel.domain.port.metrics_port import MetricsPort
from yuxi.channel.domain.port.queue_port import QueuePort
from yuxi.channel.domain.port.rate_limit_port import RateLimitPort
from yuxi.channel.domain.port.signature_verify_port import SignatureVerifyPort
from yuxi.channel.domain.port.cache_port import CachePort
from yuxi.channel.domain.service.pipeline import Pipeline
from yuxi.channel.domain.service.pipeline_builder import PipelineBuilder
def build_inbound_pipeline(
auth_service: AuthService,
cache_port: CachePort,
rate_limit_port: RateLimitPort,
queue_port: QueuePort,
*,
keyword_matcher: KeywordMatcherPort | None = None,
signature_verifier: SignatureVerifyPort | None = None,
metrics: MetricsPort | None = None,
channel_config: dict | None = None,
bot_id: str | None = None,
) -> Pipeline:
config = channel_config or {}
mention_gate = MentionGateMiddleware()
if bot_id:
mention_gate.set_bot_id(bot_id)
if keyword_matcher is None:
from yuxi.channel.infrastructure.matching.aho_corasick_matcher import AhoCorasickMatcher
keyword_matcher = AhoCorasickMatcher(set(config.get("keyword_blocklist") or []))
return (
PipelineBuilder()
.add(AuthMiddleware(auth_service))
.add(
ValidationMiddleware(
signature_verifier=signature_verifier,
allow_from=config.get("allow_from", {}),
)
)
.add(KeywordFilterMiddleware(keyword_matcher))
.add(DedupMiddleware(cache_port))
.add(RateLimitMiddleware(rate_limit_port))
.add(AccessPolicyMiddleware(policies=config.get("access_policies", {})))
.add(mention_gate)
.add(EnqueueMQMiddleware(queue_port))
.metrics(metrics)
.build()
)