123 lines
4.7 KiB
Python
123 lines
4.7 KiB
Python
"""配置:按《插件配置文件标准》注册到统一 Web 管理台。
|
||||
|
|
|
|||
|
|
3 个配置项都与 BF2042 取数通道有关:浏览器扩展桥的端口 / token
|
|||
|
|
(``services/fetchers/tracker_bridge.py``),以及取数浏览器专用配置目录
|
|||
|
|
(登录态所在,诊断提示用)。来源是模块运行态,Web 保存后由 setter 热更新、
|
|||
|
|
立即生效;重启后依次按 plugin_config.json 值、`HEXI_BF_*` 环境变量、默认值回退。
|
|||
|
|
|
|||
|
|
读取一律走本模块的 helper(内部 `get_effective_value`),不要在别处缓存值。
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
from __future__ import annotations
|
|||
|
|
|
|||
|
|
import os
|
|||
|
|
|
|||
|
|
from hexi.web_hub.config_standard import register_config_items
|
|||
|
|
from hexi.web_hub.web_config import get_effective_value
|
|||
|
|
|
|||
|
|
from .paths import DEFAULT_COOKIES_PATH, EDGE_PROFILE_DIR
|
|||
|
|
|
|||
|
|
_PLUGIN_ID = __package__ or __name__.rsplit(".", 1)[0]
|
|||
|
|
|
|||
|
|
_KEY_EDGE_PROFILE = "bf_edge_profile_dir"
|
|||
|
|
_KEY_EXT_WS_PORT = "bf_ext_ws_port"
|
|||
|
|
_KEY_EXT_WS_TOKEN = "bf_ext_ws_token"
|
|||
|
|
# 旧 cookie 通道的配置键:仅保留读取 helper 兼容旧调用,不再注册
|
|||
|
|
_KEY_COOKIES = "bf_tracker_cookies_path"
|
|||
|
|
|
|||
|
|
|
|||
|
|
# 运行态现值:启动时用环境变量兜底初始化(ENV 名与 Web 写回的 .env 名一致)
|
|||
|
|
_state: dict[str, object] = {
|
|||
|
|
_KEY_EDGE_PROFILE: os.environ.get("HEXI_BF_EDGE_PROFILE") or str(EDGE_PROFILE_DIR),
|
|||
|
|
_KEY_EXT_WS_PORT: os.environ.get("HEXI_BF_EXT_WS_PORT") or "39272",
|
|||
|
|
_KEY_EXT_WS_TOKEN: os.environ.get("HEXI_BF_EXT_WS_TOKEN") or "hexi-bf2042",
|
|||
|
|
_KEY_COOKIES: os.environ.get("HEXI_BF_TRACKER_COOKIES")
|
|||
|
|
or str(DEFAULT_COOKIES_PATH),
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
def edge_profile_dir() -> str:
|
|||
|
|
"""BF2042 取数浏览器专用配置目录(内含登录态、CF 信任与捕获桥扩展)。"""
|
|||
|
|
value = get_effective_value(_PLUGIN_ID, _KEY_EDGE_PROFILE, None)
|
|||
|
|
if value:
|
|||
|
|
return str(value)
|
|||
|
|
return str(_state[_KEY_EDGE_PROFILE] or EDGE_PROFILE_DIR)
|
|||
|
|
|
|||
|
|
|
|||
|
|
def ext_ws_port() -> int:
|
|||
|
|
"""扩展桥 WS 服务端端口(仅本机回环)。"""
|
|||
|
|
value = get_effective_value(_PLUGIN_ID, _KEY_EXT_WS_PORT, None)
|
|||
|
|
if value is None:
|
|||
|
|
value = _state[_KEY_EXT_WS_PORT]
|
|||
|
|
try:
|
|||
|
|
return int(str(value))
|
|||
|
|
except (TypeError, ValueError):
|
|||
|
|
return 39272
|
|||
|
|
|
|||
|
|
|
|||
|
|
def ext_ws_token() -> str:
|
|||
|
|
"""扩展桥共享 token(扩展 background.js 顶部常量需与之保持一致)。"""
|
|||
|
|
value = get_effective_value(_PLUGIN_ID, _KEY_EXT_WS_TOKEN, None)
|
|||
|
|
if value:
|
|||
|
|
return str(value)
|
|||
|
|
return str(_state[_KEY_EXT_WS_TOKEN] or "hexi-bf2042")
|
|||
|
|
|
|||
|
|
|
|||
|
|
def tracker_cookies_path() -> str:
|
|||
|
|
"""[旧通道兼容] Netscape 格式 cookie 文件路径。"""
|
|||
|
|
value = get_effective_value(_PLUGIN_ID, _KEY_COOKIES, None)
|
|||
|
|
if value:
|
|||
|
|
return str(value)
|
|||
|
|
return str(_state[_KEY_COOKIES] or DEFAULT_COOKIES_PATH)
|
|||
|
|
|
|||
|
|
|
|||
|
|
def _set(key: str, value: object) -> None:
|
|||
|
|
_state[key] = value
|
|||
|
|
|
|||
|
|
|
|||
|
|
def register_config() -> None:
|
|||
|
|
"""注册 3 个取数通道配置项(Web 可读可改,保存即生效)。"""
|
|||
|
|
register_config_items(
|
|||
|
|
_PLUGIN_ID,
|
|||
|
|
[
|
|||
|
|
{
|
|||
|
|
"key": _KEY_EXT_WS_PORT,
|
|||
|
|
"label": "扩展桥 WS 端口",
|
|||
|
|
"type": "string",
|
|||
|
|
"default": "39272",
|
|||
|
|
"env": "HEXI_BF_EXT_WS_PORT",
|
|||
|
|
"description": (
|
|||
|
|
"扩展桥在本机 127.0.0.1 的监听端口(仅回环)。"
|
|||
|
|
"改后需重启 bot,且扩展 background.js 顶部常量要同步。"
|
|||
|
|
),
|
|||
|
|
"getter": lambda: _state[_KEY_EXT_WS_PORT],
|
|||
|
|
"setter": lambda v: _set(_KEY_EXT_WS_PORT, v),
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"key": _KEY_EXT_WS_TOKEN,
|
|||
|
|
"label": "扩展桥 token",
|
|||
|
|
"type": "password",
|
|||
|
|
"default": "hexi-bf2042",
|
|||
|
|
"env": "HEXI_BF_EXT_WS_TOKEN",
|
|||
|
|
"description": (
|
|||
|
|
"扩展连接时的共享密钥(防本机其它程序误连)。"
|
|||
|
|
"与扩展 background.js 顶部 WS_TOKEN 保持一致;保存即生效。"
|
|||
|
|
),
|
|||
|
|
"getter": lambda: _state[_KEY_EXT_WS_TOKEN],
|
|||
|
|
"setter": lambda v: _set(_KEY_EXT_WS_TOKEN, v),
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"key": _KEY_EDGE_PROFILE,
|
|||
|
|
"label": "取数浏览器配置目录",
|
|||
|
|
"type": "path",
|
|||
|
|
"default": str(EDGE_PROFILE_DIR),
|
|||
|
|
"env": "HEXI_BF_EDGE_PROFILE",
|
|||
|
|
"description": (
|
|||
|
|
"取数浏览器的专用用户数据目录(登录态 + CF 信任 + 捕获桥扩展都在这)。"
|
|||
|
|
"会话过期时用它打开 Edge 手动登录一次即可。"
|
|||
|
|
),
|
|||
|
|
"getter": lambda: _state[_KEY_EDGE_PROFILE],
|
|||
|
|
"setter": lambda v: _set(_KEY_EDGE_PROFILE, v),
|
|||
|
|
},
|
|||
|
|
],
|
|||
|
|
)
|