♻️config.json移动至data内, 并将内置插件移动至buildin_plugins

This commit is contained in:
KimigaiiWuyi 2025-02-04 23:01:43 +08:00
parent 31d79e5b6c
commit c1302a91f0
25 changed files with 35 additions and 43 deletions

View File

@ -1,9 +1,8 @@
from typing import List
from gsuid_core.utils.plugins_update._plugins import update_from_git_in_tread
from gsuid_core.plugins.core_command.core_restart.restart import (
restart_genshinuid,
)
from ..core_restart.restart import restart_genshinuid
async def update_core() -> List[str]:

View File

@ -5,11 +5,9 @@ from gsuid_core.bot import Bot
from gsuid_core.gss import gss
from gsuid_core.models import Event
from gsuid_core.logger import logger
from gsuid_core.plugins.core_command.core_status.command_global_val import (
save_global_val,
)
from .restart import restart_message, restart_genshinuid
from ..core_status.command_global_val import save_global_val
sv_core_config = SV('Core管理', pm=0)

View File

@ -7,9 +7,8 @@ from pathlib import Path
from gsuid_core.server import check_start_tool
from gsuid_core.utils.plugins_config.gs_config import core_plugins_config
from gsuid_core.plugins.core_command.core_status.command_global_val import (
save_global_val,
)
from ..core_status.command_global_val import save_global_val
bot_start = Path(__file__).parents[3] / 'core.py'
restart_sh_path = Path().cwd() / 'gs_restart.sh'

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 162 KiB

After

Width:  |  Height:  |  Size: 162 KiB

View File

@ -2,7 +2,10 @@ import json
from pathlib import Path
from typing import Any, Dict, List, Union, Literal, overload
CONFIG_PATH = Path(__file__).parent / 'config.json'
from gsuid_core.data_store import get_res_path
CONFIG_PATH = get_res_path() / 'config.json'
OLD_CONFIG_PATH = Path(__file__).parent / 'config.json'
CONFIG_DEFAULT = {
'HOST': 'localhost',
@ -46,6 +49,9 @@ plugins_sample = {
class CoreConfig:
def __init__(self) -> None:
if OLD_CONFIG_PATH.exists():
OLD_CONFIG_PATH.rename(CONFIG_PATH)
if not CONFIG_PATH.exists():
with open(CONFIG_PATH, 'w', encoding='UTF-8') as file:
json.dump(CONFIG_DEFAULT, file, indent=4, ensure_ascii=False)

View File

@ -23,6 +23,9 @@ core_shutdown_def = set()
installed_dependencies: Dict[str, str] = {}
ignore_dep = ['python', 'fastapi', 'pydantic']
PLUGIN_PATH = Path(__file__).parent / 'plugins'
BUILDIN_PLUGIN_PATH = Path(__file__).parent / 'buildin_plugins'
def on_core_start(func: Callable):
if func not in core_start_def:
@ -58,17 +61,14 @@ class GsServer:
logger.info('[GsCore] 开始加载插件...')
get_installed_dependencies()
sys.path.append(str(Path(__file__).parents[1]))
plug_path = Path(__file__).parent / 'plugins'
# 优先加载core_command
plug_path_list = list(plug_path.iterdir())
core_command_path = plug_path / 'core_command'
if core_command_path in plug_path_list:
plug_path_list.remove(core_command_path)
plug_path_list.insert(0, core_command_path)
plug_path_list = list(BUILDIN_PLUGIN_PATH.iterdir()) + list(
PLUGIN_PATH.iterdir()
)
# 遍历插件文件夹内所有文件
for plugin in plug_path_list:
plugin_parent = plugin.parent.name
if plugin.stem.startswith('_'):
continue
# 如果发现文件夹,则视为插件包
@ -84,39 +84,24 @@ class GsServer:
# 如果文件夹内有__full_.py则视为插件包合集
sys.path.append(str(plugin_path.parents))
if plugins_path.exists():
self.load_dir_plugins(plugin)
self.load_dir_plugins(plugin, plugin_parent)
elif nest_path.exists() or src_path.exists():
path = nest_path.parent / plugin.name
pyproject = plugin / 'pyproject.toml'
if pyproject.exists:
check_pyproject(pyproject)
if path.exists():
self.load_dir_plugins(path, True)
self.load_dir_plugins(path, plugin_parent, True)
# 如果文件夹内有__init_.py则视为单个插件包
elif plugin_path.exists():
importlib.import_module(
f'plugins.{plugin.name}.__init__'
f'{plugin_parent}.{plugin.name}.__init__'
)
# 如果发现单文件,则视为单文件插件
elif plugin.suffix == '.py':
importlib.import_module(f'plugins.{plugin.name[:-3]}')
'''trick 注释掉'''
'''
if plugin.stem in ['StarRailUID', 'ArknightsUID']:
logger.info('[BAI] 检测是否存在失效仓库...')
origin_url = sync_get_plugin_url(plugin)
if (
origin_url
and 'baiqwerdvd' not in origin_url
and 'qwerdvd' in origin_url
):
logger.warning(f'[BAI] 检测到失效仓库: {origin_url}')
new_url = origin_url.replace('qwerdvd', 'baiqwerdvd')
logger.success(f'[BAI] 替换新仓库地址成功: {new_url}')
sync_change_plugin_url(plugin, new_url)
'''
importlib.import_module(
f'{plugin_parent}.{plugin.name[:-3]}'
)
'''导入成功'''
logger.success(f'插件{plugin.stem}导入成功!')
except Exception as e: # noqa
@ -126,13 +111,15 @@ class GsServer:
)
logger.warning(f'插件{plugin.name}加载失败')
def load_dir_plugins(self, plugin: Path, nest: bool = False):
def load_dir_plugins(
self, plugin: Path, plugin_parent: str, nest: bool = False
):
init_path = plugin / '__init__.py'
name = plugin.name
if init_path.exists():
if str(init_path.parents) not in sys.path:
sys.path.append(str(init_path.parents))
importlib.import_module(f'plugins.{name}.{name}.__init__')
importlib.import_module(f'{plugin_parent}.{name}.{name}.__init__')
for sub_plugin in plugin.iterdir():
if sub_plugin.is_dir():
@ -141,9 +128,9 @@ class GsServer:
if str(plugin_path.parents) not in sys.path:
sys.path.append(str(plugin_path.parents))
if nest:
_p = f'plugins.{name}.{name}.{sub_plugin.name}'
_p = f'{plugin_parent}.{name}.{name}.{sub_plugin.name}'
else:
_p = f'plugins.{name}.{sub_plugin.name}'
_p = f'{plugin_parent}.{name}.{sub_plugin.name}'
importlib.import_module(f'{_p}')
async def connect(self, websocket: WebSocket, bot_id: str) -> _Bot:

View File

@ -172,7 +172,10 @@ class SV:
file = stack[-2].filename
path = Path(file)
parts = path.parts
i = parts.index('plugins')
if 'plugins' in parts:
i = parts.index('plugins')
else:
i = parts.index('buildin_plugins')
self.self_plugin_name = plugins_name = parts[i + 1]
# 初始化