🎨 显示添加优先级

This commit is contained in:
HibiKier 2025-04-04 04:44:37 +08:00
parent 7f5f689900
commit e84fc89fed
18 changed files with 68 additions and 50 deletions

View File

@ -16,7 +16,7 @@ from zhenxun.models.sign_user import SignUser
from zhenxun.models.user_console import UserConsole from zhenxun.models.user_console import UserConsole
from zhenxun.services.log import logger from zhenxun.services.log import logger
from zhenxun.utils.decorator.shop import shop_register from zhenxun.utils.decorator.shop import shop_register
from zhenxun.utils.manager.priority_manager import HookPriorityManager from zhenxun.utils.manager.priority_manager import PriorityLifecycle
from zhenxun.utils.manager.resource_manager import ResourceManager from zhenxun.utils.manager.resource_manager import ResourceManager
from zhenxun.utils.platform import PlatformUtils from zhenxun.utils.platform import PlatformUtils
@ -71,7 +71,7 @@ from public.bag_users t1
""" """
@HookPriorityManager.on_startup() @PriorityLifecycle.on_startup()
async def _(): async def _():
await ResourceManager.init_resources() await ResourceManager.init_resources()
"""签到与用户的数据迁移""" """签到与用户的数据迁移"""

View File

@ -14,7 +14,7 @@ from zhenxun.services.log import logger
from zhenxun.utils._build_image import BuildImage from zhenxun.utils._build_image import BuildImage
from zhenxun.utils._image_template import ImageTemplate from zhenxun.utils._image_template import ImageTemplate
from zhenxun.utils.http_utils import AsyncHttpx from zhenxun.utils.http_utils import AsyncHttpx
from zhenxun.utils.manager.priority_manager import HookPriorityManager from zhenxun.utils.manager.priority_manager import PriorityLifecycle
from zhenxun.utils.platform import PlatformUtils from zhenxun.utils.platform import PlatformUtils
BASE_PATH = DATA_PATH / "welcome_message" BASE_PATH = DATA_PATH / "welcome_message"
@ -92,7 +92,7 @@ def migrate(path: Path):
json.dump(new_data, f, ensure_ascii=False, indent=4) json.dump(new_data, f, ensure_ascii=False, indent=4)
@HookPriorityManager.on_startup() @PriorityLifecycle.on_startup()
def _(): def _():
"""数据迁移 """数据迁移

View File

@ -11,7 +11,7 @@ from zhenxun.configs.config import Config
from zhenxun.configs.path_config import DATA_PATH from zhenxun.configs.path_config import DATA_PATH
from zhenxun.configs.utils import RegisterConfig from zhenxun.configs.utils import RegisterConfig
from zhenxun.services.log import logger from zhenxun.services.log import logger
from zhenxun.utils.manager.priority_manager import HookPriorityManager from zhenxun.utils.manager.priority_manager import PriorityLifecycle
_yaml = YAML(pure=True) _yaml = YAML(pure=True)
_yaml.allow_unicode = True _yaml.allow_unicode = True
@ -103,7 +103,7 @@ def _generate_simple_config(exists_module: list[str]):
temp_file.unlink() temp_file.unlink()
@HookPriorityManager.on_startup(0) @PriorityLifecycle.on_startup(priority=0)
def _(): def _():
""" """
初始化插件数据配置 初始化插件数据配置

View File

@ -20,7 +20,7 @@ from zhenxun.utils.enum import (
PluginLimitType, PluginLimitType,
PluginType, PluginType,
) )
from zhenxun.utils.manager.priority_manager import HookPriorityManager from zhenxun.utils.manager.priority_manager import PriorityLifecycle
from .manager import manager from .manager import manager
@ -96,7 +96,7 @@ async def _handle_setting(
) )
@HookPriorityManager.on_startup() @PriorityLifecycle.on_startup()
async def _(): async def _():
""" """
初始化插件数据配置 初始化插件数据配置

View File

@ -10,7 +10,7 @@ from zhenxun.models.group_console import GroupConsole
from zhenxun.models.task_info import TaskInfo from zhenxun.models.task_info import TaskInfo
from zhenxun.services.log import logger from zhenxun.services.log import logger
from zhenxun.utils.common_utils import CommonUtils from zhenxun.utils.common_utils import CommonUtils
from zhenxun.utils.manager.priority_manager import HookPriorityManager from zhenxun.utils.manager.priority_manager import PriorityLifecycle
driver: Driver = nonebot.get_driver() driver: Driver = nonebot.get_driver()
@ -133,7 +133,7 @@ async def create_schedule(task: Task):
logger.error(f"动态创建定时任务 {task.name}({task.module}) 失败", e=e) logger.error(f"动态创建定时任务 {task.name}({task.module}) 失败", e=e)
@HookPriorityManager.on_startup() @PriorityLifecycle.on_startup()
async def _(): async def _():
""" """
初始化插件数据配置 初始化插件数据配置

View File

@ -10,12 +10,12 @@ from zhenxun.configs.path_config import TEXT_PATH
from zhenxun.models.group_console import GroupConsole from zhenxun.models.group_console import GroupConsole
from zhenxun.services.log import logger from zhenxun.services.log import logger
from zhenxun.utils.http_utils import AsyncHttpx from zhenxun.utils.http_utils import AsyncHttpx
from zhenxun.utils.manager.priority_manager import HookPriorityManager from zhenxun.utils.manager.priority_manager import PriorityLifecycle
driver: Driver = nonebot.get_driver() driver: Driver = nonebot.get_driver()
@HookPriorityManager.on_startup() @PriorityLifecycle.on_startup()
async def update_city(): async def update_city():
""" """
部分插件需要中国省份城市 部分插件需要中国省份城市
@ -62,7 +62,7 @@ async def _():
await update_city() await update_city()
@HookPriorityManager.on_startup() @PriorityLifecycle.on_startup()
async def _(): async def _():
"""开启/禁用插件格式修改""" """开启/禁用插件格式修改"""
_, is_create = await GroupConsole.get_or_create(group_id=133133133) _, is_create = await GroupConsole.get_or_create(group_id=133133133)

View File

@ -16,7 +16,7 @@ from zhenxun.models.sign_log import SignLog
from zhenxun.models.sign_user import SignUser from zhenxun.models.sign_user import SignUser
from zhenxun.utils.http_utils import AsyncHttpx from zhenxun.utils.http_utils import AsyncHttpx
from zhenxun.utils.image_utils import BuildImage from zhenxun.utils.image_utils import BuildImage
from zhenxun.utils.manager.priority_manager import HookPriorityManager from zhenxun.utils.manager.priority_manager import PriorityLifecycle
from zhenxun.utils.platform import PlatformUtils from zhenxun.utils.platform import PlatformUtils
from .config import ( from .config import (
@ -55,7 +55,7 @@ LG_MESSAGE = [
] ]
@HookPriorityManager.on_startup() @PriorityLifecycle.on_startup()
async def init_image(): async def init_image():
SIGN_RESOURCE_PATH.mkdir(parents=True, exist_ok=True) SIGN_RESOURCE_PATH.mkdir(parents=True, exist_ok=True)
SIGN_TODAY_CARD_PATH.mkdir(exist_ok=True, parents=True) SIGN_TODAY_CARD_PATH.mkdir(exist_ok=True, parents=True)

View File

@ -10,7 +10,7 @@ from zhenxun.configs.config import Config as gConfig
from zhenxun.configs.utils import PluginExtraData, RegisterConfig from zhenxun.configs.utils import PluginExtraData, RegisterConfig
from zhenxun.services.log import logger, logger_ from zhenxun.services.log import logger, logger_
from zhenxun.utils.enum import PluginType from zhenxun.utils.enum import PluginType
from zhenxun.utils.manager.priority_manager import HookPriorityManager from zhenxun.utils.manager.priority_manager import PriorityLifecycle
from .api.configure import router as configure_router from .api.configure import router as configure_router
from .api.logs import router as ws_log_routes from .api.logs import router as ws_log_routes
@ -94,7 +94,7 @@ WsApiRouter.include_router(status_routes)
WsApiRouter.include_router(chat_routes) WsApiRouter.include_router(chat_routes)
@HookPriorityManager.on_startup(0) @PriorityLifecycle.on_startup(priority=0)
async def _(): async def _():
try: try:

View File

@ -33,7 +33,7 @@ default_menus = [
] ]
class MenuManage: class MenuManager:
def __init__(self) -> None: def __init__(self) -> None:
self.file = DATA_PATH / "web_ui" / "menu.json" self.file = DATA_PATH / "web_ui" / "menu.json"
self.menu = [] self.menu = []
@ -50,15 +50,7 @@ class MenuManage:
) )
) )
else: else:
temp_menu.append( temp_menu.append(self.__get_menu_model(module))
default_menus[
next(
i
for i, m in enumerate(default_menus)
if m.module == module
)
]
)
self.menu = temp_menu self.menu = temp_menu
except Exception as e: except Exception as e:
logger.warning("菜单文件损坏,已重新生成...", "WebUi", e=e) logger.warning("菜单文件损坏,已重新生成...", "WebUi", e=e)
@ -66,6 +58,11 @@ class MenuManage:
self.menu = default_menus self.menu = default_menus
self.save() self.save()
def __get_menu_model(self, module: str):
return default_menus[
next(i for i, m in enumerate(default_menus) if m.module == module)
]
def get_menus(self): def get_menus(self):
return MenuData(menus=self.menu) return MenuData(menus=self.menu)
@ -76,4 +73,4 @@ class MenuManage:
json.dump(temp, f, ensure_ascii=False, indent=4) json.dump(temp, f, ensure_ascii=False, indent=4)
menu_manage = MenuManage() menu_manage = MenuManager()

View File

@ -13,7 +13,7 @@ from zhenxun.models.bot_connect_log import BotConnectLog
from zhenxun.models.chat_history import ChatHistory from zhenxun.models.chat_history import ChatHistory
from zhenxun.models.statistics import Statistics from zhenxun.models.statistics import Statistics
from zhenxun.services.log import logger from zhenxun.services.log import logger
from zhenxun.utils.manager.priority_manager import HookPriorityManager from zhenxun.utils.manager.priority_manager import PriorityLifecycle
from zhenxun.utils.platform import PlatformUtils from zhenxun.utils.platform import PlatformUtils
from ....base_model import BaseResultModel, QueryModel from ....base_model import BaseResultModel, QueryModel
@ -32,7 +32,7 @@ driver: Driver = nonebot.get_driver()
CONNECT_TIME = 0 CONNECT_TIME = 0
@HookPriorityManager.on_startup() @PriorityLifecycle.on_startup()
async def _(): async def _():
global CONNECT_TIME global CONNECT_TIME
CONNECT_TIME = int(time.time()) CONNECT_TIME = int(time.time())

View File

@ -8,7 +8,7 @@ from zhenxun.configs.config import BotConfig
from zhenxun.models.plugin_info import PluginInfo from zhenxun.models.plugin_info import PluginInfo
from zhenxun.models.task_info import TaskInfo from zhenxun.models.task_info import TaskInfo
from zhenxun.services.log import logger from zhenxun.services.log import logger
from zhenxun.utils.manager.priority_manager import HookPriorityManager from zhenxun.utils.manager.priority_manager import PriorityLifecycle
from ....base_model import BaseResultModel, QueryModel, Result from ....base_model import BaseResultModel, QueryModel, Result
from ....utils import authentication from ....utils import authentication
@ -22,7 +22,7 @@ router = APIRouter(prefix="/database")
driver: Driver = nonebot.get_driver() driver: Driver = nonebot.get_driver()
@HookPriorityManager.on_startup() @PriorityLifecycle.on_startup()
async def _(): async def _():
for plugin in nonebot.get_loaded_plugins(): for plugin in nonebot.get_loaded_plugins():
module = plugin.name module = plugin.name

View File

@ -1,5 +1,11 @@
import sys
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
import nonebot import nonebot
if sys.version_info >= (3, 11):
from enum import StrEnum
else:
from strenum import StrEnum from strenum import StrEnum
from zhenxun.configs.path_config import DATA_PATH, TEMP_PATH from zhenxun.configs.path_config import DATA_PATH, TEMP_PATH

View File

@ -6,7 +6,7 @@ from tortoise.models import Model as Model_
from zhenxun.configs.config import BotConfig from zhenxun.configs.config import BotConfig
from zhenxun.utils.exception import HookPriorityException from zhenxun.utils.exception import HookPriorityException
from zhenxun.utils.manager.priority_manager import HookPriorityManager from zhenxun.utils.manager.priority_manager import PriorityLifecycle
from .log import logger from .log import logger
@ -48,7 +48,7 @@ class DbConnectError(Exception):
pass pass
@HookPriorityManager.on_startup(1) @PriorityLifecycle.on_startup(priority=1)
async def init(): async def init():
if not BotConfig.db_url: if not BotConfig.db_url:
# raise DbUrlIsNode("数据库配置为空,请在.env.dev中配置DB_URL...") # raise DbUrlIsNode("数据库配置为空,请在.env.dev中配置DB_URL...")

View File

@ -6,7 +6,7 @@ from nonebot.utils import is_coroutine_callable
from pydantic import BaseModel from pydantic import BaseModel
from zhenxun.services.log import logger from zhenxun.services.log import logger
from zhenxun.utils.manager.priority_manager import HookPriorityManager from zhenxun.utils.manager.priority_manager import PriorityLifecycle
driver = nonebot.get_driver() driver = nonebot.get_driver()
@ -101,6 +101,6 @@ class PluginInitManager:
logger.error(f"执行: {module_path}:remove 失败", e=e) logger.error(f"执行: {module_path}:remove 失败", e=e)
@HookPriorityManager.on_startup() @PriorityLifecycle.on_startup()
async def _(): async def _():
await PluginInitManager.install_all() await PluginInitManager.install_all()

View File

@ -1,12 +1,17 @@
from io import BytesIO from io import BytesIO
from pathlib import Path from pathlib import Path
import random import random
import sys
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
from strenum import StrEnum
from ._build_image import BuildImage from ._build_image import BuildImage
if sys.version_info >= (3, 11):
from enum import StrEnum
else:
from strenum import StrEnum
class MatType(StrEnum): class MatType(StrEnum):
LINE = "LINE" LINE = "LINE"

View File

@ -1,7 +1,12 @@
import sys
if sys.version_info >= (3, 11):
from enum import StrEnum
else:
from strenum import StrEnum from strenum import StrEnum
class HookPriorityType(StrEnum): class PriorityLifecycle(StrEnum):
STARTUP = "STARTUP" STARTUP = "STARTUP"
"""启动""" """启动"""
SHUTDOWN = "SHUTDOWN" SHUTDOWN = "SHUTDOWN"

View File

@ -1,13 +1,18 @@
import contextlib import contextlib
import sys
from typing import Protocol from typing import Protocol
from aiocache import cached from aiocache import cached
from nonebot.compat import model_dump from nonebot.compat import model_dump
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
from strenum import StrEnum
from zhenxun.utils.http_utils import AsyncHttpx from zhenxun.utils.http_utils import AsyncHttpx
if sys.version_info >= (3, 11):
from enum import StrEnum
else:
from strenum import StrEnum
from .const import ( from .const import (
CACHED_API_TTL, CACHED_API_TTL,
GIT_API_COMMIT_FORMAT, GIT_API_COMMIT_FORMAT,

View File

@ -5,17 +5,17 @@ import nonebot
from nonebot.utils import is_coroutine_callable from nonebot.utils import is_coroutine_callable
from zhenxun.services.log import logger from zhenxun.services.log import logger
from zhenxun.utils.enum import HookPriorityType from zhenxun.utils.enum import PriorityLifecycle
from zhenxun.utils.exception import HookPriorityException from zhenxun.utils.exception import HookPriorityException
driver = nonebot.get_driver() driver = nonebot.get_driver()
class HookPriorityManager: class PriorityLifecycle:
_data: ClassVar[dict[HookPriorityType, dict[int, list[Callable]]]] = {} _data: ClassVar[dict[PriorityLifecycle, dict[int, list[Callable]]]] = {}
@classmethod @classmethod
def add(cls, hook_type: HookPriorityType, func: Callable, priority: int = 5): def add(cls, hook_type: PriorityLifecycle, func: Callable, priority: int = 5):
if hook_type not in cls._data: if hook_type not in cls._data:
cls._data[hook_type] = {} cls._data[hook_type] = {}
if priority not in cls._data[hook_type]: if priority not in cls._data[hook_type]:
@ -23,17 +23,17 @@ class HookPriorityManager:
cls._data[hook_type][priority].append(func) cls._data[hook_type][priority].append(func)
@classmethod @classmethod
def on_startup(cls, priority: int = 5): def on_startup(cls, *, priority: int = 5):
def wrapper(func): def wrapper(func):
cls.add(HookPriorityType.STARTUP, func, priority) cls.add(PriorityLifecycle.STARTUP, func, priority)
return func return func
return wrapper return wrapper
@classmethod @classmethod
def on_shutdown(cls, priority: int = 5): def on_shutdown(cls, *, priority: int = 5):
def wrapper(func): def wrapper(func):
cls.add(HookPriorityType.SHUTDOWN, func, priority) cls.add(PriorityLifecycle.SHUTDOWN, func, priority)
return func return func
return wrapper return wrapper
@ -41,7 +41,7 @@ class HookPriorityManager:
@driver.on_startup @driver.on_startup
async def _(): async def _():
priority_data = HookPriorityManager._data.get(HookPriorityType.STARTUP) priority_data = PriorityLifecycle._data.get(PriorityLifecycle.STARTUP)
if not priority_data: if not priority_data:
return return
priority_list = sorted(priority_data.keys()) priority_list = sorted(priority_data.keys())