NoneBot2 守望先锋补丁监控插件。插件会定时抓取 Overwatch 官方补丁日志,支持群聊/私聊绑定推送、手动查询、历史缓存、增量检测,以及通过 OpenAI 兼容 API 翻译补丁内容。
本项目由 astrbot_plugin_owpatch 迁移而来,核心抓取、解析、缓存逻辑保留,框架入口、消息发送、配置、状态目录和 AI 翻译已改为 NoneBot2 实现。
- 定时轮询:默认北京时间
01:50 ~ 04:00,窗口内每 10 分钟检查一次。 - 月初双月检查:每月 1 日同时检查上月和当月页面。
- 首次安装基线:首次启动只记录当前最新补丁,不推送历史旧补丁。
- 手动检查:
/owpatch check立即检查。 - 历史查询:按年份、月份、日期查询补丁。
- 会话绑定:群聊和私聊分别绑定,定时发现新补丁后主动推送;可配置群号白名单。
- OneBot v11 合并转发:优先发送合并转发,失败时回退纯文本分片。
- Stadium 过滤:默认过滤 Stadium 角斗领域相关内容。
- OpenAI 兼容翻译:
/owpatch translate翻译上次查询的补丁,支持翻译缓存。
前提:
- Python 3.10 或更高版本。
- 已有可运行的 NoneBot2 项目。
- 宿主项目已配置 OneBot v11 适配器和对应的协议端,例如 NapCat、Lagrange、go-cqhttp 兼容端等。
- 宿主项目需要自己安装并配置 NoneBot driver,例如 FastAPI driver;本插件只声明插件运行所需依赖。
在 NoneBot 项目环境中安装:
pip install git+https://github.com/wuhutakeoffyoo/nonebot_plugin_owpatch.git开发或服务器本地部署时也可以使用 editable 安装:
pip install -e /opt/nonebot_plugin_owpatch然后在 NoneBot 项目中加载插件:
nonebot.load_plugin("nonebot_plugin_owpatch")如果项目使用 pyproject.toml / bot.py / 插件目录自动加载,请按宿主项目已有方式加入即可。
所有配置写入 NoneBot 宿主项目的 .env 或 .env.prod,均使用 owpatch_ 前缀。
| 配置项 | 默认值 | 说明 |
|---|---|---|
owpatch_check_interval_minutes |
10 |
定时窗口内检查间隔,单位分钟 |
owpatch_window_start_time |
01:50 |
北京时间检查窗口开始 |
owpatch_window_end_time |
04:00 |
北京时间检查窗口结束 |
owpatch_enable_time_window |
true |
是否只在窗口内轮询 |
owpatch_base_url_template |
官方 live 补丁地址 | 月度补丁页面模板,需保留 {year} 和 {month:02d} |
owpatch_user_agent |
Chrome User-Agent | 抓取官方页面时使用的 HTTP User-Agent |
owpatch_request_timeout |
60 |
HTTP 请求超时秒数 |
owpatch_proxy |
空 | HTTP 代理,例如 http://127.0.0.1:7890 |
owpatch_cache_ttl_minutes |
10 |
页面短时缓存 TTL |
owpatch_include_stadium |
false |
是否包含 Stadium 内容 |
owpatch_forward_messages |
true |
OneBot v11 是否优先使用合并转发 |
owpatch_allowed_group_ids |
[] |
群号白名单,例如 [123456789];非空时忽略其他群和私聊,并禁止向其推送 |
owpatch_data_dir |
data/nonebot_plugin_owpatch |
状态与缓存目录 |
owpatch_auto_translate |
false |
定时推送后是否自动推送中文翻译 |
owpatch_openai_base_url |
空 | OpenAI 兼容 API base,例如 https://api.openai.com/v1 |
owpatch_openai_api_key |
空 | OpenAI 兼容 API key |
owpatch_openai_model |
空 | 翻译模型名称 |
owpatch_openai_timeout |
120 |
翻译请求超时秒数 |
owpatch_translate_prompt |
空 | 追加到内置翻译规则后的自定义要求 |
可参考 .env.example。
只允许指定群使用插件时,可配置:
owpatch_allowed_group_ids=[123456789]白名单非空时,插件不会响应其他群或私聊中的命令,也不会向非白名单会话主动推送。配置后仍需在目标群执行一次 /owpatch bind。
| 指令 | 说明 |
|---|---|
/owpatch bind 或 /ow补丁 绑定 |
绑定当前群聊/私聊接收推送 |
/owpatch unbind 或 /ow补丁 解绑 |
解绑当前会话 |
/owpatch status 或 /ow补丁 状态 |
查看绑定数量、最新补丁和今日推送状态 |
/owpatch check 或 /ow补丁 检查 |
立即检查是否有新补丁 |
/owpatch query 或 /ow补丁 查询 |
查询并发送最新补丁 |
/owpatch query 2026 |
查询指定年份的补丁日期 |
/owpatch query 5 |
查询今年 5 月补丁日期 |
/owpatch query 5 12 |
查询今年 5 月 12 日补丁 |
/owpatch query 2026 5 |
查询 2026 年 5 月补丁日期 |
/owpatch query 2026 5 12 |
查询 2026 年 5 月 12 日补丁 |
/owpatch query 2026/5 |
查询 2026 年 5 月补丁日期 |
/owpatch cache status |
查看缓存统计 |
/owpatch cache |
批量预热历史补丁缓存 |
/owpatch translate 或 /ow补丁 翻译 |
翻译上一次查询的补丁 |
/owpatch help 或 /ow补丁 帮助 |
查看帮助 |
默认数据目录:
data/nonebot_plugin_owpatch/
├── state.json
└── cache/
├── permanent/
└── translation/
state.json 保存最新补丁日期、内容哈希、绑定会话和每日推送标记。删除它会重置插件状态并在下次启动重新建立基线。
翻译不依赖 AstrBot。插件会直接请求 OpenAI 兼容 chat/completions API:
owpatch_openai_base_url=https://api.openai.com/v1
owpatch_openai_api_key=sk-...
owpatch_openai_model=gpt-4.1-mini兼容服务只要支持 OpenAI Chat Completions 响应格式即可。为了避免泄露密钥,请不要把真实 .env 提交到仓库。
开启 owpatch_auto_translate=true 后,发现新补丁时会先推送原文,再异步翻译并追加推送中文版本。单独执行 /owpatch translate 会翻译当前会话最近一次查询的补丁。
内置翻译提示词允许模型在遇到未收录术语时使用供应商可用的联网搜索、公开资料检索或类似能力查证常用中文译名;若当前 API 或模型不提供联网能力,则会依赖模型已有知识,无法可靠确认时保留英文原文且不添加占位标记。
- 不要将 API key、OneBot access token、真实服务器地址或生产环境
.env提交到仓库。 .env.example只能保留空值或虚拟示例。- 如果密钥曾出现在聊天记录、日志或 Git 历史中,应立即在服务商控制台轮换。
- 对外开放 OneBot WebSocket 时应配置 access token,并通过防火墙限制来源地址。
pip install -e ".[test]"
python -m compileall nonebot_plugin_owpatch
pytest如需真实运行,需要一个已配置 OneBot v11 适配器的 NoneBot 项目,并确保机器人已经连接。
迁移版本已完成真实链路验证:抓取官方补丁页面、解析最新补丁、调用 OpenAI 兼容翻译 API,并通过 OneBot v11 发送合并转发。验证记录不包含生产服务器地址、群号、令牌或 API key。