Metadata-Version: 2.5
Name: tenko-plugin-bf1
Version: 0.1.20
Summary: Tenko 战地一查询：经 bf-manager 查询玩家战绩、武器、载具、最近对局、玩家信息、收藏和服务器，以及行动和交换，带百科、小贴士和入群审核
Project-URL: Homepage, https://github.com/g1331/tenko-plugins/tree/main/plugins/bf1
Project-URL: Repository, https://github.com/g1331/tenko-plugins
License-Expression: GPL-3.0-only
Keywords: battlefield,bf1,qq,tenko,tenko-plugin
Classifier: Framework :: AsyncIO
Classifier: Natural Language :: Chinese (Simplified)
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Communications :: Chat
Requires-Python: <3.14,>=3.11
Requires-Dist: httpx>=0.27
Requires-Dist: jinja2>=3
Requires-Dist: sqlalchemy>=2.0
Requires-Dist: tenko-api<0.5,>=0.4
Requires-Dist: zhconv>=1.4
Description-Content-Type: text/markdown

# 战地一查询

经 [bf-manager](https://github.com/g1331/bf-manager) 的公开查询接口查询战地一数据，回复图片；渲染不可用时退回文字。

| 命令 | 说明 |
| --- | --- |
| `/bf1绑定 <EA 名字>`（也可以 `/bf1b` `/绑定` `/bind`） | 绑定自己的 EA 账号；不带名字查看当前绑定 |
| `/bf1s [EA 名字]`（`/stat` `/生涯` `/战绩`） | 生涯战绩，含装备的狗牌、战队、MVP、王牌小队、战斗和团队细项、精英兵、拿得最多的勋带、各模式胜负和常玩地图；绑定后可不带名字 |
| `/bf1w [类别] [EA 名字]`（`/wp` `/weapon` `/武器`） | 武器击杀排行，默认 2 列 5 行，可按类别或兵种筛选、`-n` 按名字搜、`-s` 换排序，见下 |
| `/bf1v [类别] [EA 名字]`（`/vc` `/vehicle` `/载具`） | 载具击杀排行，默认 2 列 5 行，可按类别筛选、`-n` 按名字搜、`-s` 换排序，见下 |
| `/bf1info [EA 名字]`（`/info` `/信息` `/tyc` `/天眼查`） | 玩家信息：在哪些私服是服主、管理、VIP 或被封禁，最近玩过的服（bf-manager 跟踪到的对局），战队和封禁标记；图后面附上玩家名和 PID 的文字，方便复制。加 `-o` 服主、`-a` 管理、`-v` VIP、`-b` 封禁（也认 `-服主` `-管理` `-封禁`）列出这类身份的全部服务器，多了分栏 |
| `/bf1r [EA 名字] [-n 局数]`（`/recent` `/match` `/最近` `/对局`） | 最近 6 局（`-n`（`-num` `-局数`）指定，最多 12 局）的战绩、胜负和用得最多的武器，带 MVP、王牌、勋带、升级和服役星；KD、KPM、SPM、命中率、爆头率旁边写这一局之前的生涯值和这一局让它变了多少 |
| `/bf1c [EA 名字]`（`/收藏` `/勋章` `/狗牌` `/collection`） | 收藏：佩戴的狗牌，勋章、狗牌、勋带拿到了哪些，没拿到的置灰 |
| `/bf1ss <服务器名关键字>`（`/ss` `/搜服务器`） | 搜索有人的私服，显示前十个 |
| `/bf1pl <服务器名关键字 \| gameId>`（`/ds` `/详细服务器`） | 服务器玩家列表（含排队、观战和行动进度）；匹配多个时取人最多的 |
| `/bf1`（`/bfstat`） | 全服在线概况 |
| `/bf1行动`（`/行动` `/战役` `/op`） | 当前的行动战役：包含哪些行动、还剩多久、每日重置时间（北京时间） |
| `/bf1交换 [日期 \| 列表]`（`/交换` `/exchange` `/ex`） | 交换（废料兑换皮肤），按稀有度分组；不带参数看最新一期，带日期看那天生效的一期，`列表`（`历史`）按年列出全部期数。见下 |
| `/bf1百科 [序号 \| 分类 \| 关键词 \| 目录]`（`/百科` `/wiki`） | 游戏里的百科（典籍）；不带参数随机一条，发分类名出目录，名字里搜不到时搜正文 |
| `/bf1tip [关键词]`（`/tip` `/小贴士`） | 载入画面的小贴士；不带参数随机一条，可按地图、模式或正文搜 |
| `/bf1审核 [开\|关]` | 本群的入群审核；开关需要群管理员 |

括号里是旧 bot 的 `-stat`、`-武器` 这些命令换成 `/` 开头的写法，和前面的命令完全一样，帮助列表里只列前面的。查玩家的命令都可以用 `#PID` 代替 EA 名字；没带名字也没绑定时，把群名片（去掉开头 `[战队]`、`【…】` 这类前缀）当 EA 名字查，只认完全同名的号，查不到会提示去绑定。查玩家的命令都可以加 `-t`（`-text`）只回文字不出图，比如 `/info -t SHlSAN13`。武器、载具和各个分类命令还可以用 `-c`（`-col` `-列`）、`-r`（`-row` `-行`）自己排几列几行，最多 8 列 10 行，比如 `/武器 步枪 SHlSAN13 -c 3 -r 4`；文字版按列 × 行的数量列。

武器、载具和各个分类命令也认旧 bot 的 `-n`（`-name` `-名字`）按名字搜和 `-s`（`-sort` `-排序`）换排序，可以和类别、`-c`、`-r`、`-t` 一起用，比如 `/武器 步枪 SHlSAN13 -s 爆头率`、`/步枪 -n gewehr`：

- `-n`：武器名里含这个词就算，不分大小写、繁简和全半角，空格、`-`、`·`、`.` 忽略不计（`-n gewehr98` 能搜到 Gewehr 98）；长一点的词错一个字也认。没用过的也列出来，名字里有空格时可以加引号。
- `-s`：武器可以按 `击杀`（默认）、`时长`、`KPM`、`命中率`（`命中` `ACC`）、`爆头率`（`爆头` `HS`）排，载具可以按 `击杀`、`时长`、`KPM`、`摧毁` 排。爆头率是爆头数 / 击杀数，命中率用 EA 给的数。按 KPM、命中率、爆头率排时，击杀不到 10 的不参与排名，免得一两个击杀的武器排到最前面；和 `-n` 一起用时它们照样列出，置灰排在后面。

武器和载具的类别沿用旧 bot 的子命令，可以写在命令后面（`/武器 步枪 SHlSAN13`），也可以直接当命令发（`/步枪 SHlSAN13`）：

- 武器：`突击兵`（`突击` `土鸡兵` `土鸡`）、`医疗兵`（`医疗`）、`支援兵`（`支援`）、`侦察兵`（`侦察` `斟茶兵` `斟茶`）、`精英兵`、`冲锋枪`、`霰弹枪`（`散弹枪`）、`轻机枪`（`机枪`）、`半自动步枪`（`半自动`）、`步枪`（`狙击枪`）、`佩枪`（`手枪`）、`配备`（`装备`）、`手榴弹`（`手雷` `投掷物`）、`近战`、`驾驶员`（`坦克驾驶员`）
- 载具：`坦克`、`地面`、`飞机`、`飞船`（`飞艇`）、`空中`、`海上`、`定点`、`巨兽`（`机械巨兽`）

兵种除了主武器那几类，还算上该兵种专属的配枪和装备（突击兵的炸药、反坦克火箭炮，支援兵的迫击炮、维修工具等），名单和旧 bot 一致。

玩家信息里的私服身份只覆盖 bf-manager 收录的私服，不是 EA 的全量数据。

交换的日期按北京时间，写成 `2023.01.01`、`2023-01-01`、`2023/1/1`、`20230101` 都行，也可以照旧 bot 用 `-t 2023.01.01`，所以交换只回文字要用 `-text`。bf-manager 收录了 2022 年 7 月以来的各期；EA 从 2025 年 6 月起不再更新交换，最新一期太久没换时回复里会写明。

最近对局来自 bf-manager 跟踪到的对局（进服和结算时的生涯数据相减算出），保留 90 天；排队、观战、进服就走的局不算。

百科（310 条，序号和旧 bot 一样是 1~310，分类有武器、载具、战略、战争、全世界）和小贴士（390 条）是游戏内文本，取自旧 bot 的数据并转成简体，随插件打包；百科配图从 EA 的服务器加载。群里有人戳 bot 时，被戳的号会 @ 他回一条随机的小贴士或百科，同一个人 10 秒内连戳只回一次。

新群默认开启。

## 入群审核

在群里 `/bf1审核 开` 后，有人申请入群时 bot 会查申请者填的 EA 名字，把检查结果（没玩过战地一、BFEAC / BFBAN
实锤、和这个 QQ 已绑定的号不一致）和战绩卡片、最近对局卡片发到群里（bf-manager 90 天内没记录到对局时写一行说明）。群管理员**回复这条消息** `y` 同意，回复其他文字则以该文字为理由拒绝，不限时；同意后，申请者还没绑定的话自动绑定为这个 EA 名字。

开着入群审核时，绑定过 EA 号的人进群后，bot 会用群里身份是群主或管理员的号把他的群名片改成这个号现在的名字，并 @ 他说一声；不经审核进群（比如被邀请）的也一样。群里没有管理员 bot 号时不改。

需要 bot 是群管理员：QQ 只把入群申请推给群主和管理员。群里有多个 bot 号、选路选中的又不是管理员时，Tenko 4.0.0rc49 之前会把申请丢掉，之后由收到申请的管理员号处理。入群方式设成“需要回答问题并由管理员审核”，问题让申请者填 EA 名字。待审申请存在插件数据库里，重启 Tenko 后照样能回复处理；要用收到申请的那个 bot 号处理，它不在线时会提示等它上线。申请在 QQ 里直接处理掉、申请者进群后，记录自动清掉。

## 配置

```toml
[plugin_config.bf1]
base_url = "https://bfm.umrbotech.com"  # bf-manager 地址，不带 /api/v1
```
