diff --git a/.agents/skills/bilibili-evolved-dev-server/SKILL.md b/.agents/skills/bilibili-evolved-dev-server/SKILL.md new file mode 100644 index 0000000000..672163ecce --- /dev/null +++ b/.agents/skills/bilibili-evolved-dev-server/SKILL.md @@ -0,0 +1,77 @@ +--- +name: bilibili-evolved-dev-server +description: Bilibili-Evolved local dev server workflow. Use when working in the Bilibili-Evolved repository and needing to start the dev server, compile or watch one registry component/plugin, create a component/plugin scaffold through the dev server, reason about HTTP build-on-request versus WebSocket commands, or use DevClient during local feature development. +--- + +# Bilibili Evolved Dev Server + +## Core Model + +- Read `AGENTS.md` and `CONTRIBUTING.md` before making repo changes. +- Use PowerShell syntax on Windows. +- Use `pnpm`; do not use npm. +- Start the local dev server with: + +```powershell +pnpm tsx dev-tools/dev-server/index.ts +``` + +- HTTP serves static resources only, but requesting `/registry/dist/components/.js` or `/registry/dist/plugins/.js` may trigger build-on-request before serving the file. +- WebSocket is the control plane for explicit commands such as build, watch, stop, create, session query, and graceful server shutdown. +- `dist/`, `registry/dist/`, and generated feature docs are not normal development changes. + +## Feature Commands + +Use these commands when the dev server is already running: + +```powershell +pnpm tsx dev-tools/dev-server/command.ts sessions +pnpm tsx dev-tools/dev-server/command.ts build component style/hide/banner +pnpm tsx dev-tools/dev-server/command.ts build plugin video/player/speed +pnpm tsx dev-tools/dev-server/command.ts watch component style/hide/banner +pnpm tsx dev-tools/dev-server/command.ts stop component style/hide/banner +pnpm tsx dev-tools/dev-server/command.ts shutdown +``` + +- `build` compiles one feature once without creating a watcher. +- `watch` starts or reuses one feature watcher. +- `stop` stops one watcher. +- `sessions` prints active watched feature paths. +- `shutdown` gracefully exits the dev server and its core and feature watchers. Prefer it over terminating the process tree externally. +- Prefer these commands over full registry builds when validating one component or plugin. + +## Creating Features + +Create new registry component/plugin scaffolds through the dev server command: + +```powershell +$authorName = gh api user --jq ".login" +$authorLink = gh api user --jq ".html_url" +pnpm tsx dev-tools/dev-server/command.ts create component style/my-feature myFeature "My Feature" $authorName $authorLink "Feature description." +pnpm tsx dev-tools/dev-server/command.ts create plugin video/player/my-plugin myPlugin "My Plugin" $authorName $authorLink "Plugin description." +``` + +Before creating a feature, get the current GitHub user from `gh` with `gh api user --jq ".login"` and use that as `authorName`; get the profile URL with `gh api user --jq ".html_url"` and use that as `authorLink`. If `gh` is unavailable, not authenticated, or returns a blank value, ask the user for the GitHub username/profile link before running `create`. Do not use the code agent name, local OS username, or local Git `user.name` / `user.email` for author metadata. + +After creation, inspect and edit the generated `index.ts` and `index.md`. Keep component/plugin names specific and camelCase, include author metadata for contributor-created features, and keep descriptions in `index.md`. + +## DevClient + +- DevClient connects to `ws://localhost:`. +- Starting debug from the settings panel rewrites the feature update URL to the local `/registry/dist/...` URL and relies on HTTP build-on-request. +- Stopping debug, losing the dev server, or seeing a feature session disappear should restore the original update URL. +- If debugging state looks wrong, query sessions first, then inspect DevClient `devRecords` and auto-update URLs. + +## Browser Checks + +- Bilibili Evolved depends on a userscript manager extension such as Tampermonkey. The built-in browser and Playwright do not provide that extension environment and are not reliable for runtime behavior checks. +- If real browser validation is useful and available, try controlling the user's Chrome browser because it can use the installed userscript manager, extension permissions, login state, and real Bilibili pages. +- Browser validation is optional for this skill. If Chrome, the userscript manager, account state, or the target page is unavailable, continue the dev server workflow and report that browser validation was not performed. + +## Validation + +- For TypeScript changes, run `pnpm run type`. +- For lint-sensitive changes, run `pnpm run lint-check`. +- For core userscript changes, use the dev server's core watcher, which automatically compiles the development build. +- For registry feature changes, run `pnpm tsx dev-tools/dev-server/command.ts build ` while the dev server is running; the compiled output is served from memory. +- `pnpm run build-core` and `pnpm run build-features` are production CI or release validations. Run them locally only when explicitly requested, reproducing a CI failure, changing shared build infrastructure, or preparing a release. diff --git a/.agents/skills/bilibili-evolved-dev-server/agents/openai.yaml b/.agents/skills/bilibili-evolved-dev-server/agents/openai.yaml new file mode 100644 index 0000000000..9f14d4bcdf --- /dev/null +++ b/.agents/skills/bilibili-evolved-dev-server/agents/openai.yaml @@ -0,0 +1,4 @@ +interface: + display_name: "Bilibili Evolved Dev Server" + short_description: "Use the local dev server and feature commands." + default_prompt: "Use $bilibili-evolved-dev-server to compile or watch one Bilibili Evolved feature with the local dev server." diff --git a/.babelrc b/.babelrc deleted file mode 100644 index aa532f11ad..0000000000 --- a/.babelrc +++ /dev/null @@ -1,17 +0,0 @@ -{ - "presets": [ - // "@babel/preset-env", - [ - "@babel/preset-typescript", - { - "allExtensions": true - } - ] - ], - "plugins": [ - "@babel/plugin-proposal-class-properties", - "@babel/plugin-proposal-optional-chaining", - "@babel/plugin-proposal-nullish-coalescing-operator", - "./builder/node/@babel/plugin-top-level-return" - ] -} \ No newline at end of file diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 0000000000..be10b4631d --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,19 @@ +> 1% +last 2 versions +not dead +chrome > 105 +edge > 105 +firefox > 127 +safari > 15.4 +not and_chr > 0 +not and_ff > 0 +not and_qq > 0 +not and_uc > 0 +not android > 0 +not baidu > 0 +not ios_saf > 0 +not kaios > 0 +not op_mob > 0 +not op_mini all +not samsung > 0 +not ie > 0 \ No newline at end of file diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..a9c11d3e02 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Tab indentation +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +quote_type = single \ No newline at end of file diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000000..c0ba0a5b9b --- /dev/null +++ b/.eslintignore @@ -0,0 +1,7 @@ +packages/ +typings/ +**/dist/ +dev/ +node_modules/ +!.github-json/ +.eslintrc.* diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000000..3b2bf44ec3 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,111 @@ +module.exports = { + env: { + browser: true, + es2020: true, + }, + extends: [ + 'plugin:vue/recommended', + 'plugin:@typescript-eslint/recommended', + 'airbnb-base', + 'plugin:prettier/recommended', + ], + globals: { + Atomics: 'readonly', + SharedArrayBuffer: 'readonly', + }, + parser: 'vue-eslint-parser', + parserOptions: { + ecmaVersion: 2020, + parser: '@typescript-eslint/parser', + sourceType: 'module', + }, + plugins: ['vue', '@typescript-eslint', 'prettier'], + rules: { + 'prettier/prettier': 'error', + + 'import/no-unresolved': 'off', + 'import/extensions': 'off', + 'import/no-extraneous-dependencies': 'off', + 'import/prefer-default-export': 'off', + 'import/no-default-export': 'error', + 'import/no-named-default': 'off', + + '@typescript-eslint/member-delimiter-style': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-unused-vars': 'error', + '@typescript-eslint/no-shadow': ['error', { builtinGlobals: false }], + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-use-before-define': ['error'], + '@typescript-eslint/no-redeclare': 'error', + '@typescript-eslint/naming-convention': [ + 'error', + { + selector: 'enumMember', + format: ['PascalCase'], + }, + ], + + 'vue/multi-word-component-names': 'off', + 'vue/max-attributes-per-line': 'off', + 'vue/html-self-closing': 'off', + 'vue/no-v-html': 'off', + 'vue/require-prop-types': 'off', + 'vue/one-component-per-file': 'off', + 'vue/singleline-html-element-content-newline': 'off', + + // 使用 @typescript-eslint/no-unused-vars, 否则 interface 都是 unused + 'no-unused-vars': 'off', + 'no-console': 'off', + 'no-undef': 'off', + 'no-param-reassign': 'off', + 'no-continue': 'off', + 'no-plusplus': 'off', + 'no-eval': 'off', + 'no-useless-constructor': 'off', + 'no-unused-expressions': 'off', + 'no-await-in-loop': 'off', + 'no-restricted-syntax': 'off', + 'no-useless-escape': 'off', + 'no-empty-function': ['error', { allow: ['constructors'] }], + 'no-return-assign': ['error', 'except-parens'], + 'no-redeclare': 'off', + 'no-script-url': 'off', + 'no-shadow': 'off', + 'no-use-before-define': 'off', + 'no-alert': 'off', + 'no-restricted-globals': 'off', + + 'arrow-body-style': 'off', + 'prefer-arrow-callback': 'off', + 'object-curly-newline': 'off', + 'linebreak-style': 'off', + camelcase: 'off', + 'lines-between-class-members': 'off', + radix: ['error', 'as-needed'], + 'max-classes-per-file': 'off', + 'class-methods-use-this': 'off', + 'prefer-destructuring': [ + 'error', + { + VariableDeclarator: { + array: false, + object: true, + }, + AssignmentExpression: { + array: false, + object: false, + }, + }, + ], + curly: ['error', 'all'], + }, + overrides: [ + { + files: ['*.vue', 'shims.d.ts', 'webpack/**/*.ts', 'registry/webpack/**/*.ts'], + rules: { + 'import/no-default-export': 'off', + }, + }, + ], +} diff --git "a/.github/DISCUSSION_TEMPLATE/\345\212\237\350\203\275\345\273\272\350\256\256-ideas.yml" "b/.github/DISCUSSION_TEMPLATE/\345\212\237\350\203\275\345\273\272\350\256\256-ideas.yml" new file mode 100644 index 0000000000..8632517c90 --- /dev/null +++ "b/.github/DISCUSSION_TEMPLATE/\345\212\237\350\203\275\345\273\272\350\256\256-ideas.yml" @@ -0,0 +1,24 @@ +title: 功能建议 +labels: [] +body: + - type: markdown + attributes: + value: | + 默认您已阅读 [常见问题解答](https://github.com/the1812/Bilibili-Evolved/discussions/1301) + 请勿重复发起, 发之前记得搜索一下. 如果需要反馈 Bug, 请前往 [Issues](https://github.com/the1812/Bilibili-Evolved/issues) 发起. + - type: textarea + id: description + attributes: + label: 期望的效果 + description: 描述你遇到的问题, 以及建议的解决方式 + placeholder: 请输入 + validations: + required: true + - type: input + id: script-version + attributes: + label: 脚本版本 + description: 可在设置面板的关于弹窗中找到脚本版本信息 + placeholder: 请输入 + validations: + required: true diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000000..7d2d95364f --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,2 @@ +custom: + - https://github.com/the1812/Bilibili-Evolved/blob/preview/doc/donate.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 676c6b480e..0000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -name: Bug 反馈 -about: 功能运行不正常 / 失效 - ---- - - - - - - -**关于哪一项功能** - - -**问题描述** - - - -**脚本版本** - - - -**浏览器版本** - - - -**错误信息** - - - - -**附加截图** diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000000..28e4cc93d8 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,107 @@ +name: Bug 反馈 +description: 功能运行不正常 / 失效 +body: + - type: markdown + attributes: + value: | + 默认您已阅读 [Issues 须知](https://github.com/the1812/Bilibili-Evolved/blob/preview/doc/issue-rules.md) + 请勿重复发起, 发之前记得看下[置顶问题 (Pinned issues)](https://github.com/the1812/Bilibili-Evolved/issues) (如果有的话), 以及[常见问题解答](https://github.com/the1812/Bilibili-Evolved/discussions/1301) + - type: textarea + id: feature + attributes: + label: 对应功能 + description: | + (指本脚本的某项具体功能, 不是指 b 站的) 可以在设置中尝试开启 / 关闭某项功能来排查. 最好能附上功能的 Commit 值 (在设置里功能选项的底部). + + 如果组件包含作者的信息 (by @xxx), 请在这里 at 他们 + 请注意: 以下功能已不再维护 (不再修复 bug 和添加新功能), 但是你仍然可以为其提供 Pull Request. + - 直播间自动抽奖 + - 默认播放器模式 + - 播放器置顶 + - 播放器定位 + placeholder: 请输入 + validations: + required: true + - type: textarea + id: description + attributes: + label: 问题描述 + description: 如何重现此问题, 在哪个页面里出现这个问题, 比如视频相关的可以提供一下 av / BV 号 + placeholder: 请输入 + validations: + required: true + - type: input + id: script-version + attributes: + label: 脚本版本 + description: 可在设置面板的关于弹窗中找到脚本版本信息 + placeholder: 请输入 + validations: + required: true + - type: input + id: script-manager-version + attributes: + label: 脚本管理器及版本 + description: 例如 Tampermonkey v4.19.6176 + placeholder: 请输入 + validations: + required: true + - type: input + id: browser-version + attributes: + label: 浏览器及版本 + description: 可在浏览器的关于页面中找到浏览器版本信息 + placeholder: 请输入 + validations: + required: true + - type: textarea + id: player-logs + attributes: + label: 播放器日志 + description: | + 处于视频页面时, 可在脚本设置面板的关于弹窗中通过反馈按钮自动带入 + render: Shell + placeholder: 请输入 + validations: + required: false + - type: dropdown + id: player-codec + attributes: + label: 播放策略 + description: 在 b 站播放器设置 - 更多播放设置 里可以看到播放策略 + options: + - 默认 + - AV1 + - HEVC + - AVC + validations: + required: true + - type: textarea + id: logs + attributes: + label: 错误信息 + description: | + 脚本直接报告的错误信息, 或者浏览器开发者工具 (F12 或 Ctrl+Shift+I 召唤) 里 Console / 控制台 一栏的输出, 太长的话可以截图放下面.
+ render: Shell + placeholder: 请输入 + validations: + required: true + - type: textarea + id: screenshots + attributes: + label: 附加截图 + placeholder: 可在此粘贴图片 + - type: textarea + id: kind_reminder + attributes: + label: 致遇到了相同问题准备回复的人 + description: 请勿修改文本框中的内容 + value: | + **太长不看**: + 1、遇到了相同的问题:**请用左下角的 reaction 点赞** + 2、实时关注该 Issue 的后续进展:**请用 Issue 页上的 Subscribe 功能**(在 PC 端按钮通常位于页面右侧)。 + **_请您回复前务必确认您有在本 Issue 之外补充了其它相关信息(比如 Log)再行回复以免对他人造成不必要的困扰_** +
+ 完整版 + 由于每个 Issue 甚至整个项目都是可以订阅通知的, 对于已经有人汇报过的 Bug, 如果您也遇到了并且没有其他信息要补充, 可以直接在左下点个赞表示 +1, 不要再去新增评论。想关注后续的可以用 Subscribe,Subscribe 之后该 Issue 如果有变动都可以收到通知,如果不想被回复打扰可以使用更加进阶的 Customize 功能,勾选 "Closed" & "Reopened"。Closed 通常代表该 Issue 已被解决,极少数情况下的 Reopened 代表该 Issue 的问题重新出现。如果您新增了无意义评论,因为 Issue 这个 bug tracker 与邮件列表类似,订阅某个 Issue 的用户会在每次这个 Issue 有新的动态时收到一封新的提醒邮件。也就是说,在 Issue 中的一个不能提供新的信息的评论,相当于给所有订阅这个 Issue 的用户发了一封垃圾邮件(spam)。尤其项目的维护者也是订阅者中的一员,太多垃圾邮件会对维护者带来很多不必要的困扰。发送垃圾邮件在开源社区通常是不那么受欢迎的行为。 +
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 6d3a4d06b2..f7e7c1ece3 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,17 +1,17 @@ blank_issues_enabled: false contact_links: - - name: 功能建议 - url: https://github.com/the1812/Bilibili-Evolved/discussions/new?category=ideas - about: 关于新功能的想法 / 现有功能的改进 - - name: 提问 / 答疑 - url: https://github.com/the1812/Bilibili-Evolved/discussions/new?category=Q-A - about: 其他疑问 - name: 转到讨论区 url: https://github.com/the1812/Bilibili-Evolved/discussions - about: Issues 用于反馈 Bug, 新的功能建议和提问答疑请到讨论区查看 + about: Issues 用于反馈 Bug, 新的功能建议和提问答疑请到讨论区发起 - name: 查看 Issues 须知 url: https://github.com/the1812/Bilibili-Evolved/blob/preview/doc/issue-rules.md about: 默认所有 Issues 发起者均已了解此处的内容 + - name: 查看讨论区指南 + url: https://github.com/the1812/Bilibili-Evolved/discussions/1297 + about: 默认所有讨论发起者均已了解此处的内容 - name: 查看置顶问题 url: https://github.com/the1812/Bilibili-Evolved/issues about: 在 Pinned issues 中会包含一些近期常见问题, 已有的其他问题也会在下面列出, 请务必查看避免重复发起 + - name: 查看常见问题 + url: https://github.com/the1812/Bilibili-Evolved/discussions/1301 + about: 一些老生常谈的问题, 或许里面就有你想问的 diff --git a/.github/scripts/auto-publish-classify.mjs b/.github/scripts/auto-publish-classify.mjs new file mode 100644 index 0000000000..a70ddecfb1 --- /dev/null +++ b/.github/scripts/auto-publish-classify.mjs @@ -0,0 +1,167 @@ +import { execFileSync } from 'node:child_process' +import { appendFileSync } from 'node:fs' +import { randomUUID } from 'node:crypto' + +const baseRef = process.env.BASE_REF +const prNumber = process.env.AUTO_PUBLISH_PR_NUMBER + +if (!baseRef) { + throw new Error('BASE_REF is required') +} + +const runGit = (args, options = {}) => { + return execFileSync('git', args, { + encoding: 'utf8', + stdio: options.stdio ?? ['ignore', 'pipe', 'pipe'], + }) +} + +const appendOutput = (name, value) => { + if (!process.env.GITHUB_OUTPUT) { + return + } + if (value.includes('\n')) { + const delimiter = `EOF_${randomUUID()}` + appendFileSync(process.env.GITHUB_OUTPUT, `${name}<<${delimiter}\n${value}\n${delimiter}\n`) + return + } + appendFileSync(process.env.GITHUB_OUTPUT, `${name}=${value}\n`) +} + +const appendSummary = value => { + if (process.env.GITHUB_STEP_SUMMARY) { + appendFileSync(process.env.GITHUB_STEP_SUMMARY, value) + } +} + +const scriptBuildOutputPathPrefixes = ['dist/', 'src/', 'webpack/'] +const scriptBuildOutputFiles = new Set([ + '.browserslistrc', + 'package.json', + 'pnpm-lock.yaml', + 'tsconfig.json', + 'tsconfig.type-check.json', +]) + +const affectsScriptBuildOutput = path => { + return ( + scriptBuildOutputFiles.has(path) || + scriptBuildOutputPathPrefixes.some(prefix => path.startsWith(prefix)) + ) +} + +const report = ({ + publishable, + candidateRef, + safeCount = 0, + scriptBuildOutputCount = 0, + reason, +}) => { + appendOutput('base_ref', baseRef) + appendOutput('publishable', String(publishable)) + appendOutput('reason', reason) + + appendSummary(`## Auto Publishable: ${publishable} + +- Base: \`${baseRef}\` +- Candidate: \`${candidateRef || 'none'}\` +- Safe changes: \`${safeCount}\` +- Script build output changes: \`${scriptBuildOutputCount}\` + +\`\`\`text +${reason} +\`\`\` +`) + + console.log(`auto-publish publishable=${publishable}`) +} + +runGit( + ['fetch', 'origin', 'preview-fixes', 'preview-features', 'preview', 'master', 'master-cdn'], + { + stdio: 'inherit', + }, +) + +let candidateRef = process.env.AUTO_PUBLISH_CANDIDATE_REF +if (prNumber) { + candidateRef = 'pr-merge' + try { + runGit(['fetch', 'origin', `pull/${prNumber}/merge:${candidateRef}`], { stdio: 'inherit' }) + } catch { + report({ + publishable: false, + candidateRef, + reason: 'PR merge ref is unavailable, so auto publish cannot be verified.', + }) + process.exit(0) + } +} + +if (!candidateRef) { + if (baseRef === 'preview-fixes' || baseRef === 'preview-features') { + candidateRef = `origin/${baseRef}` + } +} + +const rangesByBaseRef = { + 'preview-fixes': [ + `origin/preview-features...${candidateRef}`, + 'origin/preview...origin/preview-features', + `origin/master...${candidateRef}`, + `origin/master-cdn...${candidateRef}`, + ], + 'preview-features': [`origin/preview...${candidateRef}`], +} + +const diffEntries = new Set() +for (const range of rangesByBaseRef[baseRef] ?? []) { + const output = runGit(['diff', '--name-status', range]) + output + .split('\n') + .map(line => line.trim()) + .filter(Boolean) + .forEach(line => diffEntries.add(line)) +} + +const safeEntries = [] +const scriptBuildOutputEntries = [] + +for (const entry of [...diffEntries].sort()) { + const [status, first, second] = entry.split('\t') + const paths = status.startsWith('R') || status.startsWith('C') ? [first, second] : [first] + + const displayEntry = `${status} ${paths.join(' ')}` + if (paths.some(affectsScriptBuildOutput)) { + scriptBuildOutputEntries.push(displayEntry) + } else { + safeEntries.push(displayEntry) + } +} + +const publishable = safeEntries.length > 0 && scriptBuildOutputEntries.length === 0 +let reasonEntries = safeEntries +let reasonHeader = 'no safe changes' +if (publishable) { + reasonHeader = 'publishable branch diff' +} else if (scriptBuildOutputEntries.length > 0) { + reasonEntries = scriptBuildOutputEntries + reasonHeader = 'script build output branch diff' +} +const visibleEntries = reasonEntries.slice(0, 20) +const overflow = Math.max(0, reasonEntries.length - visibleEntries.length) +const reasonLines = [ + `${reasonHeader}: ${baseRef}`, + ...(visibleEntries.length > 0 ? visibleEntries : ['none']), +] +if (overflow > 0) { + reasonLines.push(`and ${overflow} more`) +} + +report({ + publishable, + candidateRef, + safeCount: safeEntries.length, + scriptBuildOutputCount: scriptBuildOutputEntries.length, + reason: reasonLines.join('\n'), +}) diff --git a/.github/workflows/auto-publish.yml b/.github/workflows/auto-publish.yml new file mode 100644 index 0000000000..133a7dfcc8 --- /dev/null +++ b/.github/workflows/auto-publish.yml @@ -0,0 +1,114 @@ +name: Auto Publish + +on: + pull_request_target: + types: [closed] + branches: + - preview-fixes + - preview-features + +permissions: + contents: write + pull-requests: read + +concurrency: + group: auto-publish + cancel-in-progress: false + queue: max + +jobs: + auto-publish-classify: + name: Auto Publish Check + if: ${{ github.event.pull_request.merged == true }} + runs-on: ubuntu-latest + outputs: + base_ref: ${{ steps.classify.outputs.base_ref }} + publishable: ${{ steps.classify.outputs.publishable }} + reason: ${{ steps.classify.outputs.reason }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Classify branch diff + id: classify + env: + BASE_REF: ${{ github.event.pull_request.base.ref }} + run: node .github/scripts/auto-publish-classify.mjs + + auto-publish-preview-fixes: + name: Publish Preview Fixes + needs: auto-publish-classify + if: ${{ needs.auto-publish-classify.outputs.publishable == 'true' && needs.auto-publish-classify.outputs.base_ref == 'preview-fixes' }} + runs-on: ubuntu-latest + env: + AUTO_PUBLISH_TOKEN: ${{ secrets.AUTO_PUBLISH_TOKEN }} + steps: + - name: Check publish token + run: | + if [ -z "${AUTO_PUBLISH_TOKEN}" ]; then + echo "AUTO_PUBLISH_TOKEN is required for auto publish pushes." + exit 1 + fi + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: ${{ secrets.AUTO_PUBLISH_TOKEN }} + - name: Configure git + run: | + git config user.email "github-actions[bot]@users.noreply.github.com" + git config user.name "github-actions[bot]" + git remote set-url origin "https://x-access-token:${AUTO_PUBLISH_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" + - name: Publish preview-fixes + run: | + git fetch origin preview-fixes preview-features preview master master-cdn + + git switch --detach origin/preview-features + git merge --no-edit origin/preview-fixes + git push origin HEAD:preview-features + preview_features_head=$(git rev-parse HEAD) + + git switch --detach origin/preview + git merge --no-edit "${preview_features_head}" + git push origin HEAD:preview + + git switch --detach origin/master + git merge --no-edit origin/preview-fixes + git push origin HEAD:master + + git switch --detach origin/master-cdn + git merge --no-edit origin/preview-fixes + git push origin HEAD:master-cdn + + auto-publish-preview-features: + name: Publish Preview Features + needs: auto-publish-classify + if: ${{ needs.auto-publish-classify.outputs.publishable == 'true' && needs.auto-publish-classify.outputs.base_ref == 'preview-features' }} + runs-on: ubuntu-latest + env: + AUTO_PUBLISH_TOKEN: ${{ secrets.AUTO_PUBLISH_TOKEN }} + steps: + - name: Check publish token + run: | + if [ -z "${AUTO_PUBLISH_TOKEN}" ]; then + echo "AUTO_PUBLISH_TOKEN is required for auto publish pushes." + exit 1 + fi + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: ${{ secrets.AUTO_PUBLISH_TOKEN }} + - name: Configure git + run: | + git config user.email "github-actions[bot]@users.noreply.github.com" + git config user.name "github-actions[bot]" + git remote set-url origin "https://x-access-token:${AUTO_PUBLISH_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" + - name: Publish preview-features + run: | + git fetch origin preview-features preview + + git switch --detach origin/preview + git merge --no-edit origin/preview-features + git push origin HEAD:preview diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000000..0a39dd8244 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,53 @@ +name: Build +on: + workflow_dispatch: + push: + branches: + - master + - master-cdn + - preview +jobs: + build: + name: Build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: '0' + - name: Setup git + run: |- + git config --local user.email github-actions[bot]@users.noreply.github.com + git config --local user.name github-actions[bot] + git config --global core.autocrlf true + git config --global core.safecrlf false + - name: Install dependencies + uses: pnpm/action-setup@v4 + with: + run_install: true + - name: Type check + run: pnpm run type + - name: ESLint check + run: pnpm run lint + - name: Build core + run: pnpm run build-core + - name: Build features + run: | + cd registry + pnpm install + cd ../ + pnpm run build-features + - name: Git commit + id: commit + run: | + git add --all + git commit -m "CI build" + continue-on-error: true + - name: Git push + uses: ad-m/github-push-action@master + if: ${{ steps.commit.outcome == 'success' }} + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + branch: ${{ github.ref }} + - name: Log + if: ${{ steps.commit.outcome != 'success' }} + run: echo Nothing to commit. diff --git a/.github/workflows/pull-request-check.yml b/.github/workflows/pull-request-check.yml new file mode 100644 index 0000000000..5445f85bc6 --- /dev/null +++ b/.github/workflows/pull-request-check.yml @@ -0,0 +1,44 @@ +name: Pull Request Check +on: + - pull_request +jobs: + auto-publish-classify: + name: Auto Publish Check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: '0' + - name: Classify auto publish + env: + BASE_REF: ${{ github.event.pull_request.base.ref }} + AUTO_PUBLISH_PR_NUMBER: ${{ github.event.pull_request.number }} + run: node .github/scripts/auto-publish-classify.mjs + check: + name: Pull Request Check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.head.sha }} + fetch-depth: '0' + - name: Install dependencies + uses: pnpm/action-setup@v4 + with: + run_install: true + - name: PR file check + run: pnpm run check-pr-files + - name: Type check + run: pnpm run type + - name: ESLint check + run: pnpm run lint-check + - name: Build core + run: pnpm run build-core + - name: Build features + run: | + cd registry + pnpm install + cd ../ + pnpm run build-features + - name: Log + run: echo Check complete. diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml deleted file mode 100644 index 862fd4b2b5..0000000000 --- a/.github/workflows/stale.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: Stale Bot - -on: - schedule: - - cron: "0 0 * * *" - -jobs: - stale: - - runs-on: ubuntu-latest - - steps: - - uses: actions/stale@v1 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - stale-issue-message: 'This issue is stale because it has been open 180 days with no activity. Remove stale label or comment or this will be closed in 1 day.' - stale-pr-message: 'This pull request is stale because it has been open 180 days with no activity. Remove stale label or comment or this will be closed in 1 day.' - stale-issue-label: 'stale' - stale-pr-label: 'stale' - exempt-issue-label: long-term - exempt-pr-label: long-term - days-before-stale: 180 - days-before-close: 1 diff --git a/.gitignore b/.gitignore index 6e8c381876..a3ba82b4af 100644 --- a/.gitignore +++ b/.gitignore @@ -1,276 +1,10 @@ -bilibili-evolved.dev.js .DS_Store -builder/dotnet/Properties -.node_modules/ -.ts-output/ -.sass-output/ -package-lock.json -dark.css -dark-template.css -_dark-template.scss -min/dark-slice-*.min.scss -min/dark-slice-*.min.css -doc/roadmap.* -*.csx +node_modules/ *.backup.* -*.vue.ts - -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. - -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ - -# Visual Studio 2015 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUNIT -*.VisualState.xml -TestResult.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# DNX -project.lock.json -project.fragment.lock.json -artifacts/ - -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.pch -*.pdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj +dev/ *.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# TODO: Comment the next line if you want to checkin your web deploy settings -# but database connection strings (with potential passwords) will be unencrypted -#*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# The packages folder can be ignored because of Package Restore -**/packages/* -# except build/, which is used as an MSBuild target. -!**/packages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/packages/repositories.config -# NuGet v3's project.json files produces more ignoreable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -node_modules/ -orleans.codegen.cs - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm - -# SQL Server files -*.mdf -*.ldf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# JetBrains Rider -.idea/ -*.sln.iml - -# CodeRush -.cr/ - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc +dist/stats.html +dist/profile.json +dist/bilibili-evolved.dev.user.js +dev-tools/**/dist/ +.idea diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000000..127347cd3d --- /dev/null +++ b/.prettierrc @@ -0,0 +1,8 @@ +{ + "semi": false, + "singleQuote": true, + "trailingComma": "all", + "arrowParens": "avoid", + "endOfLine": "auto", + "printWidth": 100 +} \ No newline at end of file diff --git a/.vscode/dynamic-import.code-snippets b/.vscode/dynamic-import.code-snippets new file mode 100644 index 0000000000..3db8cb8a43 --- /dev/null +++ b/.vscode/dynamic-import.code-snippets @@ -0,0 +1,24 @@ +{ + // Place your Bilibili Evolved workspace snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and + // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope + // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is + // used to trigger the snippet and the body will be expanded and inserted. Possible variables are: + // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. + // Placeholders with the same ids are connected. + // Example: + // "Print to console": { + // "scope": "javascript,typescript", + // "prefix": "log", + // "body": [ + // "console.log('$1');", + // "$2" + // ], + // "description": "Log output to console" + // } + "Dynamic import": { + "scope": "javascript, typescript", + "prefix": "import", + "body": "const { $2 } = await import('$1')$0", + "description": "Dynamic import" + } +} \ No newline at end of file diff --git a/.vscode/html-in-js.code-snippets b/.vscode/html-in-js.code-snippets index 600554cb70..54fd40f5ad 100644 --- a/.vscode/html-in-js.code-snippets +++ b/.vscode/html-in-js.code-snippets @@ -1,5 +1,5 @@ { - // Place your Bilibili Evo workspace snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and + // Place your Bilibili Evolved workspace snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is // used to trigger the snippet and the body will be expanded and inserted. Possible variables are: diff --git a/.vscode/launch.json b/.vscode/launch.json index cc1d152188..290d59c2f3 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -4,28 +4,5 @@ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ - { - "name": "重新编译 rebuild", - "type": "coreclr", - "request": "launch", - "program": "${workspaceFolder}/builder/dotnet/bin/Debug/netcoreapp3.1/build.dll", - "args": [], - "cwd": "${workspaceFolder}", - "stopAtEntry": false, - "console": "internalConsole", - "preLaunchTask": "构建编译器 (Debug模式) compile builder" - }, - { - "name": "监视 watch", - "type": "coreclr", - "request": "launch", - "program": "${workspaceFolder}/builder/dotnet/bin/Debug/netcoreapp3.1/build.dll", - "args": ["watch"], - "cwd": "${workspaceFolder}", - "stopAtEntry": false, - "internalConsoleOptions": "neverOpen", - "console": "integratedTerminal", - "preLaunchTask": "构建编译器 (Debug模式) compile builder" - } ] } \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 36314678a5..37c9752f7b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,80 +1,153 @@ { - "todohighlight.exclude": [ - "**/node_modules/**", - "**/bower_components/**", - "**/dist/**", - "**/build/**", - "**/.vscode/**", - "**/.github/**", - "**/_output/**", - "**/*.min.*", - "**/*.map", - "**/.next/**", - "**/.vs/**", - "**/build-scripts/**" - ], - "cSpell.words": [ - "Bangumi", - "Biliplus", - "Bing", - "Danmaku", - "Doujin", - "HEVC", - "Liveroom", - "Otaku", - "Swiper", - "Violentmonkey", - "Vuex", - "WASD", - "Watchlater", - "afterbegin", - "afterend", - "bili", - "bilibili", - "bofqi", - "btns", - "bvid", - "clipboardy", - "cntr", - "compositionend", - "compositionstart", - "csrf", - "ctnr", - "danmakus", - "debounced", - "downloaders", - "dpis", - "durl", - "githubusercontent", - "gridview", - "haruna", - "hdslb", - "iconfont", - "imgleft", - "jinkela", - "jsdelivr", - "kanban", - "kichiku", - "materialdesignicons", - "medialist", - "overscroll", - "pako", - "protobuf", - "qrcode", - "rcmd", - "reloadable", - "reloadables", - "remd", - "repo", - "repost", - "reposts", - "superchat", - "tabindex", - "truetype", - "xmlhttp" - ], - "javascript.validate.enable": true, - "files.associations": { - "*.user.js": "plain" - } -} \ No newline at end of file + "todohighlight.exclude": [ + "**/node_modules/**", + "**/bower_components/**", + "**/dist/**", + "**/build/**", + "**/.vscode/**", + "**/.github/**", + "**/_output/**", + "**/*.min.*", + "**/*.map", + "**/.next/**", + "**/.vs/**", + "**/build-scripts/**" + ], + "cSpell.words": [ + "afterbegin", + "afterend", + "akari", + "alac", + "BALH", + "Bangumi", + "bcache", + "bevo", + "bili", + "bilibili", + "Biliplus", + "Bing", + "Blockable", + "bofqi", + "BVID", + "camelcase", + "cascader", + "clipboardy", + "cntr", + "compositionend", + "compositionstart", + "contenteditable", + "csrf", + "ctnr", + "Danmaku", + "danmakus", + "debounced", + "devtools", + "Doujin", + "downloaders", + "dpis", + "durl", + "epid", + "esbuild", + "ffmetadata", + "flac", + "Fullscreen", + "githubusercontent", + "Greasemonkey", + "guochuang", + "haruna", + "hdslb", + "HEVC", + "iconfont", + "Iframes", + "Interop", + "jinkela", + "jsdelivr", + "jszip", + "kanban", + "keymap", + "kichiku", + "linebreak", + "Liveroom", + "materialdesignicons", + "matroska", + "MCDN", + "medialist", + "mimetype", + "minmax", + "mixins", + "Muuri", + "muxer", + "overscroll", + "pako", + "PCDN", + "plusplus", + "pnpm", + "Popcap", + "popperjs", + "preload", + "protobuf", + "pubdate", + "rbvp", + "rcount", + "reimu", + "reloadable", + "reloadables", + "repo", + "repost", + "reposts", + "Roadmap", + "roomid", + "rpid", + "saturationv", + "Sendbar", + "sortablejs", + "streamsaver", + "superchat", + "Swiper", + "tabindex", + "tagid", + "Tampermonkey", + "Touhou", + "trendings", + "truetype", + "uname", + "UPOWER", + "usercard", + "userscript", + "Violentmonkey", + "vnode", + "Vuex", + "Wasm", + "watchlater", + "webfullscreen", + "woff", + "xmlhttp" + ], + "svg.preview.background": "transparent", + "files.associations": { + // don't highlight generated files + "*.user.js": "plaintext", + "**/dist/**/*.js": "plaintext" + }, + "search.exclude": { + "**/dev": true, + "**/dist": true, + "**/pnpm-lock.yaml": true + }, + "eslint.format.enable": true, + "[typescript]": { + "editor.defaultFormatter": "dbaeumer.vscode-eslint" + }, + "[vue]": { + "editor.defaultFormatter": "dbaeumer.vscode-eslint" + }, + "explorer.fileNesting.patterns": { + "*.ts": "${capture}.js", + "*.js": "${capture}.js.map, ${capture}.min.js, ${capture}.d.ts", + "*.jsx": "${capture}.js", + "*.tsx": "${capture}.ts", + "tsconfig.json": "tsconfig.*.json", + "package.json": "package-lock.json, yarn.lock, pnpm-lock.yaml, .*", + "index.ts": "index.*.ts, index.md, index.*.md" + } +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json index a1805e0c07..6a78f5e2e6 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -4,122 +4,121 @@ "version": "2.0.0", "tasks": [ { - "label": "生产编译 production", - "type": "shell", - "command": "dotnet builder/dotnet/publish/build.dll production", - "options": { - "cwd": "./" - }, - "group": { - "kind": "build", - "isDefault": true - }, - "presentation": { - "echo": false, - "reveal": "always", - "focus": true, - "panel": "shared", - "showReuseMessage": false - }, - "problemMatcher": [] + "type": "shell", + "command": "pnpm tsx ./dev-tools/dev-server/index.ts", + "group": "build", + "problemMatcher": [], + "label": "启动开发服务 dev-server" }, { - "label": "重新编译 rebuild", "type": "shell", - "command": "dotnet builder/dotnet/publish/build.dll", - "options": { - "cwd": "./" - }, + "command": "pnpm webpack --config ./webpack/webpack.dev.ts --progress", "group": "build", - "presentation": { - "echo": false, - "reveal": "always", - "focus": true, - "panel": "shared", - "showReuseMessage": false - }, - "problemMatcher": [] + "problemMatcher": [], + "label": "本体:编译开发版本 dev:build-core" }, { - "label": "监视 watch", "type": "shell", - "command": "dotnet builder/dotnet/publish/build.dll watch", - "options": { - "cwd": "./" - }, + "command": "pnpm webpack --watch --config ./webpack/webpack.dev.ts --progress", "group": "build", - "presentation": { - "echo": false, - "reveal": "always", - "focus": true, - "panel": "shared", - "showReuseMessage": false - }, - "problemMatcher": [] + "problemMatcher": [], + "label": "本体:监视开发版本 dev:watch-core" }, { - "label": "生产监视 production-watch", "type": "shell", - "command": "dotnet builder/dotnet/publish/build.dll watch production", - "options": { - "cwd": "./" - }, + "command": "pnpm serve dist -p ${input:serverPort}", "group": "build", - "presentation": { - "echo": false, - "reveal": "always", - "focus": true, - "panel": "shared", - "showReuseMessage": false - }, - "problemMatcher": [] + "problemMatcher": [], + "label": "本体:启动服务器 dev:serve-core" }, { - "label": "构建编译器 compile builder", "type": "shell", - "command": "dotnet publish -c Release -o publish/", - "options": { - "cwd": "./builder/dotnet/" - }, + "command": "pnpm tsc -p tsconfig.type-check.json --noEmit", "group": "build", - "presentation": { - "echo": false, - "reveal": "always", - "focus": true, - "panel": "shared", - "showReuseMessage": false - }, - "problemMatcher": [] + "problemMatcher": [], + "label": "生产:类型检查 prod:type" + }, + { + "type": "shell", + "command": "pnpm --silent webpack --config ./webpack/webpack.prod.ts --profile --json > dist/profile.json && pnpm webpack-bundle-analyzer dist/profile.json", + "group": "build", + "problemMatcher": [], + "label": "本体:打包分析 prod:analyze" + }, + { + "type": "shell", + "command": "pnpm eslint . --cache --cache-location node_modules/.cache/eslint/ --ext .ts,.vue", + "group": "build", + "problemMatcher": [], + "label": "生产:代码检查 prod:lint" + }, + { + "type": "shell", + "command": "pnpm eslint . --cache --cache-location node_modules/.cache/eslint/ --fix --ext .ts,.vue", + "group": "build", + "problemMatcher": [], + "label": "生产:代码修复 prod:lint-fix" + }, + { + "type": "shell", + "command": "pnpm webpack --config ./webpack/webpack.prod.ts --progress", + "group": "build", + "problemMatcher": [], + "label": "本体:编译生产版本 prod:build-core" + }, + { + "type": "shell", + "command": "pnpm webpack --config ./registry/webpack/components.ts --progress", + "group": "build", + "problemMatcher": [], + "label": "功能:编译组件 prod:build-components" + }, + { + "type": "shell", + "command": "pnpm webpack --config ./registry/webpack/plugins.ts --progress", + "group": "build", + "problemMatcher": [], + "label": "功能:编译插件 prod:build-plugins" + }, + { + "type": "shell", + "command": "pnpm webpack --config ./registry/webpack/all.ts", + "group": "build", + "problemMatcher": [], + "label": "功能:编译所有 prod:build-features" }, { - "label": "构建编译器 (Debug模式) compile builder", "type": "shell", - "command": "dotnet build", - "options": { - "cwd": "./builder/dotnet/" - }, + "command": "pnpm run build-docs", "group": "build", - "presentation": { - "echo": false, - "reveal": "always", - "focus": true, - "panel": "shared", - "showReuseMessage": false - }, + "problemMatcher": [], + "label": "功能:编译功能文档 prod:build-docs" + }, + { + "type": "shell", + "command": "rm -r ./node_modules/.cache/webpack/", + "label": "缓存:清除 webpack cache:clean-webpack", "problemMatcher": [] }, { - "label": "同步i18n数据 sync i18n", "type": "shell", - "command": "node ./builder/node/i18n-sync/i18n-sync.js", - "presentation": { - "echo": false, - "reveal": "silent", - "focus": false, - "panel": "shared", - "showReuseMessage": false - }, + "command": "rm -r ./node_modules/.cache/babel-loader/", + "label": "缓存:清除 babel cache:clean-babel", "problemMatcher": [] + }, + { + "type": "shell", + "command": "rm -r ./node_modules/.cache/", + "label": "缓存:清除全部 cache:clear-all", + "problemMatcher": [] + } + ], + "inputs": [ + { + "id": "serverPort", + "type": "promptString", + "description": "监听端口", + "default": "5000" } ] -} \ No newline at end of file +} diff --git a/.vscode/ui-import.code-snippets b/.vscode/ui-import.code-snippets new file mode 100644 index 0000000000..a949e73bdf --- /dev/null +++ b/.vscode/ui-import.code-snippets @@ -0,0 +1,24 @@ +{ + // Place your Bilibili Evolved workspace snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and + // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope + // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is + // used to trigger the snippet and the body will be expanded and inserted. Possible variables are: + // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. + // Placeholders with the same ids are connected. + // Example: + // "Print to console": { + // "scope": "javascript,typescript", + // "prefix": "log", + // "body": [ + // "console.log('$1');", + // "$2" + // ], + // "description": "Log output to console" + // } + "UI import": { + "scope": "javascript, typescript", + "prefix": "ui", + "body": "import {\n $0\n} from '@/ui'", + "description": "UI import" + }, +} \ No newline at end of file diff --git a/.vscode/vue-import.code-snippets b/.vscode/vue-import.code-snippets new file mode 100644 index 0000000000..3d1f9a5193 --- /dev/null +++ b/.vscode/vue-import.code-snippets @@ -0,0 +1,24 @@ +{ + // Place your Bilibili Evolved workspace snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and + // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope + // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is + // used to trigger the snippet and the body will be expanded and inserted. Possible variables are: + // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. + // Placeholders with the same ids are connected. + // Example: + // "Print to console": { + // "scope": "javascript,typescript", + // "prefix": "log", + // "body": [ + // "console.log('$1');", + // "$2" + // ], + // "description": "Log output to console" + // } + "Vue import": { + "scope": "javascript, typescript", + "prefix": "vue", + "body": "() => import('$1').then(m => m.default)$0", + "description": "Vue import" + } +} \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000000..cb33029df8 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,96 @@ +# AGENTS.md + +This file gives coding agents repository-specific guidance for working on Bilibili Evolved. Read `CONTRIBUTING.md` first, then use this file as the practical checklist for implementation and verification. + +## Project Structure + +- `src/` contains the userscript core, built-in components, shared runtime APIs, settings UI, and other code shipped with the main script. +- `registry/lib/components/` contains installable components. New components should be placed under the appropriate category directory and use `index.ts` as the webpack entry. +- `registry/lib/plugins/` contains plugins. Use a plugin when the feature only makes sense as an extension of another component. +- Third-party components that are meant to remain outside the main repository should be added through `registry/lib/docs/third-party.ts` instead of mixing external component registration with in-repo source changes. +- `dist/` and `registry/dist/` are build outputs. Development branches should not keep generated dist files; release output branches such as `preview`, `master`, and `master-cdn` get them from CI builds. +- Feature documentation outputs under `doc/features/` are generated from metadata. Update them only when the task is explicitly about generated docs or release preparation. + +## Development Setup + +- The package manager is `pnpm`. +- Install root dependencies with `pnpm install`. +- Install registry dependencies from `registry/` when building registry features. +- Use the VS Code tasks from `.vscode/tasks.json` as the source of truth for local task commands when in doubt. + +Common commands: + +```sh +pnpm run type +pnpm run lint-check +pnpm tsx dev-tools/dev-server/index.ts +pnpm tsx dev-tools/dev-server/command.ts sessions +pnpm tsx dev-tools/dev-server/command.ts shutdown +``` + +The dev server starts and watches the development core build, serves the local userscript, and provides registry feature URLs for browser testing. Registry feature URLs are virtual build-on-request outputs served from memory. WebSocket is the command and event control plane; use `dev-tools/dev-server/command.ts` for single-feature build, watch, stop, start-debug, stop-debug, scaffold, and graceful server shutdown commands. See `dev-tools/dev-server/README.md` for protocol details and `CONTRIBUTING.md` for Tampermonkey setup details. + +## Component And Plugin Guidelines + +- Define components with `defineComponentMetadata`. +- Follow existing plugin definitions for code under `registry/lib/plugins/`. +- New components should include `author` metadata. +- Component `name` values should be specific and camelCase. Display names and option names should clearly describe the feature instead of using generic labels. +- If a component has an `index.md`, do not duplicate the same description in metadata unless the existing pattern for that component requires it. +- Use `urlInclude` and `urlExclude` for page matching instead of manually repeating page checks in `entry`. +- Keep `entry` focused on the work that must happen when the component starts. +- Do not rely on the return value of `entry` for cleanup. Put teardown logic in `unload`; use `reload` together with `unload` when a component must support disable and re-enable behavior. +- Use existing helpers such as `styledComponentEntry`, `toggleStyle`, shared core APIs, component APIs, and plugin APIs before adding new infrastructure. +- Put fixed component styles in SCSS files instead of constructing style text in business logic. Use `instantStyles`, `styledComponentEntry`, or `toggleStyle` so styles are only applied when intended. +- When writing SCSS, check shared Sass files before adding local helpers. For example, `ui/_common.scss` is available through `@import "common"` and provides common mixins such as fullscreen and centering helpers. +- For options, follow existing `defineOptionsMetadata` and `options` patterns so defaults, labels, and validators stay close to metadata. +- Model exclusive choices as one option, usually with an enum or dropdown, instead of multiple mutually exclusive boolean options. +- If settings need to control CSS, prefer toggling a class on `html` or `body` and writing SCSS against that class. + +## Code Style + +- Follow the repository ESLint and Prettier configuration. +- Use named exports except in files covered by the existing ESLint overrides, such as Vue single-file components and build-related files. +- Keep control-flow bodies braced. +- Preserve the existing TypeScript, Vue 2, and SCSS conventions around the code being changed. +- Avoid unnecessary defensive branches, empty error handling, duplicated state, and one-off abstractions. +- Prefer existing Bilibili API wrappers, request helpers, settings helpers, observer utilities, style utilities, and UI components over reimplementing equivalent behavior. +- Prefer stable Bilibili APIs and existing wrappers over reading page-internal globals or framework internals when the data is available from an API. +- Scope DOM selectors to the nearest stable parent class or page region. Avoid broad selectors that can match unrelated Bilibili UI. +- Keep names and types aligned with behavior. If a function starts returning a broader shape, update the type and name instead of overloading a misleading contract. +- Be careful with data units and API failure states. Do not cache a failed request as if it were a successful value, and keep byte, bit, count, id, and URL semantics explicit. + +## Generated Files + +- Do not manually edit generated docs or dist outputs as part of ordinary feature or bug-fix work. +- If generated files must be updated, use the project’s existing build or docs generation workflow and include only the intended generated changes. +- Do not commit unrelated cache, profile, local debug, or package-manager output files. + +## Validation + +Choose validation based on the risk and scope of the change. + +- Run `pnpm run type` for TypeScript type checking. +- Run `pnpm run lint-check` for lint validation. +- For core userscript changes, use the dev server's core watcher, which automatically compiles the development build. +- For registry feature changes, run `pnpm tsx dev-tools/dev-server/command.ts build ` while the dev server is running. +- Run `pnpm exec tsc -p dev-tools/dev-server/tsconfig.json` for dev server TypeScript changes. +- For browser-facing behavior, verify the changed feature in a real browser with the local userscript installed. +- For API-shape or Bilibili-rollout-dependent changes, record what page or account state was actually self-tested. + +The pull request CI workflow runs the following production builds. Do not repeat them as routine local validation; run them locally only when explicitly requested, reproducing a CI failure, changing shared build infrastructure, or preparing a release. + +1. `pnpm run type` +2. `pnpm run lint-check` +3. `pnpm run build-core` +4. install dependencies in `registry/` +5. `pnpm run build-features` + +When a change affects page behavior, also check the browser console for new runtime errors and test the relevant Bilibili page type, such as video, bangumi, live, feeds, space, settings panel, or the affected component area. + +## Branches And Commits + +- Use `preview-features` as the base for new features. +- Use `preview-fixes` as the base for bug fixes. +- Commit messages only need to clearly describe the change; the repository does not require a strict conventional commit format. +- Do not create release tags, push release branches, or perform release steps unless the task is explicitly about releasing. diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000..3d07190906 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,2781 @@ + +# 更新日志 +## v2.11.3-preview +`2026-08-23` + +> 包含 [v2.11.3](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.11.3) 的所有更新内容. + +✨新增 +- 新增组件 `番剧动态稍后再看按钮`, 在动态页的番剧卡片上增加与原生功能一致的稍后再看按钮. (#5688, PR #5704 by [司城 ユヅキ](https://github.com/WhiteTeal55)) +- 新增组件 `直播显示分区信息`, 在播放器标题栏显示当前直播间的分区. (PR #5705 by [司城 ユヅキ](https://github.com/WhiteTeal55)) +- 新增组件 `直播自动切换最高画质`, 进入直播间会自动选择最高画质, 之后仍可手动切换. (#5638, PR #5706 by [司城 ユヅキ](https://github.com/WhiteTeal55)) +- 新增组件 `仅搜索首页`, 首页只保留顶栏和中央搜索框, 并支持自定义背景. (PR #5659 by [Yimino](https://github.com/mintonight)) +- 新增组件 `合集链接重定向`, 修正指向个人空间列表的合集链接路径和参数. (#5684, PR #5709 by [司城 ユヅキ](https://github.com/WhiteTeal55)) +- 新增组件 `强制保留播放器控制栏`, 鼠标静止或移出播放器后仍保留细进度条等控制栏区域. (#5720, PR #5724 by [司城 ユヅキ](https://github.com/WhiteTeal55)) +- `弹幕合并器` 新增弹幕时停功能, 拖动进度后恢复时会写入偏移; 同时改进搜索、分 P 选择和管理操作. (#5647, #5650, PR #5701 by [XianYuDaXian](https://github.com/XianYuDaXian)) +- 设置面板支持导入和导出单个组件的选项, 通用设置支持自定义导出文件名. (#5702, #5734, PR #5708, PR #5736 by [司城 ユヅキ](https://github.com/WhiteTeal55)) +- `快捷键扩展` 能够区分数字键盘、鼠标中键和侧键, 并新增屏蔽 B 站播放器原生快捷键的设置. (#5464) +- `快捷键扩展 - 开关 CC 字幕` 支持配置字幕语言偏好, 并优先选择匹配的人工字幕. (#5685) +- `视频快照` 适配更多页面, 调整按钮和预览样式, 并修复与 `视频预览放大` 的兼容问题. (PR #5707 by [司城 ユヅキ](https://github.com/WhiteTeal55)) + +🐛修复 +- 修复 `直播弹幕助手 (+1 & 收藏)` 在弹幕悬停和全屏兼容模式下的 +1 发送问题. (PR #5728 by [oooolcepsed](https://github.com/cccccccccooool)) +- 修复 `楼中楼回复“UP主觉得很赞”显示` 在深色 / 夜间模式下的样式问题. (PR #5718 by [司城 ユヅキ](https://github.com/WhiteTeal55)) + +## v2.11.3 +`2026-08-23` + +
+正式版用户将获得 v2.10.10-preview ~ v2.11.1-preview 的所有改动, 点击展开查看 + +✨新增 +- 新增组件 `禁止直播可见性检测`, 阻止直播间在页面切到后台时自动降低画质, 避免切回前台恢复画质时卡顿. (#5556) +- 新增组件 `RBVP 视频策略`, 根据 UP 主、分区、标签、标题、时长等规则匹配视频, 自动执行倍速、合集记忆等动作; 规则支持异步校验、导入导出和别名编辑. (#5554, PR #5577, PR #5619, PR #5620 by [JLoeve](https://github.com/LonelySteve), [LainIO24](https://github.com/lainio24)) +- 新增组件 `弹幕合并器`, 将其他 B 站视频的弹幕合并到当前播放页的画面和右侧列表, 支持关键词 / BV 号搜索、多 P 勾选、分 P 弹幕延迟顺延和播放进度对齐. (PR #5617 by [XianYuDaXian](https://github.com/XianYuDaXian)) +- 新增组件 `视频快照`, 集中展示视频多个时间点的预览图, 也能从推荐、动态、空间投稿和收藏夹的视频卡片中打开快照; `下载视频` 还可将快照生成网格. (PR #5623 by [WakelessSloth56](https://github.com/WakelessSloth56), [LainIO24](https://github.com/lainio24), PR #5645 by [LainIO24](https://github.com/lainio24)) +- 新增组件 `播放页自定义背景`, 为视频、番剧等播放页设置远程或本地背景图; 背景的不透明度、遮罩、模糊、缩放、位置和深色模式配色均可调整. (PR #5606 by [Andy_Allan](https://github.com/andya1lan)) +- 新增组件 `直播弹幕助手 (+1 & 收藏)`, 在直播间增加弹幕 +1、弹幕收藏和收藏管理面板. (PR #5597 by [oooolcepsed](https://github.com/cccccccccooool)) +- 新增组件 `直播首页暂停`, 阻止直播首页的推荐直播间自动播放. (PR #5610 by [YiJay99](https://github.com/YiJay99)) +- 新增组件 `Hi-Res 音质按钮布局调整`, 将播放器的 Hi-Res 按钮简化为图标. (#5609, PR #5653 by [司城 ユヅキ](https://github.com/WhiteTeal55)) +- 新增组件 `评论图片导出`, 汇总并批量下载评论区中的图片, 也支持单独导出某条评论里的图片. (PR #5661 by [塵埃殘憶](https://github.com/kaixinol)) +- 新增组件 `楼中楼回复“UP主觉得很赞”显示`, 为楼中楼回复补充 UP 主点赞标识. (PR #5648 by [Light_Quanta](https://github.com/LightQuanta)) +- `下载视频` 支持选择和下载 AI 原声翻译等多音轨, 并显示 DASH 视频的预计带宽和实际编码. (PR #5576 by [LainIO24](https://github.com/lainio24), PR #5660 by [EricZhou](https://github.com/EricZhou05)) +- `视频预览放大` 支持解除 5 分钟预览限制, 并完善预览框尺寸限制. (PR #5664 by [wsgh0202](https://github.com/wsgh0202)) +- `一键点亮直播间粉丝勋章` 改进勋章直播间识别, 支持导出和修改默认点赞次数. (PR #5612 by [k](https://github.com/kkkkkkkk566), PR #5634 by [司城 ユヅキ](https://github.com/WhiteTeal55)) + +
+ +🐛修复 +- 修复 `自定义顶栏` 未隐藏原版频道下拉菜单的问题, 并排除 toy 与轻剪辑等不适用页面. (#5495, PR #5673 by [Lancy](https://github.com/lancy69), PR #5695 by [树根(佬?)](https://github.com/shugen002)) +- 修复 `下载视频 - MPV 输出支持` 在 Chrome 中无法正确传递包含特殊字符的参数, 并移除 URL 参数外层多余的引号. (PR #5574 by [Carter Gissing](https://github.com/cgissing)) +- 修复 `图片批量导出` 在专栏等页面无法正确回退提取的问题. (#5712, PR #5715 by [塵埃殘憶](https://github.com/kaixinol)) +- 修复 `直播间网页全屏自适应` 因 debounce 导致的性能问题和部分布局问题. (PR #5713 by [司城 ユヅキ](https://github.com/WhiteTeal55)) +- 修复点击直播播放器 iframe 时无法关闭设置面板或小组件面板的问题. (PR #5700 by [司城 ユヅキ](https://github.com/WhiteTeal55)) +- 修复 `深色模式` 在不支持的页面仍会生效, 以及直播页切换深色模式时未及时更新的问题. (PR #5725 by [司城 ユヅキ](https://github.com/WhiteTeal55)) +- 修复 `直播首页静音` 不适配新版直播首页的问题. (PR #5730 by [司城 ユヅキ](https://github.com/WhiteTeal55)) +- 修复 `清爽首页` 在部分卡片缺少徽标元素时发生异常的问题. (#5732, PR #5733 by [司城 ユヅキ](https://github.com/WhiteTeal55)) + +☕开发者相关 +- 将压缩和解压运行库从 JSZip 替换为 fflate, 减小体积并改进压缩包处理性能. (PR #5662 by [塵埃殘憶](https://github.com/kaixinol)) +- 修正 Node.js、webpack 和 registry 工具链的 TypeScript 模块解析配置. (PR #5679 by [塵埃殘憶](https://github.com/kaixinol)) + +## v2.11.2-preview +`2026-07-30` + +> 包含 [v2.11.2](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.11.2) 的所有更新内容. + +🐛修复 +- 修复 `自定义顶栏` 搜索栏候选项点击时焦点丢失的问题. (#5643) +- 修复单个组件加载失败时连带阻断其他组件加载的问题. + +## v2.11.2 +`2026-07-30` + +🐛修复 +- 修复 `自定义顶栏` 搜索栏候选项点击时焦点丢失的问题. (#5643) +- 修复单个组件加载失败时连带阻断其他组件加载的问题. + +## v2.11.1-preview +`2026-07-29` + +包含 [v2.11.1](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.11.1) 的所有更新内容. + +✨新增 +- 新增组件 `评论图片导出`, 可汇总评论区中的图片并批量下载, 也可单独导出某条评论的图片. (PR #5661 by [塵埃殘憶](https://github.com/kaixinol)) +- 新增组件 `楼中楼回复“UP主觉得很赞”显示`, 可为楼中楼回复补充显示 UP 主点赞标识. (PR #5648 by [Light_Quanta](https://github.com/LightQuanta)) +- `下载视频` 支持选择和下载 AI 原声翻译等多音轨. (PR #5660 by [EricZhou](https://github.com/EricZhou05)) +- `视频快照` 支持从推荐、动态、空间投稿和收藏夹视频卡片中打开快照预览, 并改进小尺寸快照放大、预览速度和下载选项. (PR #5645 by [LainIO24](https://github.com/lainio24)) +- `视频预览放大` 支持解除 5 分钟预览限制, 并完善预览框尺寸限制. (PR #5664 by [wsgh0202](https://github.com/wsgh0202)) +- `快捷键扩展` 新增 `屏蔽 B 站播放器原生快捷键` 选项. +- `快捷键扩展 - 开关 CC 字幕` 支持读取新的最近使用字幕语言配置. (#5685) +- `Hi-Res 音质按钮布局调整` 支持在启用 Hi-Res 音质时将按钮填充为主题色. (PR #5653 by [WhiteTeal55](https://github.com/WhiteTeal55)) +- `直播勋章保活` 支持修改默认点赞次数, 并为请求成功通知增加自动关闭. (PR #5634 by [WhiteTeal55](https://github.com/WhiteTeal55)) + +☕开发者相关 +- 将压缩和解压运行库从 JSZip 替换为 fflate, 减小体积并改进压缩包处理性能. (PR #5662 by [塵埃殘憶](https://github.com/kaixinol)) + +## v2.11.1 +`2026-07-29` + +🐛修复 +- 修复 `清爽首页` 的分区动态、最新发布和排行榜接口失效问题. (#5632) +- 修复 `自定义顶栏` 搜索栏删除历史条目后自动关闭, 无法连续删除的问题. (#5643) +- 修复 `隐藏顶部横幅` 在新版首页顶栏出现白底白字和图标不可见的问题. (#5496, PR #5641 by [T0M](https://github.com/T0MYYY)) +- 修复 `显示视频投稿时间` 在稍后再看页面切换视频时不显示的问题. (PR #5637 by [WhiteTeal55](https://github.com/WhiteTeal55)) +- 修复 `视频预览放大` 在合集页面无法使用, `返回原版直播间` 小组件按钮下划线, `深色模式` 在活动样式直播间判断错误, 以及 `显示视频投稿时间` 在合集切换播放顺序后不显示的问题. (PR #5649 by [WhiteTeal55](https://github.com/WhiteTeal55)) +- 修复 `显示视频投稿时间` 在合集页面频繁请求 API, 以及 `外置稍后再看` 在番剧页无法工作的问题. (#5668, PR #5665 by [WhiteTeal55](https://github.com/WhiteTeal55)) +- 修复 `定制自动连播行为` 无法按配置处理视频合集分集内嵌分 P 的问题. (PR #5652 by [dot-super](https://github.com/dot-super)) +- 修复 `图片批量导出` 在专栏转动态、部分 opus 动态等页面无法正确提取图片的问题. (#4757, #5184, #5658, #5669, PR #5655 by [塵埃殘憶](https://github.com/kaixinol)) +- 修复 `自定义字体` 在新版播放器中错误覆盖弹幕字体的问题. (#5614, PR #5667 by [Liu Xingyu](https://github.com/Meteor-3)) +- 修复 `直播间网页全屏自适应` 在宽窄聊天栏、更多礼物面板和特殊样式直播间中的播放器尺寸、拖动区域与各类面板布局问题. (#5663, PR #5678, PR #5682, PR #5683 by [WhiteTeal55](https://github.com/WhiteTeal55)) + +## v2.11.0-preview +`2026-07-06` + +包含 [v2.11.0](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.11.0) 的所有更新内容. + +✨新增 +- 新增组件 `弹幕合并器`, 可将其他 B 站视频的弹幕合并到当前播放页的原生播放器画面和右侧弹幕列表中, 支持关键词 / BV 号搜索、多 P 勾选、分 P 弹幕延迟顺延和播放进度对齐. (PR #5617 by [XianYuDaXian](https://github.com/XianYuDaXian)) +- 新增组件 `视频快照`, 可查看视频多个时间点的快照预览图, 并支持作为 `下载视频` 的输出资源生成快照网格. (PR #5623 by [WakelessSloth56](https://github.com/WakelessSloth56), [LainIO24](https://github.com/lainio24)) +- 新增组件 `播放页自定义背景`, 可为视频、番剧等播放页设置远程或本地背景图, 并支持不透明度、遮罩、模糊、缩放、位置和深色模式配色切换. (PR #5606 by [Andy_Allan](https://github.com/andya1lan)) +- 新增组件 `直播弹幕助手 (+1 & 收藏)`, 可在直播间对弹幕执行 +1 发送和收藏, 并提供收藏弹幕面板. (PR #5597 by [oooolcepsed](https://github.com/cccccccccooool)) +- 新增组件 `直播首页暂停`, 可暂停直播首页的推荐直播间自动播放. (PR #5610 by [YeJay99](https://github.com/YeJay99)) +- 新增组件 `Hi-Res 音质按钮布局调整`, 可将播放器 Hi-Res 音质按钮调整为只保留图标. (#5609) +- `RBVP 视频策略` 支持异步校验、规则导入导出和别名编辑体验改进, 并支持 `快速收藏` 作为内置插件. (PR #5619 by [LainIO24](https://github.com/lainio24), PR #5620 by [JLoeve](https://github.com/LonelySteve)) + +🐛修复 +- 修复 `直播勋章保活` 中部分勋章对应直播间无法正常识别的问题, 并支持导出默认点赞次数和修改点赞次数. (PR #5612 by [k](https://github.com/kkkkkkkk566)) + +## v2.11.0 +`2026-07-06` + +✨新增 +- `动态图片导出` 支持识别 opus 专栏页标题, 并适配 opus 动态页卡片模块解析. (#5618) + +🐛修复 +- 修复评论区初始化时 `dqa` 未定义的问题. (PR #5633 by [grcOvO](https://github.com/koagaroon)) +- 修复 `自定义顶栏` 动态列表未过滤屏蔽内容的问题. (#5600) +- 修复 `极简首页` 中首页横幅未居中的问题. (#5613) +- 修复 `定制自动连播行为` 在新版合集页面失效的问题. (by [wsgh0202](https://github.com/wsgh0202)) +- 修复 `折叠评论区` 按钮显示异常和层级异常的问题. (PR #5629, PR #5630 by [punc0319](https://github.com/SoulGI)) +- 修复 `扩展直播列表` 的 UID 匹配错误. (PR #5622 by [乡下来的喵](https://github.com/xxldm)) +- 修复 `关注时间显示` 显示错误的问题. (PR #5615 by [punc0319](https://github.com/SoulGI)) +- 修复 `ColorPicker` 十六进制颜色输入框未自动补全 `#`, 以及可输入非法长度颜色值的问题. (PR #5607 by [Andy_Allan](https://github.com/andya1lan)) + +☕开发者相关 +改进了现有的一些开发流程工具, 方便贡献者及其 Agent 能够编写出更符合规范的代码: +- 重构本地开发服务器和调试命令, 支持直接在内存中提供功能产物, 并增加了本地调试 URL 的提示. 两个开发分支上的产物文件现已删除. +- 功能文档生成流程改用 AST 扫描方式, 增加 `build-docs` 脚本. +- 增加 PR 时的文件检查和热更新自动发布流水线. +- 更新贡献说明、仓库工作指引和本地 dev server 技能, 让后续开发、验证和自动化协作流程更明确. + + +## v2.10.10-preview +`2026-06-07` + +包含 [v2.10.10](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.10.10) 的所有更新内容. + +✨新增 +- 新增组件 `禁止直播可见性检测`, 可阻止直播间在页面切到后台时自动降低画质, 避免切回前台后恢复画质造成卡顿. (#5556) +- 新增组件 `RBVP 视频策略`, 可根据 UP 主、分区、标签、标题、时长等规则自动匹配并执行倍速、合集记忆等动作. (PR #5577 by [JLoeve](https://github.com/LonelySteve)) +- `下载视频` 显示 DASH 视频的预计带宽和实际视频编码. (PR #5576 by [LainIO24](https://github.com/lainio24)) + +## v2.10.10 +`2026-06-07` + +
+正式版用户将获得 v2.10.8-preview ~ v2.10.9-preview 的所有改动, 点击展开查看 + +✨新增 +- 新增组件 `查看头像`, 可在个人空间页面查看当前用户的高分辨率头像. (PR #5526 by [Chains.Z](https://github.com/Chains-Z)) +- 新增组件 `记忆合集`, 支持记忆合集 / 多 P 视频的播放进度, 在列表中标记已观看和上次播放位置, 提示跳转到上次播放, 并提供记忆管理和快捷键支持. (PR #5505, #5551, #5552 by [JLoeve](https://github.com/LonelySteve)) +- `动态过滤器` 支持在设置面板中直接编辑过滤规则, 并可单独关闭动态首页中的选项卡片显示. (#5546) +- `删除广告` 和 `隐藏首页轮播图` 支持配置是否显示小组件. (是否在功能面板展示) (#5544, PR #5549 by [wsgh0202](https://github.com/wsgh0202)) +- `保存视频元数据` 的 FFMETADATA 支持合集信息, 并可配置是否显示小组件; 修复在单 P 视频下导出的 FFMETADATA 标题重复问题. (PR #5553 by [LainIO24](https://github.com/lainio24)) +- `动态过滤器 - 移除商品带货动态` 支持过滤转发的商品带货动态. (PR #5548 by [LTruth](https://github.com/Truthss)) +- `动态过滤器 - 移除充电专属动态` 支持移除动态中的充电问答和充电视频. (#4821) + +🐛修复 +- 修复 `动态过滤器 - 移除充电专属动态` 的过滤方向错误. (PR #5565 by [koagaroon](https://github.com/koagaroon)) + +
+ +✨新增 +- `动态分组过滤` 支持折叠分组过滤面板并保存已禁用分组, 同时适配开启 `直播信息扩充` 时的直播列表高度. (PR #5596 by [xxldm](https://github.com/xxldm)) + +🐛修复 +- 修复 `自动更新` 在检查所有组件更新时内存占用过高的问题, 包括版本兼容性检查、更新流程等待、最大更新数量限制和功能代码重复解析. (#5582) +- 修复 `夜间模式跟随系统` 的加载时机. (#5578) +- 修复 `稍后再看重定向` 失效的问题. (#5581) +- 修复 `自定义顶栏` 消息数量显示异常的问题. (#5522) + +## v2.10.9-preview +`2026-04-30` + +包含 [v2.10.9](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.10.9) 的所有更新内容. + +🐛修复 +- 修复 `动态过滤器 - 移除充电专属动态` 的过滤方向错误. (PR #5565 by [koagaroon](https://github.com/koagaroon)) + +## v2.10.9 +`2026-04-30` + +🐛修复 +- 修复 `快捷键扩展 - 开关 CC 字幕` 在最近使用的字幕语言不可用时无法正确开启字幕的问题, 并在当前视频没有可选字幕时显示提示. (#5560, PR #5561 by [SoulGI](https://github.com/SoulGI)) +- 修复 `极简首页` 内容区域无法滚动的问题. (#5512) +- 修复 `夜间模式` 下视频争议提示的背景色异常. (PR #5567 by [cscnk52](https://github.com/cscnk52)) + +## v2.10.8-preview +`2026-04-24` + +包含 [v2.10.8](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.10.8) 的所有更新内容. + +✨新增 +- 新增组件 `查看头像`, 可在个人空间页面查看当前用户的高分辨率头像. (PR #5526 by [Chains.Z](https://github.com/Chains-Z)) +- 新增组件 `记忆合集`, 支持记忆合集 / 多 P 视频的播放进度, 在列表中标记已观看和上次播放位置, 提示跳转到上次播放, 并提供记忆管理和快捷键支持. (PR #5505, #5551, #5552 by [JLoeve](https://github.com/LonelySteve)) +- `动态过滤器` 支持在设置面板中直接编辑过滤规则, 并可单独关闭动态首页中的选项卡片显示. (#5546) +- `删除广告` 和 `隐藏首页轮播图` 支持配置是否显示小组件. (是否在功能面板展示) (#5544, PR #5549 by [wsgh0202](https://github.com/wsgh0202)) +- `保存视频元数据` 的 FFMETADATA 支持合集信息, 并可配置是否显示小组件; 修复在单 P 视频下导出的 FFMETADATA 标题重复问题. (PR #5553 by [LainIO24](https://github.com/lainio24)) +- `动态过滤器 - 移除商品带货动态` 支持过滤转发的商品带货动态. (PR #5548 by [LTruth](https://github.com/Truthss)) +- `动态过滤器 - 移除充电专属动态` 支持移除动态中的充电问答和充电视频. (#4821) + +## v2.10.8 +`2026-04-24` + +🐛修复 +- 修复 `简化直播间` 和 `直播间网页全屏自适应` 在开启 `全屏直播礼物简化` 后布局异常的问题. (#5529) +- 修复 `删除直播水印` 在直播首页失效的问题. (#5249, PR #5539 by [shugen002](https://github.com/shugen002)) +- 修复 `直播信息扩充` 中直播间列表出现重复直播间的问题. (#5541, PR #5538 by [shugen002](https://github.com/shugen002), PR #5542 by [SoulGI](https://github.com/SoulGI)) +- 修复 `快捷键扩展` 在播放器内部分按钮获得焦点时失效的问题. (PR #5557 by [SoulGI](https://github.com/SoulGI)) +- 改进 `启用弹幕空降` 的时间识别, 支持更多时间格式并减少误判. (PR #5558 by [Chains.Z](https://github.com/Chains-Z)) +- `夜间模式` 排除直播剪辑和 SRC 安全中心等未适配页面. (#5457, PR #5540 by [shugen002](https://github.com/shugen002)) + +☕开发者相关 +- 修复依赖缺失 `enquirer` 和路径不规范的问题. + +## v2.10.7 / v2.10.7-preview +`2026-03-03` + +🐛修复 +- 修复搜索框首次点击时无法加载出历史记录. (#5501) +- 修复 `快捷键扩展` 点击过弹幕开关后失效的问题. (#5509) + +## v2.10.6-preview +`2026-02-14` + +包含 [v2.10.6](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.10.6) 的所有更新内容. + +✨新增 +- 新增插件 `自定义顶栏 - 深色模式开关`, 可以快捷开关 b 站的深色模式 (会刷新页面). +- 新增插件 `下载视频 - ABDM 输出支持`, 支持 ABDM 格式输出. (PR #5447 by [❤是纱雾酱哟~](https://github.com/Dragon1573)) +- `快捷键扩展` 增加更多的视频进度百分比跳转点. (PR #5458 by [paradox8599](https://github.com/paradox8599)) +- 新增组件 `小窗播放器大小`, 支持调节视频小窗播放器的大小. (PR #5489 by [GH4NG](https://github.com/GH4NG)) +- `保存视频元数据` 支持联合投稿创作团队信息. (PR #5436 by [WakelessSloth56](https://github.com/WakelessSloth56)) +- `自定义文件命名` 支持添加 up 主的 uid 选项. (PR #5435 by [AyanamiSho](https://github.com/AyanamiSho)) +- `复制评论链接` 开启时, 支持隐藏原版的复制评论按钮. (#5470) + +## v2.10.6 +`2026-02-14` + +
+正式版用户将获得 v2.10.4-preview ~ v2.10.5-preview 的所有改动, 点击展开查看 + +✨新增 +- 新增组件 `定制自动连播行为`, 可根据自动连播视频类型分别配置. (PR #5303 by [wsgh0202](https://github.com/wsgh0202), PR #5410 by [wsgh0202](https://github.com/wsgh0202)) +- `网址参数清理` 新增选项 `清理页面中的 A 标签`. (PR #5339 by [WakelessSloth56](https://github.com/WakelessSloth56), [LainIO24](https://github.com/lainio24)) +- `保存视频元数据` 支持标签和番剧信息, 支持番剧 OPED 转换为章节. (PR #5355 by [WakelessSloth56](https://github.com/WakelessSloth56), [LainIO24](https://github.com/lainio24)) +- 新增组件 `替换标题党封面`, 可将视频卡片的封面替换为视频预览帧. (PR #5226 by [UcnacDx2](https://github.com/UcnacDx2)) +- 新增组件 `会员购链接转换`, 可将移动端的会员购链接转换为 PC 端的链接. (#5310) +- `下载视频` 支持配置下载地址偏好. (#3234) +- 搜索栏支持自动补全关键词和搜索历史. (#822) +- 新增组件 `直播前后台音量调节`, 支持在直播间前后台切换时自动调节音量. (PR #5407 by [KDH-KDHKDH](https://github.com/KDH-KDHKDH)) +- `保存视频元数据` 支持保存视频统计数据、番剧非正片内容、自定义时间格式. (PR #5399 by [WakelessSloth56](https://github.com/WakelessSloth56)) +- `下载视频 - WASM 混流输出` 新增输出格式选项, 支持嵌入封面. (PR #5388 by [WakelessSloth56](https://github.com/WakelessSloth56)) +- 新增组件 `视频缩放`, 支持自定义视频播放器缩放比例和预设选项. (PR #5352 by [Weedy233](https://github.com/Weedy233)) +- `动态过滤器` 支持编辑和开关过滤关键词. (#5394) +- 改进 `下载视频` 中对 MCDN 的检测方式. (#5390, #5438) + +
+ +🐛修复 +- 修复 `自定义顶栏` 的收藏夹链接打开后无法分页导航. (#5459) +- 更新 `自定义顶栏` 排除的 URL 列表. (#5415) +- 改进 `快捷键扩展` 的焦点元素检测, 修复点击过弹幕开关失效的问题. (#5413) +- 修复 `禁止跳转动态详情` 导致动态抽奖无法点击的问题. (#5467) + +## v2.10.5-preview +`2025-12-13` + +包含 [v2.10.5](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.10.5) 的所有更新内容. + +✨新增 +- `定制自动连播行为` 支持推荐列表的自动连播. (PR #5410 by [wsgh0202](https://github.com/wsgh0202)) +- 新增组件 `直播前后台音量调节`, 支持在直播间前后台切换时自动调节音量. (PR #5407 by [KDH-KDHKDH](https://github.com/KDH-KDHKDH)) +- `保存视频元数据` 支持保存视频统计数据、番剧非正片内容、自定义时间格式. (PR #5399 by [WakelessSloth56](https://github.com/WakelessSloth56)) +- `下载视频 - WASM 混流输出` 新增输出格式选项, 支持嵌入封面. (PR #5388 by [WakelessSloth56](https://github.com/WakelessSloth56)) +- 新增组件 `视频缩放`, 支持自定义视频播放器缩放比例和预设选项. (PR #5352 by [Weedy233](https://github.com/Weedy233)) +- `动态过滤器` 支持编辑和开关过滤关键词. (#5394) +- 改进 `下载视频` 中对 MCDN 的检测方式. (#5390, #5438) + +🐛修复 +- 修复 `定制自动连播行为` 正片为数字列表模式时自动模式失效. (PR #5360 by [wsgh0202](https://github.com/wsgh0202)) + +## v2.10.5 +`2025-12-13` + +✨新增 +- 支持手动选择下载字幕的语言. (#4927) +- `网址参数清理` 新增对推荐列表、评论搜索关键词、收藏和稍后再看页面的链接清理支持. (PR #5412 by [wsgh0202](https://github.com/wsgh0202)) + +🐛修复 +- 修复 `播放器置顶(新)` 对迷你播放器的处理. (PR #5417 by [Elypha](https://github.com/Elypha)) +- 修复字幕开关切换失效, 现在切换字幕会在 “关闭” 和 “最近一次使用的字幕语言” 之间切换. (#5368) (用起来应该差不多, 之前只是开启和关闭, 不会管最近一次使用) +- 为脚本中涉及的视频链接尾部补充了斜杠, 有助于减少重复历史记录. (#5391) +- 修复 `禁止跳转动态详情` 导致展开全文按钮失效. (#5426) +- `夜间模式` 排除直播间天选时刻. (#5223) +- 修复 `禁用特殊弹幕样式` 未隐藏 UP 主徽章的问题. +- 改进 `快速收藏` 的错误处理, 支持识别到收藏夹已满. (#5382) + +## v2.10.4-preview +`2025-09-11` + +包含 [v2.10.4](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.10.4) 的所有更新内容. + +✨新增 +- 新增组件 `定制自动连播行为`, 可根据自动连播视频类型分别配置. (PR #5303 by [wsgh0202](https://github.com/wsgh0202)) +- `网址参数清理` 新增选项 `清理页面中的 A 标签`. (PR #5339 by [WakelessSloth56](https://github.com/WakelessSloth56), [LainIO24](https://github.com/lainio24)) +- `保存视频元数据` 支持标签和番剧信息, 支持番剧OPED转换为章节. (PR #5355 by [WakelessSloth56](https://github.com/WakelessSloth56), [LainIO24](https://github.com/lainio24)) +- 新增组件 `替换标题党封面`, 可将视频卡片的封面替换为视频预览帧. (PR #5226 by [UcnacDx2](https://github.com/UcnacDx2)) +- 新增组件 `会员购链接转换`, 可将移动端的会员购链接转换为 PC 端的链接. (#5310) +- `下载视频` 支持配置下载地址偏好. (#3234) +- 搜索栏支持自动补全关键词和搜索历史. (#822) + +## v2.10.4 +`2025-09-11` + +✨新增 +- `隐藏用户信息卡片` 适配新版评论区. (#5324, PR #5327 by [WakelessSloth56](https://github.com/WakelessSloth56)) + +🐛修复 +- 修复 `隐藏首页轮播图` 失效. (PR #5287 by [wsgh0202](https://github.com/wsgh0202)) +- 修复 `删除广告` 在首页无法屏蔽部分广告, 新增移除占位的选项. (PR #5307, #5309 by [wsgh0202](https://github.com/wsgh0202)) +- 修复部分功能未能识别主站分区页面的问题. +- 修复 `下载表情` 失效. (#5320, PR #5325 by [Pencil](https://github.com/pencilqaq)) +- 修复 `点亮粉丝勋章` 在原版直播间失效. (PR #5328 by [k](https://github.com/kkkkkkkk566)) +- 修复 `清爽首页` 中的国创分区内容显示错误. (#5292) +- 修复 `评论内容替换` 在 Firefox 中不生效. (#4843) +- `夜间模式` 排除商家平台 (`shop.bilibili.com`). (PR #5354 by [ImAyxs](https://github.com/Ayx03)) + +## v2.10.3-preview +`2025-07-22` + +包含 [v2.10.3](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.10.3) 的所有更新内容. + +- 新增 `深色模式` 组件, 用于跟随 b 站官方的内测深色模式. (#5272) +> 脚本自身的元素配色也会逐步适配官方的配色, 目前仅适配设置面板、自定义顶栏和动态首页中的元素 + +- `插件 - 下载视频 - WASM 混流输出` 修正下载限制为 2GB, 新增下载速度和剩余时间显示. (#5102, PR #5233 by [WakelessSloth56](https://github.com/WakelessSloth56)) +- `弹幕空降` 支持识别中文数字, 修复对特殊弹幕未触发的问题. (PR #5265 by [fixfeat](https://github.com/fixfeat)) +- 新增 `视频预览放大` 组件. (PR #5281 by [wsgh0202](https://github.com/wsgh0202)) +> 放大鼠标悬停于视频卡片时播放的 5 分钟预览 +> +> - 点击放大镜图标放大预览 +> - 点击缩小图标或者预览框外空白处关闭预览 + +## v2.10.3 +`2025-07-22` + +
+正式版用户将获得 v2.10.1-preview ~ v2.10.2-preview 的所有改动, 点击展开查看 + +- 新增 `稍后再看页面-重定向` 组件. (PR #5205 by [undefined](https://github.com/magicFeirl)) +> 重定向**稍后再看页面**到普通视频页面,和`稍后再看重定向`组件的区别在于,该组件是在进入稍后再看的视频页面后进行重定向,而非直接替换链接到普通视频的链接,用于补充`稍后再看重定向`组件的功能。 + +- `隐藏热搜` 支持隐藏直播间搜索框的热搜. (PR #5207 by [undefined](https://github.com/magicFeirl)) +- 修复 `视频链接增强` 对 niconico 链接的处理. (PR #5215 by [Alan Ye](https://github.com/at-wr)) +- 新增 `动态分组过滤` 组件. (PR #5217 by [Rinne](https://github.com/OharaRinneY)) +> 按照关注分组筛选动态 + +- `直播信息扩充` 支持配置置顶和隐藏的关注列表. (#5183) +- 新增组件 `一键点亮直播间粉丝勋章`. (PR #5171 by [undefined](https://github.com/magicFeirl)) +> 在直播间页面的功能面板添加一键点亮粉丝勋章功能,仅适用于有粉丝勋章且正在直播的直播间。原理:发送一个 300 次点赞的请求点亮粉丝勋章。 + +- 新增组件 `下载表情`. (PR #5176 by [Pencil](https://github.com/pencilqaq)) +> 支持下载 up 主专属表情包,处于任意直播间页面时,下载按钮会在 `功能` 面板显示,以压缩包形式保存。 + +- 新增组件 `视频链接增强`. (PR #5197 by [Alan Ye](https://github.com/at-wr)) +> 这个组件会将视频简介中的普通网址转换为可点击的链接,并将被 Bilibili 抛弃已失效的 `acg.tv` 跳转链接修复为 `nicovideo.jp` 链接。 +> +> 例如: `https://acg.tv/sm37507315` → `https://www.nicovideo.jp/watch/sm37507315` +> +> 本组件不会保证目标链接的安全性,因此在点击前请自行验证其是否可信 + +- `自定义顶栏` 新增 `使用主题色 Logo` 选项, 关闭时可以使用黑白纯色的 Logo. (#4996) +- `自定义顶栏` 更新 `游戏中心`, `漫画`, `赛事` 的弹窗, 废弃 `直播` 的弹窗. (#5055) + +
+ +- 修复 `隐藏首页轮播图` 失效, 并增加了一些局部元素控制功能. (PR #5287 by [wsgh0202](https://github.com/wsgh0202)) + +(以下其实都是 6 月就更新了, 只要你的 `自动更新器` 正常使用, 应该早已收到更新了, 这些改动无需更新本体) + +✨新增 +- `显示视频投稿时间` 支持在合集类页面显示. (#5247, PR #5266 by [呼乎户](https://github.com/wisokey)) +- `动态过滤` 支持过滤新出现的热搜面板. (#5273, PR #5276 by [Whalko](https://github.com/RtYkk)) + +🐛修复 +- 修复 `夜间模式` 在首页 svg 图标的颜色. (PR #5240 by [hyrious](https://github.com/hyrious)) +- 修复 `自动移出稍后再看` 重复调用接口的 bug. (PR #5241 by [sunfkny](https://github.com/sunfkny)) +- 修复 `关注时间显示` 失效. (#5096, #5212, PR #5282 by [CNOCM](https://github.com/CNOCM)) + + +## v2.10.2-preview +`2025-05-30` + +包含 [v2.10.2](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.10.2) 的所有更新内容. + +- 新增 `稍后再看页面-重定向` 组件. (PR #5205 by [undefined](https://github.com/magicFeirl)) +> 重定向**稍后再看页面**到普通视频页面,和`稍后再看重定向`组件的区别在于,该组件是在进入稍后再看的视频页面后进行重定向,而非直接替换链接到普通视频的链接,用于补充`稍后再看重定向`组件的功能。 + +- `隐藏热搜` 支持隐藏直播间搜索框的热搜. (PR #5207 by [undefined](https://github.com/magicFeirl)) +- 修复 `视频链接增强` 对 niconico 链接的处理. (PR #5215 by [Alan Ye](https://github.com/at-wr)) +- 新增 `动态分组过滤` 组件. (PR #5217 by [Rinne](https://github.com/OharaRinneY)) +> 按照关注分组筛选动态 + +- `直播信息扩充` 支持配置置顶和隐藏的关注列表. (#5183) + + +## v2.10.2 +`2025-05-30` + +✨新增 +- 更新历史记录页面的链接至 `https://www.bilibili.com/history`. (#5218) +- `删除视频弹窗` 支持屏蔽新型的流畅度反馈弹窗. +- 优化了个人空间的夜间模式. + +🐛修复 +- 修复 `快捷键扩展` 在 Firefox 中聚焦播放器后失效. (#5225) +- 修复 `动态过滤器` 对合集 / 课程类型的过滤, 恢复失效的 `自转发` 类型. (#5135, #5229) +- 修复 `禁用特殊弹幕样式` 对大会员弹幕失效. (#5208) +- 修复 `自动点赞` 对黑名单无效. (#5221, PR #5222 by [CrazyboyQCD](https://github.com/CrazyboyQCD)) +- 修复 `清爽首页` 中失效的排行榜数据, 部分视频的描述未展示, 以及视频的封面比例不正确. (#5211) + +☕开发者相关 +- 修复组件中新创建的数组类型选项没有保存到脚本管理器的存储中. + +## v2.10.1-preview +`2025-04-09` + +包含 [v2.10.1](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.10.1) 的所有更新内容. + +- 新增组件 `一键点亮直播间粉丝勋章`. (PR #5171 by [undefined](https://github.com/magicFeirl)) +> 在直播间页面的功能面板添加一键点亮粉丝勋章功能,仅适用于有粉丝勋章且正在直播的直播间。原理:发送一个 300 次点赞的请求点亮粉丝勋章。 + +- 新增组件 `下载表情`. (PR #5176 by [Pencil](https://github.com/pencilqaq)) +> 支持下载 up 主专属表情包,处于任意直播间页面时,下载按钮会在 `功能` 面板显示,以压缩包形式保存。 + +- 新增组件 `视频链接增强`. (PR #5197 by [Alan Ye](https://github.com/at-wr)) +> 这个组件会将视频简介中的普通网址转换为可点击的链接,并将被 Bilibili 抛弃已失效的 `acg.tv` 跳转链接修复为 `nicovideo.jp` 链接。 +> +> 例如: `https://acg.tv/sm37507315` → `https://www.nicovideo.jp/watch/sm37507315` +> +> 本组件不会保证目标链接的安全性,因此在点击前请自行验证其是否可信 + +- `自定义顶栏` 新增 `使用主题色 Logo` 选项, 关闭时可以使用黑白纯色的 Logo. (#4996) +- `自定义顶栏` 更新 `游戏中心`, `漫画`, `赛事` 的弹窗, 废弃 `直播` 的弹窗. (#5055) + +## v2.10.1 +`2025-04-09` + +
+正式版用户将获得 v2.9.6-preview ~ v2.10.0-preview 的所有改动, 点击展开查看 + +- 新增插件 `自定义顶栏 - 版权内容`. (#5045) +> 为自定义顶栏扩充版权内容相关的快速入口, 包括国创 / 电影 / 电视剧 /综艺 / 纪录片 + +- 视频截图在还有截图未处理 (保存 / 丢弃) 时, 离开页面增加二次确认. (#5066) +- `插件 - 下载视频 - WASM 混流输出` 在超过 4GB 时支持抛出错误提示. (PR #5102 by [WakelessSloth56](https://github.com/WakelessSloth56)) +- `自定义顶栏` 的透明填充在同时开启了全局固定时, 支持下拉后过渡到不透明状态. (#4996) +- `自定义顶栏` 的弹窗增加了 0.2s 的触发延迟, 防止鼠标快速经过时误触. (#4949) +- 废弃 `双击全屏` 组件, 本体也不再会屏蔽双击全屏. (#5095) + +
+ +✨新增 +- 新增组件 `禁用双击全屏`. (#5095) +> ⚠ 请注意 `双击全屏` 组件已废弃, 本体也不再会屏蔽双击全屏, 更新后可以直接卸载 `双击全屏` 组件 + +- `快捷键扩展` 的使用说明增加关于屏蔽 b 站自带快捷键的指南. (#5168) +- `动态过滤器` 增加 `课程`, `直播`, `合集` 类型. (#5135) +> 这些类型的支持是根据 b 站代码里的枚举加的, 我的动态里没有这些类型无法测试, 如果还有相关问题请继续在 #5135 中反馈 + +🐛修复 +- 修复 `快捷键扩展` 在聚焦元素相关的动作中出现失效的情况. (#5150, #5153, #5174) +- 修复 `启用快速收藏` 在存在和默认收藏夹同名的收藏夹时, 收藏到了错误的收藏夹. (#5151) +- 修复 `图片批量导出` 在 Firefox 中导出动态图片时出现重复图片. (#5166) +- 修复 `夜间模式` 导致登录时二维码扫码困难. (#5163, PR #5173 by [Pencil](https://github.com/pencilqaq)) +- 修复 `删除广告` 在搜索页出现的空位. (#5032) + + +## v2.10.0-preview +`2025-02-25` + +包含 [v2.10.0](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.10.0) 的所有更新内容. + +- `插件 - 下载视频 - WASM 混流输出` 在超过 4GB 时支持抛出错误提示. (PR #5102 by [WakelessSloth56](https://github.com/WakelessSloth56)) +- `自定义顶栏` 的透明填充在同时开启了全局固定时, 支持下拉后过渡到不透明状态. (#4996) +- `自定义顶栏` 的弹窗增加了 0.2s 的触发延迟, 防止鼠标快速经过时误触. (#4949) +- 废弃 `双击全屏` 组件, 本体也不再会屏蔽双击全屏. (#5095) + +## v2.10.0 +`2025-02-25` + +✨新增 +- 优化 `夜间模式` 在视频页和新版个人空间的适配. (#5121, #5115, PR #5116 by [Pencil](https://github.com/pencilqaq)) +- 动态相关功能支持在新版个人空间里使用. (#5112) +- `稍后再看` 重定向支持在新版稍后再看列表页里使用. (#4951) + +🐛修复 +- 对 `自定义顶栏` 的番剧区分了链接和弹窗两种形式, 避免重名. 若同时开启, 番剧弹窗将自动变为 "追番追剧". (#5087) +- 修复 `图片批量导出` 在新版动态卡片上不生效. (#5098) +- 修复 `删除广告` 在视频页清理不干净. (#5110) +- 修复 `快捷键扩展` 导致在视频页使用方向键选择搜索建议时, 触发了音量调整. (#5119) +- 修复 `高分辨率图片` 导致部分图片比例不正确 (#5103) +> 因为 b 站自身基本已经普及 2x 缩放的图片, 如果你的系统缩放比例小于等于 200%, 也不需要在专栏中请求原图, 则可以删除 `高分辨率图片` 组件. `高分辨率图片` 改为只对 200% 缩放以上的屏幕请求更高分辨率的图片. + +- 修复 `自定义顶栏` 的排序设置在重新登录后乱序. (#5099) +- 修复关闭再打开 `自定义顶栏` 后, 其布局设置的界面异常. +- 修复注入到播放器控制栏按钮的相关功能不生效. + +☕开发者相关 +- 优化关于启动 `dev-server` 的文档. (PR #5130 by [undefined](https://github.com/magicFeirl)) +- pnpm 升级至 v10, 启用 corepack. + +🗑️废弃 +- 废弃 `签到助手` 中的 `直播间签到`, 因为直播间签到已被 b 站下线. + + +## v2.9.6-preview +`2024-12-28` + +包含 [v2.9.6](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.9.6) 的所有更新内容. + +- 新增插件 `自定义顶栏 - 版权内容`. (#5045) +> 为自定义顶栏扩充版权内容相关的快速入口, 包括国创 / 电影 / 电视剧 /综艺 / 纪录片 + +- 视频截图在还有截图未处理 (保存 / 丢弃) 时, 离开页面增加二次确认. (#5066) + +## v2.9.6 +`2024-12-28` + +✨新增 +- `自定义顶栏` 更新: + - (来自 v2.9.5-preview) 历史支持手动刷新. (#4948) + - 全局固定适配话题页. (#5039) + - 新歌热榜 URL 更新. (#5056) + - `订阅` 重命名为 `番剧`, 功能不变. (#4777) + - 增加 VLOG, 搞笑, 综艺, 单机游戏入口. (#1511) +- `传统连播模式` 支持番剧页面. (#5067) +- `下载视频` 增加选项 `DASH 回退编码`, 默认回退到 AVC, 可以避免 HEVC 回退到 AV1 的情况. (#5080) +- 新增功能 `隐藏首页轮播图`. (从上一版本废弃的 `简化首页` 中提取) (#5038) +- `夜间模式` 优化对动态和新版首页的适配. (#5075) + +🐛修复 +- 修复 `隐藏头像框` 对部分角标删除不完全. (#5040) +- 修复 `自定义顶栏` 删除搜索历史时失焦. (#4732) +- 修复 `自定义顶栏` 未登录时仍能通过功能面板进行排序. (#5051) +- 修复 `自定义顶栏` 收藏夹的音频链接错误. (#5069) +- 修复在搜索页的样式冲突. (#5073) +- 修复 `直播首页静音` 在关闭时仍会导致首页静音. (#5045) +- 修复 `禁止滚轮调音量` 在 Firefox 中不生效. (#5047) +- 回退 `直播信息扩充` 的 API 变更. (#4964) + +## v2.9.5-preview +`2024-11-12` + +包含 [v2.9.5](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.9.5) 的所有更新内容. + +- `自定义顶栏` 的历史支持手动刷新. (#4948) + +## v2.9.5 +`2024-11-12` + +
+正式版用户将获得 v2.9.4-preview 的所有改动, 点击展开查看 + +✨新增 +- 新增组件 `隐藏头像框`. +> 隐藏页面中用户的头像框 (包括角标), 目前支持动态和视频页面. + +- 新增组件 `隐藏直播马赛克`. (#4634) +> 移除直播画面中的马赛克区域. + +- 优化了搜索框的搜索建议精准度. (#4833) +- 新增组件 `删除动态`. (PR #4915 by [gouzil](https://github.com/gouzil)) +> 删除动态, 可选转发抽奖, 和全部删除. + +- `保存视频元数据` 增加 FFMETADATA 字段选项. (PR #4943 by [WakelessSloth56](https://github.com/WakelessSloth56)) +- 新增组件 `评论内容替换`. (#4072) +> 替换评论中的内容. +> 可以添加多个替换配置, 每项配置可将一个关键词替换为其他文本. 若替换的目标是一个链接, 则视作替换为表情. +> + +- `直播信息扩充` 更换新的 API 接口. (PR #4964 by [Oxygenくん](https://github.com/oxygenkun)) + +
+ +✨新增 +- 新版视频推荐适配组件: + - `显示视频投稿时间` (#4934, PR #4960 by [呼乎户](https://github.com/wisokey)) + - `隐藏视频推荐` + - `选集区域优化`, 其中 `展开选集标题` 选项还可恢复分 P 数的展示 + - `传统连播模式` + - `展开弹幕列表` - `有选集时不自动展开` +- 优化在线仓库中的搜索逻辑和搜索为空的提示. (#4975, #4973) +- `自定义顶栏` 的历史支持显示分 P 数信息. (#1866) +- `删除广告` 更新对首页浮窗广告的屏蔽. (#5001) + +🐛修复 +- 修复 `简化直播间` 付费礼物屏蔽失效. (#4968) +- 修复动态菜单中的扩展菜单项失效. (#4976) +- `夜间模式` 排除工房页面, 避免文字难以阅读. (#4981) +- `自定义顶栏` 移除已下线的 `短剧榜` 入口. (#4987) +- 修复 `删除广告` 导致直播间和个人空间里的动态显示不出来. (#5003) +- 修复 `网址参数清理` 对需转义的字符处理不正确. (#5009) +- 修复组件描述在部分页面的标题颜色不正确. (#4995) +- 修复 `禁止跳转动态详情` 在带图转发动态二次转发后, 查看图片按钮失效. (PR #4980 by [sunfkny](https://github.com/sunfkny)) +- 插件 `下载视频 - WASM 混流输出` 修复写入元数据选项, 新增混流进度, 优化多集下载. (#4840, PR #4984 by [WakelessSloth56](https://github.com/WakelessSloth56)) + +☕开发者相关 +- `自定义顶栏` 未登录时的阿卡林头像转为内置. (感觉说不定 b 站哪天就把这图删了) + +🗑️废弃 +- 废弃 `简化首页` 功能, 请使用 [BewlyBewly](https://github.com/BewlyBewly/BewlyBewly) 替代. + +## v2.9.4-preview +`2024-10-22` + +包含 [v2.9.4](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.9.4) 的所有更新内容. + +✨新增 +- 新增组件 `隐藏头像框`. +> 隐藏页面中用户的头像框 (包括角标), 目前支持动态和视频页面. + +- 新增组件 `隐藏直播马赛克`. (#4634) +> 移除直播画面中的马赛克区域. + +- 优化了搜索框的搜索建议精准度. (#4833) +- 新增组件 `删除动态`. (PR #4915 by [gouzil](https://github.com/gouzil)) +> 删除动态, 可选转发抽奖, 和全部删除. + +- `保存视频元数据` 增加 FFMETADATA 字段选项. (PR #4943 by [WakelessSloth56](https://github.com/WakelessSloth56)) +- 新增组件 `评论内容替换`. (#4072) +> 替换评论中的内容. +> 可以添加多个替换配置, 每项配置可将一个关键词替换为其他文本. 若替换的目标是一个链接, 则视作替换为表情. +> + +- `直播信息扩充` 更换新的 API 接口. (PR #4964 by [Oxygenくん](https://github.com/oxygenkun)) + +## v2.9.4 +`2024-10-22` + +✨新增 +- `屏蔽黑名单up主` 去除了登录校验. (#4917, PR #4926 by [snowraincloud](https://github.com/snowraincloud)) +- `图片批量导出` 适配新型的图片动态. (#4830) +- 更新评论区的 `夜间模式`. (#4931) + +🐛修复 +- 修复 StreamSaver 和 ffmpeg WASM 的 SRI 校验问题. (#4913, #4864) +- 修复下载合集时 BV 号命名重复. (#4818) +- 修复 `删除广告` 去除首页广告时没有遵循 `占位文本` 选项. (#4836) +- 修复 `自定义顶栏` 历史面板中的多余 title 提示. (#4962) +- 修复下载弹幕时播放器设置没有正确读取. (#4824) + +🗑️废弃 +- `自定义顶栏` 删除 `相簿` 入口. + +☕开发者相关 +- 修复 DevClient 无法重载 Shadow DOM 样式. + +## v2.9.3-preview +`2024-09-15` + +主要是各种修复, 见 [v2.9.3](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.9.3). + +## v2.9.3 +`2024-09-15` + +
+正式版用户将获得 v2.9.1-preview ~ v2.9.2-preview 的所有改动, 点击展开查看 + +✨新增 +- `查看封面` 可以为 aria2 输出提供直接的封面下载. (PR #4798 by [Oxygenくん](https://github.com/oxygenkun)) +- 新增组件 `保存视频元数据`. (PR #4840 by [WakelessSloth56](https://github.com/WakelessSloth56)) +> - 保存视频元数据为 [FFMETADATA](https://ffmpeg.org/ffmpeg-formats.html#Metadata-2) 格式 +> - 使用组件 `下载视频` 时指定 `WASM` 输出方式(插件 `下载视频 - WASM 混流输出`)可选择是否直接混流入输出文件。 +> - 保存视频章节为 OGM 格式 (https://github.com/the1812/Bilibili-Evolved/discussions/2069#discussioncomment-10110916) + +- `简化首页` 支持隐藏轮播图. (PR #4852 by [Lime](https://github.com/Liumingxun)) +- 新增组件 `添加直播间用户超链接`. (PR #4856 by [Light_Quanta](https://github.com/LightQuanta)) +> 网页版直播间右上角的房间观众和大航海界面的用户列表只可查看用户名,不可进行点击。该组件为用户头像和用户名称处添加点击效果,允许通过点击直接查看用户空间。 + +- 插件 `下载视频 - WASM 混流输出` 支持并行下载库和音视频流. (PR #4864 by [WakelessSloth56](https://github.com/WakelessSloth56)) +- `弹幕转义` 支持对正斜杠的换行 (`/n`) 进行转义. (#4865) +- `自定义顶栏` 支持直接在功能中打开布局设置. (#2666) +- `高分辨率图片` 支持处理没有指定高度的图片, 支持在专栏页面中请求原图. (#2868) +- `直播间网页全屏自适应` 样式适配较低的宽度值. (#4895) + +☕开发者相关 +- 外部资源接入 Subresource Integrity. (#4896) + +
+ +🐛修复 +- 修复 `快速收起评论` 对旧版评论区的兼容性. (#4905) +- 修复 `快捷键扩展` 的发送评论在新版评论区失效. (#4843) +- 修复 `禁用评论区搜索词` 偶现样式失效. (#4843) + +☕开发者相关 +- `ShadowDomObserver` 在使用前无需再调用 `observe()`. +- 增加工具方法 `getActiveElement` 检测当前页面的聚焦元素. + +## v2.9.2-preview +`2024-09-08` + +包含 [v2.9.2](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.9.2) 的所有更新内容. + +✨新增 +- `弹幕转义` 支持对正斜杠的换行 (`/n`) 进行转义. (#4865) +- `自定义顶栏` 支持直接在功能中打开布局设置. (#2666) +- `高分辨率图片` 支持处理没有指定高度的图片, 支持在专栏页面中请求原图. (#2868) +- `直播间网页全屏自适应` 样式适配较低的宽度值. (#4895) + +☕开发者相关 +- 外部资源接入 Subresource Integrity. (#4896) + +## v2.9.2 +`2024-09-08` + +✨新增 +- `网址参数清理` 支持清理 `is_room_feed`. (PR #4886 by [dreammu](https://github.com/dreammu)) + +🐛修复 +- 新版评论区相关功能修复: (#4843) + - 修复 `快速收起评论` 按钮错位. (#4890) + - 恢复功能: `禁用评论区搜索词`, `评论区IP属地显示`, `复制动态链接`. + - `简化评论区` 支持 Firefox. + - 样式实现使用 [Container style queries](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_containment/Container_size_and_style_queries#container_style_queries_2) 替代 [:host-context](https://developer.mozilla.org/en-US/docs/Web/CSS/:host-context), 虽然 Firefox 还是不支持, 但是能稍微标准化一点. + - 夜间模式适配 + +☕开发者相关 +- Shadow DOM API (`./src/core/shadow-dom`) 更名为 Shadow Root API (`./src/core/shadow-root`), 模块内的功能导出单例: + - `shadowDomObserver`: 持续观测页面上的所有 Shadow DOM. + - `shadowRootStyles`: 支持将样式注入到 Shadow DOM 内部. +- Comments API 增加 `CommentAreaV3` 实现, 支持基于 Shadow DOM 的新版评论区. (#4843) +- 增加 `isContainerStyleQuerySupported` 来检测当前浏览器对 [Container style queries](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_containment/Container_size_and_style_queries#container_style_queries_2) 的支持. +- 组件样式支持在 `ComponentMetadata.instantStyles` 中声明 `shadowDom: true` 来插入到 Shadow DOM 中. + + +## v2.9.1-preview +`2024-08-15` + +包含 [v2.9.1](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.9.1) 的所有更新内容. + +✨新增 +- `查看封面` 可以为 aria2 输出提供直接的封面下载. (PR #4798 by [Oxygenくん](https://github.com/oxygenkun)) +- 新增组件 `保存视频元数据`. (PR #4840 by [WakelessSloth56](https://github.com/WakelessSloth56)) +> - 保存视频元数据为 [FFMETADATA](https://ffmpeg.org/ffmpeg-formats.html#Metadata-2) 格式 +> - 使用组件 `下载视频` 时指定 `WASM` 输出方式(插件 `下载视频 - WASM 混流输出`)可选择是否直接混流入输出文件。 +> - 保存视频章节为 OGM 格式 (https://github.com/the1812/Bilibili-Evolved/discussions/2069#discussioncomment-10110916) + +- `简化首页` 支持隐藏轮播图. (PR #4852 by [Lime](https://github.com/Liumingxun)) +- 新增组件 `添加直播间用户超链接`. (PR #4856 by [Light_Quanta](https://github.com/LightQuanta)) +> 网页版直播间右上角的房间观众和大航海界面的用户列表只可查看用户名,不可进行点击。该组件为用户头像和用户名称处添加点击效果,允许通过点击直接查看用户空间。 + +- 插件 `下载视频 - WASM 混流输出` 支持并行下载库和音视频流. (PR #4864 by [WakelessSloth56](https://github.com/WakelessSloth56)) + +## v2.9.1 +`2024-08-15` + +
+正式版用户将获得 v2.9.0-preview 的所有改动 (新功能以及一项废弃), 点击展开查看 + +✨新增 +- `简化直播间` 支持屏蔽推荐直播间. (#4787) +- 新增功能 `删除直播马赛克遮罩` (#4634, PR #4814) +> 删除观看直播时某些分区的马赛克遮罩. + +- `启用视频截图` 截出来的图支持直接复制. (此功能需要 Firefox 127 版本以上) (#4806) +- `图片批量导出`, `下载视频` 支持更多变量, 详情可在更新组件后查看设置中的说明: (#3852) + - 动态 ID, 用户 ID, 动态发布时间, 被转发动态相关数据 + - 专栏 cv 号, 专栏发布时间 + - (仅对批量视频下载 (分P / 合集) 有效) up 主名称, up 主 ID, 视频发布时间 +- `自定义顶栏` 的稍后再看和历史面板现在始终显示 "已观看" 状态. (#4346) +- `自定义顶栏` 的稍后再看, 收藏和历史面板优化了分 P 数和观看进度的展示, 详见[此处](https://github.com/the1812/Bilibili-Evolved/discussions/1866#discussioncomment-10075203). (#1866) + +🗑️废弃 +- 删除 `下载视频` 的 Toast 输出方式. + +
+ +🐛修复 +- 部分修复 `简化评论区` 在新版评论区下失效. (#4843) + - 头像框目前还没找到比较好的方式隐藏, 暂不支持. + - 时间由于 Shadow DOM 限制, 无法再挪到右上角了, `装扮 & 时间` 只对装扮有效. + - 样式实现依赖 [:host-context](https://developer.mozilla.org/en-US/docs/Web/CSS/:host-context), 因此目前还不支持 Firefox. +- 修复 `删除视频弹窗` 和 `禁用特殊弹幕样式` 在新版播放器下失效. (#4843, #4823, PR #4839 by [festoney8](https://github.com/festoney8)) +- 修复 `快捷键扩展` 的部分操作和 `启用弹幕空降` 在新版播放器下失效. + +☕开发者相关 +- 新增 Shadow DOM 系列 API (`src/core/shadow-dom.ts`), 用于处理 Shadow DOM 相关的逻辑. + - `ShadowDomObserver`: 持续观测页面上的所有 Shadow DOM. + - `ShadowDomStyles`: 支持将样式注入页面, 包含所有 Shadow DOM 内部. +- `MutationObserver` 相关的 API 支持使用 `Node` 类型作为目标. + +## v2.9.0-preview +`2024-07-19` + +✨新增 +- `简化直播间` 支持屏蔽推荐直播间. (#4787) +- 新增功能 `删除直播马赛克遮罩` (#4634, PR #4814) +> 删除观看直播时某些分区的马赛克遮罩. + +- `启用视频截图` 截出来的图支持直接复制. (此功能需要 Firefox 127 版本以上) (#4806) +- `图片批量导出`, `下载视频` 支持更多变量, 详情可在更新组件后查看设置中的说明: (#3852) + - 动态 ID, 用户 ID, 动态发布时间, 被转发动态相关数据 + - 专栏 cv 号, 专栏发布时间 + - (仅对批量视频下载 (分P / 合集) 有效) up 主名称, up 主 ID, 视频发布时间 +- `自定义顶栏` 的稍后再看和历史面板现在始终显示 "已观看" 状态. (#4346) +- `自定义顶栏` 的稍后再看, 收藏和历史面板优化了分 P 数和观看进度的展示, 详见[此处](https://github.com/the1812/Bilibili-Evolved/discussions/1866#discussioncomment-10075203). (#1866) + +🗑️废弃 +- 删除 `下载视频` 的 Toast 输出方式. + +## v2.8.13 +`2024-07-19` + +
+获得 v2.8.12-preview 的所有新功能, 点击展开查看 + +✨新增 +- `下载视频 - WASM 混流输出` 支持批量下载. (PR #4726 by [WakelessSloth56](https://github.com/WakelessSloth56)) +- `夜间模式` 增加 `color-scheme` meta 信息, 适配 Chrome 的 [Fluent overlay scrollbars](chrome://flags/#fluent-overlay-scrollbars). (#4717) + +
+ +✨新增 +- `删除广告` 支持屏蔽首页的 "广告已被屏蔽" 占位卡片. +- `自定义顶栏` 增加公益、公开课、社区中心入口. (#1511) + +🐛修复 +- 修复 `显示视频投稿时间` 时间显示错误及不显示时间的问题. (#4755, PR #4756 by [呼乎户](https://github.com/wisokey)) +- 修复夜间模式的一些适配问题. (#4376, #4768, #4785, #4802, PR #4763, #4810 by [Pencil](https://github.com/pencilqaq)) +- 修复 `屏蔽黑名单up主` 弹窗高度溢出. (PR #4784 by [snowraincloud](https://github.com/snowraincloud)) +- 修复 `自定义顶栏` 搜索框在 b 站搜索页打字时自动弹出. (#4808) + +☕开发者相关 +- 修复 GitHub Workflow 中 pnpm 安装失败. + +## v2.8.11-preview / v2.8.12-preview +`2024-05-14` + +包含 [v2.8.11](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.8.11) 的所有更新内容. + +✨新增 +- `下载视频 - WASM 混流输出` 支持批量下载. (PR #4726 by [WakelessSloth56](https://github.com/WakelessSloth56)) +- `夜间模式` 增加 `color-scheme` meta 信息, 适配 Chrome 的 [Fluent overlay scrollbars](chrome://flags/#fluent-overlay-scrollbars). (#4717) + +## v2.8.11 / v2.8.12 +`2024-05-14` + +🐛修复 +- 修复了搜索框中的 XSS 注入问题. +- 修复了搜索框在搜索页面不能同步关键词. (#4721) +- 修复 `评论区IP属地显示` 失效. (#4690) +- 在搜索框中删除搜索历史时将不再收起下拉菜单. (#4732) +- 修复功能反复开关时, 功能面板中的按钮重复出现. (#4731) +- 修复功能面板空间不足时出现折行. (#4730) +- 修复 `启用视频截图` 在番剧区失效. (#4719) + +☕开发者相关 +- Comment API 调整: + - 增加对 `CommentArea` 销毁的监测. + - `forEachCommentItem` / `forEechCommentArea` 参数统一支持 `added` 和 `removed` 回调. + - `CommentReplyItem` / `CommentItem` 增加属性 `vueProps`. + + +## v2.8.10-preview +`2024-04-23` + +包含 [v2.8.10](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.8.10) 的所有更新内容. + +- 更新了 `动态过滤器` 的描述, 当开启 `直播信息扩充` 时不可配置 `正在直播` 的显隐. (#4705) + +## v2.8.10 +`2024-04-23` + +
+获得 v2.8.9-preview 的所有新功能, 点击展开查看 + +- `下载视频 - WASM 混流输出` 支持更持久的缓存方式. (PR #4667 by [WakelessSloth56](https://github.com/WakelessSloth56)) +- `外置稍后再看` 和 `启用快速收藏` 增加了 `显示方式` 选项, 出现无法自动适配的排版问题时可以尝试手动调整此设置. (#4532) +- 新增插件 `动态过滤器 - 移除商品带货动态`. (#4425) +> 移除动态里的商品带货动态 (UP主的推荐 · 来自 XX), 装有 `动态过滤器` 时生效. + +- 新增组件 `动态图片平铺展示`. (#4645) +> 将动态中左右切换式的图片改回传统的平铺展示. (在动态详情中可能稍有延迟) + +- 更换了 `自定义顶栏` 的动态提醒数字来源. (#4427) + +
+ +✨新增 +- 夜间模式更新对视频和直播页面的样式. (#4701, PR #4675 by [WangYK](https://github.com/AnotiaWang)) +- 增强 `下载视频 - WASM 混流输出` 对错误输入流的检测, 支持 FLAC 音频流 (产生 `.mkv` 文件). (PR #4686 by [DBeidachazi](https://github.com/DBeidachazi)) +- `复制动态链接` 改用 `opus` 格式的链接, 并支持新版话题页面. (PR #4695, PR #4696 by [星海](https://github.com/lovelyCARDINAL)) +- 同时安装了 pakku 时, 支持下载处理后的弹幕. (PR #4712 by [xmcp](https://github.com/xmcp)) +- `传统连播模式` 支持识别和处理视频列表. (#4699, PR #4713 by [Wuch](https://github.com/IEXPECTATION)) +- `删除视频弹窗` 支持屏蔽收起后的弹窗. (#4703) + +🐛修复 +- 再次修复 `快速收起评论` 遮挡评论的表情等弹窗. +- 修复评论区相关功能失效. (#4690) +- 修复 `自定义顶栏` 导致稍后再看页面布局错位. (#4668) + +☕开发者相关 +- Comment API 现已重构并支持 Vue 3 版本的评论区. (#4690) + +## v2.8.9-preview +`2024-03-09` + +包含 [v2.8.9](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.8.9) 的所有更新内容. + +✨新增 +- `下载视频 - WASM 混流输出` 支持更持久的缓存方式. (PR #4667 by [WakelessSloth56](https://github.com/WakelessSloth56)) +- `外置稍后再看` 和 `启用快速收藏` 增加了 `显示方式` 选项, 出现无法自动适配的排版问题时可以尝试手动调整此设置. (#4532) +- 新增插件 `动态过滤器 - 移除商品带货动态`. (#4425) +> 移除动态里的商品带货动态 (UP主的推荐 · 来自 XX), 装有 `动态过滤器` 时生效. + +- 新增组件 `动态图片平铺展示`. (#4645) +> 将动态中左右切换式的图片改回传统的平铺展示. (在动态详情中可能稍有延迟) + +- 更换了 `自定义顶栏` 的动态提醒数字来源. (#4427) + + +## v2.8.9 +`2024-03-09` + +✨新增 +- `下载视频 - IDM 输出支持` 补充了保留文件名相关内容的描述. (PR #4664 by [LY](https://github.com/Young-Lord)) +- 夜间模式更新对以下区域的支持: + - 新版评论区输入框 (#4605) + - 动态详情页 + - 搜索页面 (#4354) +- `删除广告` 现在可以在新版首页中将删除后的空位移除. (#4610) +- `删除视频弹窗` 支持屏蔽 "请评价视频播放效果" 等小弹窗, 归属于投票类. (#4610) + +🐛修复 +- 修复 XML 弹幕下载遇到空弹幕时报错. (#4629) +- 修复播放前显示封面在中途暂停仍会出现. (#4491) +- 修复 `自定义顶栏` 的搜索结果描述溢出. (#4464) +- 修复自动关灯无效. (PR #4659 by [Waua](https://github.com/FoundTheWOUT), #4631) +- 修复 `网址参数清理` 导致搜索页出现 `https://search.bilibili.com/undefined`. (PR #4663 by [sunfkny](https://github.com/sunfkny), #4656) +- 修复 `禁止跳转动态详情` 导致动态中的查看图片按钮失效. (PR #4662 by [sunfkny](https://github.com/sunfkny)) +- 修复 `展开动态内容` 对部分用户失效. (#4633) +- 修复 `高分辨率图片` 导致旧版首页 logo 比例出错. (#4480) +- 修复个人空间中搜索过动态后再返回导致常规动态里的相关功能失效. (#4458) +- 修复番剧区的 `扩展倍速` 失效. (#4571) +- 修复 `快速收起评论` 遮挡评论的表情等弹窗. +- 修复 `自定义顶栏` 导致网课分区内容错位. (#4610) +- 修复 `隐藏顶部横幅` 导致部分分区页面内容错位. (#4610) + +☕开发者相关 +- PlayerAgent 支持监听 `pause` 事件. +- `forEachFeedsCard` 现在不会在非动态页面执行. + +## v2.8.8 / v2.8.8-preview +`2024-01-18` + +
+正式版用户将获得 v2.8.6-preview ~ v2.8.7-preview 的所有新功能, 点击展开查看 + +✨新增 +- 新增插件 `下载视频 - MPV 输出支持加强版`. (PR #4448 by [weapon!](https://github.com/Asukaaaaaa)) +> 同时支持单文件和多文件, 不需要额外下载程序处理 mpv 协议, 配置方式请参考 [README](https://github.com/Asukaaaaaa/tricks/blob/main/Bilibili-Evolved%20mpv-ex%20%E6%8F%92%E4%BB%B6.md) + +- `查看封面` 组件安装后可为 `下载视频` 提供下载封面支持. (#889, PR #4473 by [Oxygenくん](https://github.com/oxygenkun)) +- 新增插件 `下载视频 - WASM 混流输出`. (PR #4521 by [WakelessSloth56](https://github.com/WakelessSloth56)) +> 使用 WASM 在浏览器中下载并合并音视频,运行过程中请勿关闭页面,初次使用或清除缓存后需要加载约 30 MB 的 WASM 文件 + +- 使用流量计费网络时, 不再触发本体和功能的更新检查. (仅 Chrome) (#4477) +- `快捷键扩展` 的音量调整支持自定义幅度. (#2594) +- `自定义字体` 改善了组件代码和功能. (PR #4485 by [Tinhone](https://github.com/Tinhone)) + +☕开发者相关 +- PlayerAgent API 重构为调用 `window.player` 和 `window.nano` API, 可以解决 #2544 的问题, 感谢 [timongh](https://github.com/timongh) 和 [WakelessSloth56](https://github.com/WakelessSloth56) 的发现. (#4330, #4341) + +
+ +⚠ 注意 +- Firefox 的最低版本要求提升至 121, 顺便更新了下配置要求, 分为了最低配置和推荐配置, CPU 统一为桌面级型号. +- 移除对旧版视频播放器的支持, 仅支持新版视频播放器 (BPX 播放器) + +✨新增 +- 新增插件 `动态过滤器 - 移除充电专属动态`. (#4033) +> 移除动态里的充电专属动态, 装有 `动态过滤器` 时生效. + +- `删除视频弹窗` 支持屏蔽 "心动" 弹窗, `禁用特殊弹幕样式` 支持屏蔽相应的带货弹幕. (#4565) +- `删除广告` 支持屏蔽首页的桌面端弹窗广告. (#4590) +- 新增插件 `下载视频 - 空输出`. (#4581) +> 提供一个 "空" 的输出选项, 只想获取下载视频的附带产物 (弹幕, 字幕等) 时可以使用此插件. + +- `下载视频` 支持下载合集. (#3240) +- 视频相关功能和快捷键扩展支持新版番剧播放器. (#4571) + +🐛修复 +- 修复 `评论区IP属地显示` 在小黑屋中失效的问题. (#4572, PR #4573 by [Light_Quanta](https://github.com/LightQuanta)) +- `自定义字体` 改进: (PR #4585 by [Tinhone](https://github.com/Tinhone)) + - 修复 `自定义字体` 导致快速收藏图标消失. (#4566) + - 将 `覆盖选项` 迁移到了更多选项中. + - 因为文泉驿微米黑(WenQuanYi Micro Hei)字体的部分版本存在朝鲜语(韩语)显示不正确的问题,所以从默认设置中删除,使用 Malgun Gothic 字体替换. +- 夜间模式适配播放页的充电卡片. (#4599, PR #4600 by [Pencil](https://github.com/pencilqaq)) +- `直播信息扩充` 使用新的 API, 能够显示悄悄关注的主播. (PR #4587 by [Oxygenくん](https://github.com/oxygenkun)) +- 修复自定义顶栏在搜索页面的表现: 关键词同步 & 禁用全局固定. (#1431) +- `删除广告` 使用 CSS `:has` 功能实现了移除广告的空白占位区域. (#3997) +- 修复新版的动态多图界面中 `图片批量导出` 检测不到图片. (#4586) +- 修复使用 `pluginApis.installStyle` 安装带有特殊字符的名称的样式后, 无法删除的问题. (#4557) +- 修复快速收起评论遮挡了评论的操作菜单. (#4595) +- 更新了 `稍后再看重定向` 的说明文字, 明确了功能作用范围. (#4555) +> 将稍后再看的链接重定向为普通播放网址. +> - `重定向页面`: 对稍后再看列表页面里的链接重定向. +> - `重定向顶栏`: 对 `自定义顶栏` 里的稍后再看链接重定向. + +- 修复文件命名格式中 `[title]`, `[ep]`, `[lid]` 变量的值获取不正确. (#4575) + +☕开发者相关 +- pnpm 更新至 8.12.1. +- README 调整了一些中英文字符之间的空格. (PR #4602 by [Shen-Linwood](https://github.com/Shen-Linwood)) +- PlayerAgent.getPlayerConfig 支持 BPX 播放器, 且默认认为当前 Agent 为 BPX 类型. +- 修复 DownloadPackage 中同名文件会互相覆盖. (#4576) +- 动态过滤器中使用 CSS `.plugin-block` 可以隐藏某个动态卡片, 插件结合 `forEachFeedsCard` 等 API 可以实现自定义的过滤逻辑. (#4033) +- retrieveImageUrl 支持传入 picture 元素本身. +- 内置 UA 更新至 Firefox 123. +- 增加了 simulateClick API, 可以模拟一次点击. (依次触发 `pointerdown`, `mousedown`, `pointerup`, `mouseup`, `click` 事件) + +## v2.8.7 / v2.8.7-preview +`2023-11-23` + +- 修复正式版中清爽首页无法加载的问题. (#4538) + +其他更新内容请看 [v2.8.6](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.8.6) / [v2.8.6-preview](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.8.6-preview). + +## v2.8.6-preview +`2023-11-22` + +包含 [v2.8.6](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.8.6) 的所有更新内容. + +✨新增 +- 新增插件 `下载视频 - MPV 输出支持加强版`. (PR #4448 by [weapon!](https://github.com/Asukaaaaaa)) +> 同时支持单文件和多文件, 不需要额外下载程序处理 mpv 协议, 配置方式请参考 [README](https://github.com/Asukaaaaaa/tricks/blob/main/Bilibili-Evolved%20mpv-ex%20%E6%8F%92%E4%BB%B6.md) + +- `查看封面` 组件安装后可为 `下载视频` 提供下载封面支持. (#889, PR #4473 by [Oxygenくん](https://github.com/oxygenkun)) +- 新增插件 `下载视频 - WASM 混流输出`. (PR #4521 by [WakelessSloth56](https://github.com/WakelessSloth56)) +> 使用 WASM 在浏览器中下载并合并音视频,运行过程中请勿关闭页面,初次使用或清除缓存后需要加载约 30 MB 的 WASM 文件 + +- 使用流量计费网络时, 不再触发本体和功能的更新检查. (仅 Chrome) (#4477) +- `快捷键扩展` 的音量调整支持自定义幅度. (#2594) +- `自定义字体` 改善了组件代码和功能. (PR #4485 by [Tinhone](https://github.com/Tinhone)) + +☕开发者相关 +- PlayerAgent API 重构为调用 `window.player` 和 `window.nano` API, 可以解决 #2544 的问题, 感谢 [timongh](https://github.com/timongh) 和 [WakelessSloth56](https://github.com/WakelessSloth56) 的发现. (#4330, #4341) + +## v2.8.6 +`2023-11-22` +✨新增 +- `清爽首页` / `极简首页` 现在可以正确重定向 "悬浮视频". (#4404) +- `网址参数清理` 增加 `spmid` 参数. (#4512) +- `快捷键扩展` 默认不再启用前进/后退的快捷键 (默认使用 b 站的前进/后退). (#4501) +- `展开动态内容` 现在不会展开专栏类型的动态, 并保留原来的 "全文" 按钮. (#4475) + +🐛修复 +- 修复了首页的正式版安装链接 CDN 不正确. (#4460) +- 修复 `极简首页` 在特定情况下无法触发加载的问题. (#4302, PR #4430 by [Tinhone](https://github.com/Tinhone)) +- 调整了 `简化评论区` 和 `删除广告` 对评论区附近的活动横幅和小喇叭横幅的说明, 关于这两种元素的具体区别以及分配至的组件, 可以参考 #4444 中的讨论. +- 修复 `直播信息扩充` 中的标题未处理转义的 HTML 特殊字符. +- 修复 `BV 号转换` 复制的链接即使没有参数也会带上末尾的 `?`. (#4515) +- 修复番剧片单页面出现报错. (#1999) +- 修复 `自定义顶栏` 历史面板无法正确跳转课程. (#4484) +- 修复 `自定义顶栏` 在历史记录页面产生的布局错位. (#4459) +- 修复 `网址参数清理` 处理相对路径 URL 时产生了错误的结果. (#4471) +- 修复 `自定义顶栏` 在专栏页面挡住了作者信息顶栏. (#4540) + +☕开发者相关 +- 锁定了 PR Check 中的 pnpm 版本, 避免 pnpm 更新后出现不兼容 lockfile 导致 PR Check 失败. +- `夜间模式` 增加了一篇详细的[开发文档](./registry/lib/components/style/dark-mode/README.md). +- Microsoft Edge 不再作为首要兼容的浏览器. (和 Chrome 相同内核, 理论上兼容性不会有太大差别) + +## v2.8.5 / v2.8.5-preview +`2023-09-24` + +✨新增 +- 新增组件 `自定义字体`. (PR #4406 by [Tinhone](https://github.com/Tinhone)) +> 使用组件提供的字体设置覆盖原版的主站字体,并使主站字体可被自定义。字体设置写法请参考 [MDN](https://developer.mozilla.org/zh-CN/docs/Web/CSS/font-family) 、默认设置与设置说明 + +- `简化直播间` 适配了新版 PK 条. (PR #4439 by [Pencil](https://github.com/pencilqaq)) + +- `下载视频` 支持配置 DASH 格式下的文件扩展名. (PR #4449 by [小傅Fox](https://github.com/xfoxfu)) + + +
+正式版用户将获得 v2.8.0-preview ~ v2.8.4-preview 的所有新功能, 点击展开查看 + +- `清爽首页` 改进: + - 支持自定义板块的布局和可见性. (操作方式和自定义顶栏那个差不多) + - 番剧时间表优化样式, 增加翻页按钮. + +
+ + +
+ +- 新增功能 `首页净化`. (PR #4153 by [RieN](https://github.com/rien7)) +> 删除首页特定类型的卡片. + +- `自定义顶栏` 增加 `创作中心` 入口, `排行` 新增 `全站音乐榜` 和 `短剧榜` 的入口. (#4101, PR #4154 by [星海](https://github.com/lovelyCARDINAL), PR #4155 by [星海](https://github.com/lovelyCARDINAL)) +- `播放器置顶(新)` 增加选项 `顶部留白`. (#4152, PR #4165 by [Ziu](https://github.com/ZiuChen)) +- `播放器置顶(新)` 的标题改为放置到播放器和点赞中间. (PR #4208 by [LockRim](https://github.com/LockRim)) +- `显示视频投稿时间` 支持转义字符. (#4160, PR #4167 by [呼乎户](https://github.com/wisokey)) +- `隐藏视频推荐` 支持稍后再看和收藏夹播放页, 并适配 bpx 播放器. (#4174) +- 新增功能 `隐藏记笔记` 和 `隐藏稿件投诉`. (#4124) +- 优化了 `自定义顶栏` 中订阅在筛选时的 API 调用. (#4120) +- 优化粗体的显示: 优先调用 Semibold 字重, 若字体不支持则使用 Bold 字重. +- `自定义顶栏` 增加选项: + - 支持自定义消息提醒样式, 可设置为 `数字`, `点状` 或 `隐藏`. (#4125) + - 支持自定义搜索栏宽度. (#4112) +- 搜索在纯数字输入时, 增加对 UID 和直播间的搜索. (#677) +- `网址参数清理` 更新对直播间的支持. (#1459) +- `自动点赞` 转为由 [CrazyboyQCD](https://github.com/CrazyboyQCD) 维护, 支持手动控制点赞和黑名单功能. (PR #4343, PR #4358 by [CrazyboyQCD](https://github.com/CrazyboyQCD)) + +- `简化直播间` 支持隐藏荣耀等级勋章. (PR #4348 by [CrunchyShark](https://github.com/CrunchyShark944)) +- 在设置面板中的组件管理等面板中, 搜索框移动至已安装列表的上方, 更符合直觉. (#3806) +- 支持从 Tampermonkey 的菜单中唤起功能和设置面板. (#4170) +- 搜索栏中添加了导入 / 导出设置的操作. (#4170) +- `自定义顶栏` 新增选项 `链接对齐样式`, 可以自定义纯链接弹窗内链接文字的对齐样式. (PR #4365 by [Tinhone](https://github.com/Tinhone)) +- `简化评论区` 支持独立控制简化选项, 并支持隐藏粉丝勋章和活动横幅. (仅支持新版评论区) (#2381) +- `清爽首页` 设置为隐藏的版块现在将彻底销毁, 减少资源占用. +- `禁用特殊弹幕样式` 支持禁用大会员弹幕. (#4227) +- `下载视频` 在批量下载番剧时, 支持下载多个不同板块的选集. (#2834) +- 新增功能 `全屏直播礼物简化`. (PR #4306 by [TimmyOVO](https://github.com/TimmyOVO)) + +> 移除全屏观看直播时的底部礼物栏 + +- 新增功能 `评论区 IP 属地显示`. (PR #4331, PR #4334 by [Light_Quanta](https://github.com/LightQuanta)) + +> 在评论区显示评论的IP属地信息 + +- 新增功能 `直播间网页全屏自适应`. (#4216) + +> 在直播网页全屏时, 自动调整侧边栏的宽度, 使得视频区域的比例和视频源相匹配, 达到无黑边的效果. 如果在侧边栏的边缘拖动, 可以自定义侧边栏的固定宽度, 双击边缘可以还原到自动宽度. +> +> - `侧边栏最大宽度 (px)`: 限制侧边栏可被拉伸到的最大宽度. (最小宽度固定为 190px, 再小的话布局就要出问题了) +> +> > 注意, 由于有最大宽度和最小宽度的限制, 部分窗口尺寸下仍然无法做到无黑边. + +- 新增功能 `关注时间显示`. (PR #4352 by [Light_Quanta](https://github.com/LightQuanta)) + +> 在个人空间的粉丝/关注列表显示关注的具体时间 + +- 新增功能 `自动移出稍后再看`. + +> 在稍后再看页面播放结束时, 自动将当前视频移出稍后再看. +> 注意: +> - 一定要播放结束, 快结束时手动切走不算 +> - b 站的稍后再看列表不会实时刷新 + +- 新增功能 `相簿发布时间显示`. (PR #4362 by [Light_Quanta](https://github.com/LightQuanta)) + +> 在个人空间的相簿界面显示相簿的发布时间 + +
+ +🐛修复 +- 修复 `禁止滚轮调音量` 在网页全屏下失效. (#4381). +- 修复 Feeds API 无法解析新版图文动态的文字内容. (主要是动态过滤器会受影响) (#4409) +- 修复 `选集区域优化` 在部分视频合集页面上无法使用 Alt 来切换折叠. (#4429) +- 修复被转发图文动态的 `详情 >` 功能失效. (PR #4452 by [sunfkny](https://github.com/sunfkny)) + + +## v2.8.4-preview +`2023-09-07` + +包含 [v2.7.6](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.7.6) 的所有更新内容. + +- `直播间网页全屏自适应` 支持自定义侧边栏宽度. (#4216) +- 修复 `直播勋章快速更换` 获取头衔列表时报错. (#4403) + +## v2.7.6 +`2023-09-07` + +更新了动态相关的 API 地址, 修复番剧无法加载的问题. (#4305) + + +## v2.8.3-preview +`2023-08-26` + +包含 v2.7.5 的所有更新内容. + +✨新增 +- `网址参数清理` 更新对直播间的支持. (#1459) +- `自动点赞` 转为由 [CrazyboyQCD](https://github.com/CrazyboyQCD) 维护, 支持手动控制点赞和黑名单功能. (PR #4343, PR #4358 by [CrazyboyQCD](https://github.com/CrazyboyQCD)) + +- `简化直播间` 支持隐藏荣耀等级勋章. (PR #4348 by [CrunchyShark](https://github.com/CrunchyShark944)) +- 在设置面板中的组件管理等面板中, 搜索框移动至已安装列表的上方, 更符合直觉. (#3806) +- 支持从 Tampermonkey 的菜单中唤起功能和设置面板. (#4170) +- 搜索栏中添加了导入 / 导出设置的操作. (#4170) +- `自定义顶栏` 新增选项 `链接对齐样式`, 可以自定义纯链接弹窗内链接文字的对齐样式. (PR #4365 by [Tinhone](https://github.com/Tinhone)) +- `简化评论区` 支持独立控制简化选项, 并支持隐藏粉丝勋章和活动横幅. (仅支持新版评论区) (#2381) +- `清爽首页` 设置为隐藏的版块现在将彻底销毁, 减少资源占用. +- `禁用特殊弹幕样式` 支持禁用大会员弹幕. (#4227) +- `下载视频` 在批量下载番剧时, 支持下载多个不同板块的选集. (#2834) +- 新增功能 `全屏直播礼物简化`. (PR #4306 by [TimmyOVO](https://github.com/TimmyOVO)) + +> 移除全屏观看直播时的底部礼物栏 + +- 新增功能 `评论区 IP 属地显示`. (PR #4331, PR #4334 by [Light_Quanta](https://github.com/LightQuanta)) + +> 在评论区显示评论的IP属地信息 + +- 新增功能 `直播间网页全屏自适应`. (#4216) + +> 在直播网页全屏时, 自动调整侧边栏的宽度, 使得视频区域的比例和视频源相匹配, 达到无黑边的效果. +> +> - `侧边栏最大宽度 (px)`: 限制侧边栏可被拉伸到的最大宽度. (最小宽度固定为 190px, 再小的话布局就要出问题了) +> +> > 注意, 由于有最大宽度和最小宽度的限制, 部分窗口尺寸下仍然无法做到无黑边. + +- 新增功能 `关注时间显示`. (PR #4352 by [Light_Quanta](https://github.com/LightQuanta)) + +> 在个人空间的粉丝/关注列表显示关注的具体时间 + +- 新增功能 `自动移出稍后再看`. + +> 在稍后再看页面播放结束时, 自动将当前视频移出稍后再看. +> 注意: +> - 一定要播放结束, 快结束时手动切走不算 +> - b 站的稍后再看列表不会实时刷新 + +- 新增功能 `相簿发布时间显示`. (PR #4362 by [Light_Quanta](https://github.com/LightQuanta)) + +> 在个人空间的相簿界面显示相簿的发布时间 + +🐛修复 +- 修复 `清爽首页` 番剧区图标不显示. (#4262) +- 修复 `清爽首页` 番剧区时间线的遮罩颜色在夜间模式下不正确. +- 修复 `隐藏记笔记` 功能打开后, 评论区的笔记弹窗无法显示. (#4285) + +☕开发者相关 +- SwitchOptions API 更新: + - 老的 `createSwitchOptions` 标记为已弃用. + - 新的 `newSwitchComponentWrapper` 更名为 `wrapSwitchOptions`. + - `checkedIcon` 拥有默认值: `mdi-eye-off-outline`. + - `notCheckedIcon` 拥有默认值: `mdi-eye-outline`. + - `dimAt` 选项功能更改为如下所示, 更符合直觉: +```ts +/** + * 控制开关变暗的时机 + * + * `false`: 始终不变暗 + * `'checked'`: 当开关开启时变暗 + * `'notChecked'`: 当开关关闭时变暗 + * + * @default 'checked' + */ +dimAt?: false | 'checked' | 'notChecked' +``` +- Vue 升级到 2.7, 支持组合式 API 以及使用 Volar 提供代码提示. (PR #4337 by [timongh](https://github.com/timongh)) +- 修复组件加载失败时没有输出任何报错. + +## v2.7.5 +`2023-08-26` + +✨新增 +- 夜间模式适配新版番剧播放页面. (PR #4366 by [QwExZy@0xx1](https://github.com/qwaszx-WXY)) + +🐛修复 +- 修复下载弹幕的数量比实际要少. (#4287) +- jsDelivr 源域名由 `fastly.jsdelivr.net` 更换为 `cdn.jsdelivr.net`. (#4198) +- 修复 `快速收起评论区` 在新版动态下宽度不正确. (#4282) +- 修复删除搜索历史时选项不会立即消失. (#4268) +- 修复 `直播全屏包裹` 的颜色问题. (#4166, PR #4323 by [CrazyboyQCD](https://github.com/CrazyboyQCD)) +- 修复 `下载字幕` 失效, 注意由于 b 站接口变更, AI 字幕可能无法下载. (#4319) +- 修复 `隐藏视频推荐` 未能隐藏番剧页面的相关推荐. (#4247) +- 修复 `自定义顶栏` 中封面图片在个人空间的样式异常. (#4312, PR #4338 by [timongh](https://github.com/timongh)) +- 修复 `简化直播间` 屏蔽标题栏活动后, 粉丝团打榜弹窗位置异常. (#4215) +- 修复 `传统连播模式` 在点击右侧推荐视频时会延后一次. (#4256) + +☕开发者相关 +- 修复 VPopup 组件中 openHandler 的 this 绑定丢失. (#4264) +- 重构了 Comments API. (#4334) + - `CommentReplyItem` 实现了 `EventTarget`, 评论更新事件 (`repliesUpdate`) 均通过 `EventTarget` 的事件订阅实现. + - 修复新版评论区下评论更新事件没触发. +- 重构了 `playerModePolyfill` 的实现, 解决 empty class token 在页面上反复报错的问题. + +## v2.7.4 / v2.8.2-preview +`2023-07-16` + +- 修复 v4.2 播放器下视频相关功能失效. (#4303) + +注: 下载字幕还是会失败, 属于另一个问题 (#4319), 需要另外再修复. + + +## v2.7.3 / v2.8.1-preview +`2023-07-13` + +- 修复 VideoInfo 报错 `Cannot read properties of null (reading 'list')`. (影响 `下载字幕`, `查看封面` 等功能) (#4291) + +## v2.8.0-preview +`2023-06-03` + +包含 v2.7.2 的所有更新内容. + +✨新增 + +- `清爽首页` 改进: + - 支持自定义板块的布局和可见性. (操作方式和自定义顶栏那个差不多) + - 番剧时间表优化样式, 增加翻页按钮. + +
+ + +
+ +- 新增功能 `首页净化`. (PR #4153 by [RieN](https://github.com/rien7)) +> 删除首页特定类型的卡片. + +- `自定义顶栏` 增加 `创作中心` 入口, `排行` 新增 `全站音乐榜` 和 `短剧榜` 的入口. (#4101, PR #4154 by [星海](https://github.com/lovelyCARDINAL), PR #4155 by [星海](https://github.com/lovelyCARDINAL)) +- `播放器置顶(新)` 增加选项 `顶部留白`. (#4152, PR #4165 by [Ziu](https://github.com/ZiuChen)) +- `播放器置顶(新)` 的标题改为放置到播放器和点赞中间. (PR #4208 by [LockRim](https://github.com/LockRim)) +- `显示视频投稿时间` 支持转义字符. (#4160, PR #4167 by [呼乎户](https://github.com/wisokey)) +- `隐藏视频推荐` 支持稍后再看和收藏夹播放页, 并适配 bpx 播放器. (#4174) +- 新增功能 `隐藏记笔记` 和 `隐藏稿件投诉`. (#4124) +- 优化了 `自定义顶栏` 中订阅在筛选时的 API 调用. (#4120) +- 优化粗体的显示: 优先调用 Semibold 字重, 若字体不支持则使用 Bold 字重. +- `自定义顶栏` 增加选项: + - 支持自定义消息提醒样式, 可设置为 `数字`, `点状` 或 `隐藏`. (#4125) + - 支持自定义搜索栏宽度. (#4112) +- 搜索在纯数字输入时, 增加对 UID 和直播间的搜索. (#677) + +☕开发者相关 +- 播放器模式转换出的 bpx class 更换为更统一的名称, 并增加事件派发. (PR #4191 by [Ziu](https://github.com/ZiuChen)) +- 需要选择组件 / 插件的构建任务中, 优化了选项的长度. (PR #4192 by [Ziu](https://github.com/ZiuChen)) +- 弃用 utils 中的 `formData`. (名称具有歧义, 应使用 `URLSearchParams` 来代替) +- `addComponentListener` / `removeComponentListener` 支持传入多层的组件 options 路径. +- 移除依赖 `vue-fragment`. (使用 `display: contents` 代替) + +## v2.7.2 +`2023-06-03` + +> ⚠ 对浏览器的要求中, Safari 提升至 15.4 + +✨新增 + +
+获得 v2.6.1-preview ~ v2.7.1-preview 的所有新功能, 点击展开查看 + +- `自定义顶栏` 搜索优化: + - 提高了搜索 av 号 / BV 号结果的优先级, 输入编号后直接回车就可以前往视频. + - 支持搜索多种 ID, 可以通过安装对应的插件来使用: (#677) + - 搜索 av / BV 号时, 支持显示视频标题 + - 支持搜索专栏 cv 号 / 文集 rl 号 + - 支持搜索音频 au 号 / 播放列表 am 号 + - 支持搜索番剧 ss / ep 号, 或番剧详情 md 号 + - 支持搜索用户 uid 号 + - 纯数字输入时, 支持同时搜索视频和专栏 +- `自定义顶栏` 的收藏和稍后再看支持显示数量. (#4069) +- `自定义顶栏` 的订阅支持过滤 在看 / 看过 / 想看. (#3217) +- 添加跨域存储功能 (`crossOriginLocalStorage`), 支持搜索历史跨域同步. (#3893) +- 新增功能 `弹幕转义`. (#3470) +> 将弹幕中的 `\n` 替换为真实的换行, 注意这可能导致原先不重叠的弹幕发生重叠. +- 新增功能 `组件二等分`, 在出现问题时可帮助定位是哪个组件导致的问题. (#3829, PR #3965 by [JLoeve](https://github.com/LonelySteve)) +- 优化了 `网址参数清理` 的逻辑, 通过 Hook History API 来减少出现重复的历史记录. (#4039) +- 新增功能 `隐藏热搜`. (#3744) +> 隐藏搜索栏和搜索页面中的 `bilibili 热搜`. +- 新增功能 `隐藏视频分享`. (#3663) +> 隐藏视频和番剧播放器下方的分享按钮. +- 新增插件 `快捷键扩展 - 开关灯`. (#3587) +> 在快捷键的动作列表里添加一个 "开关灯". +- `显示视频投稿时间` 允许自定义替换文本格式. (PR #4136 by [呼乎户](https://github.com/wisokey)) +- `清爽首页` 排行榜支持切换为列表模式, 能够查看 10 项左右的排行. (#3611, #3175) +- 新增功能 `动态看图自动回顶`. (#4029) +> 在动态里查看图片详情时 (非全屏), 切换图片自动回到图片顶部; 退出查看图片模式时, 自动将动态移入视图内. +- 重构了 `直播信息扩充` 面板, 改为完全自主实现, 支持显示超过 10 条的直播间, 并可以进行搜索和刷新操作. (#3774, #4035, #4034) + + + +- 新增功能 `反转滚轮调音量`. (#4053) +> 反转在网页全屏 / 全屏模式下使用滚轮调节音量的方向, 使其更符合使用触控板时的操作方向. 请注意不能和 `禁止滚轮调音量` 一同使用. +> - 手指向上推时, 增加音量 +> - 手指向下推时, 减少音量 +> - 可以自定义 `灵敏度`, 同样的滚动幅度下, 灵敏度越高变化的音量越多 + +- 新增功能 `自动点赞`. (#2354) +> 进入视频 / 查看动态时, 自动点赞. + +- 新增功能 `隐藏用户信息卡片`. (PR #4093 by [WakelessSloth56](https://github.com/WakelessSloth56)) +> 隐藏鼠标指向用户名或用户头像时弹出的浮动用户信息卡片. + +- 新增功能 `播放器置顶(新)`. (#3030, #PR #4152 by [RieN 7z](https://github.com/rien7)) +> 原来的播放器置顶组件,现在已经不可用了,这是一个新的版本,可以在视频页面中将播放器放在页面最上方. + +- 启用新的代码加载方式. (PR #3938 by [timongh](https://github.com/timongh)) +- Comments API 支持读取评论图片. (PR #4130 by [manip_ego](https://github.com/manipEgo)) +```diff +export interface CommentItem extends CommentReplyItem { ++ /** 评论图片 */ ++ pictures?: string[] + /** 回复 */ + replies: CommentReplyItem[] + // ... +} +``` + +
+ +- `网址参数清理` 增加清理会员购和直播间的一些参数. (PR #4189, PR #4214 by [星海](https://github.com/lovelyCARDINAL)) +- `删除广告` 增加选项 `保留小喇叭通知`. (PR #4199 by [imshixin](https://github.com/imshixin)) +> 指评论区上方的小喇叭通知, 待 `简化评论区` 完成功能拆分后会移动到那边去. + +- `与 "解除 B 站区域限制" 互斥` 现在不再在番剧详情页面生效. (#4157) + +🐛修复 +- 修复播放器模式切换时 `body` 类名响应问题. (PR #4188 by [Ziu](https://github.com/ZiuChen)) +- 修复 `播放器控制栏背景色` 位置不正确. (#3713) +- 修复勋章过多时, `直播勋章快速更换` 的弹窗溢出视图. (#4181) +- 修复 `清爽首页` 在非内测首页上无法隐藏原版首页. (#3981) +- 修复 `自定义顶栏` 导致分区页面内容错位. (#4183) +- 修复 `删除广告` 未能删除活动横幅. (#4177) +- 修复 `外置稍后再看` 没有隐藏菜单中的相同选项. (#4175) +- 修复 `直播全屏包裹` 的一部分样式问题. (#4166, #4210) +- 修复检查更新的查看详情弹窗内容溢出. (#4164) +- 修复 `播放前显示封面` 在预览关联视频时封面消失. (#4197) +- 修复 `禁止跳转动态详情` 对新版专栏卡片无效. +- 修复 `动态过滤器` 在切换了 UP 主过滤后失效. (#4149) +- 修复 `简化直播间` 的 `标题栏活动` 内容出现溢出. (#4215) +- 新版动态页面适配: + - `快速收起评论区` + - `addMenuItem` API (涉及 `图片批量导出` 和 `复制动态链接`) + - `强制固定动态侧栏`: 由于 class 名称和旧版一样, 目前只能先把宽度也锁死在旧版的宽度. + - `夜间模式` + - `feedsCardsManager` API + +☕开发者相关 +- GitHub 相关配置更换为 JSON 格式, 并由脚本自动生成 YAML. +- 增加了讨论区 `功能建议` 的模板. + +## v2.7.1-preview +`2023-04-25` + +包含 [v2.7.1](https://github.com/the1812/Bilibili-Evolved/releases/tag/v2.7.1) 的所有更新内容. + +- Comments API 支持读取评论图片. (PR #4130 by [manip_ego](https://github.com/manipEgo)) +```diff +export interface CommentItem extends CommentReplyItem { ++ /** 评论图片 */ ++ pictures?: string[] + /** 回复 */ + replies: CommentReplyItem[] + // ... +} +``` +- `显示视频投稿时间` 允许自定义替换文本格式. (PR #4136 by [呼乎户](https://github.com/wisokey)) +- `清爽首页` 排行榜支持切换为列表模式, 能够查看 10 项左右的排行. (#3611, #3175) +- 新增功能 `动态看图自动回顶`. (#4029) +> 在动态里查看图片详情时 (非全屏), 切换图片自动回到图片顶部; 退出查看图片模式时, 自动将动态移入视图内. + +- 重构了 `直播信息扩充` 面板, 改为完全自主实现, 支持显示超过 10 条的直播间, 并可以进行搜索和刷新操作. (#3774, #4035, #4034) + + + +- 新增功能 `反转滚轮调音量`. (#4053) +> 反转在网页全屏 / 全屏模式下使用滚轮调节音量的方向, 使其更符合使用触控板时的操作方向. 请注意不能和 `禁止滚轮调音量` 一同使用. +> - 手指向上推时, 增加音量 +> - 手指向下推时, 减少音量 +> - 可以自定义 `灵敏度`, 同样的滚动幅度下, 灵敏度越高变化的音量越多 + +- 新增功能 `自动点赞`. (#2354) +> 进入视频 / 查看动态时, 自动点赞. + +- 新增功能 `隐藏用户信息卡片`. (PR #4093 by [WakelessSloth56](https://github.com/WakelessSloth56)) +> 隐藏鼠标指向用户名或用户头像时弹出的浮动用户信息卡片. + +- 新增功能 `播放器置顶(新)`. (#3030, #PR #4152 by [RieN 7z](https://github.com/rien7)) +> 原来的播放器置顶组件,现在已经不可用了,这是一个新的版本,可以在视频页面中将播放器放在页面最上方. + +- 新增插件 `搜索栏 - UID 跳转`, `搜索栏 - 数字联想`. (#677) +> 在输入 UID (用户 ID) 时, 提供对应的跳转选项. / 在输入纯数字时, 提供以下选项: +> - 跳转至相应的视频 (视为 av 号) +> - 跳转至相应的专栏 (视为 cv 号) + + +## v2.7.1 +`2023-04-25` + +✨新增 +- `与 "解除 B 站区域限制" 互斥` 现在只在番剧页面生效. +- 更新 `夜间模式` 对新版直播间, 番剧, 稍后再看等页面的适配. (#3963, #4007, #4128, PR #4137 by [Pencil](https://github.com/pencilqaq)) +- 新版番剧页面功能适配: `下载视频` (#4044), `自定义顶栏` (#4007) +- 新版稍后再看页面功能适配: `外置稍后再看`, `启用快速收藏`, `播放器控制栏背景`, `展开视频简介`. (#3916) +- `简化直播间 - 付费礼物` 现在对底栏只留一个包裹按钮, 因为其他元素也都算付费礼物了. + +🐛修复 +- 修复 `自定义顶栏` 动态的详情链接. (PR #4119 by [星海](https://github.com/lovelyCARDINAL)) +- 修复在部分分辨率下 `外置稍后再看` 和 `启用快速收藏` 的响应式宽度. (#4083) +- 修复 `直播全屏包裹` 和 `简化直播间 - 付费礼物` 在新版直播间下的适配问题. (#4105, #4108, PR #4122 by [Pencil](https://github.com/pencilqaq), PR #4123 by [Pencil](https://github.com/pencilqaq)) +- 修复 `自定义顶栏` 未完全隐藏个人空间原版顶栏. (#4079) +- 修复 `直播信息扩充` 在新版动态无法打开 “正在直播” 十个以后的链接. (#4034, #3917, PR #4145 by [hhp1614](https://github.com/hhp1614)) + +☕开发者相关 +- pnpm 升级至 8.1.0, 之前本地装过依赖的开发者需要重新 `pnpm install` 一下. +- 废弃 Ajax Hook API. (#4117) +- 新增 API `addVideoActionButton`, 可向视频操作按钮区的 "收藏" 右侧添加元素. + +## v2.7.0-preview +`2023-03-26` + +包含 v2.7.0 的所有更新内容. + +- 新增功能 `组件二等分`, 在出现问题时可帮助定位是哪个组件导致的问题. (#3829, PR #3965 by [JLoeve](https://github.com/LonelySteve)) +- 优化了 `loadFeatureCode` 的代码. (PR #4013 by [timongh](https://github.com/timongh)) +- 搜索栏在搜索 ID 时的优化, 新增功能可以通过安装对应的插件来使用: (#677) + - 搜索 av / BV 号时, 支持显示视频标题 + - 支持搜索专栏 cv 号 / 文集 rl 号 + - 支持搜索音频 au 号 / 播放列表 am 号 + - 支持搜索番剧 ss / ep 号, 或番剧详情 md 号 +- `自定义顶栏` 的收藏和稍后再看支持显示数量. (#4069) +- 优化了 `网址参数清理` 的逻辑, 通过 Hook History API 来减少出现重复的历史记录. (#4039) +- 新增功能 `隐藏热搜`. (#3744) +> 隐藏搜索栏和搜索页面中的 `bilibili 热搜`. +- 新增功能 `隐藏视频分享`. (#3663) +> 隐藏视频和番剧播放器下方的分享按钮. +- `自定义顶栏` 的订阅支持过滤 在看 / 看过 / 想看. (#3217) +- 新增插件 `快捷键扩展 - 开关灯`. (#3587) +> 在快捷键的动作列表里添加一个 "开关灯". + +## v2.7.0 +`2023-03-26` + +增加了 GitHub Projects 看板: https://github.com/users/the1812/projects/1/views/3, 上面会列出当前和未来计划的功能, 可供参考. + +✨新增 +- 快捷键扩展的几个插件自带了 YouTube / PotPlayer 等预设的默认按键. (#3971) +- `简化直播间` 在开启隐藏付费礼物时, 将直接隐藏左下角的打榜入口 (以前是领银瓜子所以没算进付费礼物). (#4067) +- `专栏文字选择` 更名为 `专栏复制优化`, 现在专栏的文字默认就可以直接选择, 本功能可以用于去除复制后带上的多余文本. (#4065) +- 删除功能 `直播录像下载`, 现在已经没有直播录像的页面了. (#4061) +- 在检测到[解除番剧区域限制](https://greasyfork.org/zh-CN/scripts/25718-%E8%A7%A3%E9%99%A4b%E7%AB%99%E5%8C%BA%E5%9F%9F%E9%99%90%E5%88%B6)的脚本在运行时, 本脚本将停止运行以避免兼容性问题. (#2704) +- `选集区域优化` 在多个分组时支持仅展开当前分组. (#3899) +- `播放时自动关灯` 支持星光动画. (PR #4077 by [z503722728](https://github.com/z503722728)) + +🐛修复 +- 修复 `直播信息扩充` 失效的问题. (#4034, PR #4043 by [deepdarkssj](https://github.com/deepdarkssj)) +- 修复 `简化直播间` 在开启隐藏付费礼物时, 右下布局错乱. (PR #4089 by [Pencil](https://github.com/pencilqaq)) +- 修复动态相关功能对新版专栏卡片不生效. (#3994) +- 修复搜索界面的广告链接仍然可点击. (#3969) +- 修复 `图片批量导出` 在动态失效了. (#4038) +- 修复 `选集区域优化` 仅开启 `展开选集标题` 时视频标题无法显示完全. (#3909) +- 修复 `查看封面` 在复制链接后没有显示成功图标. (#4002) +- 修复番剧页面的部分夜间模式. (PR #4077 by [z503722728](https://github.com/z503722728)) + +☕开发者相关 +- 修复 `IframePopup.vue` 的类型定义. (PR #4014 by [timongh](https://github.com/timongh)) +- 修复 `UserItem.vue` 初始化 Toast 的逻辑问题. (PR #4056 by [timongh](https://github.com/timongh)) +- 优化了 `switch-options.ts` 的注释. (PR #4021 by [timongh](https://github.com/timongh)) +- 清理了项目中 Vue 文件里对未定义字段的引用. (#3992) +- 导出了 Dialog API (`@/core/dialog`), 允许其他组件使用. +- 调整了 CONTRIBUTING 中的本地开发流程描述. (PR #4077 by [z503722728](https://github.com/z503722728)) + +## v2.6.3-preview +`2023-02-20` + +包含 v2.6.3 的所有更新内容. + +- 启用新的代码加载方式. (PR #3938 by [timongh](https://github.com/timongh)) + +## v2.6.3 +`2023-02-20` + +- 修复 `隐藏推荐直播` 失效. (#3993) +- 修复 `夜间模式` 下鼠标移至特定页排行榜时的显示问题. (#1052, PR #4001 by [Tinhone](https://github.com/Tinhone)) + +## v2.6.2-preview +`2023-02-09` + +包含 v2.6.2 的所有更新内容. + +- 修复搜索历史无法删除. (#3893) + +## v2.6.2 +`2023-02-09` + +- 修复 `播放前显示封面` 未正确清除封面. (#3974, PR #3976 by [imshixin](https://github.com/imshixin)) +- 删除 NavbarWatchlater.vue 中的未定义属性. (#3949) + +## v2.6.1-preview +`2023-02-07` + +包含 v2.6.1 的所有更新内容. + +- 提高了 `自定义顶栏` 搜索栏中搜索 av 号 / BV 号结果的优先级, 输入编号后直接回车就可以前往视频. +- 添加跨域存储功能 (`crossOriginLocalStorage`), 支持搜索历史跨域同步. (#3893) +- 新增功能 `弹幕转义`. (#3470) +> 将弹幕中的 `\n` 替换为真实的换行, 注意这可能导致原先不重叠的弹幕发生重叠. + +## v2.6.1 +`2023-02-07` + +✨新增 +- 优化 `简化评论区` 的时间样式. (#3541, PR #3791 by [Tinhone](https://github.com/Tinhone)) +- `下载视频`: + - 支持选择备用下载地址. (PR #3798 by [Seaward233](https://github.com/Seaward233)) + - 新增 `StreamSaver` 输出方式. + - 新增 `Motrix` 输出方式. (PR #3908 by [FoundTheWOUT](https://github.com/FoundTheWOUT)) +- `删除广告` 支持屏蔽动态的商品推荐. (#3778) +- 优化 `自定义顶栏` 的弹窗逻辑, *有任意元素聚焦时* -> *仅在输入框聚焦时*显示弹窗. (#3756) +- `展开弹幕列表` 新增 `有选集时不自动展开` 选项. (#1734) +- 新增功能 `禁止滚轮调音量`. (#3489) +> 在网页全屏 / 全屏模式下, 禁止鼠标滚轮控制播放器的音量. + +- 新增功能 `批量导入合集`. (PR #3884 by [swhoro](https://github.com/swhoro)) +> 在合集页面制作一个批量导入按钮,可以新增所有合集内视频至同名收藏夹 + +- `扩展倍速` 添加 `隐藏移除图标` 和 `隐藏新增图标` 选项. (PR #3864 by [Tinhone](https://github.com/Tinhone)) +- 新增插件 `快捷键扩展 - 开关 CC 字幕`, 默认为 Shift + C. (#3407) +- 新增插件 `快捷键扩展 - 开关弹幕列表`, 默认为 Shift + D. (#3613) +- `新版本提示` 支持在安装前查看更新说明. +- 功能面板为空时增加引导提示. (#3932, PR #3936 by [Ethkuil](https://github.com/Ethkuil)) +- `下载字幕` 支持在番剧页面使用. +- 新增功能 `禁用评论区搜索词`. (#3648) +> 禁用评论区的搜索词链接. + +🐛修复 +- `下载视频` 的 `flv` 格式恢复 1080P 支持. (一共就 360P / 1080P, 其他清晰度还是没有, 需要的话请使用 dash 格式) +- 修复评论区功能在新版播放页上的支持, 包括 `复制评论链接` / `简化评论区` 等. (#3807) +- 修复 `清爽首页` 的排行榜第三项数据不正确. (#3911, PR #3912 by [Colerar](https://github.com/Colerar)) +- 修复 `简化直播间` 对左下角红包的简化样式. (#3243) +- MDI 图标库内联至本体中, 避免阻塞页面加载. (#3964, #3888) +- 修复 `侧栏垂直偏移` 在部分直播间失效的问题. (#3934) +- 修复 `自定义顶栏` 的收藏夹在加载完毕后仍显示加载中. (#3940) +- 修复 `展开弹幕列表` 检测到的弹幕量不正确. (获取页面的已装载弹幕量太坑了, 改为调 API 获取总弹幕量来判断了) (#3958) +- 修复 `启用弹幕空降` 失效. (#3187) +- 修复 `高分辨率图片` 在个人空间投稿页失效. (#3894) +- 修复 `复制评论链接` 在个人空间复制出的链接不正确. (#3821) +- 修复 ASS 弹幕中的颜色标记不正确. (#3960) + +☕开发者相关 +- 完成 define API + SwitchOptions API 的改造 (受影响组件为 `简化首页` 和 `简化直播间`), 感谢 [timongh](https://github.com/timongh) 的长期贡献. +- 重新拆分了一下 PlayerAgent 的文件. +- 修复 CI 构建脚本未提交新增文件. (#3903) +- 新增 Dialog API, 可用简单封装以弹窗形式展示的内容. +- 开源许可有所变更, 对再分发有一些限制, 详见 [LICENSE](./LICENCE.md). +- 删除了 `