refactor(bf-bot): 插件重构为 handlers/services/utils 分层,资源归入 res/
- 旧平铺模块(data/data_utils/database_op/image_builder*/get_bf6_data/ gametools_bf6/bf6_data/img_utils)拆分为 handlers(绑定/查询)、 services(fetchers/processing/query)、utils(渲染/参数)分层; 新增 repository.py / config.py / paths.py - 字体/图片/模板资源迁入 res/,新增 BF2042 卡面素材(bg/object_icon 等) - browser_ext/:BF2042 扩展捕获桥(WS 直连兜底通道)源码入库 - 新增 hexi/web/src/plugins/bf_bot 前端管理页 - 新增 tests:test_bf_bot_helpers / repository / tracker_api Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
1 parent
614e1d7e00
commit
a31aab00e8
752 files changed
+6241
-2506
No files matched your search
@@ -0,0 +1,123 @@
|
||||
"""配置:按《插件配置文件标准》注册到统一 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),
|
||||
},
|
||||
],
|
||||
)
|
||||
Reference in new issue
Block a user