mirror of
https://github.com/Genshin-bots/gsuid_core.git
synced 2025-05-12 06:55:49 +08:00
✨ 令prefix
生效 (#76)
This commit is contained in:
parent
8569062749
commit
980fe9d677
@ -36,7 +36,8 @@ plugins_sample = {
|
|||||||
'area': 'SV',
|
'area': 'SV',
|
||||||
'black_list': [],
|
'black_list': [],
|
||||||
'white_list': [],
|
'white_list': [],
|
||||||
'prefix': '',
|
'prefix': [],
|
||||||
|
'allow_empty_prefix': True,
|
||||||
'sv': {},
|
'sv': {},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ auto_update_dep: bool = core_plugins_config.get_config('AutoUpdateDep').data
|
|||||||
|
|
||||||
core_start_def = set()
|
core_start_def = set()
|
||||||
core_shutdown_def = set()
|
core_shutdown_def = set()
|
||||||
installed_dependencies = []
|
installed_dependencies: Dict[str, str] = {}
|
||||||
ignore_dep = ['python', 'fastapi', 'pydantic']
|
ignore_dep = ['python', 'fastapi', 'pydantic']
|
||||||
|
|
||||||
|
|
||||||
@ -214,8 +214,16 @@ def check_pyproject(pyproject: Path):
|
|||||||
|
|
||||||
def install_dependencies(dependencies: Dict, need_update: bool = False):
|
def install_dependencies(dependencies: Dict, need_update: bool = False):
|
||||||
global installed_dependencies
|
global installed_dependencies
|
||||||
start_tool = check_start_tool(True)
|
to_update = find_dependencies_to_update(
|
||||||
|
installed_dependencies, dependencies
|
||||||
|
)
|
||||||
|
if not to_update:
|
||||||
|
logger.debug('[安装/更新依赖] 无需更新依赖!')
|
||||||
|
return
|
||||||
|
|
||||||
|
logger.debug(f'[安装/更新依赖] 需更新依赖列表如下:\n{to_update}')
|
||||||
|
|
||||||
|
start_tool = check_start_tool(True)
|
||||||
logger.debug(f'[安装/更新依赖] 当前启动工具:{start_tool}')
|
logger.debug(f'[安装/更新依赖] 当前启动工具:{start_tool}')
|
||||||
|
|
||||||
if start_tool.startswith('pdm') and False:
|
if start_tool.startswith('pdm') and False:
|
||||||
@ -247,8 +255,8 @@ def install_dependencies(dependencies: Dict, need_update: bool = False):
|
|||||||
# 解析依赖项
|
# 解析依赖项
|
||||||
for (
|
for (
|
||||||
dependency,
|
dependency,
|
||||||
version,
|
_version,
|
||||||
) in dependencies.items():
|
) in to_update.items():
|
||||||
if need_update:
|
if need_update:
|
||||||
condi = dependency not in ignore_dep
|
condi = dependency not in ignore_dep
|
||||||
else:
|
else:
|
||||||
@ -262,6 +270,7 @@ def install_dependencies(dependencies: Dict, need_update: bool = False):
|
|||||||
)
|
)
|
||||||
|
|
||||||
if condi:
|
if condi:
|
||||||
|
version: str = _version.get('required_version', '')
|
||||||
logger.info(f'[安装/更新依赖] {dependency} 中...')
|
logger.info(f'[安装/更新依赖] {dependency} 中...')
|
||||||
CMD = f'{start_tool} install "{dependency}{version}" {extra}'
|
CMD = f'{start_tool} install "{dependency}{version}" {extra}'
|
||||||
|
|
||||||
@ -297,7 +306,10 @@ def execute_cmd(CMD: str):
|
|||||||
def get_installed_dependencies():
|
def get_installed_dependencies():
|
||||||
global installed_dependencies
|
global installed_dependencies
|
||||||
installed_packages = pkg_resources.working_set
|
installed_packages = pkg_resources.working_set
|
||||||
installed_dependencies = [package.key for package in installed_packages]
|
installed_dependencies = {
|
||||||
|
package.key: package.version for package in installed_packages
|
||||||
|
}
|
||||||
|
return installed_dependencies
|
||||||
|
|
||||||
|
|
||||||
def parse_dependency(dependency: List):
|
def parse_dependency(dependency: List):
|
||||||
@ -319,3 +331,46 @@ def parse_dependency_string(dependency_string: str):
|
|||||||
dependencies[dependency] = f"{operator}{version}"
|
dependencies[dependency] = f"{operator}{version}"
|
||||||
|
|
||||||
return dependencies
|
return dependencies
|
||||||
|
|
||||||
|
|
||||||
|
def extract_numeric_version(version):
|
||||||
|
# 提取版本中的数字和小数点部分
|
||||||
|
numeric_version = re.findall(r'\d+', version)
|
||||||
|
return tuple(map(int, numeric_version)) if numeric_version else (0,)
|
||||||
|
|
||||||
|
|
||||||
|
def compare_versions(installed_version, required_version):
|
||||||
|
installed_tuple = extract_numeric_version(installed_version)
|
||||||
|
required_tuple = extract_numeric_version(
|
||||||
|
re.sub(r'[<>=]', '', required_version)
|
||||||
|
)
|
||||||
|
|
||||||
|
# 基于符号进行比较
|
||||||
|
if "<=" in required_version:
|
||||||
|
return installed_tuple <= required_tuple
|
||||||
|
elif ">=" in required_version:
|
||||||
|
return installed_tuple >= required_tuple
|
||||||
|
elif "==" in required_version:
|
||||||
|
return installed_tuple == required_tuple
|
||||||
|
elif "<" in required_version:
|
||||||
|
return installed_tuple < required_tuple
|
||||||
|
elif ">" in required_version:
|
||||||
|
return installed_tuple > required_tuple
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def find_dependencies_to_update(
|
||||||
|
installed_deps, required_deps
|
||||||
|
) -> Dict[str, Dict[str, str]]:
|
||||||
|
to_update = {}
|
||||||
|
|
||||||
|
for dep, installed_version in installed_deps.items():
|
||||||
|
if dep in required_deps:
|
||||||
|
required_version = required_deps[dep]
|
||||||
|
if not compare_versions(installed_version, required_version):
|
||||||
|
to_update[dep] = {
|
||||||
|
"installed_version": installed_version,
|
||||||
|
"required_version": required_version,
|
||||||
|
}
|
||||||
|
|
||||||
|
return to_update
|
||||||
|
@ -62,7 +62,7 @@ class Plugins:
|
|||||||
if name is None:
|
if name is None:
|
||||||
raise ValueError('Plugins.name is None!')
|
raise ValueError('Plugins.name is None!')
|
||||||
|
|
||||||
if name in SL.plugins:
|
if name in SL.plugins and not kwargs.get('force'):
|
||||||
return SL.plugins[name]
|
return SL.plugins[name]
|
||||||
else:
|
else:
|
||||||
_plugin = super().__new__(cls)
|
_plugin = super().__new__(cls)
|
||||||
@ -82,9 +82,21 @@ class Plugins:
|
|||||||
black_list: List = [],
|
black_list: List = [],
|
||||||
white_list: List = [],
|
white_list: List = [],
|
||||||
sv: Dict = {},
|
sv: Dict = {},
|
||||||
prefix: str = '',
|
prefix: Union[List[str], str] = [],
|
||||||
|
allow_empty_prefix: Optional[bool] = None,
|
||||||
|
force: bool = False,
|
||||||
):
|
):
|
||||||
if not self.is_initialized:
|
if not self.is_initialized:
|
||||||
|
if isinstance(prefix, str):
|
||||||
|
prefix = [prefix]
|
||||||
|
if allow_empty_prefix is None:
|
||||||
|
if '' in prefix:
|
||||||
|
prefix.remove('')
|
||||||
|
if prefix:
|
||||||
|
allow_empty_prefix = False
|
||||||
|
else:
|
||||||
|
allow_empty_prefix = True
|
||||||
|
|
||||||
self.name = name
|
self.name = name
|
||||||
self.priority = priority
|
self.priority = priority
|
||||||
self.enabled = enabled
|
self.enabled = enabled
|
||||||
@ -94,6 +106,7 @@ class Plugins:
|
|||||||
self.white_list = white_list
|
self.white_list = white_list
|
||||||
self.sv = {}
|
self.sv = {}
|
||||||
self.prefix = prefix
|
self.prefix = prefix
|
||||||
|
self.allow_empty_prefix = allow_empty_prefix
|
||||||
self.is_initialized = True
|
self.is_initialized = True
|
||||||
|
|
||||||
def set(self, **kwargs):
|
def set(self, **kwargs):
|
||||||
@ -169,8 +182,34 @@ class SV:
|
|||||||
core_config.set_config('plugins', config_plugins)
|
core_config.set_config('plugins', config_plugins)
|
||||||
else:
|
else:
|
||||||
if 'prefix' not in config_plugins[plugins_name]:
|
if 'prefix' not in config_plugins[plugins_name]:
|
||||||
config_plugins[plugins_name]['prefix'] = ''
|
if plugins_name in SL.plugins:
|
||||||
plugins = Plugins(**config_plugins[plugins_name])
|
config_plugins[plugins_name]['prefix'] = SL.plugins[
|
||||||
|
plugins_name
|
||||||
|
].prefix
|
||||||
|
else:
|
||||||
|
config_plugins[plugins_name]['prefix'] = []
|
||||||
|
elif isinstance(config_plugins[plugins_name]['prefix'], str):
|
||||||
|
if config_plugins[plugins_name]['prefix'] != '':
|
||||||
|
config_plugins[plugins_name]['prefix'] = [
|
||||||
|
config_plugins[plugins_name]['prefix']
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
config_plugins[plugins_name]['prefix'] = []
|
||||||
|
|
||||||
|
if 'allow_empty_prefix' not in config_plugins[plugins_name]:
|
||||||
|
if plugins_name in SL.plugins:
|
||||||
|
config_plugins[plugins_name]['allow_empty_prefix'] = (
|
||||||
|
SL.plugins[plugins_name].allow_empty_prefix
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
config_plugins[plugins_name][
|
||||||
|
'allow_empty_prefix'
|
||||||
|
] = None
|
||||||
|
|
||||||
|
plugins = Plugins(
|
||||||
|
**config_plugins[plugins_name],
|
||||||
|
force=True,
|
||||||
|
)
|
||||||
|
|
||||||
core_config.set_config('plugins', config_plugins)
|
core_config.set_config('plugins', config_plugins)
|
||||||
|
|
||||||
@ -270,12 +309,22 @@ class SV:
|
|||||||
else:
|
else:
|
||||||
keyword_list = keyword
|
keyword_list = keyword
|
||||||
|
|
||||||
for _k in keyword_list:
|
entry = []
|
||||||
if prefix:
|
_pp = deepcopy(self.plugins.prefix)
|
||||||
tr = f'{self.plugins.prefix}{_k}'
|
if "" in _pp:
|
||||||
else:
|
_pp.remove("")
|
||||||
tr = _k
|
|
||||||
|
|
||||||
|
if self.plugins.allow_empty_prefix:
|
||||||
|
_pp.append("")
|
||||||
|
|
||||||
|
for _k in keyword_list:
|
||||||
|
if prefix and _pp:
|
||||||
|
for _p in _pp:
|
||||||
|
entry.append(f'{_p}{_k}')
|
||||||
|
else:
|
||||||
|
entry.append(_k)
|
||||||
|
|
||||||
|
for tr in entry:
|
||||||
if tr not in self.TL:
|
if tr not in self.TL:
|
||||||
logger.trace(f'载入{type}触发器【{tr}】!')
|
logger.trace(f'载入{type}触发器【{tr}】!')
|
||||||
if type not in self.TL:
|
if type not in self.TL:
|
||||||
@ -369,8 +418,12 @@ class SV:
|
|||||||
return self._on('message', unique_id, block, to_me, prefix)
|
return self._on('message', unique_id, block, to_me, prefix)
|
||||||
|
|
||||||
|
|
||||||
def get_plugin_prefix(plugin_name: str) -> str:
|
def get_plugin_prefixs(plugin_name: str) -> List[str]:
|
||||||
plugin = SL.plugins.get(plugin_name)
|
plugin = SL.plugins.get(plugin_name)
|
||||||
if plugin is None:
|
if plugin is None:
|
||||||
raise ValueError(f'插件{plugin_name}不存在!')
|
raise ValueError(f'插件{plugin_name}不存在!')
|
||||||
return plugin.prefix
|
return plugin.prefix
|
||||||
|
|
||||||
|
|
||||||
|
def get_plugin_prefix(plugin_name: str) -> str:
|
||||||
|
return get_plugin_prefixs(plugin_name)[0]
|
||||||
|
@ -14,6 +14,7 @@ from gsuid_core.logger import logger
|
|||||||
from .download_file import download
|
from .download_file import download
|
||||||
|
|
||||||
global_tag, global_url = '', ''
|
global_tag, global_url = '', ''
|
||||||
|
NOW_SPEED_TEST = False
|
||||||
|
|
||||||
|
|
||||||
async def check_url(tag: str, url: str):
|
async def check_url(tag: str, url: str):
|
||||||
@ -62,8 +63,10 @@ async def find_fastest_url(urls: Dict[str, str]):
|
|||||||
async def check_speed():
|
async def check_speed():
|
||||||
global global_tag
|
global global_tag
|
||||||
global global_url
|
global global_url
|
||||||
|
global NOW_SPEED_TEST
|
||||||
|
|
||||||
if not global_tag or not global_url:
|
if (not global_tag or not global_url) and not NOW_SPEED_TEST:
|
||||||
|
NOW_SPEED_TEST = True
|
||||||
logger.info('[GsCore资源下载]测速中...')
|
logger.info('[GsCore资源下载]测速中...')
|
||||||
|
|
||||||
URL_LIB = {
|
URL_LIB = {
|
||||||
@ -80,7 +83,15 @@ async def check_speed():
|
|||||||
global_tag, global_url = TAG, BASE_URL
|
global_tag, global_url = TAG, BASE_URL
|
||||||
|
|
||||||
logger.info(f"最快资源站: {TAG} {BASE_URL}")
|
logger.info(f"最快资源站: {TAG} {BASE_URL}")
|
||||||
|
NOW_SPEED_TEST = False
|
||||||
return TAG, BASE_URL
|
return TAG, BASE_URL
|
||||||
|
|
||||||
|
if NOW_SPEED_TEST:
|
||||||
|
while True:
|
||||||
|
if not NOW_SPEED_TEST:
|
||||||
|
return global_tag, global_url
|
||||||
|
await asyncio.sleep(1)
|
||||||
|
|
||||||
return global_tag, global_url
|
return global_tag, global_url
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user