Files
HeXi/hexi/plugins/nonebot_plugin_video_analysis/__init__.py
T
sansenhoshiandClaude Code 4badcfcf32 feat(video-analysis): 群策略 v3 / 群文件投递通道 / Web 管理页
- policy.py:per-group 正交策略(自动解析 / 自动策略 / 禁用策略 / 存储 A·B·C /
  公网 / 链接 / 群文件 + 平台限定),list.json v1/v2 → v3 自动迁移,
  写入统一走 PolicyStore(加锁 + .tmp 原子替换 + 字段归一)
- 群文件并行通道 group_file.py:打包 zip(可选 pyzipper AES-256)后优先走 S3 预签名、
  本地直传兜底;设了密码但 pyzipper 不可用就放弃上传,不退化成明文
- list_proc.py 收敛到「视频策略」统一入口,权限判定改走 policy
- Web 管理页 /hub/video_analysis(群策略 + 链接解析面板)与 services/web_jobs.py
  (只复用纯函数层,Web 上下文不发消息;内存任务表 + 并发闸门 + 超时)
- 媒体命名统一到 utils.py({作者}_{作者id}/{作品名}[_短码]),cleanup 回收空目录
- 测试:policy / 命名 / 群文件 / web_jobs 四组

顺带 pyproject 的 pytest 加 testpaths=tests(避免收进 debug/ 下的调试脚本)。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-22 14:23:32 +08:00

40 lines
1.3 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.
"""视频解析插件 — 入口(元数据 + 依赖 + 配置注册)。
业务入口在 handlers/entry.py,配置注册在 config.py。
"""
from nonebot import require
from nonebot.plugin import PluginMetadata
require("nonebot_plugin_alconna")
__plugin_meta__ = PluginMetadata(
name="视频解析",
description="解析分享的抖音/哔哩哔哩/YouTube等视频链接",
usage="发送视频分享链接自动解析;@bot 时主动触发解析",
type="application",
)
# 显式导入子模块:注册配置 schema + 消息 matcher(配合 load_plugins 只加载到包层)
from . import config as _config # noqa: E402
from . import handlers as _handlers # noqa: E402
from . import list_proc as _list_proc # noqa: E402
from . import web_hub as _web_hub # noqa: E402
from hexi.web_hub.web_plugin_registry import register_web_plugin # noqa: E402
# 注册到统一 Web 管理台(/hub):hub 启动时挂载 /api/video_analysis,
# 前端页面 hexi/web/src/plugins/video_analysis/
register_web_plugin(
"video_analysis",
"视频解析",
"video",
lambda: _web_hub.build_admin_app(),
module_name=__name__,
)
_config.register_config()
# 导入期把群策略读进内存(含 list.json v1/v2 → v3 迁移),
# 之后 verify_user 走内存,不再碰磁盘。
_list_proc.warmup()