Skip to content
Merged

7.3.0 #632

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
75353a5
✨ feat(MedalModule): 删除任务信息缓存机制
andywang425 May 25, 2026
86f9ebf
🐎 ci: 更新action版本
andywang425 May 25, 2026
5a8bbcb
✨ feat: 储蓄亲密度检查;无法获取点亮任务时跳过
andywang425 May 26, 2026
8134cef
✨ feat(API): getRoomPlayInfo
andywang425 Jun 2, 2026
13d9fc8
✨ feat: 直播任务大量新功能
andywang425 Jun 8, 2026
8ddce60
🐞 fix: 直播任务多处问题修复
andywang425 Jun 8, 2026
285a98f
🎈 perf(MedalModule): 快照机制优化
andywang425 Jun 8, 2026
4dd0cdd
🔧 build: 更新依赖和eslint配置
andywang425 Jun 9, 2026
115bcc3
🐳 chore: eslint配置修改
andywang425 Jun 9, 2026
93f552e
✨ feat(MedalModule): 快照逻辑优化
andywang425 Jun 9, 2026
426523f
🐳 chore: 弹幕默认值调整
andywang425 Jun 10, 2026
60522e3
✨ feat: useBiliStore 新增粉丝勋章元数据 FansMedalsMeta
andywang425 Jun 10, 2026
2323612
✨ feat: 简化直播状态探测逻辑
andywang425 Jun 11, 2026
91d9937
🐞 fix: 处理模块重复运行的一些边界情况
andywang425 Jun 11, 2026
7799689
🐳 chore: MedalModule常量调整和请求队列间隔优化;补CHANGELOG
andywang425 Jun 11, 2026
13b077b
🐞 fix: 多项问题修复
andywang425 Jun 11, 2026
15569f2
✨ feat: 直播任务完成后会调用接口检查粉丝团升级任务是否真的完成
andywang425 Jun 12, 2026
994c6a4
📃 docs: CLAUDE.md和CONTRIBUTING.md优化
andywang425 Jun 12, 2026
3c3067b
🎈 perf: 发弹幕和点赞模块日志优化
andywang425 Jun 13, 2026
8e84ae9
🐞 fix: 修复lightTask中findTaskInfo未跳过勋章的问题;修复目标轮次模式下验证逻辑误判未完成的问题
andywang425 Jun 13, 2026
3a30acd
🎈 perf: 提取公共串行请求限流队列方法
andywang425 Jun 13, 2026
ac0ff33
🎈 perf: 日志输出优化
andywang425 Jun 13, 2026
12756e5
🐞 fix: 【点亮熄灭勋章】运行时不应该阻止【点赞】和【发弹幕】重新运行
andywang425 Jun 13, 2026
e577a7c
🐞 fix: 大量历史遗留bug修复
andywang425 Jun 13, 2026
77d8c81
🎈 perf: 一些细节优化
andywang425 Jun 13, 2026
17a6d5a
🐳 chore: 一些小优化和修复
andywang425 Jun 13, 2026
d5ab933
📃 docs: CLAUDE.md微调
andywang425 Jun 13, 2026
410c87f
📃 docs(README): QQ群
andywang425 Jun 13, 2026
e74bfd7
✨ feat: 直播任务在开始执行每个粉丝勋章的任务前先检查储蓄亲密度是否达到上限
andywang425 Jun 14, 2026
83a3949
🐳 chore: 更新前准备
andywang425 Jun 14, 2026
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
6 changes: 3 additions & 3 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ jobs:

steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Use Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: "24.13.0"

Expand Down Expand Up @@ -46,7 +46,7 @@ jobs:
} >> "$GITHUB_OUTPUT"

- name: Create GitHub Release
uses: softprops/action-gh-release@v2
uses: softprops/action-gh-release@v3
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
Expand Down
21 changes: 21 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,27 @@

## [Unreleased]

## [7.3.0] - 2026-6-14

### 新增

- 执行完任意粉丝勋章的粉丝团任务后,检查是否存在储蓄的亲密度以及是否达到储蓄上限,把结果输出到控制台日志
- 直播任务【点赞】、【发弹幕】和【观看直播】支持”完成目标轮次”和”跟随每日上限”两种模式
- 直播任务中的【点赞】任务支持等待开播后再点赞,【发弹幕】任务支持等待下播后再发弹幕
- 直播任务【点亮熄灭勋章】、【点赞】、【发弹幕】和【观看直播】完成后会调用接口检查粉丝团点亮/升级任务是否真的完成了,若实际未完成不标记完成状态,下次运行时会再次尝试完成
- 直播任务【点赞】、【发弹幕】和【观看直播】在开始执行每个粉丝勋章的任务前会先检查储蓄亲密度是否达到上限,如果已到上限,提示并跳过

### 修复

- 修复【观看直播】任务在计算已观看时长时会错误减少一些时长的bug(B站新版粉丝团任务的观看时长计算已精确到分钟)
- 修复【领取年度大会员权益】任务下次运行时间计算错误的bug

### 调整

- 如果无法获取某个粉丝勋章的点亮任务,跳过该粉丝勋章
- 手动重新运行【点亮熄灭勋章】时任务时会检测【点赞】和【发弹幕】任务是否正在运行,如果是则不允许重新运行
- 🐧 交流群由QQ频道改为QQ群:[点击链接加入群聊【BLTH交流群】(920309361)](https://qm.qq.com/q/thu1A6aRBC)

## [7.2.9] - 2026-5-24

### 新增
Expand Down
29 changes: 21 additions & 8 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,38 @@
# 项目概述

BLTH(Bilibili Live Tasks Helper)是基于 Vue 3 + Vite + vite-plugin-monkey + Element Plus + TypeScript 的用户脚本运行在 Bilibili 直播页面(`live.bilibili.com/直播间号`),实现自动完成每日任务、观看体验优化和页面元素清理。
BLTH(Bilibili Live Tasks Helper)是基于 Vue 3 + Vite + vite-plugin-monkey + Element Plus + TypeScript 的用户脚本(Userscript),通过用户脚本管理器(Tampermonkey/Violentmonkey)运行在 Bilibili 直播页面(`https://live.bilibili.com/直播间号`),实现自动完成每日任务、观看体验优化和页面元素清理。

# 常用命令

```sh
npm run dev # 启动 Vite 开发服务器(watch模式生成用户脚本
npm run dev # 启动 Vite 开发服务器并安装脚本(支持 HMR
npm run build # type-check 与 build+minify 并行
npm run type-check # 仅 Vue TypeScript 类型检查
npm run lint # ESLint + Stylelint 自动修复
npm run format # 使用 Prettier 格式化 src/
npm run preview # 提供编译产物安装链接的本地预览页
npm run preview # 打开提供编译产物安装链接的本地预览网页
```

无自动化测试。

# 架构

- 所有功能模块继承 `src/modules/BaseModule.ts`,由 `useModuleStore` 管理生命周期
- `main.ts` 分两阶段加载模块:先加载早期模块,再在 `document-body` 后加载默认模块
- 脚本分为三类:Main,SubMain,Other。同时打开多个直播间页面时,`useCacheStore.checkCurrentScriptType()` 会选出唯一 Main,避免部分模块重复执行
## 模块系统

所有模块继承 `src/modules/BaseModule.ts`,由 `src/stores/useModuleStore.ts` 管理生命周期。

模块分两类:

- **默认模块**(`src/modules/default/`):做准备工作,如基础数据获取,先于大多数功能模块加载
- **功能模块**:实现具体业务逻辑,如完成每日任务

## 配置持久化

`src/library/storage/` 通过 `GM_setValue`/`GM_getValue` 存取配置。

## 多标签页安全

脚本分三类:`Main`,`SubMain`,`Other`。同时打开多个直播间页面时,`src/stores/useCacheStore.ts` 会选出唯一 `Main` 脚本,避免部分模块重复加载。

# 分支

Expand All @@ -34,5 +47,5 @@ npm run preview # 提供编译产物安装链接的本地预览页

# 易踩坑点

- 新增第三方库须在 `vite.config.ts` 的 `externalGlobals` / `externalResource` 中通过 `@require` / `@resource` 引入,不打包进脚本
- 调试 `runAt: 'document-start'` 等早期模块时 dev 模式注入太晚,请用 `npm run build` 的产物测试
- 新增第三方库须写进 `vite.config.ts` 的 `externalGlobals`/`externalResource` 中,通过 `@require`/`@resource` 引入,不打包进脚本
- 调试早期模块(`runAt = 'document-start'`)时 dev 模式注入太晚,请用 `npm run build` 的产物测试
20 changes: 10 additions & 10 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@ npm run dev

### 分支

- **master**: `master` 分支是发布分支,准备发版时会通过 Pull Request 将 `dev` 合并到 `master`,合并后会触发 GitHub Actions 构建并创建 Release
- **dev**: `dev` 分支是开发分支。日常开发请基于 `upstream/dev` 创建独立的功能分支(不要直接在 fork 的 `master` 上改动),发起 PR 时记得把目标分支设置为 `dev`
- **master**: `master` 分支是发布分支,准备发版时会通过 Pull Request 将 `dev` 合并到 `master`,合并后会触发 GitHub Actions 构建并创建 Release
- **dev**: `dev` 分支是开发分支。日常开发请基于 `upstream/dev` 创建独立的功能分支(不要直接在 fork 的 `master` 上改动),发起 PR 时记得把目标分支设置为 `dev`

### 目录结构

Expand All @@ -72,7 +72,7 @@ BLTH
│ └─icons 图标组件
├─library 库文件
│ ├─... 每个文件夹代表一个库,此处省略
├─modules 功能模块
├─modules 模块
│ ├─... 这里有很多模块,此处省略
│ └─default 默认模块,性质较特殊
├─stores Pinia store
Expand All @@ -85,7 +85,7 @@ BLTH

假设现在B站给主站每日任务新添加了一个任务:给视频点赞。

首先打开 `src/modules` 文件夹,你会发现已经有了 `dailyTasks/mainSiteTasks` 这个文件夹,那么你只需在这个文件夹下新建一个 ts 文件即可。内容大概如下:
首先打开 `src/modules` 文件夹,你会发现已经有了 `dailyTasks/mainSiteTasks/` 这个文件夹,那么你只需在这个文件夹下新建一个 ts 文件即可。内容大概如下:

```ts
import BaseModule from '@/modules/BaseModule'
Expand All @@ -104,9 +104,9 @@ export default LikeTask

接着打开 `src/library/storage/defaultValue.ts`,加上该模块配置信息的默认值。

点赞涉及到对B站API的请求。在 `src/library/bili-api` 中找找看有没有给视频点赞的API,如果没有得自己添加。参考已有的API即可。
点赞涉及到对B站API的请求。在 `src/library/bili-api/` 中找找看有没有给视频点赞的API,如果没有得自己添加。参考已有的API即可。

点赞的视频从哪来?如果仔细阅读代码你会发现 `src/stores/useBiliStore` 的 `dynamicVideos` 里已经存储了许多动态视频,你可以直接用。如果有特殊需求,自己获取视频当然也是可以的。
点赞的视频从哪来?如果仔细阅读代码你会发现 `src/stores/useBiliStore.ts` 的 `dynamicVideos` 里已经存储了许多动态视频,你可以直接用。如果有特殊需求,自己获取视频当然也是可以的。

完成模块的编写后,在 `src/modules/dailyTasks/mainSiteTasks/index.ts` 中添加新模块的导出。

Expand Down Expand Up @@ -134,13 +134,13 @@ npm run format

### 强制性

- 对于`src/library/bili-api`中的每个 API,必须为其请求参数和响应内容编写详细的类型定义。[transform](https://github.com/ritz078/transform) 和 [quicktype](https://github.com/quicktype/quicktype) 或许会有帮助
- 如果添加了新的第三方库或资源文件,请修改`vite.config.ts`使其通过`@require``@resource`引入。
- 对于 `src/library/bili-api/` 中的每个 API,必须为其请求参数和响应内容编写详细的类型定义。[transform](https://github.com/ritz078/transform) 和 [quicktype](https://github.com/quicktype/quicktype) 或许会有帮助
- 如果添加了新的第三方库或资源文件,请修改 `vite.config.ts` 使其通过 `@require``@resource` 引入

### 建议性

- 尽可能详细地写类型定义,必要时才使用`any`/`unknown`
- 为逻辑复杂的代码编写注释
- 尽可能详细地写类型定义,必要时才使用`any`/`unknown`
- 为逻辑复杂的代码编写注释

## 编译

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@

# 交流群

- QQ 频道:[点我加入 aw 的频道](https://qun.qq.com/qqweb/qunpro/share?_wv=3&_wwv=128&appChannel=share&inviteCode=1W7eVLs&businessType=9&from=181074&biz=ka&shareSource=5)。
- QQ 群:[点击链接加入群聊【BLTH交流群】(920309361)](https://qm.qq.com/q/thu1A6aRBC)

# 参与开发

Expand Down
5 changes: 2 additions & 3 deletions eslint.config.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { globalIgnores } from 'eslint/config'
import { includeIgnoreFile } from '@eslint/compat'
import { globalIgnores, includeIgnoreFile } from 'eslint/config'
import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript'
import pluginVue from 'eslint-plugin-vue'
import skipFormatting from 'eslint-config-prettier/flat'
Expand Down Expand Up @@ -35,7 +34,7 @@ export default defineConfigWithVueTs(
argsIgnorePattern: '^_',
caughtErrorsIgnorePattern: '^_',
destructuredArrayIgnorePattern: '^_',
varsIgnorePattern: '^_',
varsIgnorePattern: '^_.+',
ignoreRestSiblings: true,
},
],
Expand Down
Loading