diff --git a/.gitignore b/.gitignore index 4c33567c..8ed812aa 100644 --- a/.gitignore +++ b/.gitignore @@ -209,3 +209,6 @@ dist-ssr *.njsproj *.sln *.sw? + +# vitepress +/docs/src/.vitepress/cache/ diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 00000000..29830991 --- /dev/null +++ b/docs/package.json @@ -0,0 +1,10 @@ +{ + "scripts": { + "docs:dev": "vitepress dev src", + "docs:build": "vitepress build src", + "docs:preview": "vitepress preview src" + }, + "devDependencies": { + "vitepress": "1.0.0-beta.3" + } +} diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml new file mode 100644 index 00000000..69d2bc4f --- /dev/null +++ b/docs/pnpm-lock.yaml @@ -0,0 +1,857 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +devDependencies: + vitepress: + specifier: 1.0.0-beta.3 + version: 1.0.0-beta.3(@algolia/client-search@4.18.0)(search-insights@2.6.0) + +packages: + + /@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.18.0)(algoliasearch@4.18.0)(search-insights@2.6.0): + resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.18.0)(algoliasearch@4.18.0)(search-insights@2.6.0) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.18.0)(algoliasearch@4.18.0) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + dev: true + + /@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.18.0)(algoliasearch@4.18.0)(search-insights@2.6.0): + resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==} + peerDependencies: + search-insights: '>= 1 < 3' + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.18.0)(algoliasearch@4.18.0) + search-insights: 2.6.0 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + dev: true + + /@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.18.0)(algoliasearch@4.18.0): + resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.18.0)(algoliasearch@4.18.0) + '@algolia/client-search': 4.18.0 + algoliasearch: 4.18.0 + dev: true + + /@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.18.0)(algoliasearch@4.18.0): + resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/client-search': 4.18.0 + algoliasearch: 4.18.0 + dev: true + + /@algolia/cache-browser-local-storage@4.18.0: + resolution: {integrity: sha512-rUAs49NLlO8LVLgGzM4cLkw8NJLKguQLgvFmBEe3DyzlinoqxzQMHfKZs6TSq4LZfw/z8qHvRo8NcTAAUJQLcw==} + dependencies: + '@algolia/cache-common': 4.18.0 + dev: true + + /@algolia/cache-common@4.18.0: + resolution: {integrity: sha512-BmxsicMR4doGbeEXQu8yqiGmiyvpNvejYJtQ7rvzttEAMxOPoWEHrWyzBQw4x7LrBY9pMrgv4ZlUaF8PGzewHg==} + dev: true + + /@algolia/cache-in-memory@4.18.0: + resolution: {integrity: sha512-evD4dA1nd5HbFdufBxLqlJoob7E2ozlqJZuV3YlirNx5Na4q1LckIuzjNYZs2ddLzuTc/Xd5O3Ibf7OwPskHxw==} + dependencies: + '@algolia/cache-common': 4.18.0 + dev: true + + /@algolia/client-account@4.18.0: + resolution: {integrity: sha512-XsDnlROr3+Z1yjxBJjUMfMazi1V155kVdte6496atvBgOEtwCzTs3A+qdhfsAnGUvaYfBrBkL0ThnhMIBCGcew==} + dependencies: + '@algolia/client-common': 4.18.0 + '@algolia/client-search': 4.18.0 + '@algolia/transporter': 4.18.0 + dev: true + + /@algolia/client-analytics@4.18.0: + resolution: {integrity: sha512-chEUSN4ReqU7uRQ1C8kDm0EiPE+eJeAXiWcBwLhEynfNuTfawN9P93rSZktj7gmExz0C8XmkbBU19IQ05wCNrQ==} + dependencies: + '@algolia/client-common': 4.18.0 + '@algolia/client-search': 4.18.0 + '@algolia/requester-common': 4.18.0 + '@algolia/transporter': 4.18.0 + dev: true + + /@algolia/client-common@4.18.0: + resolution: {integrity: sha512-7N+soJFP4wn8tjTr3MSUT/U+4xVXbz4jmeRfWfVAzdAbxLAQbHa0o/POSdTvQ8/02DjCLelloZ1bb4ZFVKg7Wg==} + dependencies: + '@algolia/requester-common': 4.18.0 + '@algolia/transporter': 4.18.0 + dev: true + + /@algolia/client-personalization@4.18.0: + resolution: {integrity: sha512-+PeCjODbxtamHcPl+couXMeHEefpUpr7IHftj4Y4Nia1hj8gGq4VlIcqhToAw8YjLeCTfOR7r7xtj3pJcYdP8A==} + dependencies: + '@algolia/client-common': 4.18.0 + '@algolia/requester-common': 4.18.0 + '@algolia/transporter': 4.18.0 + dev: true + + /@algolia/client-search@4.18.0: + resolution: {integrity: sha512-F9xzQXTjm6UuZtnsLIew6KSraXQ0AzS/Ee+OD+mQbtcA/K1sg89tqb8TkwjtiYZ0oij13u3EapB3gPZwm+1Y6g==} + dependencies: + '@algolia/client-common': 4.18.0 + '@algolia/requester-common': 4.18.0 + '@algolia/transporter': 4.18.0 + dev: true + + /@algolia/logger-common@4.18.0: + resolution: {integrity: sha512-46etYgSlkoKepkMSyaoriSn2JDgcrpc/nkOgou/lm0y17GuMl9oYZxwKKTSviLKI5Irk9nSKGwnBTQYwXOYdRg==} + dev: true + + /@algolia/logger-console@4.18.0: + resolution: {integrity: sha512-3P3VUYMl9CyJbi/UU1uUNlf6Z8N2ltW3Oqhq/nR7vH0CjWv32YROq3iGWGxB2xt3aXobdUPXs6P0tHSKRmNA6g==} + dependencies: + '@algolia/logger-common': 4.18.0 + dev: true + + /@algolia/requester-browser-xhr@4.18.0: + resolution: {integrity: sha512-/AcWHOBub2U4TE/bPi4Gz1XfuLK6/7dj4HJG+Z2SfQoS1RjNLshZclU3OoKIkFp8D2NC7+BNsPvr9cPLyW8nyQ==} + dependencies: + '@algolia/requester-common': 4.18.0 + dev: true + + /@algolia/requester-common@4.18.0: + resolution: {integrity: sha512-xlT8R1qYNRBCi1IYLsx7uhftzdfsLPDGudeQs+xvYB4sQ3ya7+ppolB/8m/a4F2gCkEO6oxpp5AGemM7kD27jA==} + dev: true + + /@algolia/requester-node-http@4.18.0: + resolution: {integrity: sha512-TGfwj9aeTVgOUhn5XrqBhwUhUUDnGIKlI0kCBMdR58XfXcfdwomka+CPIgThRbfYw04oQr31A6/95ZH2QVJ9UQ==} + dependencies: + '@algolia/requester-common': 4.18.0 + dev: true + + /@algolia/transporter@4.18.0: + resolution: {integrity: sha512-xbw3YRUGtXQNG1geYFEDDuFLZt4Z8YNKbamHPkzr3rWc6qp4/BqEeXcI2u/P/oMq2yxtXgMxrCxOPA8lyIe5jw==} + dependencies: + '@algolia/cache-common': 4.18.0 + '@algolia/logger-common': 4.18.0 + '@algolia/requester-common': 4.18.0 + dev: true + + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier@7.22.5: + resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/parser@7.22.5: + resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/types@7.22.5: + resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + to-fast-properties: 2.0.0 + dev: true + + /@docsearch/css@3.5.1: + resolution: {integrity: sha512-2Pu9HDg/uP/IT10rbQ+4OrTQuxIWdKVUEdcw9/w7kZJv9NeHS6skJx1xuRiFyoGKwAzcHXnLp7csE99sj+O1YA==} + dev: true + + /@docsearch/js@3.5.1(@algolia/client-search@4.18.0)(search-insights@2.6.0): + resolution: {integrity: sha512-EXi8de5njxgP6TV3N9ytnGRLG9zmBNTEZjR4VzwPcpPLbZxxTLG2gaFyJyKiFVQxHW/DPlMrDJA3qoRRGEkgZw==} + dependencies: + '@docsearch/react': 3.5.1(@algolia/client-search@4.18.0)(search-insights@2.6.0) + preact: 10.15.1 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/react' + - react + - react-dom + - search-insights + dev: true + + /@docsearch/react@3.5.1(@algolia/client-search@4.18.0)(search-insights@2.6.0): + resolution: {integrity: sha512-t5mEODdLzZq4PTFAm/dvqcvZFdPDMdfPE5rJS5SC8OUq9mPzxEy6b+9THIqNM9P0ocCb4UC5jqBrxKclnuIbzQ==} + peerDependencies: + '@types/react': '>= 16.8.0 < 19.0.0' + react: '>= 16.8.0 < 19.0.0' + react-dom: '>= 16.8.0 < 19.0.0' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + react-dom: + optional: true + dependencies: + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.18.0)(algoliasearch@4.18.0)(search-insights@2.6.0) + '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.18.0)(algoliasearch@4.18.0) + '@docsearch/css': 3.5.1 + algoliasearch: 4.18.0 + transitivePeerDependencies: + - '@algolia/client-search' + - search-insights + dev: true + + /@esbuild/android-arm64@0.17.19: + resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.17.19: + resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.17.19: + resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.17.19: + resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.17.19: + resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.17.19: + resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.17.19: + resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.17.19: + resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.17.19: + resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.17.19: + resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.17.19: + resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.17.19: + resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.17.19: + resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.17.19: + resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.17.19: + resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.17.19: + resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.17.19: + resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.17.19: + resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.17.19: + resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.17.19: + resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.17.19: + resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.17.19: + resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@types/web-bluetooth@0.0.17: + resolution: {integrity: sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==} + dev: true + + /@vitejs/plugin-vue@4.2.3(vite@4.3.9)(vue@3.3.4): + resolution: {integrity: sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.0.0 + vue: ^3.2.25 + dependencies: + vite: 4.3.9 + vue: 3.3.4 + dev: true + + /@vue/compiler-core@3.3.4: + resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==} + dependencies: + '@babel/parser': 7.22.5 + '@vue/shared': 3.3.4 + estree-walker: 2.0.2 + source-map-js: 1.0.2 + dev: true + + /@vue/compiler-dom@3.3.4: + resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==} + dependencies: + '@vue/compiler-core': 3.3.4 + '@vue/shared': 3.3.4 + dev: true + + /@vue/compiler-sfc@3.3.4: + resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==} + dependencies: + '@babel/parser': 7.22.5 + '@vue/compiler-core': 3.3.4 + '@vue/compiler-dom': 3.3.4 + '@vue/compiler-ssr': 3.3.4 + '@vue/reactivity-transform': 3.3.4 + '@vue/shared': 3.3.4 + estree-walker: 2.0.2 + magic-string: 0.30.0 + postcss: 8.4.24 + source-map-js: 1.0.2 + dev: true + + /@vue/compiler-ssr@3.3.4: + resolution: {integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==} + dependencies: + '@vue/compiler-dom': 3.3.4 + '@vue/shared': 3.3.4 + dev: true + + /@vue/devtools-api@6.5.0: + resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==} + dev: true + + /@vue/reactivity-transform@3.3.4: + resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==} + dependencies: + '@babel/parser': 7.22.5 + '@vue/compiler-core': 3.3.4 + '@vue/shared': 3.3.4 + estree-walker: 2.0.2 + magic-string: 0.30.0 + dev: true + + /@vue/reactivity@3.3.4: + resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==} + dependencies: + '@vue/shared': 3.3.4 + dev: true + + /@vue/runtime-core@3.3.4: + resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==} + dependencies: + '@vue/reactivity': 3.3.4 + '@vue/shared': 3.3.4 + dev: true + + /@vue/runtime-dom@3.3.4: + resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==} + dependencies: + '@vue/runtime-core': 3.3.4 + '@vue/shared': 3.3.4 + csstype: 3.1.2 + dev: true + + /@vue/server-renderer@3.3.4(vue@3.3.4): + resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==} + peerDependencies: + vue: 3.3.4 + dependencies: + '@vue/compiler-ssr': 3.3.4 + '@vue/shared': 3.3.4 + vue: 3.3.4 + dev: true + + /@vue/shared@3.3.4: + resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==} + dev: true + + /@vueuse/core@10.2.1(vue@3.3.4): + resolution: {integrity: sha512-c441bfMbkAwTNwVRHQ0zdYZNETK//P84rC01aP2Uy/aRFCiie9NE/k9KdIXbno0eDYP5NPUuWv0aA/I4Unr/7w==} + dependencies: + '@types/web-bluetooth': 0.0.17 + '@vueuse/metadata': 10.2.1 + '@vueuse/shared': 10.2.1(vue@3.3.4) + vue-demi: 0.14.5(vue@3.3.4) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: true + + /@vueuse/integrations@10.2.1(focus-trap@7.4.3)(vue@3.3.4): + resolution: {integrity: sha512-FDP5lni+z9FjHE9H3xuvwSjoRV9U8jmDvJpmHPCBjUgPGYRynwb60eHWXCFJXLUtb4gSIHy0e+iaEbrKdalCkQ==} + peerDependencies: + async-validator: '*' + axios: '*' + change-case: '*' + drauu: '*' + focus-trap: '*' + fuse.js: '*' + idb-keyval: '*' + jwt-decode: '*' + nprogress: '*' + qrcode: '*' + sortablejs: '*' + universal-cookie: '*' + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + dependencies: + '@vueuse/core': 10.2.1(vue@3.3.4) + '@vueuse/shared': 10.2.1(vue@3.3.4) + focus-trap: 7.4.3 + vue-demi: 0.14.5(vue@3.3.4) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: true + + /@vueuse/metadata@10.2.1: + resolution: {integrity: sha512-3Gt68mY/i6bQvFqx7cuGBzrCCQu17OBaGWS5JdwISpMsHnMKKjC2FeB5OAfMcCQ0oINfADP3i9A4PPRo0peHdQ==} + dev: true + + /@vueuse/shared@10.2.1(vue@3.3.4): + resolution: {integrity: sha512-QWHq2bSuGptkcxx4f4M/fBYC3Y8d3M2UYyLsyzoPgEoVzJURQ0oJeWXu79OiLlBb8gTKkqe4mO85T/sf39mmiw==} + dependencies: + vue-demi: 0.14.5(vue@3.3.4) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: true + + /algoliasearch@4.18.0: + resolution: {integrity: sha512-pCuVxC1SVcpc08ENH32T4sLKSyzoU7TkRIDBMwSLfIiW+fq4znOmWDkAygHZ6pRcO9I1UJdqlfgnV7TRj+MXrA==} + dependencies: + '@algolia/cache-browser-local-storage': 4.18.0 + '@algolia/cache-common': 4.18.0 + '@algolia/cache-in-memory': 4.18.0 + '@algolia/client-account': 4.18.0 + '@algolia/client-analytics': 4.18.0 + '@algolia/client-common': 4.18.0 + '@algolia/client-personalization': 4.18.0 + '@algolia/client-search': 4.18.0 + '@algolia/logger-common': 4.18.0 + '@algolia/logger-console': 4.18.0 + '@algolia/requester-browser-xhr': 4.18.0 + '@algolia/requester-common': 4.18.0 + '@algolia/requester-node-http': 4.18.0 + '@algolia/transporter': 4.18.0 + dev: true + + /ansi-sequence-parser@1.1.0: + resolution: {integrity: sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==} + dev: true + + /body-scroll-lock@4.0.0-beta.0: + resolution: {integrity: sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==} + dev: true + + /csstype@3.1.2: + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + dev: true + + /esbuild@0.17.19: + resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.17.19 + '@esbuild/android-arm64': 0.17.19 + '@esbuild/android-x64': 0.17.19 + '@esbuild/darwin-arm64': 0.17.19 + '@esbuild/darwin-x64': 0.17.19 + '@esbuild/freebsd-arm64': 0.17.19 + '@esbuild/freebsd-x64': 0.17.19 + '@esbuild/linux-arm': 0.17.19 + '@esbuild/linux-arm64': 0.17.19 + '@esbuild/linux-ia32': 0.17.19 + '@esbuild/linux-loong64': 0.17.19 + '@esbuild/linux-mips64el': 0.17.19 + '@esbuild/linux-ppc64': 0.17.19 + '@esbuild/linux-riscv64': 0.17.19 + '@esbuild/linux-s390x': 0.17.19 + '@esbuild/linux-x64': 0.17.19 + '@esbuild/netbsd-x64': 0.17.19 + '@esbuild/openbsd-x64': 0.17.19 + '@esbuild/sunos-x64': 0.17.19 + '@esbuild/win32-arm64': 0.17.19 + '@esbuild/win32-ia32': 0.17.19 + '@esbuild/win32-x64': 0.17.19 + dev: true + + /estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true + + /focus-trap@7.4.3: + resolution: {integrity: sha512-BgSSbK4GPnS2VbtZ50VtOv1Sti6DIkj3+LkVjiWMNjLeAp1SH1UlLx3ULu/DCu4vq5R4/uvTm+zrvsMsuYmGLg==} + dependencies: + tabbable: 6.2.0 + dev: true + + /fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /jsonc-parser@3.2.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + dev: true + + /magic-string@0.30.0: + resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /mark.js@8.11.1: + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + dev: true + + /minisearch@6.1.0: + resolution: {integrity: sha512-PNxA/X8pWk+TiqPbsoIYH0GQ5Di7m6326/lwU/S4mlo4wGQddIcf/V//1f9TB0V4j59b57b+HZxt8h3iMROGvg==} + dev: true + + /nanoid@3.3.6: + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /postcss@8.4.24: + resolution: {integrity: sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /preact@10.15.1: + resolution: {integrity: sha512-qs2ansoQEwzNiV5eAcRT1p1EC/dmEzaATVDJNiB3g2sRDWdA7b7MurXdJjB2+/WQktGWZwxvDrnuRFbWuIr64g==} + dev: true + + /rollup@3.26.0: + resolution: {integrity: sha512-YzJH0eunH2hr3knvF3i6IkLO/jTjAEwU4HoMUbQl4//Tnl3ou0e7P5SjxdDr8HQJdeUJShlbEHXrrnEHy1l7Yg==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /search-insights@2.6.0: + resolution: {integrity: sha512-vU2/fJ+h/Mkm/DJOe+EaM5cafJv/1rRTZpGJTuFPf/Q5LjzgMDsqPdSaZsAe+GAWHHsfsu+rQSAn6c8IGtBEVw==} + engines: {node: '>=8.16.0'} + dev: true + + /shiki@0.14.3: + resolution: {integrity: sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==} + dependencies: + ansi-sequence-parser: 1.1.0 + jsonc-parser: 3.2.0 + vscode-oniguruma: 1.7.0 + vscode-textmate: 8.0.0 + dev: true + + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + + /tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + dev: true + + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true + + /vite@4.3.9: + resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.17.19 + postcss: 8.4.24 + rollup: 3.26.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /vitepress@1.0.0-beta.3(@algolia/client-search@4.18.0)(search-insights@2.6.0): + resolution: {integrity: sha512-GR5Pvr/o343NN1M4Na1shhDYZRrQbjmLq7WE0lla0H8iDPAsHE8agTHLWfu3FWx+3q2KA29sv16+0O9RQKGjlA==} + hasBin: true + dependencies: + '@docsearch/css': 3.5.1 + '@docsearch/js': 3.5.1(@algolia/client-search@4.18.0)(search-insights@2.6.0) + '@vitejs/plugin-vue': 4.2.3(vite@4.3.9)(vue@3.3.4) + '@vue/devtools-api': 6.5.0 + '@vueuse/core': 10.2.1(vue@3.3.4) + '@vueuse/integrations': 10.2.1(focus-trap@7.4.3)(vue@3.3.4) + body-scroll-lock: 4.0.0-beta.0 + focus-trap: 7.4.3 + mark.js: 8.11.1 + minisearch: 6.1.0 + shiki: 0.14.3 + vite: 4.3.9 + vue: 3.3.4 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/node' + - '@types/react' + - '@vue/composition-api' + - async-validator + - axios + - change-case + - drauu + - fuse.js + - idb-keyval + - jwt-decode + - less + - nprogress + - qrcode + - react + - react-dom + - sass + - search-insights + - sortablejs + - stylus + - sugarss + - terser + - universal-cookie + dev: true + + /vscode-oniguruma@1.7.0: + resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} + dev: true + + /vscode-textmate@8.0.0: + resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} + dev: true + + /vue-demi@0.14.5(vue@3.3.4): + resolution: {integrity: sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + vue: 3.3.4 + dev: true + + /vue@3.3.4: + resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==} + dependencies: + '@vue/compiler-dom': 3.3.4 + '@vue/compiler-sfc': 3.3.4 + '@vue/runtime-dom': 3.3.4 + '@vue/server-renderer': 3.3.4(vue@3.3.4) + '@vue/shared': 3.3.4 + dev: true diff --git a/docs/src/.vitepress/config.ts b/docs/src/.vitepress/config.ts new file mode 100644 index 00000000..d178d79b --- /dev/null +++ b/docs/src/.vitepress/config.ts @@ -0,0 +1,109 @@ +import { defineConfig } from "vitepress"; + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + title: "Auto_Bangumi", + description: "A Auto_Bangumi Documents", + themeConfig: { + // https://vitepress.dev/reference/default-theme-config + nav: [ + { text: "Home", link: "/" }, + { text: "开始部署", link: "/deploy/部署说明" }, + { text: "排错流程", link: "/faq/排错流程" }, + { text: "常见问题", link: "/faq/常见问题" }, + ], + + sidebar: [ + { + text: "项目说明", + items: [ + { + text: "项目说明", + link: "/home/", + }, + ], + }, + { + text: "更新日志", + items: [ + { + text: "3.0 更新说明", + link: "/changelog/3.0", + }, + { + text: "2.6 更新日志", + link: "/changelog/2.6", + }, + ], + }, + { + text: "部署", + items: [ + { + text: "部署前准备", + link: "/deploy/部署说明", + }, + { + text: "Docker-cli 部署", + link: "/deploy/Docker-cli", + }, + { + text: "Docker-Compose 部署", + link: "/deploy/Docker-compose", + }, + { + text: "群晖NAS", + link: "/deploy/群晖", + }, + { + text: "WSL", + link: "/deploy/wsl", + }, + ], + }, + { + text: "源码运行", + items: [ + { + text: "Windows 本地部署", + link: "/deploy/Windows-本地部署", + }, + { + text: "Unix 本地部署", + link: "/deploy/local-run", + }, + ], + }, + { + text: "使用说明", + items: [ + { + text: "使用说明", + link: "/use/使用说明", + }, + { + text: "配置选项说明", + link: "/use/配置选项说明", + }, + ], + }, + { + text: "FAQ", + items: [ + { + text: "排错流程", + link: "/faq/排错流程", + }, + { + text: "常见问题", + link: "/faq/常见问题", + }, + ], + }, + ], + + socialLinks: [ + { icon: "github", link: "https://github.com/EstrellaXD/Auto_Bangumi" }, + ], + }, +}); diff --git a/docs/src/changelog/2.6.md b/docs/src/changelog/2.6.md new file mode 100644 index 00000000..4e8ceb85 --- /dev/null +++ b/docs/src/changelog/2.6.md @@ -0,0 +1,139 @@ +# 2.6 版本更新说明 + +## 如何从老版本更新的注意事项 + +从 2.6 版本开始,AutoBangumi (以下简称 AB)的配置文件将会从环境变量更改为 `config.json` 升级之前需要注意以下事项。 + +### 环境变量继承 + +老的环境变量会在升级到 2.6 版本后第一次启动时自动转换为 `config.json`,生成的 `config.json` 会放在 `/app/config` 文件夹内。 +当你已经映射了 `/app/config` 文件夹之后,老的环境变量将不对 AB 运行产生影响,但是你可以通过删除 `config.json` 来重新使用环境变量生成配置。 + +### 容器 Volume 映射 + +2.6 版本之后需要映射的文件夹有: + +- `/app/config`:配置文件夹,包含 `config.json` +- `/app/data`:数据文件夹,包含 `bangumi.json` 等 + +### 数据文件 + +新版本进行了大规模更新,因此我们不建议你使用老的数据文件,AB 会自动生成新的数据文件 `bangumi.json` 保存在 `/app/data` 中。 + +但是不用担心,QB 不会重复下载已经下载过的番剧。 + +### 后续配置更改 + +现在 AB 可以在 WebUI 中直接编辑配置了,编辑完成之后只需要重启容器就可以立刻生效。 + +## 如何升级 + +### Docker compose + +你可以用老的 docker-compose.yml 文件升级。 + +```bash +docker compose stop autobangumi +docker compose pull autobangumi +``` + +然后修改 docker-compose.yml 文件,添加 `volumes` 映射。 + +```yaml +version: "3.8" + +services: + autobangumi: + image: estrellaxd/auto_bangumi:latest + container_name: autobangumi + restart: unless-stopped + environment: + - PUID=1000 + - PGID=1000 + - TZ=Asia/Shanghai + volumes: + - /path/to/config:/app/config + - /path/to/data:/app/data + networks: + - bridge + dns: + - 223.5.5.5 +``` + +然后拉起 AB 即可 + +```bash +docker compose up -d autobangumi +``` + +### Portainer + +你可以在 `Portainer` 中修改映射文件地址之后点击 `Recreate` 即可完成升级 + +### 如果升级出现了问题需要怎么做 + +由于每个人配置可能不尽相同,现在升级可能会出现程序无法运行的问题,此时删除掉所有以前的数据以及生成的配置文件后重启容器。 +然后在 WebUI 中重新配置一下即可。 + + +## 新版本特性 + +### 配置方式更改 + +2.6 版本之后配置程序的方式从修改 Docker 中的环境变量更改为修改 `config.json`。 +新版 WebUI 也提供了网页版修改配置的功能。可以访问 AB 地址,在左侧边栏找到 `配置` 即可修改。 +修改完成之后重启容器即可。 + +### 自定义反向代理 URL 和 AB 作为反代中转 + +为了应对 [蜜柑计划](https://mikanani.me) 无法访问的情况,AB 增加了三种应对的方式。 + +1. HTTP 以及 Socks 代理 + + 老版本的 AB 就有这项功能,升级到 2.6 版本之后只需要在 WebUI 中检查代理配置即可正常访问蜜柑计划。 + + 不过这时候 qBittorrent 无法正常访问蜜柑计划的 RSS 和种子地址,因此需要在 qBittorrent 中添加代理。详情可以查看 #198 + +2. 自定义反向代理 URL + + 2.6 版本的 AB 在配置中增加了 `custom_url` 选项,可以自定义反向代理的 URL。 + 可以在配置中设置为自己正确设置的反代 URL。这样 AB 就会使用自定义的 URL 来访问蜜柑计划。并且 QB 也可以正常下载。 + +3. AB 作为反代中转 + + 在 AB 配置代理之后,AB 自身可以作为本地的反代中转。不过目前仅开放 RSS 相关功能的反代。 + 这时候只需要把 `custom_url` 设置为 `http://abhost:abport` 即可。 `abhost` 为 AB 的 IP 地址,`abport` 为 AB 的端口。 + 此时 AB 会把自身地址推送给 qBittorrent,qBittorrent 会使用 AB 的地址作为反代来访问蜜柑计划。 + + 请注意,此时如果你没有用 NGINX 等工具对 AB 进行反代,请填入 `http://` 来保证程序正常运行。 + +**注意事项** + +需要注意的是,如果 AB 和 QB 在同一个容器中,请不要用 `127.0.0.1` 或者 `localhost`,因为这样会导致 AB QB 无法互相访问。 +如果在同一个网络中,可以使用容器名寻址的方式来访问。如 `http://autobangumi:7892`。 + +也可以使用 Docker 路由地址访问如 `http://172.17.0.1:7892`。 + +如果在不同宿主机中,可以使用宿主机 IP 地址访问。 + +### 合集以及文件夹重命名 + +AB 现在可以对合集以及文件夹内的文件进行重命名了,此时 AB 会把文件夹内的媒体文件重新放置到根目录中。 +需要注意的是,目前 AB 还依赖保存路径来判断季度信息和剧集信息,所以请按照 AB 的标准放置合集文件。 + +**2.6.4** 版本后,AB 可以对文件夹内的字幕进行重命名,不过该功能暂时在适配中。合集和字幕默认以 `pn` 格式重命名,暂时不提供调整选项。 + +**标准路径** + +```text +/downloads/Bangumi/剧集信息/Season 1/xxx +``` + +### 通知推送功能 + +AB 现在可以通过 `Telegram` 和 `ServerChan` 推送重命名完成的通知了。 + +在 WebUI 中,打开推送开关,并且填入所需的参数即可完成推送。 + +- Telegram 需要填入 Bot Token 和 Chat ID,具体如何获取请参看各类教程。 +- ServerChan 需要填入 Token,具体如何获取请参看各类教程。 \ No newline at end of file diff --git a/docs/src/changelog/3.0.md b/docs/src/changelog/3.0.md new file mode 100644 index 00000000..bf01da9b --- /dev/null +++ b/docs/src/changelog/3.0.md @@ -0,0 +1,46 @@ +# 3.0 更新说明 + +### 全新的 WebUI + +- 登陆功能,现在 AB 可以设定用户名和密码进行登陆。部分操作需要在登陆后才可以进行。 +- 全新的海报墙 +- 番剧管理功能 + - 可以对番剧的季度信息名称进行修改,修改完成之后会自动修改**自动下载规则**/**已经下载完成的文件路径**, 并重命名。 + - 全新的链接解析器,解析完成链接之后可以手动更改下载信息,选择下载季度或者增加自动下载规则。 + - 删除番剧,可以一键删除番剧以及其种子文件。 + - 可以对单独番剧自定义下载规则,此规则与全局规则不冲突。 +- 全新的配置界面,可以更方便的配置应用程序规则。 +- 新增初始化启动页面,在第一次启动 AB 时会引导填入相关配置。 +- 下载器链接检查器,可以检查与 qBittorrent 的连通性 +- RSS 地址检查器,可以检查 RSS 是否有效。 +- 新增程序管理按钮,可以在 WebUI 中启动停止程序。且可以重启容器。 + +### 解析器 + +- 全新的解析器,可以选择不同类型来源获取官方标题和海报地址。 +- 支持更换 RSS 订阅源而不用重新生成数据库。 + +### 通知模块 + +- 新增 `Bark` 通知模块. +- 全新的通知方式,现在可以给 Telegram 推送海报,番剧名称,更新集数。 + +### 数据迁移 + +- 现在从旧版本升级可以自动迁移数据。 +- 从旧版本迁移的数据也可以自动匹配海报。 + +## Fix + +- 针对 Windows 路径可能出现的重命名 Bug。 + +## Change + +- 从 `json` 迁移至 `sqlite` 存储数据 +- 从多进程迁移至多线程 + - 重构主程序 + - 加速启动关闭时间 +- 重构解析器模块 +- 重构重命名模块 + - 暂时移除 `normal` 模式 +- 增加 `ghcr.io` 镜像 \ No newline at end of file diff --git a/docs/src/deploy/Docker-cli.md b/docs/src/deploy/Docker-cli.md new file mode 100644 index 00000000..adf5f359 --- /dev/null +++ b/docs/src/deploy/Docker-cli.md @@ -0,0 +1,91 @@ +## 使用 Docker-cli 部署 + +### 设置环境变量 + +添加环境变量(注意这里最好手动输入)详细内容请参考 [Docker Compose](https://github) 章节中同样内容 + +```shell +export \ +DOWNLOAD_PATH=/path/downloads \ +RSS= +``` + +### 创建数据和配置文件夹 + +为了保证 AB 在每次更新之后数据和配置不丢失,推荐使用 Docker volume 进行数据和配置的持久化。 + +```shell +# 创建数据文件夹 +mkdir AutoBangumi +cd AutoBangumi +``` + +### 使用 Docker-cli 部署 AutoBangumi + +复制以下命令运行即可。 + +```shell +docker run -d \ + --name=AutoBangumi \ + -v $PWD/config:/app/config \ + -v $PWD/data:/app/data \ + -p 7892:7892 \ + --network=bridge \ + --dns=8.8.8.8 \ + --restart unless-stopped \ + estrellaxd/auto_bangumi:latest +``` + +此时 AB 的 WebUI 会自动运行,但是主程序会处于暂停状态,可以进入 `http://abhost:7892` 进行配置。 + +当然也可以使用环境变量进行配置,具体内容请参考 [Docker Compose](/Docker-compose) 章节中同样内容 + +```shell +docker run -d \ + --name=AutoBangumi \ + -e TZ=Asia/Shanghai \ #optional + -e AB_DOWNLOADER_HOST=qbittorrent:8080 \ #optional + -e AB_DOWNLOADER_USERNAME=admin \ #optional + -e AB_DOWNLOADER_PASSWORD=adminadmin \ #optional + -e AB_DOWNLOAD_PATH=/path/downloads \ + -e AB_RSS= \ + -v $PWD/config:/app/config \ + -v $PWD/data:/app/data \ + --network=host \ + --dns=8.8.8.8 \ + --restart unless-stopped \ + estrellaxd/auto_bangumi:latest +``` + +此时 AB 会自动把环境变量写入 `config.json` 文件中然后自动运行。 + +推荐使用 _[Portainer](https://www.portainer.io)_ 等带有 UI 的 Docker 管理器进行进阶部署 + +## 部署结果: + +```other +[2022-07-09 21:55:19,164] INFO: _ ____ _ +[2022-07-09 21:55:19,165] INFO: /\ | | | _ \ (_) +[2022-07-09 21:55:19,166] INFO: / \ _ _| |_ ___ | |_) | __ _ _ __ __ _ _ _ _ __ ___ _ +[2022-07-09 21:55:19,167] INFO: / /\ \| | | | __/ _ \| _ < / _` | '_ \ / _` | | | | '_ ` _ \| | +[2022-07-09 21:55:19,167] INFO: / ____ \ |_| | || (_) | |_) | (_| | | | | (_| | |_| | | | | | | | +[2022-07-09 21:55:19,168] INFO: /_/ \_\__,_|\__\___/|____/ \__,_|_| |_|\__, |\__,_|_| |_| |_|_| +[2022-07-09 21:55:19,169] INFO: __/ | +[2022-07-09 21:55:19,169] INFO: |___/ +[2022-07-09 21:55:19,170] INFO: Version 2.6.3 Author: EstrellaXD Twitter: https://twitter.com/Estrella_Pan +[2022-07-09 21:55:19,171] INFO: GitHub: https://github.com/EstrellaXD/Auto_Bangumi/ +[2022-07-09 21:55:19,172] INFO: Starting AutoBangumi... +[2022-07-09 21:55:20,717] INFO: Add RSS Feed successfully. +[2022-07-09 21:55:21,761] INFO: Start collecting RSS info. +[2022-07-09 21:55:23,431] INFO: Finished +[2022-07-09 21:55:23,432] INFO: Running.... +[2022-07-09 22:01:24,534] INFO: [NC-Raws] 继母的拖油瓶是我的前女友 - 01 (B-Global 1920x1080 HEVC AAC MKV) [0B604F3A].mkv >> 继母的拖油瓶是我的前女友 S01E01.mkv +[2022-07-09 22:01:24,539] INFO: Finished checking 131 files' name, renamed 1 files. +[2022-07-09 23:55:31,843] INFO: Start collecting RSS info. +[2022-07-09 23:55:37,269] INFO: Finished +[2022-07-09 23:55:37,270] INFO: Running.... +[2022-07-10 00:13:38,855] INFO: [NC-Raws] Lycoris Recoil 莉可麗絲 - 02 (Baha 1920x1080 AVC AAC MP4) [1160E633].mp4 >> Lycoris Recoil 莉可麗絲 S01E02.mp4 +[2022-07-10 00:13:38,869] INFO: Finished checking 131 files' name, renamed 1 files. +[2022-07-10 00:43:40,777] INFO: [NC-Raws] Lycoris Recoil 莉可麗絲 - 01 (Baha 1920x1080 AVC AAC MP4) [7E742084].mp4 >> Lycoris Recoil 莉可麗絲 S01E01.mp4 +[2022-07-10 00:43:40,811] INFO: Finished checking 132 files' name, renamed 1 files. +``` diff --git a/docs/src/deploy/Docker-compose.md b/docs/src/deploy/Docker-compose.md new file mode 100644 index 00000000..56481f5d --- /dev/null +++ b/docs/src/deploy/Docker-compose.md @@ -0,0 +1,102 @@ +## 安装 **Docker Compose** + +现在提供了一键部署的 **AutoBangumi** 的方法,可以使用 `docker-compose.yml` 文件进行部署。 + +正常来说安装完 Docker 之后都会自带 `docker-compose`,使用命令: + +```bash +docker compose -v +``` + +检查版本即可 + +如果没有安装,可以使用以下命令安装: + +```bash + $ sudo apt-get update + $ sudo apt-get install docker-compose-plugin +``` + +## 部署 **AutoBangumi** + +### 创建 AutoBangumi 文件夹 + +```bash +mkdir AutoBangumi +cd AutoBangumi +``` + +### 下载 Docker Compose 配置文件 + +项目中提供了三种安装方式: + +- 只安装 **AutoBangumi** + ```bash + wget https://raw.githubusercontent.com/EstrellaXD/Auto_Bangumi/main/docs/docker-compose/AutoBangumi/docker-compose.yml + ``` +- 安装 **qBittorrent** 与 **AutoBangumi** + ```bash + wget https://raw.githubusercontent.com/EstrellaXD/Auto_Bangumi/main/docs/docker-compose/qBittorrent+AutoBangumi/docker-compose.yml + ``` +- **qBittorrent** + **AutoBangumi** + **Plex** + ```bash + wget https://raw.githubusercontent.com/EstrellaXD/Auto_Bangumi/main/docs/docker-compose/All-in-one/docker-compose.yml + ``` + +首先选择你要安装的方式,**拷贝上面的命令运行即可**,这一步是下载 `docker-compose.yml` 配置文件,如果需要自定义可以使用文本编辑器对其中的参数进行自定义。 + +### 定义环境变量 + +如果你是用上面下载的 AB+QB / AB+QB+Plex 的 Docker-Compose 文件,那么你需要定义以下环境变量: + +```shell +export \ +QB_PORT= \ +DOWNLOAD_PATH= +``` + +- `QB_PORT`: 填写你的已经部署的 qBittorrent 端口号,或者想要自定义的端口号,比如: `8080` +- `DOWNLOAD_PATH`: 填写你的文件下载路径 + +如果你不想使用环境变量,也可以拉起 Docker-Compose 后在 WebUI 中进行配置。 + +### 拉起 Docker-Compose + +```bash +# 如果配置过了上面的环境变量,请使用下面的方式拉起 +docker compose up -d + +# 如果没有手动配置上面的环境变量,请使用下面的方式拉起 +QB_PORT= DOWNLOAD_PATH= docker compose up -d +``` + +## 部署结果: + +```other +2022-06-05 16:38:49 INFO: Add RSS Feed successfully. +2022-06-05 16:38:50 INFO: Adding Kawaii dake ja Nai Shikimori-san Season 1 +2022-06-05 16:38:50 INFO: Adding Kakkou no Iinazuke Season 1 +2022-06-05 16:38:50 INFO: Adding SPYxFAMILY Season 1 +2022-06-05 16:38:50 INFO: Adding Love Live!虹咲学园 学园偶像同好会 Season 2 +2022-06-05 16:38:50 INFO: Adding CUE! Season 1 +2022-06-05 16:38:50 INFO: Adding Kaguya-sama wa Kokurasetai Season 3 +2022-06-05 16:38:50 INFO: Adding Shokei Shoujo no Virgin Road Season 1 +2022-06-05 16:38:50 INFO: Adding Kakkou no Iikagen Season 1 +2022-06-05 16:38:50 INFO: Adding Summer Time Rendering Season 1 +2022-06-05 16:38:50 INFO: Adding Mahoutsukai Reimeiki Season 1 +2022-06-05 16:38:50 INFO: Adding Paripi Koumei Season 1 +2022-06-05 16:38:50 INFO: Adding Komi-san wa, Komyushou Desu. Season 1 +2022-06-05 16:38:50 INFO: Adding Deaimon Season 1 +2022-06-05 16:38:50 INFO: Adding Tate no Yuusha no Nariagari Season 2 +2022-06-05 16:38:50 INFO: Adding Shijou Saikyou no Daimaou Season 1 +2022-06-05 16:38:50 INFO: Adding Yuusha, Yamemasu Season 1 +2022-06-05 16:38:50 INFO: Adding Tomodachi Game Season 1 +2022-06-05 16:38:50 INFO: Adding Machikado Mazoku: 2-choume Season 1 +2022-06-05 16:38:50 INFO: Start collecting past episodes. +2022-06-05 16:39:32 INFO: Start adding rules. +2022-06-05 16:39:32 INFO: Finished. +2022-06-05 16:39:32 INFO: Waiting for downloading torrents... +2022-06-05 16:49:32 INFO: Finished checking 185 file's name. +2022-06-05 16:49:32 INFO: Renamed 0 files. +2022-06-05 16:49:32 INFO: Finished rename process. +``` diff --git a/docs/src/deploy/Windows-本地部署.md b/docs/src/deploy/Windows-本地部署.md new file mode 100644 index 00000000..0d7e216f --- /dev/null +++ b/docs/src/deploy/Windows-本地部署.md @@ -0,0 +1,183 @@ +1. 克隆并进入 AutoBangumi 的 `git` 仓库: + + ```powershell + git clone https://github.com/EstrellaXD/Auto_Bangumi.git + cd Auto_Bangumi + ``` + +2. 修改 `src\module\api\web.py` 以允许 `DEV_VERSION` 下仍然可以显示 Web UI: + + ```powershell + ((Get-Content -path .\src\module\api\web.py -Raw) -replace 'if VERSION != "DEV_VERSION":','if True:') | Set-Content -Path .\src\module\api\web.py + ``` + +3. 创建一个新的分支,以方便后续更新时与远程 `main` 分支合并: + + ```powershell + git checkout -b non-docker-deployment + git commit -a -m "Enable WebUI for dev version" + ``` + +4. 新建 `python` 虚拟环境、激活并安装依赖(需保证 `python -V` 打印的版本符合 `Dockerfile` 中的要求,如 `FROM python:3.11-alpine AS APP`) + + ```powershell + python -m venv env + .\env\Scripts\Activate.ps1 + python -m pip install -r requirements.txt + ``` + + +5. 下载 WebUI 并安装: + + ```powershell + Invoke-WebRequest -Uri "https://github.com/Rewrite0/Auto_Bangumi_WebUI/releases/latest/download/dist.zip" -OutFile "dist.zip" + Expand-Archive -Path "dist.zip" + mv dist\* src\templates + ``` + +6. 创建 `data` 与 `config` 目录和空白的 `config_dev.json`(如果有必要将这些目录存储在其他位置,建议使用 Junction Directory 链接即可) + + ```powershell + mkdir src\data + mkdir src\config + echo "{}" > src\config\config_dev.json + ``` + 默认情况下,PowerShell 输出文件编码为 `UTF-16LE`,你需要将 `config_dev.json` 的编码格式改为 `UTF-8`。 + +7. 运行程序测试是否配置正确: + + ```powershell + cd src + python main.py + ``` + +8. 接下来配置成服务以实现开机自启,以下以 `nssm` 为例: + + ```powershell + nssm install AutoBangumi (Get-Command python).Source + nssm set AutoBangumi AppParameters (Get-Item .\main.py).FullName + nssm set AutoBangumi AppDirectory (Get-Item ..).FullName + nssm set AutoBangumi Start SERVICE_DELAYED_AUTO_START + ``` + +9. [可选] 由于 3.0 版本之前 AutoBangumi 没有修改规则或者批量移动下载位置的功能,可能遇到季名不符合需要 (如《鬼灭之刃 刀匠村篇》被视作一个仅具有一季的独立的影视作品,而不是系列动画的第三季) 或者中途想继续下载但是移出库防止出现在新剧集通知中等情况,可与考虑将下载目录和库目录区分开并用 Junction Directory 相连,这样在管理库时可以随意移动软链接而不影响 AutoBangumi 的工作。比如: + ```powershell + ### Configurations + $downloadDir = "path\to\download_dir" + $libraryDir = "path\to\library_dir" + $logFile = $(Join-Path -Path $download_dir -ChildPath "downloadWatcher.log") + $subfolderCreationTimeout = 10 + $watcher = New-Object System.IO.FileSystemWatcher + $watcher.Path = $downloadDir + $watcher.EnableRaisingEvents = $true + + function CreateJunction( + # The path to the folder containing junction targets, e.g. $downloadDir\ + # The junction targets are its subfolders e.g. $downloadDir\\ + $targetRoot + ) { + # The basename of $targetRoot, e.g. + $targetRootName = Split-Path -Path $targetRoot -Leaf + # The path the folder where junctions are created, e.g. $libraryDir\ + $junctionRoot = $(Join-Path -Path $libraryDir -ChildPath $targetRootName) + # Create $junctionRoot if it does not exist + if (!(Test-Path $junctionRoot)) { + New-Item -ItemType Directory -Path $junctionRoot + Add-Content $logFile -Value "[Information] $(Get-Date) New folder created at $junctionRoot mirroring $targetRoot." + } + # Wait up to 10 secs for a subfolder to appear in $targetRoot + # This is because if $targetRoot is newly created the downloader may not have created the subfolder yet + $junctionTargetList = $(Get-ChildItem -Path $targetRoot -Directory) + $subfolderWaitCount = 0 + while ($junctionTargetList.Count -eq 0) { + if ($subfolderWaitCount -ge $subfolderCreationTimeout) { + Add-Content $logFile -Value "[Warning] $(Get-Date) No subfolders exist in $targetRoot for junctioning, skipping." + Return + } + Start-Sleep -Seconds 1 + try { + $junctionTargetList = $(Get-ChildItem -Path $targetRoot -Directory) + } + # If $targetRoot is removed/renamed during the wait, skip + catch [System.IO.DirectoryNotFoundException] { + Add-Content $logFile -Value "[Warning] $(Get-Date) $targetRoot is removed/renamed during the wait, skipping." + Return + } + $subfolderWaitCount++ + } + Get-ChildItem $junctionRoot | Where-Object {$_.LinkType -eq "Junction"} | ForEach-Object { + # If a junction target is non-existent, remove it + if (!(Test-Path $_.Target)) { + Remove-Item $_.FullName + Add-Content $logFile -Value "[Information] $(Get-Date) Junction at $($_.FullName) is removed because its target $($_.Target) is non-existent." + } + else { + # Remove a junction target from $junctionTargetList if a junction in $junctionRoot is already pointing to it + $existingTarget = $_.Target + $junctionTargetList = $junctionTargetList | Where-Object {$_.FullName -ne $existingTarget} + Add-Content $logFile -Value "[Debug] $(Get-Date) $($_.FullName) already exists, skipping." + } + } + # Create junctions for each remaining target in $junctionTargetList + for ($i = 0; $i -lt $junctionTargetList.Count; $i++) { + $junctionTarget = $junctionTargetList[$i] + # The default name for the junction is the name of the junction target it self, e.g. + $junctionName = $junctionTarget.Name + # If a junction with the same name already exists, append the current date to the name, e.g. -yyyy-MM-dd + if (Test-Path $(Join-Path -Path $junctionRoot -ChildPath $junctionName)) { + $junctionName = "$junctionName-$(Get-Date -Format "yyyy-MM-dd")" + # If the new name is still taken, append a random string generated by taking first 5 chars from New-Guid to the name, e.g. -yyyy-MM-dd- + while (Test-Path $(Join-Path -Path $junctionRoot -ChildPath $junctionName)) { + $junctionName = "$junctionName-$((New-Guid).ToString().Substring(0, 5))" + } + } + # Create the junction + New-Item -ItemType Junction -Path $(Join-Path -Path $junctionRoot -ChildPath $junctionName) -Value $junctionTarget.FullName + Add-Content $logFile -Value "[Information] $(Get-Date) New junction created at $(Join-Path -Path $junctionRoot -ChildPath $junctionName) pointing to $junctionTarget." + } + } + + $action = { + # Event arguments, see https://learn.microsoft.com/en-us/dotnet/api/system.io.filesystemeventargs + $details = $event.SourceEventArgs + $path = $details.FullPath # Gets the full path of the affected file or directory. + $changeType = $details.ChangeType # Gets the change type, e.g. Created, Deleted, Renamed + Add-Content $logFile -Value "[Debug] $(Get-Date) $changeType event detected at $path." + if (!(Test-Path $path -PathType Container)) { + Add-Content $logFile -Value "[Debug] $(Get-Date) $name is not mirrored because it is not a folder." + Return + } + # If the directory contains .nomirror file, skip + if (Test-Path $(Join-Path -Path $path -ChildPath ".nomirror")) { + Add-Content $logFile -Value "[Debug] $(Get-Date) $path is not mirrored because it contains .nomirror file." + Return + } + # Process the directory as a root of junction targets + $targetRoot = $path + # If the directory is renamed, rename its mirror directory + if ($changeType -eq [System.IO.WatcherChangeTypes]::Renamed) { + $oldJunctionRoot = $(Join-Path -Path $libraryDir -ChildPath $details.OldName) + $newJunctionRoot = $(Join-Path -Path $libraryDir -ChildPath $details.Name) + if (Test-Path $oldJunctionRoot) { + Rename-Item -Path $oldJunctionRoot -NewName $details.Name + Add-Content $logFile -Value "[Information] $(Get-Date) $oldJunctionRoot is renamed to $newJunctionRoot." + } + else { + Add-Content $logFile -Value "[Warning] $(Get-Date) Junction at $oldJunctionRoot does not exist, skipping." + } + } + # If a directory is modified or newly created, update/create its mirror directory by creating/updating junctions to point to its subfolders + if ($changeType -eq [System.IO.WatcherChangeTypes]::Changed -or ` + $changeType -eq [System.IO.WatcherChangeTypes]::Renamed -or ` + $changeType -eq [System.IO.WatcherChangeTypes]::Created) { + CreateJunction $targetRoot + } + } + + Register-ObjectEvent -InputObject $watcher -EventName Created -Action $action + Register-ObjectEvent -InputObject $watcher -EventName Changed -Action $action + Register-ObjectEvent -InputObject $watcher -EventName Renamed -Action $action + while ($true) {Start-Sleep 5} + ``` + 上述脚本定义了一个 FileSystemWatcher 来监控下载目录的变化并镜像到库目录,可以用 `nssm` 安装为服务自动运行。如果需要排除一个目录,则只需要在该目录下新建一个名为 `.nomirror` 的文件即可。 + diff --git a/docs/src/deploy/local-run.md b/docs/src/deploy/local-run.md new file mode 100644 index 00000000..e7d6ffd8 --- /dev/null +++ b/docs/src/deploy/local-run.md @@ -0,0 +1,41 @@ +# 如何在本地运行 AutoBangumi + +## 克隆项目 + +```bash +git clone https://github.com/EstrellaXD/Auto_Bangumi.git +``` + +## 安装依赖 +确认你的电脑本地已经安装了 `python3.10` 以上的版本,以及 `pip` 包管理工具。 + +```bash +python3 pip install -r requirements.txt +``` + +## 进入源代码目录并且创建版本信息 + +```bash +cd src + +echo "VERSION = 'local'" >> module/__version__.py +``` + +## 下载 WebUI + +```bash +wget https://github.com/Rewrite0/Auto_Bangumi_WebUI/releases/download/latest/dist.zip + +unzip dist.zip + +mv dist templates +``` + +## 创建配置文件夹以及数据文件夹并运行 + +```bash +mkdir "config" +mkdir "data" + +python3 main.py +``` diff --git a/docs/src/deploy/wsl.md b/docs/src/deploy/wsl.md new file mode 100644 index 00000000..b91d0bcd --- /dev/null +++ b/docs/src/deploy/wsl.md @@ -0,0 +1,62 @@ +# WSL 配置说明 + +感谢 #73 的贡献 + +WSL 用户可以用以下 `docker-compose.yml` 配置文件来部署 AutoBangumi + +```yml +version: "3.6" +services: + qbittorrent: + container_name: qbittorrent + image: johngong/qbittorrent:latest + hostname: qbittorrent + environment: + - QB_EE_BIN=false + - UID=1000 # 用户权限1000 当前WSL登录用户,查询方法 wsl内输入 id 用户名 + - GID=1000 + - QB_WEBUI_PORT=8989 + ports: + - 6881:6881 + - 6881:6881/udp + - 8989:8989 + volumes: + - qb_config:/config + - /mnt/g/animation:/Downloads #下载路径,对应 Windows上目录是 G:\animation + networks: + - AutoBangumi_network + restart: unless-stopped + + AutoBangumi: + image: estrellaxd/auto_bangumi:latest + container_name: AutoBangumi + ports: + - 7892:7892 + depends_on: + - qbittorrent + volumes: + - ./config:/app/config + - ./data:/app/data + environment: + - PUID=1000 + - PGID=1000 + - TZ=Asia/Shanghai + - AB_DOWNLOADER_HOST=qbittorrent:8989 + - AB_DOWNLOADER_USERNAME=admin + - AB_DOWNLOADER_PASSWORD=adminadmin + - AB_NOT_CONTAIN=720|繁体|CHT|JPTC|繁日|BIG5 + - AB_DOWNLOAD_PATH=/Downloads #qbittorrent 映射的地址,否者可能提示下载失败 + - AB_RSS=https://mikanani.me/RSS/MyBangumi?token=xxxxxxxx%3d%3d #订阅地址,改成自己的 + networks: + - AutoBangumi_network + restart: unless-stopped + +networks: + AutoBangumi_network: +volumes: + qb_config: + external: false + auto_bangumi: + external: false + +``` \ No newline at end of file diff --git a/docs/src/deploy/群晖.md b/docs/src/deploy/群晖.md new file mode 100644 index 00000000..53a456fd --- /dev/null +++ b/docs/src/deploy/群晖.md @@ -0,0 +1,26 @@ +## 群晖部署说明( QNAP 同理) + +1. 安装 Docker 套件 + +![docker.png](https://tva1.sinaimg.cn/large/e6c9d24ely1h47zd8accwj20zc0u0wh4.jpg) 2. 在 Docker 中搜索 AutoBangumi 并且拉取 + +![ab.png](https://tva1.sinaimg.cn/large/e6c9d24ely1h47zd8zrv1j20zc0u0dka.jpg) 3. 配置 AutoBangumi + +![conf1.png](https://tva1.sinaimg.cn/large/e6c9d24ely1h47zd8ludwj20wt0u0tam.jpg) + +![conf1.png](https://tva1.sinaimg.cn/large/e6c9d24ely1h47zd8fxvyj20zj0u078i.jpg) + +![conf1.png](https://tva1.sinaimg.cn/large/e6c9d24ely1h47zd7u8x6j20wm0u0mzy.jpg) + +4. 如果你还没有安装 qBittorrent + 配置如下: + +![conf1.png](https://tva1.sinaimg.cn/large/e6c9d24ely1h47zd7ohctj20zh0u0mzq.jpg) + +![conf1.png](https://tva1.sinaimg.cn/large/e6c9d24ely1h47zd7h8bsj20wp0u040n.jpg) + +![conf1.png](https://tva1.sinaimg.cn/large/e6c9d24ely1h47zd6cgovj20wt0u00uj.jpg) + +## 运行结果 + +![conf1.png](https://tva1.sinaimg.cn/large/e6c9d24ely1h47zd65jcbj21bx0u07bf.jpg) diff --git a/docs/src/deploy/部署说明.md b/docs/src/deploy/部署说明.md new file mode 100644 index 00000000..4208c351 --- /dev/null +++ b/docs/src/deploy/部署说明.md @@ -0,0 +1,50 @@ +# 开始前的准备 + +**AutoBangumi** 可以使用 Docker 运行,也可以直接从源代码运行,鉴于追番是一个 7x24 小时的过程,**推荐**在 NAS 或者 Linux 服务器中使用 Docker 运行。 + +## 获取 Mikan Project RSS 订阅地址 + +本项目基于解析 Mikan Project 提供的 RSS 地址,因此如果要实现自动追番,需要注册并且获得 Mikan Project 的 RSS 地址: + +![image](https://raw.githubusercontent.com/EstrellaXD/ab_resource/main/resource/image/订阅地址.png) + +获取的 RSS 地址如下: + +```angular2html +https://mikanani.me/RSS/MyBangumi?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +# 或者 +https://mikanime.tv/RSS/MyBangumi?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +``` + +AB 中需要填入的 `token` 为以上 url 中 `token=` 后面的一串字符。 + +## Mikan Project 订阅贴士 + +由于 AutoBangumi 会解析所有获得的 RSS 信息,因此在订阅番剧的时候需要注意以下几点: + +![image](https://raw.githubusercontent.com/EstrellaXD/ab_resource/main/resource/image/高级订阅.png) + +- 在个人设置中打开高级设置。 +- 一部番剧只订阅一个字幕组,点击 Mikan Project 的番剧图片即可呼出二级菜单,选择一个字幕组订阅即可。 +- 如果字幕组有简体繁体不同的字幕,Mikan Project 大多时候提供了选择订阅的方式,选择一种字幕订阅。 +- 如果不提供简繁选择,那么可以在 AutoBangumi 中设置 `filter` 进行过滤,也可以在规则生成之后进入 qBittorrent 中手动过滤。 +- 目前不支持 OVA 以及 剧场版 的订阅解析。 + +## 安装 Docker 以及 Docker Compose + +- [安装 Docker 英文](https://docs.docker.com/get-docker/) +- [安装 Docker-Compose 英文](https://docs.docker.com/compose/) +- [安装 Docker 中文](https://sspai.com/post/56893) +- [Docker Compose 教程](https://sspai.com/post/66013) + +**推荐使用 Docker Compose 一键部署本项目** + +## 安装 qBittorrent 和媒体库 + +如果你选择使用 Docker Compose 的方式安装,可以跳过这一步。 +如果你已经配置好已有的 qBittorrent 也可以跳过这一步。 + +### 使用 Docker 安装 qBittorrent + +- [安装说明](https://github.com/linuxserver/docker-qbittorrent) +- [群晖安装 qBittorrent](https://post.smzdm.com/p/a5k64587/) diff --git a/docs/src/faq/常见问题.md b/docs/src/faq/常见问题.md new file mode 100644 index 00000000..545326f5 --- /dev/null +++ b/docs/src/faq/常见问题.md @@ -0,0 +1,189 @@ +## WebUI + +### WebUI 地址 + +默认端口为 7892,请访问 `http://serverhost:7892`,如果你修改了端口,请记得同时更改 Docker 中的端口映射。 + +### 默认用户名和密码 + +- 默认用户名:`admin`,默认密码:`adminadmin`。 +- 请务必在第一次登录后修改密码。 + +### 修改和忘记密码 + +- 修改密码:在登录后点击右上角`···`,点击 `Profile`,修改用户名和密码。 +- 目前没有简单的忘记密码的重置方法,如果忘记密码,可以删除 `data/data.db` 文件,然后重启。 + +### 为什么我修改了配置,但是没有生效? + +- 修改配置之后请点击 **Apply** 按钮,然后`···` 中的 **Restart** 按钮,此时会重启主进程。 +- 如果开启 **Debug** 模式,请点击 `···` 中的 **Shutdown**,此时会重启容器。 + +### 如何判断程序是否正常运行 + +新版 WebUI 右上角有一个小圆点,绿色表示正常运行,红色表示出现错误,程序暂停。 + +## 3.0 是如何管理番剧的 + +升级到 3.0 之后 AB 可以在 WebUI 中一键管理番剧种子和下载规则。所以依赖的是种子的下载路径和规则名称。 +如果你手动在 QB 中更改了种子的下载路径,那么可能会碰到通知没有海报,删除种子不起作用等问题。 +请尽量在 AB 中操作管理番剧和种子。 + +## ⬇️ 下载以及关键词过滤 + +### 下载路径填写 + +**下载路径** 到底写什么? +- 这个参数只要和你 qBittorrent 中的参数保持一致即可。 + - Docker:比如 qB 中是 `/downloads` 那就写 `/downloads/Bangumi`,`Bangumi`可以任意更改。 + - Linux/macOS:如果是 `/home/usr/downloads` 或者 `/User/UserName/Downloads` 只要在最后再加一行 `Bangumi` 就行。 + - Windows:`D:\Media\`, 改为 `D:\Media\Bangumi` + +### 没有开始自动下载怎么办: + +- 检查 AutoBangumi 的日志,如果日志一切正常,说明是 qBittorrent 的设置问题,检查: + - 设置 >> RSS >> 启用 RSS Torrent 自动下载 + - Options >> RSS >> Enable auto downloading of RSS torrents + - 设置 >> RSS >> 启用获取 RSS 订阅 + - Options >> RSS >> Enable fetching RSS feeds + - 检查 qb 配置,看是否有权限新建文件夹 + +### 下载没有存储在正确的目录中 + +- 检查 [下载路径](###下载路径填写) 是否正确。 +- 检查 qBittorrent 的配置,PGID 与 PUID ,看是否有权限新建文件夹。可以尝试手动下载任意种子并且指定目录,如果出现错误或者未新建目录为文件夹权限问题。 +- 检查 qBittorrent 的默认配置,Saving Management 选项请选择手动保存,「保存管理 >> 默认种子管理模式 >> 手动」 + +### 下载很多没有订阅的番剧怎么办? + +- 检查一下蜜柑订阅是否订阅了一部番剧的全部字幕组。请一部番剧只订阅一个组,最好开启高级订阅。 + - 高级定于在 蜜柑计划 的用户设置中开启 +- 正则过滤不到位,请参考下一节拓展正则表达式。 +- 如果以上都没有出现,请带上 LOG 反馈至 [ISSUE][ISSUE]。 + +### 过滤关键词怎么写。 + +AB 中的过滤关键词是正则表达式,只会在建立规则的时候添加,后续如果要拓展规则,3.0 版本之后可以在 WebUI 中对每个番剧进行单独定义。 +- 过滤关键词是正则表达式,只需要把不需要的关键词用 `|` 间隔开即可。 +- 默认 `720|\d+-\d+` 这个规则会过滤掉所有合集和 720P 的番剧,如果要添加,请在部署 AB 之前添加完成,后续修改环境变量只会影响到新添加的规则。 +- 常用正则关键词(中间用 `|` )隔开: + - `720` 过滤 720、720P、720p 等等 + - `\d+-\d+` 过滤合集,比如 [1-12] + - `[Bb]aha` 过滤 Baha 的番剧 + - `[Bb]ilibili`、`[Bb]-Global` 过滤 Bilibili 的番剧 + - `繁`、`CHT` 过滤繁体字幕 +- 如果想要命中关键词,请在 QB 包含中用这种形式添加:`XXXXX+1080P\+` ,其中 `1080P\+` 表示命中 1080P+ 的番剧。 + +### 第一次部署出了问题下了很多不想下的番剧怎么办? + +1. 删除 QB 中多余的自动下载规则,和文件。 +2. 检查订阅,和过滤规则。 +3. 在浏览器中访问 resetRule API 地址 `http://localhost:7892/api/v1/resetRule` ,重置规则。 +4. 重启一下 AB 。 + +### AB 中识别的 RSS 条目比订阅的少 + +新版本中 AB 的过滤器也会默认过滤所有 RSS 条目,在设置的时候请不要一股脑全部加上过滤。如果想要细分下载,请在 WebUI 中对每个番剧进行单独配置。 + +### 过滤关键词不起作用 + +- 请检查是否正确设置了**全局过滤**参数。 +- 请在 QB 的 RSS 自动下载规则中检查,可以看右侧命中的 RSS,调整下载规则,点击 save 之后可以看到是哪个关键词出现错误。 + +## 🎬 番剧补全相关 + +### 番剧补全不起作用 + +- 请检查是否正确设置了 **番剧补全** 参数。 +- 旧版本的 AB 不支持修改参数临时启用补全,请清除数据并重新部署。 +- 2.5.15 版本之后的 AB 支持临时启用。 + +## 📁 重命名相关 + +### 解析错误 `NOT match with XXXXX` + +- AB 暂时不支持解析合集,合集请通过 API 添加。 +- 如果非合集,请在 issue 中反馈问题。 + +### `Rename failed` 或者重命名失败怎么办? + +- 检查文件路径,标准存储路径应为 `/title/Season/Episode.mp4` 如果不为标准格式路径会导致命名错误。发生这类错误请排查 qbittorrent 的配置。 +- 非上述问题,请到 issue 反馈。 + +### 没有自动重命名怎么办? + +- 请检查 QB 中种子分类是否在 `Bangumi` 类中。 +- AB 只会重命名已经下载的文件。 + +### 如何让 AB 重命名非 AB 添加的番剧 + +- 只需要把种子的类别更改为 `Bangumi` 即可。 +- 需要注意的是,需要种子存放在 `Title/Season X/` 文件夹下才能正常触发重命名。 + +### 如何重命名合集 + +1. 把合集的类别更改为 `Bangumi`。 +2. 把合集的存储路径更改为 `Title/Season X/`。 +3. 等待合集下载完成,重命名完成。 + +## 🌍 网络链接 + +### 无法连接到 qBittorrent + +- 检查 AB 中的 **下载器地址** 参数是否正确。 + - 如果你的 AB 和 QB 在同一个 Docker 网络中,可以尝试使用容器名称进行寻址,如:`http://qbittorrent:8080`。 + - 如果你的 AB 和 QB 在同一个 Docker 服务器中,可以尝试使用 Docker 网关地址进行访问,如:`http://172.17.0.1:8080`。 + - 如果 AB 网络模式不是 `host` 请不要使用 `127.0.0.1` 来访问 QB +- 在 Docker 中不同容器中无法互相访问,可以在 QB 的网络连接的链接中,设定链接 AB。 +- 如果 qBittorrent 使用 HTTPS 模式,请在 **下载器地址** 参数中添加 `https://` 前缀。 + +### `DNS/Connect ERROR` + +- 请检查网络连接,如果网络连接正常,请检查 DNS 解析。 +- 可以给 AB 添加一个 `dns=8.8.8.8`,如果是 HOST 模式可以忽略。 +- 如果 DNS 解析正常,添加代理。 +- 使用 TMDB 请添加代理。 + +### 如何给 Mikanani 添加代理 + +AB 现在提供三种代理模式 +1. HTTP 以及 Socks 代理 + + 老版本的 AB 就有这项功能,升级到 2.6 版本之后只需要在 WebUI 中检查代理配置即可正常访问蜜柑计划。 + + 不过这时候 qBittorrent 无法正常访问蜜柑计划的 RSS 和种子地址,因此需要在 qBittorrent 中添加代理。详情可以查看 #198 + +2. 自定义反向代理 URL + + 2.6 版本的 AB 在配置中增加了 `custom_url` 选项,可以自定义反向代理的 URL。 + 可以在配置中设置为自己正确设置的反代 URL。这样 AB 就会使用自定义的 URL 来访问蜜柑计划。并且 QB 也可以正常下载。 + +3. AB 作为反代中转 + + 在 AB 配置代理之后,AB 自身可以作为本地的反代中转。不过目前仅开放 RSS 相关功能的反代。 + 这时候只需要把 `custom_url` 设置为 `http://abhost:abport` 即可。 `abhost` 为 AB 的 IP 地址,`abport` 为 AB 的端口。 + 此时 AB 会把自身地址推送给 qBittorrent,qBittorrent 会使用 AB 的地址作为反代来访问蜜柑计划。 + + 请注意,此时如果你没有用 NGINX 等工具对 AB 进行反代,请填入 `http://` 来保证程序正常运行。 + 注意点2: 请不要在同时使用代理的情况下在 `custom_url` 中使用容器寻址,或者 Docker 的容器或者网关地址。转跳代理之后可能会无法访问 RSS。 + +## 🐬 Docker 相关 + +### 如何自动更新 + +可以通过在 Docker 中运行一个 `watchtower` 的守护进程,守护进程会自动更新你的容器。 + +[watchtower](https://containrrr.dev/watchtower) 官方文档 + +### 使用 Docker compose 更新 + +如果你的 AB 使用 Docker compose 部署,可以使用 `docker-compose pull` 命令更新。 +拉取完成容器之后可以使用 `docker-compose up -d` 重启容器。 + +### 如果升级出现了问题需要怎么做 + +由于每个人配置可能不尽相同,现在升级可能会出现程序无法运行的问题,此时删除掉所有以前的数据以及生成的配置文件后重启容器。 +然后在 WebUI 中重新配置一下即可。 +如果你是老版本升级,请先参考[升级指南](2.6更新说明)。 + +如果有上述没有覆盖的问题,请到 [ISSUE](https://github.com/EstrellaXD/Auto_Bangumi/issues) 按照 bug 模板反馈。 diff --git a/docs/src/faq/排错流程.md b/docs/src/faq/排错流程.md new file mode 100644 index 00000000..d0a01e76 --- /dev/null +++ b/docs/src/faq/排错流程.md @@ -0,0 +1,42 @@ +## ❌ 常用问题排错流程 +1. 如果 AB 无法正常启动,请检查启动命令是否正确, 当前版本正确的启动命令为 `/init`, 如果发现启动命令不正确且不会修改,请尝试重新部署 AB。 +2. 部署完 AB 之后请先查看 Log。如果运行如下说明 AB 运行正常,且与 QB 连接良好: + ```log + [2022-07-09 21:55:19,164] INFO: _ ____ _ + [2022-07-09 21:55:19,165] INFO: /\ | | | _ \ (_) + [2022-07-09 21:55:19,166] INFO: / \ _ _| |_ ___ | |_) | __ _ _ __ __ _ _ _ _ __ ___ _ + [2022-07-09 21:55:19,167] INFO: / /\ \| | | | __/ _ \| _ < / _` | '_ \ / _` | | | | '_ ` _ \| | + [2022-07-09 21:55:19,167] INFO: / ____ \ |_| | || (_) | |_) | (_| | | | | (_| | |_| | | | | | | | + [2022-07-09 21:55:19,168] INFO: /_/ \_\__,_|\__\___/|____/ \__,_|_| |_|\__, |\__,_|_| |_| |_|_| + [2022-07-09 21:55:19,169] INFO: __/ | + [2022-07-09 21:55:19,169] INFO: |___/ + [2022-07-09 21:55:19,170] INFO: Version 3.0.1 Author: EstrellaXD Twitter: https://twitter.com/Estrella_Pan + [2022-07-09 21:55:19,171] INFO: GitHub: https://github.com/EstrellaXD/Auto_Bangumi/ + [2022-07-09 21:55:19,172] INFO: Starting AutoBangumi... + [2022-07-09 21:55:20,717] INFO: Add RSS Feed successfully. + [2022-07-09 21:55:21,761] INFO: Start collecting RSS info. + [2022-07-09 21:55:23,431] INFO: Finished + [2022-07-09 21:55:23,432] INFO: Running.... + [2022-07-09 22:01:24,534] INFO: [NC-Raws] 继母的拖油瓶是我的前女友 - 01 (B-Global 1920x1080 HEVC AAC MKV) [0B604F3A].mkv >> 继母的拖油瓶是我的前女友 S01E01.mkv + ``` + 1. 如果出现如下 LOG,说明 AB 无法连接 qBittorrent,请检查 qBittorrent 是否正常运行,如果 qBittorrent 正常运行,转跳 [网络问题](常见问题#API与网络链接) 部分进行排查。 + ```log + [2022-07-09 22:01:24,534] WARNING: Cannot connect to qBittorrent, wait 5min and retry + ``` + 2. 如果出现如下 LOG,说明 AB 无法连接到 Mikan RSS,请转跳到 [网络问题](常见问题#API与网络链接) 部分进行排查。 + ```log + [2022-07-09 21:55:21,761] INFO: Start collecting RSS info. + [2022-07-09 22:01:24,534] WARNING: Connected Failed,please check DNS/Connection + ``` +3. 如果此时 QB 中没有下载任务,请转到 RSS 自动下载规则页面,检查 AB 建立的规则是否正确。 + 1. 查看 RSS 订阅,如果是正常的 RSS 图标,说明 RSS 订阅正常,如果是**问题图标**,说明 RSS 订阅有问题,请检查 qBittorrent 与 Mikan RSS 的连通性。 + 2. 如果没有任何下载规则,请检查 RSS 订阅是否是空白,`filter` 是否设置太多过滤值,转跳 [过滤问题](常见问题) 。 + 3. 检查添加的规则是否是正确的,如果出现错误,请到 [issue](https://www.github.com/EstrellaXD/Auto_Bangumi/issues) 反馈。 + 4. 如果有下载规则没有下载,点击规则,并且检查右侧是否命中条目。如果没有命中条目,请删除一下过滤值。 + 5. 检查自动下载规则中「总是暂停」是否关闭 +4. 此时 QB 应该存在下载任务。 + 1. 如果下载任务出现路径问题,请检查 QB 设置中的「保存管理」中的「默认种子管理模式」是否为「手动」,若不是请调整为「手动」。 + 2. 如果下载全部为感叹号,或者下载路径中没有新建归类文件夹,请检查 QB 的权限。 +5. 如果上述排查均不能生效,请尝试重新部署一个新的 qBittorrent。 +6. 如果仍然无效,请带着 LOG 到 [issue](https://www.github.com/EstrellaXD/Auto_Bangumi/issues) 反馈。 + diff --git a/docs/src/home/index.md b/docs/src/home/index.md new file mode 100644 index 00000000..4baa9444 --- /dev/null +++ b/docs/src/home/index.md @@ -0,0 +1,91 @@ +[//]: # '

' +[//]: # ' ' +[//]: # "

" + +

+ + + + Shows an illustrated sun in light color mode and a moon with stars in dark color mode. + +

+ +# 项目说明 + +

+ +

+ +本项目是基于 [Mikan Project](https://mikanani.me)、[qBittorrent](https://qbittorrent.org) 的全自动追番整理下载工具。只需要在 [Mikan Project](https://mikanani.me) 上订阅番剧,就可以全自动追番。并且整理完成的名称和目录可以直接被 [Plex]()、[Jellyfin]() 等媒体库软件识别,无需二次刮削。 + +[主项目地址](https://www.github.com/EstrellaXD/Auto_Bangumi) +/ [WebUI 仓库](https://github.com/Rewrite0/Auto_Bangumi_WebUI) +/ [Wiki 说明](https://www.github.com/EstrellaXD/Auto_Bangumi/wiki) + +## AutoBangumi 功能说明 + +- 简易单次配置就能持续使用 +- 无需介入的 `RSS` 解析器,解析番组信息并且自动生成下载规则。 +- 番剧文件整理: + + ``` + Bangumi + ├── bangumi_A_title + │   ├── Season 1 + │   │   ├── A S01E01.mp4 + │   │   ├── A S01E02.mp4 + │   │   ├── A S01E03.mp4 + │   │   └── A S01E04.mp4 + │   └── Season 2 + │      ├── A S02E01.mp4 + │      ├── A S02E02.mp4 + │      ├── A S02E03.mp4 + │      └── A S02E04.mp4 + ├── bangumi_B_title + │   └─── Season 1 + ``` + +- 全自动重命名,重命名后 99% 以上的番剧可以直接被媒体库软件直接刮削 + + ``` + [Lilith-Raws] Kakkou no Iinazuke - 07 [Baha][WEB-DL][1080p][AVC AAC][CHT][MP4].mp4 + >> + Kakkou no Iinazuke S01E07.mp4 + ``` + +- 自定义重命名,可以根据上级文件夹对所有子文件重命名。 +- 季中追番可以补全当季遗漏的所有剧集 +- 高度可自定义的功能选项,可以针对不同媒体库软件微调 +- 无需维护完全无感使用 +- 内置 TDMB 解析器,可以直接生成完整的 TMDB 格式的文件以及番剧信息。 +- 对于 Mikan RSS 的反代支持。 + +## 如何开始 + +- **[部署说明 (Official)](https://github.com/EstrellaXD/Auto_Bangumi/wiki)** +- **[2.6 版本更新说明](https://github.com/EstrellaXD/Auto_Bangumi/wiki/2.6更新说明)** +- **[3.0 版本更新说明](https://github.com/EstrellaXD/Auto_Bangumi/wiki/3.0更新说明)** +- **[部署说明 (手把手)](https://www.himiku.com/archives/auto-bangumi.html)** + +## 相关群组 + +- 更新推送:[Telegram Channel](https://t.me/autobangumi_update) +- Bug 反馈群:[Telegram](https://t.me/+yNisOnDGaX5jMTM9) + +# 声明 + +## 致谢 + +感谢 [Sean](https://github.com/findix) 提供的大量帮助 + +## 贡献 + +欢迎提供 ISSUE 或者 PR + + + + + +## Licence + +[MIT licence](https://github.com/EstrellaXD/Auto_Bangumi/blob/main/LICENSE) diff --git a/docs/src/image/dark-icon.png b/docs/src/image/dark-icon.png new file mode 100644 index 00000000..6186ffd0 Binary files /dev/null and b/docs/src/image/dark-icon.png differ diff --git a/docs/src/image/light-icon.png b/docs/src/image/light-icon.png new file mode 100644 index 00000000..a264ebf2 Binary files /dev/null and b/docs/src/image/light-icon.png differ diff --git a/docs/src/image/window.png b/docs/src/image/window.png new file mode 100644 index 00000000..f2b61272 Binary files /dev/null and b/docs/src/image/window.png differ diff --git a/docs/src/index.md b/docs/src/index.md new file mode 100644 index 00000000..ee6c8355 --- /dev/null +++ b/docs/src/index.md @@ -0,0 +1,23 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +hero: + name: "Auto_Bangumi" + tagline: 基于 Mikan Project、qBittorrent 的全自动追番整理下载工具 + actions: + - theme: brand + text: 快速开始 + link: /home/ + - theme: alt + text: 更新日志 + link: /changelog/3.0 + +features: + - title: Feature A + details: Lorem ipsum dolor sit amet, consectetur adipiscing elit + - title: Feature B + details: Lorem ipsum dolor sit amet, consectetur adipiscing elit + - title: Feature C + details: Lorem ipsum dolor sit amet, consectetur adipiscing elit +--- diff --git a/docs/src/use/使用说明.md b/docs/src/use/使用说明.md new file mode 100644 index 00000000..992a46e7 --- /dev/null +++ b/docs/src/use/使用说明.md @@ -0,0 +1,171 @@ +# API + +## 与 AutoBangumi 数据相关的 API + +### `api/v1/log` + +查看日志 + +```bash +curl -X GET http://ab_host:7892/api/v1/log +``` + +### `api/v1/data` + +获得当前 AB 中的存储信息 + +```bash +curl --request GET -sL \ + --url 'http://ab_host:7892/api/v1/data'\ +``` + +### `api/v1/resetRule` + +重置 AB 的数据,程序会在下一轮检索中重新添加 RSS 订阅信息。 + +```bash +curl --request GET -sL \ + --url 'http://ab_host:7892/api/v1/resetRule'\ +``` + +### `api/v1/removeRule/{name}` + +删除规则 + +```bash +curl --request GET -sL \ + --url 'http://ab_host:7892/api/v1/removeRule/{name}'\ +``` + +## 订阅相关的 API + +如果番剧还在更新,请使用 subscribe 来订阅,如果番剧已经完结,请使用 collection 来下载。 + +### `api/v1/subscribe` + +添加全集订阅 + +```bash +curl --request POST -sL \ + --url 'http://host:7892/api/v1/subscribe'\ + --data '{"rss_link":"link"}'\ + --header 'Content-Type: application/json' +``` + +### `api/v1/collection/` + +```bash +curl --request POST -sL \ + --url 'http://host:7892/api/v1/collection/'\ + --data '{"rss_link":"link"}'\ + --header 'Content-Type: application/json' +``` + +# 环境变量说明 + +## 注意 + +环境变量相关配置在 `2.6` 以后的版本中已经移除,现在使用 `config.json` 来配置系统设置。 + +## 环境列表 + +| 环境变量 | 作用 | 参数 | +| ------------------------ | ---------------------------------------------------- | -------------------- | +| `TZ` | 时区 | `Asia/Shanghai` | +| `AB_INTERVAL_TIME` | 间隔时间 | `7200` | +| `AB_RENAME_FREQ` | 在一个运行周期内重命名频率 | `20` | +| `AB_DOWNLOADER_HOST` | qBittorrent 的地址和端口号 | `localhost:8080` | +| `AB_DOWNLOADER_USERNAME` | qBittorrent 的用户名 | `admin` | +| `AB_DOWNLOADER_PASSWORD` | qBittorrent 的密码 | `adminadmin` | +| `AB_METHOD` | 重命名方法 `normal` 保留字幕组信息, `pn` 为纯净模式 | `pn` | +| `AB_GROUP_TAG` | 是否在下载规则中添加组名 | `False` | +| `AB_DOWNLOAD_PATH` | qBittorrent 中的下载路径 | `/downloads/Bangumi` | +| `AB_RSS` | RSS 订阅地址 | 必填项 | +| `AB_ENABLE_TMDB` | 启动 TMDB 解析 | `False` | +| `AB_LANGUAGE` | 选择语言 | `zh` | +| `AB_NOT_CONTAIN` | 输入想要过滤的元素 | `720` | +| `AB_DEBUG_MODE` | 调试模式 | `False` | +| `AB_EP_COMPLETE` | 历史番剧下载 | `False` | +| `AB_REMOVE_BAD_BT` | 碰到无法重命名的合集等,自动删除种子 | `False` | +| `AB_WEBUI_PORT` | Web API | `7892 ` | +| `AB_HTTP_PROXY` | HTTP 代理 | `127.0.0.1:6352` | +| `AB_SOCKS` | SOCKS5 代理 | `HOST,PORT,USR,PWD` | +| `AB_RENAME` | RENAME 开关 | `True` | +| `AB_RSS_COLLECTOR` | RSS 解析器开关 | `True` | +| `AB_RESET_FOLDER` | 修复错误命名文件夹 | `False` | + +## 进阶参数说明 + +### 与 qBittorrent 连接 + +- `AB_DOWNLOADER_HOST`: qBittorrent 的地址和端口号,如果开启 HTTPS 请使用 `https://` 开头。 + +### 运行相关 + +`AB_INTERVAL_TIME`: 解析器的运行间隔时间,单位为秒,默认为 7200 秒,即两个小时检查一次 RSS 更新。 + +`AB_RENAME_FREQ`: 在一个运行周期内重命名频率,默认为 20,即 6 分钟运行一次。 + +### 文件路径以及重命名相关 + +`AB_METHOD`: 重命名方法 + +- `normal` 保留字幕组 +- `pn` 为纯净模式,不保留字幕组,不保留其他信息,只保留名称,会根据 `Season` 文件夹的名称重命名。 +- `advance` 为高级模式,基于文件夹名称重命名,不保留其他信息。 + - 源文件路径:`/downloads/Bangumi/约会大作战/Season 4/DATE A LIVE - 1.mp4` >> `/downloads/Bangumi/约会大作战/Season 1/约会大作战 S04E01.mp4` +- `none` 为空模式,不重命名。 + +`AB_ENABLE_TMDB`: 启动 TMDB 解析, 建议同时启用代理。 + +`AB_LANGUAGE`: TMDB 解析后选择语言,仅在 `TMDB` 开启时有效。 + +- `zh` 中文 +- `jp` 日语 + +### 下载和过滤相关 + +`AB_GROUP_TAG`: 是否在下载规则中添加组名,方便查看。开启后规则命名为 [组名]规则名,关闭后规则命名为 [规则名] + +`AB_NOT_CONTAIN`: 输入想要过滤的元素,如 720,1080,等。 + +- 不同的元素用 `|` 分隔,例如 `720|CHT` +- 可以使用正则表达式,但是需要注意,特殊符号需要转义,例如 `\(` 表示 `(`。 +- 这个选项建议填写:`720|\d+-\d+`,如果过滤选项添加过多,会影响到正常的 RSS 识别。对于番剧单独的自定义可以在 qBitorrent 中自定义。 + +`AB_EP_COMPLETE`: 历史番剧下载,开启后,将会下载已加入时之前的剧集。 + +`AB_REMOVE_BAD_BT`: 碰到无法重命名的合集等,自动删除种子 + +`AB_RESET_FOLDER`: 修复错误命名文件夹,如 S01 >> Season 1 + +### 网络代理相关 + +`AB_WEBUI_PORT`: HTTP API Port + +`AB_HTTP_PROXY`: 开启 HTTP 代理,填入 HTTP 代理服务器地址和端口号 + +`AB_SOCKS`:开启 SOCKS5 代理 + +- `HOST,PORT,USR,PWD` + +### 调试模式 + +`AB_DEBUG_MODE`: 调试模式 + +### 功能开关 + +`AB_RENAME`: RENAME 开关 + +`AB_RSS_COLLECTOR`: RSS 解析器开关 + +# 如何正确的使用 AutoBangumi 以及 qBittorrent + +## 如何使用 AB 重命名其他番剧 + +- 只需要在 QB 中将种子类型设置为 Bangumi 即可被 AB 识别并重命名。 + +## 以下操作不影响程序正常运行 + +- 在 QB 中更改自动下载规则,更改自动下载路径 +- 在 QB 中按照规范更改文件路径 diff --git a/docs/src/use/配置选项说明.md b/docs/src/use/配置选项说明.md new file mode 100644 index 00000000..4ea56461 --- /dev/null +++ b/docs/src/use/配置选项说明.md @@ -0,0 +1,147 @@ +# 配置选项说明 + +从 `2.6` 版本之后,AutoBangumi 使用 `config.json` 来配置系统设置。 +初次运行 AutoBangumi 时会自动生成 `config.json` 文件,如果需要修改配置,可以直接修改 `config.json` 文件,也可以在 Web 界面中修改。 + +## 升级 + +如果你是从 `2.5` 版本升级到 `2.6` 版本,AB 会自动迁移你的配置文件,在首次升级完成之后,修改环境变量将对 AB 运行不生效。 +后续配置修改请直接修改 `config.json` 文件,或者在 Web 界面中修改。 + +## 配置文件参数说明: + +### 程序运行参数 + +配置文件部分:`program` + +| 参数名 | 参数说明 | 参数类型 | WebUI 对应选项 | 默认值 | +|-------------|------------|----------|------------|------| +| |rss_time | RSS 检查时间间隔 | 以秒为单位的整数 | RSS 检查时间间隔 | 7200 | +| rename_time | 重命名检查时间间隔 | 以秒为单位的整数 | 重命名检查时间间隔 | 60 | +| webui_port | WebUI 端口 | 以整数为单位 | WebUI 端口 | 7892 | + +- `rss_time` 和 `rename_time` 两个参数的单位为秒,如果你需要设置为分钟,请自行转换为秒。 +- `rss_time` 为 RSS 检查时间间隔,如果你需要修改 RSS 检查时间间隔,请修改此参数。 +- `rename_time` 为重命名检查时间间隔,如果你需要修改重命名检查时间间隔,请修改此参数。 +- `webui_port` 为 WebUI 端口,如果你需要修改 WebUI 端口,请修改此参数。 + +### 下载器参数 + +配置文件部分:`downloader` + +| 参数名 | 参数说明 | 参数类型 | WebUI 对应选项 | 默认值 | +|----------|-------------|------|-------------|--------------------| +| type | 下载器类型 | 字符串 | 下载器类型 | qbittorrent | +| host | 下载器地址 | 字符串 | 下载器地址 | 172.17.0.1:8080 | +| username | 下载器用户名 | 字符串 | 下载器用户名 | admin | +| password | 下载器密码 | 字符串 | 下载器密码 | adminadmin | +| path | 下载器下载路径 | 字符串 | 下载器下载路径 | /downloads/Bangumi | +| ssl | 下载器是否使用 SSL | 布尔值 | 下载器是否使用 SSL | false | + +- `type` 为下载器类型,目前支持 `qbittorrent` 下载器,目前暂不支持修改。 +- `host` 为下载器地址。[下载器链接问题][1] +- `path` 为映射的下载器下载路径。[下载器路径问题][2] +- `ssl` 为下载器是否使用 SSL。 + +### RSS 解析器参数 + +配置文件部分:`rss_parser` + +| 参数名 | 参数说明 | 参数类型 | WebUI 对应选项 | 默认值 | +|-------------|----------------|------|----------------|---------------| +| enable | RSS 解析器是否启用 | 布尔值 | RSS 解析器是否启用 | true | +| type | RSS 解析器类型 | 字符串 | RSS 解析器类型 | mikan | +| token | RSS 解析器 Token | 字符串 | RSS 解析器 Token | token | +| custom_url | RSS 解析器自定义 URL | 字符串 | RSS 解析器自定义 URL | mikanime.tv | +| parser_type | RSS 解析器解析类型 | 字符串 | RSS 解析器解析类型 | parser | +| filter | RSS 解析器过滤器 | 数组 | 过滤器 | [720,\d+-\d+] | +| language | RSS 解析器语言 | 字符串 | RSS 解析器语言 | zh | + + +- `type` 为 RSS 解析器类型,目前支持 `mikan` 。 +- `token` 为蜜柑计划的 Token。[蜜柑计划 Token 获取][3] +- `custom_url` 为自定义蜜柑计划地址。[自定义反代地址][4] +- `parser_type` 为 **官方标题** 解析器解析类型,支持类型如下: + - `parser` 为正则表达式解析器,使用正则表达式解析标题。 + - `mikan` 为蜜柑计划解析器,使用蜜柑计划解析标题。 + - `tmdb` 为 TMDB 解析器,使用 TMDB 解析标题。 +- `filter` 为 RSS 解析器过滤器,过滤器为数组,数组中的每一项为一个过滤器,过滤器为正则表达式,如果标题匹配正则表达式,则不会下载。 +- `language` 为 RSS 解析器语言,目前支持 `zh` 、 `jp` 、 `en` 三种语言。 + +### 番剧管理参数 + +配置文件部分:`bangumi_manager` + +| 参数名 | 参数说明 | 参数类型 | WebUI 对应选项 | 默认值 | +|--------------------|-----------------|------|------------|-------| +| enable | 番剧管理是否启用 | 布尔值 | 番剧管理是否启用 | true | +| eps_complete | 是否补全当季番剧 | 布尔值 | 番剧补全 | false | +| rename_method | 重命名方式 | 字符串 | 重命名方式 | pn | +| group_tag | 是否在下载规则中添加番剧组标签 | 布尔值 | 番剧组标签 | false | +| remove_bad_torrent | 是否删除错误的种子 | 布尔值 | 种子删除 | false | + + +- `eps_complete` 为是否补全当季番剧,如果开启,则会补全当季番剧,如果关闭,则不会补全当季番剧。 +- `rename_method` 为重命名方式,目前支持: + - `pn` 为 `Torrent Title S0XE0X.mp4` 的方式。 + - `advance` 为 `Official Title S0XE0X.mp4` 的方式。 + - `none` 为不重命名。 +- `group_tag` 为是否在下载规则中添加番剧组标签,如果开启,则会在下载规则中添加番剧组标签。 +- `remove_bad_torrent` 为是否删除错误的种子,如果开启,则会删除错误的种子。 + +### 日志参数 + +配置文件部分:`log` + +| 参数名 | 参数说明 | 参数类型 | WebUI 对应选项 | 默认值 | +|--------------|----------|------|------------|-------| +| debug_enable | 是否启用调试模式 | 布尔值 | 调试模式 | false | + + +### 代理参数 + +配置文件部分:`proxy` + +| 参数名 | 参数说明 | 参数类型 | WebUI 对应选项 | 默认值 | +|----------|--------|------|------------|-------| +| enable | 是否启用代理 | 布尔值 | 代理 | false | +| type | 代理类型 | 字符串 | 代理类型 | http | +| host | 代理地址 | 字符串 | 代理地址 | +| port | 代理端口 | 整数 | 代理端口 | +| username | 代理用户名 | 字符串 | 代理用户名 | +| password | 代理密码 | 字符串 | 代理密码 | + + +- `type` 为代理类型,目前支持 `http` 、 `socks5` 两种类型。 +- `username` 与 `password` 仅支持 `socks5` 代理。 + + +### 通知参数 + +配置文件部分:`notification` + +| 参数名 | 参数说明 | 参数类型 | WebUI 对应选项 | 默认值 | +|---------|------------|------|------------|----------| +| enable | 是否启用通知 | 布尔值 | 通知 | false | +| type | 通知类型 | 字符串 | 通知类型 | telegram | +| token | 通知 Token | 字符串 | 通知 Token | +| chat_id | 通知 Chat ID | 字符串 | 通知 Chat ID | + + +- `type` 为通知类型,目前支持 `telegram` 、 `serverchan` 、 `bark`、 `wecom` 四种类型。 +- `token` 为通知 Token,目前支持 `telegram` 、 `serverchan` 、 `bark`、 `wecom` 四种类型。 +- `chat_id` 为通知 Chat ID,仅在使用 `telegram` 通知时需要填写。[Telegram Bot 获取 Chat ID][5] +- 使用`wecom`时,chat_id参数框填写自建推送的url地址,同时需要在服务端增加[图文消息][6]类型。[Wecom酱配置说明][7] + + + +[1]: https://github.com/EstrellaXD/Auto_Bangumi/wiki +[2]: https://github.com/EstrellaXD/Auto_Bangumi/wiki +[3]: https://github.com/EstrellaXD/Auto_Bangumi/wiki/部署说明/#开始前准备 +[4]: https://github.com/EstrellaXD/Auto_Bangumi/wiki +[5]: https://github.com/EstrellaXD/Auto_Bangumi/wiki +[6]: https://github.com/umbors/wecomchan-alifun +[7]: https://github.com/easychen/wecomchan + + +