Skip to content
Merged

7.2.7 #614

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ node_modules
.vscode/*
!.vscode/extensions.json
.idea
.trae
.claude

# Notes
notes
Expand Down
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,23 @@

## [Unreleased]

## [7.2.7] - 2026-4-23

### 修复

- 修复【隐身入场】功能完全失效的问题

### 调整

- 【自动切换画质】现在能区分“1080P 原画(高帧率)”和“1080P 原画(HDR 高帧率)”;目标画质不存在时首先尝试回退到非 HDR 版本的画质
- 【拦截日志数据上报】拦截能力增强
- 【禁用P2P】功能优化,提升隐蔽性,减少报错
- 【领取年度大会员权益】更新权益黑名单

### 删除

- 删除【应援团签到】模块(应援团签到功能已下线很长时间了,目前还能调用接口但实际上不加亲密度)

## [7.2.6] - 2026-2-27

### 修复
Expand Down
80 changes: 80 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# CLAUDE.md

本文件为 AI 助手在本仓库中工作时提供指引。

## 项目概述

BLTH(Bilibili Live Tasks Helper)是一个基于 Vue 3 + Vite 的浏览器用户脚本,运行在 Bilibili 直播页面(如 `live.bilibili.com/直播间号`),通过 Tampermonkey/Violentmonkey 实现直播相关每日任务、观看体验优化和页面元素清理。

## 常用命令

```sh
npm run dev # 启动 Vite 开发服务器(watch 模式生成用户脚本)
npm run build # 类型检查 + 构建并压缩(并行)
npm run build-only # 仅构建,不做类型检查和压缩
npm run type-check # 仅 Vue TypeScript 类型检查
npm run lint # ESLint + Stylelint 自动修复
npm run format # 使用 Prettier 格式化 src/
```

本项目没有自动化测试。

## 架构

### 模块系统

所有功能以模块形式实现,继承自 [src/modules/BaseModule.ts](src/modules/BaseModule.ts)。由 `useModuleStore` 管理生命周期。

模块分类:

- `default/` — 默认模块,负责获取用户信息、Cookie、粉丝勋章等基础数据;多数业务模块依赖其结果,但部分体验优化模块会更早运行
- `dailyTasks/` — 每日任务(主站任务、直播任务、其他任务)
- `enhanceExperience/` — 体验优化
- `removeElement/` — 移除页面元素

模块通常通过各级 `index.ts` 桶文件导出;其中 `src/modules/index.ts` 只导出非默认模块。

### 新增模块流程

1. 在 `src/modules/` 对应子目录下创建继承 `BaseModule` 的模块类
2. 在 `src/types/storage.d.ts` 的 `ModuleConfig` 中添加类型定义
3. 在 `src/library/storage/defaultValues.ts` 中添加默认配置
4. 如需调用新的 B 站 API,在 `src/library/bili-api/` 中补充实现,以及请求/响应类型定义
5. 完成模块类后,在对应的 `index.ts` 桶文件中导出
6. 在 `src/components/` 对应组件中添加 UI
7. 每日任务通常还需在 `useModuleStore` 中添加状态和重置逻辑
8. 如模块需要尽早执行、跨页面执行或限定 frame,检查并设置 `BaseModule` 的静态属性(如 `runAt`、`onFrame`、`runAfterDefault`、`runOnMultiplePages`)

### 状态管理(Pinia Stores)

- `useBiliStore` — B 站用户数据(uid、硬币、勋章、动态视频等)
- `useCacheStore` — 脚本运行时状态,检测主/副脚本类型以防多标签页重复执行
- `useModuleStore` — 模块注册、生命周期、配置持久化、状态跟踪与重置
- `useUIStore` — 控制面板 UI 状态
- `usePlayerStore` — 直播播放器状态

### 存储

通过 `GM_getValue`/`GM_setValue` 持久化 `ui`、`modules` 和 `cache` 数据([src/library/storage/](src/library/storage/))。

### 构建

[vite.config.ts](vite.config.ts) 使用 `vite-plugin-monkey` 生成 `.user.js` 用户脚本。外部依赖通过 CDN `@require` 引入而非打包。新增第三方库必须加到 `vite.config.ts` 的 `externalGlobals` 或 `externalResource` 中。

### 路径别名

`@/` 映射到 `src/`。

## 分支策略

- `master`:发布分支;合并来自 `dev` 的 PR 后由 GitHub Actions 构建并创建 Release
- `dev`:开发分支,所有 PR 以 `dev` 为目标

## 代码规范

- Vue 3 Composition API + `<script setup>` 语法
- TypeScript strict 模式;`any` 允许使用但应尽量避免
- CSS 类名遵循 BEM 命名(Stylelint 强制)
- 未使用的变量以 `_` 前缀命名
- `src/library/bili-api/` 中的 API 必须编写详细的请求/响应类型定义
- Commit message 使用约定式提交格式
45 changes: 31 additions & 14 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,37 @@ BLTH 是一个基于 [Vue3](https://cn.vuejs.org), [Element Plus](https://elemen

## 环境搭建

- 安装 [Node.js](https://nodejs.org/), [Visual Studio Code](https://code.visualstudio.com/)。
- Fork 本项目(取消勾选 Copy the `master` branch only),然后 Clone 至本地。
- 切换到项目根目录,安装依赖 `npm install`。
- 如果使用 vscode,安装以下几个拓展(打开项目时会提示你安装):[Vue - Official](https://marketplace.visualstudio.com/items?itemName=Vue.volar), [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint), [Styleint](https://marketplace.visualstudio.com/items?itemName=stylelint.vscode-stylelint), [EditorConfig for VS Code](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig), [Prettier - Code formatter](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode)。
- 安装 [Node.js](https://nodejs.org/) (建议安装最新的 LTS 版本)
- 如果使用 [Visual Studio Code](https://code.visualstudio.com/),安装以下几个拓展(打开项目时会提示你安装):[Vue - Official](https://marketplace.visualstudio.com/items?itemName=Vue.volar), [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint), [Styleint](https://marketplace.visualstudio.com/items?itemName=stylelint.vscode-stylelint), [EditorConfig for VS Code](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig), [Prettier - Code formatter](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode)

## 开始

首先切换到`dev`分支:
首先 Fork 本项目并 Clone 至本地。

```sh
git checkout dev
git clone https://github.com/your-username/BLTH.git
```

然后把原仓库添加为 `upstream`,再基于上游的 `dev` 分支创建本地分支。

```sh
git remote add upstream https://github.com/andywang425/BLTH.git
git fetch upstream
git switch -c your-dev-branch upstream/dev
```

后续如果需要同步上游的 `dev` 分支:

```sh
git fetch upstream
git switch your-dev-branch
git merge upstream/dev
```

安装依赖:

```sh
npm install
```

接着使用以下命令在浏览器中安装脚本并启动 [Vite](https://cn.vitejs.dev),然后你就可以开始写代码啦。
Expand All @@ -29,17 +49,14 @@ git checkout dev
npm run dev
```

得益于 Vite 的模块热更新(HMR)功能,如果仅修改了 UI 相关代码,可以直接在浏览器中看到结果。其余情况下通常 Vite 会自动帮你刷新页面,但是在部分情况下仍需手动刷新。

脚本运行过程中会调用B站API,过于频繁地刷新页面从而让脚本反复调用API可能导致你的B站账号被风控。如果你写代码的时候经常保存请注意这一点。
得益于 Vite 的模块热更新(HMR)功能,如果仅修改了 UI 相关代码,可以直接在浏览器中看到结果。其余情况下可能需要你手动刷新页面。

## 项目概览

### 分支

- **master**: `master`分支是主分支,主仓库在发布新版本前会把`dev`分支合并到`master`分支。最终供用户安装的用户脚本由 Github Actions 自动编译并推送到主分支。

- **dev**: `dev`分支是开发用分支,开发时请使用该分支,发起PR时也以主仓库的dev分支为合并的目标。
- **master**: `master` 分支是发布分支,准备发版时会通过 Pull Request 将 `dev` 合并到 `master`,合并后会触发 GitHub Actions 构建并创建 Release。
- **dev**: `dev` 分支是开发分支,日常开发请基于 `upstream/dev` 创建分支,发起 PR 时以主仓库的 `dev` 分支为合并目标。

### 目录结构

Expand Down Expand Up @@ -135,9 +152,9 @@ npm run format
npm run build
```

这会在`build`文件夹下生成一个后缀为`.user.js`的文件和一个后缀为`.min.user.js`的文件,分别是未压缩的和压缩后的用户脚本。
这会在`dist`文件夹下生成一个后缀为`.user.js`的文件和一个后缀为`.min.user.js`的文件,分别是未压缩的和压缩后的用户脚本。

最后输入以下命令把编译后的脚本安装到浏览器
最后输入以下命令在浏览器中打开预览页面

```sh
npm run preview
Expand Down
2 changes: 1 addition & 1 deletion eslint.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export default defineConfigWithVueTs(
globalIgnores(['**/dist/**', '**/dist-ssr/**', '**/coverage/**']),
includeIgnoreFile(gitignorePath, 'Imported .gitignore patterns'),

pluginVue.configs['flat/essential'],
...pluginVue.configs['flat/essential'],
vueTsConfigs.recommended,
skipFormatting,

Expand Down
Loading
Loading