mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-07 00:16:57 +08:00
refactor: complete host module and event contracts
This commit is contained in:
+185
-1
@@ -1,7 +1,7 @@
|
||||
from pathlib import Path
|
||||
from typing import Iterable, Optional, Dict, Any, List, Set, Callable
|
||||
|
||||
from pydantic import BaseModel, Field, field_validator, model_validator
|
||||
from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
|
||||
|
||||
from app.schemas.common import JsonData
|
||||
from app.schemas.types import MediaType, NotificationChannel
|
||||
@@ -29,6 +29,190 @@ class BaseEventData(BaseModel):
|
||||
pass
|
||||
|
||||
|
||||
class ExtensibleEventData(BaseEventData):
|
||||
"""允许第三方插件附加字段的类型化事件载荷基类。"""
|
||||
|
||||
model_config = ConfigDict(extra="allow", arbitrary_types_allowed=True)
|
||||
|
||||
|
||||
class EmptyEventData(ExtensibleEventData):
|
||||
"""当前没有固定字段、但仍需进入 typed registry 的事件载荷。"""
|
||||
|
||||
|
||||
class PluginReloadEventData(ExtensibleEventData):
|
||||
"""插件重载广播事件载荷。"""
|
||||
|
||||
plugin_id: str = Field(description="重载的插件 ID")
|
||||
|
||||
|
||||
class PluginActionEventData(ExtensibleEventData):
|
||||
"""插件命令动作载荷;具体动作参数由目标插件扩展。"""
|
||||
|
||||
plugin_id: Optional[str] = Field(default=None, description="目标插件 ID")
|
||||
action: Optional[str] = Field(default=None, description="插件动作名称")
|
||||
channel: Optional[str] = Field(default=None, description="消息渠道")
|
||||
source: Optional[str] = Field(default=None, description="消息来源")
|
||||
user: Optional[Any] = Field(default=None, description="发起用户")
|
||||
|
||||
|
||||
class PluginTriggeredEventData(ExtensibleEventData):
|
||||
"""插件主动发布的跨插件事件载荷。"""
|
||||
|
||||
plugin_id: str = Field(description="发布事件的插件 ID")
|
||||
event_name: str = Field(description="插件定义的稳定事件名")
|
||||
data: Any = Field(default=None, description="插件定义的事件数据")
|
||||
|
||||
|
||||
class CommandExecuteEventData(ExtensibleEventData):
|
||||
"""斜杠命令执行事件载荷。"""
|
||||
|
||||
cmd: str = Field(description="包含参数的完整命令文本")
|
||||
user: Optional[Any] = Field(default=None, description="发起用户")
|
||||
channel: Optional[str] = Field(default=None, description="消息渠道")
|
||||
source: Optional[str] = Field(default=None, description="消息来源")
|
||||
processing_status: Optional[Any] = Field(default=None, description="交互处理状态")
|
||||
|
||||
|
||||
class SiteEventData(ExtensibleEventData):
|
||||
"""站点新增、更新、删除或数据刷新事件载荷。"""
|
||||
|
||||
site_id: Optional[int | str] = Field(default=None, description="站点 ID 或通配符")
|
||||
domain: Optional[str] = Field(default=None, description="站点域名")
|
||||
name: Optional[str] = Field(default=None, description="站点名称")
|
||||
site_url: Optional[str] = Field(default=None, description="站点地址")
|
||||
|
||||
|
||||
class HistoryDeletedEventData(ExtensibleEventData):
|
||||
"""历史记录删除事件的兼容载荷。"""
|
||||
|
||||
history_id: Optional[int] = Field(default=None, description="历史记录 ID")
|
||||
src: Optional[str] = Field(default=None, description="关联源路径")
|
||||
|
||||
|
||||
class DownloadFileDeletedEventData(ExtensibleEventData):
|
||||
"""下载源文件删除事件载荷。"""
|
||||
|
||||
src: Optional[str] = Field(default=None, description="已删除的下载源路径")
|
||||
hash: Optional[str] = Field(default=None, description="下载任务 hash")
|
||||
|
||||
|
||||
class DownloadDeletedEventData(ExtensibleEventData):
|
||||
"""下载任务删除事件载荷。"""
|
||||
|
||||
hash: str = Field(description="下载任务 hash")
|
||||
torrents: List[Dict[str, Any]] = Field(default_factory=list, description="删除前任务快照")
|
||||
|
||||
|
||||
class UserMessageEventData(ExtensibleEventData):
|
||||
"""未被宿主命令或交互消费的用户文本消息载荷。"""
|
||||
|
||||
text: str = Field(description="用户文本")
|
||||
userid: Optional[Any] = Field(default=None, description="用户 ID")
|
||||
channel: Optional[str] = Field(default=None, description="消息渠道")
|
||||
source: Optional[str] = Field(default=None, description="消息来源")
|
||||
chat_id: Optional[Any] = Field(default=None, description="会话 ID")
|
||||
reply_to_message_id: Optional[Any] = Field(default=None, description="回复消息 ID")
|
||||
|
||||
|
||||
class NoticeMessageEventData(ExtensibleEventData):
|
||||
"""宿主向消息模块发送的通知事件载荷。"""
|
||||
|
||||
type: Optional[Any] = Field(default=None, description="兼容消息类型")
|
||||
title: Optional[str] = Field(default=None, description="消息标题")
|
||||
text: Optional[str] = Field(default=None, description="消息正文")
|
||||
userid: Optional[Any] = Field(default=None, description="目标用户 ID")
|
||||
channel: Optional[Any] = Field(default=None, description="目标消息渠道")
|
||||
source: Optional[str] = Field(default=None, description="消息来源")
|
||||
|
||||
|
||||
class SubscribeCompleteEventData(ExtensibleEventData):
|
||||
"""订阅完成广播事件载荷。"""
|
||||
|
||||
subscribe_id: int = Field(description="已完成订阅 ID")
|
||||
subscribe_info: Dict[str, Any] = Field(default_factory=dict, description="订阅快照")
|
||||
mediainfo: Dict[str, Any] = Field(default_factory=dict, description="媒体信息快照")
|
||||
|
||||
|
||||
class SystemErrorEventData(ExtensibleEventData):
|
||||
"""事件、模块、插件或调度器错误的宿主诊断载荷。"""
|
||||
|
||||
type: str = Field(description="错误来源类别")
|
||||
error: str = Field(description="错误摘要")
|
||||
traceback: Optional[str] = Field(default=None, description="错误堆栈")
|
||||
|
||||
|
||||
class MetadataScrapeEventData(ExtensibleEventData):
|
||||
"""媒体文件元数据刮削事件载荷。"""
|
||||
|
||||
fileitem: FileItem = Field(description="待刮削目录或文件项")
|
||||
file_list: List[str] = Field(default_factory=list, description="待刮削文件清单")
|
||||
meta: Any = Field(default=None, description="文件名解析对象")
|
||||
mediainfo: Any = Field(default=None, description="媒体信息对象")
|
||||
overwrite: bool = Field(default=False, description="是否覆盖已有元数据")
|
||||
file_contexts: List[Any] = Field(default_factory=list, description="逐文件上下文")
|
||||
|
||||
|
||||
class MessageActionEventData(ExtensibleEventData):
|
||||
"""定向插件消息交互动作载荷。"""
|
||||
|
||||
plugin_id: Optional[str] = Field(default=None, description="目标插件 ID")
|
||||
text: Optional[str] = Field(default=None, description="兼容动作文本")
|
||||
input_text: Optional[str] = Field(default=None, description="用户输入文本")
|
||||
userid: Optional[Any] = Field(default=None, description="用户 ID")
|
||||
channel: Optional[str] = Field(default=None, description="消息渠道")
|
||||
source: Optional[str] = Field(default=None, description="消息来源")
|
||||
input_session_id: Optional[str] = Field(default=None, description="输入会话 ID")
|
||||
payload: Any = Field(default=None, description="插件自定义交互数据")
|
||||
|
||||
|
||||
class WorkflowExecuteEventData(ExtensibleEventData):
|
||||
"""请求执行指定工作流的事件载荷。"""
|
||||
|
||||
workflow_id: int = Field(description="工作流 ID")
|
||||
|
||||
|
||||
class NameRecognizeEventData(ExtensibleEventData):
|
||||
"""影视名称辅助识别的输入和插件回写字段。"""
|
||||
|
||||
title: str = Field(description="待识别标题")
|
||||
name: Optional[str] = Field(default=None, description="插件识别后的名称")
|
||||
year: Optional[Any] = Field(default=None, description="年份")
|
||||
season: Optional[Any] = Field(default=None, description="季号")
|
||||
episode: Optional[Any] = Field(default=None, description="集号")
|
||||
|
||||
|
||||
class MusicNameRecognizeEventData(ExtensibleEventData):
|
||||
"""音乐名称辅助识别的输入和插件回写字段。"""
|
||||
|
||||
title: str = Field(description="待识别曲名")
|
||||
artist: Optional[str] = Field(default=None, description="艺术家")
|
||||
album: Optional[str] = Field(default=None, description="专辑")
|
||||
year: Optional[Any] = Field(default=None, description="年份")
|
||||
duration: Optional[Any] = Field(default=None, description="时长")
|
||||
name: Optional[str] = Field(default=None, description="插件识别后的曲名")
|
||||
|
||||
|
||||
class MediaRecognizeEventData(ExtensibleEventData):
|
||||
"""影视媒体身份补充识别的输入和插件回写字段。"""
|
||||
|
||||
title: Optional[str] = Field(default=None, description="待识别标题")
|
||||
year: Optional[Any] = Field(default=None, description="年份")
|
||||
season: Optional[Any] = Field(default=None, description="季号")
|
||||
type: Optional[Any] = Field(default=None, description="媒体类型")
|
||||
media_source: Optional[Any] = Field(default=None, description="媒体数据源")
|
||||
media_id: Optional[Any] = Field(default=None, description="数据源原生 ID")
|
||||
mediainfo: Optional[Dict[str, Any]] = Field(default=None, description="插件回写媒体信息")
|
||||
|
||||
|
||||
class MusicMediaRecognizeEventData(MediaRecognizeEventData):
|
||||
"""音乐媒体身份补充识别的输入和插件回写字段。"""
|
||||
|
||||
artists: List[str] = Field(default_factory=list, description="艺术家列表")
|
||||
album: Optional[str] = Field(default=None, description="专辑")
|
||||
isrc: Optional[str] = Field(default=None, description="ISRC")
|
||||
music_type: Optional[str] = Field(default=None, description="音乐实体类型")
|
||||
|
||||
|
||||
class ConfigChangeEventData(BaseEventData):
|
||||
"""
|
||||
ConfigChange 事件的数据模型
|
||||
|
||||
Reference in New Issue
Block a user