mirror of
https://github.com/Genshin-bots/gsuid_core.git
synced 2025-05-12 06:55:49 +08:00
✨ 提供插件配置插槽
This commit is contained in:
parent
a139a180d3
commit
256956c55e
@ -17,6 +17,12 @@ from gsuid_core.handler import handle_event # noqa: E402
|
|||||||
from gsuid_core.models import MessageReceive # noqa: E402
|
from gsuid_core.models import MessageReceive # noqa: E402
|
||||||
from gsuid_core.webconsole.mount_app import site # noqa: E402
|
from gsuid_core.webconsole.mount_app import site # noqa: E402
|
||||||
from gsuid_core.aps import start_scheduler, shutdown_scheduler # noqa: E402
|
from gsuid_core.aps import start_scheduler, shutdown_scheduler # noqa: E402
|
||||||
|
from gsuid_core.utils.plugins_config.models import ( # noqa: E402
|
||||||
|
GsListStrConfig,
|
||||||
|
)
|
||||||
|
from gsuid_core.utils.plugins_config.gs_config import ( # noqa: E402
|
||||||
|
all_config_list,
|
||||||
|
)
|
||||||
|
|
||||||
app = FastAPI()
|
app = FastAPI()
|
||||||
HOST = core_config.get_config('HOST')
|
HOST = core_config.get_config('HOST')
|
||||||
@ -76,20 +82,19 @@ def main():
|
|||||||
data['white_list'] = []
|
data['white_list'] = []
|
||||||
sv.set(**data)
|
sv.set(**data)
|
||||||
|
|
||||||
'''
|
@app.post('/genshinuid/setGsConfig/{config_name}')
|
||||||
@app.post('/genshinuid/setGsConfig')
|
|
||||||
@site.auth.requires('admin')
|
@site.auth.requires('admin')
|
||||||
async def _set_Config(request: Request, data: Dict):
|
async def _set_Config(request: Request, data: Dict, config_name: str):
|
||||||
for name in data:
|
for name in data:
|
||||||
if name == 'params':
|
if name == 'params':
|
||||||
continue
|
continue
|
||||||
config = gsconfig[name]
|
config = all_config_list[config_name][name]
|
||||||
if isinstance(config, GsListStrConfig):
|
if isinstance(config, GsListStrConfig):
|
||||||
value = data[name].split(':')
|
value = data[name].split(':')
|
||||||
else:
|
else:
|
||||||
value = data[name]
|
value = data[name]
|
||||||
gsconfig.set_config(name, value)
|
all_config_list[config_name].set_config(name, value)
|
||||||
'''
|
|
||||||
site.mount_app(app)
|
site.mount_app(app)
|
||||||
|
|
||||||
uvicorn.run(
|
uvicorn.run(
|
||||||
|
@ -14,6 +14,7 @@ from typing import Any, Dict, List, Union, Literal, Optional, cast
|
|||||||
from aiohttp import ClientSession, ContentTypeError
|
from aiohttp import ClientSession, ContentTypeError
|
||||||
|
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
|
from gsuid_core.utils.plugins_config.gs_config import core_plugins_config
|
||||||
|
|
||||||
from .api import _API
|
from .api import _API
|
||||||
from .tools import (
|
from .tools import (
|
||||||
@ -62,9 +63,11 @@ RECOGNIZE_SERVER = {
|
|||||||
'9': 'os_cht',
|
'9': 'os_cht',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proxy_url = core_plugins_config.get_config('proxy').data
|
||||||
|
|
||||||
|
|
||||||
class BaseMysApi:
|
class BaseMysApi:
|
||||||
proxy_url: Optional[str] = None
|
proxy_url: Optional[str] = proxy_url if proxy_url else None
|
||||||
mysVersion = '2.44.1'
|
mysVersion = '2.44.1'
|
||||||
_HEADER = {
|
_HEADER = {
|
||||||
'x-rpc-app_version': mysVersion,
|
'x-rpc-app_version': mysVersion,
|
||||||
@ -214,6 +217,44 @@ class BaseMysApi:
|
|||||||
|
|
||||||
|
|
||||||
class MysApi(BaseMysApi):
|
class MysApi(BaseMysApi):
|
||||||
|
async def _pass(self, gt: str, ch: str, header: Dict):
|
||||||
|
# 警告:使用该服务(例如某RR等)需要注意风险问题
|
||||||
|
# 本项目不以任何形式提供相关接口
|
||||||
|
# 代码来源:GITHUB项目MIT开源
|
||||||
|
_pass_api = core_plugins_config.get_config('_pass_API').data
|
||||||
|
if _pass_api:
|
||||||
|
data = await self._mys_request(
|
||||||
|
url=f'{_pass_api}>={gt}&challenge={ch}',
|
||||||
|
method='GET',
|
||||||
|
header=header,
|
||||||
|
)
|
||||||
|
if isinstance(data, int):
|
||||||
|
return None, None
|
||||||
|
else:
|
||||||
|
validate = data['data']['validate']
|
||||||
|
ch = data['data']['challenge']
|
||||||
|
else:
|
||||||
|
validate = None
|
||||||
|
|
||||||
|
return validate, ch
|
||||||
|
|
||||||
|
async def _upass(self, header: Dict, is_bbs: bool = False):
|
||||||
|
if is_bbs:
|
||||||
|
raw_data = await self.get_bbs_upass_link(header)
|
||||||
|
else:
|
||||||
|
raw_data = await self.get_upass_link(header)
|
||||||
|
if isinstance(raw_data, int):
|
||||||
|
return False
|
||||||
|
gt = raw_data['data']['gt']
|
||||||
|
ch = raw_data['data']['challenge']
|
||||||
|
|
||||||
|
vl, ch = await self._pass(gt, ch, header)
|
||||||
|
|
||||||
|
if vl:
|
||||||
|
await self.get_header_and_vl(header, ch, vl)
|
||||||
|
else:
|
||||||
|
return True
|
||||||
|
|
||||||
async def get_upass_link(self, header: Dict) -> Union[int, Dict]:
|
async def get_upass_link(self, header: Dict) -> Union[int, Dict]:
|
||||||
header['DS'] = get_ds_token('is_high=false')
|
header['DS'] = get_ds_token('is_high=false')
|
||||||
return await self._mys_request(
|
return await self._mys_request(
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Dict, List, Union
|
from typing import Any, Dict, List, Union
|
||||||
|
|
||||||
from msgspec import json as msgjson
|
from msgspec import json as msgjson
|
||||||
|
|
||||||
@ -78,31 +78,36 @@ class StringConfig:
|
|||||||
# 重新写回
|
# 重新写回
|
||||||
self.write_config()
|
self.write_config()
|
||||||
|
|
||||||
def get_config(self, key: str) -> GSC:
|
def get_config(self, key: str) -> Any:
|
||||||
if key in self.config:
|
if key in self.config:
|
||||||
return self.config[key]
|
return self.config[key]
|
||||||
elif key in self.config_list:
|
elif key in self.config_list:
|
||||||
logger.info(f'[配置] 配置项 {key} 不存在, 但是默认配置存在, 已更新...')
|
logger.info(
|
||||||
|
f'[配置][{self.config_name}] 配置项 {key} 不存在, 但是默认配置存在, 已更新...'
|
||||||
|
)
|
||||||
self.update_config()
|
self.update_config()
|
||||||
return self.config[key]
|
return self.config[key]
|
||||||
else:
|
else:
|
||||||
logger.warning(f'[配置] 配置项 {key} 不存在也没有配置, 返回默认参数...')
|
logger.warning(
|
||||||
|
f'[配置][{self.config_name}] 配置项 {key} 不存在也没有配置, 返回默认参数...'
|
||||||
|
)
|
||||||
return GsBoolConfig('缺省值', '获取错误的配置项', False)
|
return GsBoolConfig('缺省值', '获取错误的配置项', False)
|
||||||
|
|
||||||
def set_config(
|
def set_config(
|
||||||
self, key: str, value: Union[str, List, bool, Dict]
|
self, key: str, value: Union[str, List, bool, Dict]
|
||||||
) -> bool:
|
) -> bool:
|
||||||
if key in self.config_list:
|
if key in self.config_list:
|
||||||
temp = self.config[key]
|
temp = self.config[key].data
|
||||||
if type(value) == type(temp):
|
if type(value) == type(temp):
|
||||||
temp.data = value # type:ignore
|
|
||||||
# 设置值
|
# 设置值
|
||||||
self.config[key] = temp
|
self.config[key].data = value # type: ignore
|
||||||
# 重新写回
|
# 重新写回
|
||||||
self.write_config()
|
self.write_config()
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
logger.warning(f'[配置] 配置项 {key} 写入类型不正确, 停止写入...')
|
logger.warning(
|
||||||
|
f'[配置][{self.config_name}] 配置项 {key} 写入类型不正确, 停止写入...'
|
||||||
|
)
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
@ -111,5 +116,5 @@ class StringConfig:
|
|||||||
all_config_list: Dict[str, StringConfig] = {}
|
all_config_list: Dict[str, StringConfig] = {}
|
||||||
|
|
||||||
core_plugins_config = StringConfig(
|
core_plugins_config = StringConfig(
|
||||||
'core', get_res_path() / 'core_config.json', CONIFG_DEFAULT
|
'Core', get_res_path() / 'core_config.json', CONIFG_DEFAULT
|
||||||
)
|
)
|
||||||
|
@ -11,16 +11,12 @@ from gsuid_core.webconsole.create_base_panel import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_config_page():
|
def get_card_page(card_name: str):
|
||||||
page = {
|
return {
|
||||||
'type': 'page',
|
'type': 'service',
|
||||||
'title': '配置管理',
|
'body': {
|
||||||
'body': [],
|
|
||||||
'id': 'u:a9be7e0dc626',
|
|
||||||
}
|
|
||||||
card = {
|
|
||||||
'type': 'card',
|
'type': 'card',
|
||||||
'header': {'title': '', 'subTitle': ''},
|
'header': {'title': card_name, 'subTitle': ''},
|
||||||
'body': [],
|
'body': [],
|
||||||
'actions': [
|
'actions': [
|
||||||
{
|
{
|
||||||
@ -28,7 +24,7 @@ def get_config_page():
|
|||||||
'label': '确认修改',
|
'label': '确认修改',
|
||||||
'id': 'u:5784cfaa5c0a',
|
'id': 'u:5784cfaa5c0a',
|
||||||
'actionType': 'ajax',
|
'actionType': 'ajax',
|
||||||
'api': '/genshinuid/setGsConfig',
|
'api': f'/genshinuid/setGsConfig/{card_name}',
|
||||||
'onEvent': {
|
'onEvent': {
|
||||||
'click': {
|
'click': {
|
||||||
'weight': 0,
|
'weight': 0,
|
||||||
@ -50,10 +46,22 @@ def get_config_page():
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
'id': 'u:69b06813bfbe',
|
'id': 'u:69b06813bfbe',
|
||||||
|
},
|
||||||
|
'id': 'u:4c2981f6a055',
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def get_config_page():
|
||||||
|
page = {
|
||||||
|
'type': 'page',
|
||||||
|
'title': '配置管理',
|
||||||
|
'body': [],
|
||||||
|
'id': 'u:a9be7e0dc626',
|
||||||
}
|
}
|
||||||
body = []
|
body = []
|
||||||
solo_body = []
|
solo_body = []
|
||||||
for config_name in all_config_list:
|
for config_name in all_config_list:
|
||||||
|
card = get_card_page(config_name)
|
||||||
_config = all_config_list[config_name]
|
_config = all_config_list[config_name]
|
||||||
for config in _config:
|
for config in _config:
|
||||||
gsc = _config[config]
|
gsc = _config[config]
|
||||||
@ -69,6 +77,8 @@ def get_config_page():
|
|||||||
body.append(get_container_panel(solo_body))
|
body.append(get_container_panel(solo_body))
|
||||||
solo_body = []
|
solo_body = []
|
||||||
body.append(get_container_panel(solo_body))
|
body.append(get_container_panel(solo_body))
|
||||||
card['body'] = body
|
card['body']['body'] = body
|
||||||
page['body'].append(card)
|
page['body'].append(card)
|
||||||
|
body = []
|
||||||
|
solo_body = []
|
||||||
return page
|
return page
|
||||||
|
Loading…
x
Reference in New Issue
Block a user