Files
HeXi/hexi/plugins/nonebot_plugin_bf_bot/config.py
T
sansenhoshiandClaude Code a31aab00e8 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>
2026-10-13 17:53:06 +08:00

124 lines
4.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""配置:按《插件配置文件标准》注册到统一 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),
},
],
)