# -*- coding: utf-8 -*- """ Copyright (C) 2020-2024 LiteyukiStudio. All Rights Reserved @Time : 2024/7/24 上午12:02 @Author : snowykami @Email : snowykami@outlook.com @File : model.py @Software: PyCharm """ from enum import Enum from types import ModuleType from typing import Any, Optional from pydantic import BaseModel class PluginType(Enum): """ 插件类型枚举值 """ APPLICATION = "application" """应用端:例如NoneBot""" SERVICE = "service" """服务端:例如AI绘画后端""" IMPLEMENTATION = "implementation" """实现端:例如与聊天平台的协议实现""" MODULE = "module" """模块:导出对象给其他插件使用""" UNCLASSIFIED = "unclassified" """未分类:默认值""" class PluginMetadata(BaseModel): """ 轻雪插件元数据,由插件编写者提供,name为必填项 Attributes: ---------- name: str 插件名称 description: str 插件描述 usage: str 插件使用方法 type: str 插件类型 author: str 插件作者 homepage: str 插件主页 extra: dict[str, Any] 额外信息 """ name: str description: str = "" usage: str = "" type: str = "" author: str = "" homepage: str = PluginType.UNCLASSIFIED extra: dict[str, Any] = {} class Plugin(BaseModel): """ 存储插件信息 """ model_config = { 'arbitrary_types_allowed': True } name: str """插件名称 例如plugin_loader""" module: ModuleType """插件模块对象""" module_name: str """点分割模块路径 例如a.b.c""" metadata: Optional[PluginMetadata] = None def __hash__(self): return hash(self.module_name)