From 7d8a60b0335136bb6ea72e54b90adc095e710941 Mon Sep 17 00:00:00 2001 From: yanyongyu Date: Thu, 2 Dec 2021 03:17:10 +0800 Subject: [PATCH] :construction_worker: update doc ci --- .github/release-drafter.yml | 2 +- .../{publish_bot.yml => publish-bot.yml} | 8 +- .github/workflows/release-draft.yml | 14 - .github/workflows/release-github.yml | 28 + ...lugin_docs.yml => release-plugin-docs.yml} | 15 +- .../workflows/{build_docs.yml => release.yml} | 26 +- .github/workflows/upload_docs.yml | 36 - .../{site_deploy.yml => website-deploy.yml} | 8 +- .gitignore | 1 + docs_build/README.rst | 41 +- docs_build/adapters/README.rst | 5 +- docs_build/drivers/README.rst | 5 +- nonebot/plugin/on.py | 8 +- package.json | 20 + .../nonebot/adapters/ding/bot.py | 2 +- .../nonebot/adapters/feishu/bot.py | 2 +- website/docs/advanced/README.md | 8 +- .../docs/advanced/developer/_category_.json | 4 - website/docs/advanced/export-and-require.md | 2 +- .../images/plugin_store_publish.png | Bin .../images/plugin_store_publish_2.png | Bin website/docs/advanced/overloaded-handlers.md | 2 +- website/docs/advanced/permission.md | 2 +- .../{developer => }/publish-plugin.md | 6 +- website/docs/advanced/runtime-hook.md | 2 +- website/docs/advanced/scheduler.md | 2 +- website/docs/api/README.md | 50 - website/docs/api/adapters/README.md | 574 ----- website/docs/api/adapters/ding.md | 329 --- website/docs/api/adapters/feishu.md | 244 --- website/docs/api/adapters/mirai.md | 1896 ----------------- website/docs/api/config.md | 306 --- website/docs/api/dependencies.md | 38 - website/docs/api/drivers/README.md | 529 ----- website/docs/api/drivers/aiohttp.md | 96 - website/docs/api/drivers/fastapi.md | 249 --- website/docs/api/drivers/quart.md | 144 -- website/docs/api/exception.md | 245 --- website/docs/api/handler.md | 96 - website/docs/api/log.md | 37 - website/docs/api/matcher.md | 584 ----- website/docs/api/message.md | 69 - website/docs/api/nonebot.md | 319 --- website/docs/api/permission.md | 138 -- website/docs/api/plugin.md | 1521 ------------- website/docs/api/rule.md | 267 --- website/docs/api/typing.md | 363 ---- website/docs/api/utils.md | 80 - website/docs/guide/{start => }/README.md | 8 +- .../guide/{start => }/basic-configuration.md | 2 +- website/docs/guide/coding/_category_.json | 4 - .../guide/{coding => }/creating-a-handler.md | 10 +- .../guide/{coding => }/creating-a-matcher.md | 28 +- .../guide/{coding => }/creating-a-plugin.md | 6 +- .../guide/{start => }/creating-a-project.md | 2 +- .../docs/guide/{coding => }/end-or-start.md | 0 website/docs/guide/feishu-guide.md | 1 - .../docs/guide/{start => }/getting-started.md | 2 +- .../docs/guide/{start => }/installation.md | 4 +- .../guide/{coding => }/loading-a-plugin.md | 10 +- website/docs/guide/mirai-guide.md | 8 +- website/docs/guide/start/_category_.json | 4 - website/sidebars.js | 60 +- website/yarn.lock => yarn.lock | 63 +- 64 files changed, 257 insertions(+), 8378 deletions(-) rename .github/workflows/{publish_bot.yml => publish-bot.yml} (68%) delete mode 100644 .github/workflows/release-draft.yml create mode 100644 .github/workflows/release-github.yml rename .github/workflows/{nonebot_plugin_docs.yml => release-plugin-docs.yml} (68%) rename .github/workflows/{build_docs.yml => release.yml} (51%) delete mode 100644 .github/workflows/upload_docs.yml rename .github/workflows/{site_deploy.yml => website-deploy.yml} (91%) create mode 100644 package.json delete mode 100644 website/docs/advanced/developer/_category_.json rename website/docs/advanced/{developer => }/images/plugin_store_publish.png (100%) rename website/docs/advanced/{developer => }/images/plugin_store_publish_2.png (100%) rename website/docs/advanced/{developer => }/publish-plugin.md (98%) delete mode 100644 website/docs/api/README.md delete mode 100644 website/docs/api/adapters/README.md delete mode 100644 website/docs/api/adapters/ding.md delete mode 100644 website/docs/api/adapters/feishu.md delete mode 100644 website/docs/api/adapters/mirai.md delete mode 100644 website/docs/api/config.md delete mode 100644 website/docs/api/dependencies.md delete mode 100644 website/docs/api/drivers/README.md delete mode 100644 website/docs/api/drivers/aiohttp.md delete mode 100644 website/docs/api/drivers/fastapi.md delete mode 100644 website/docs/api/drivers/quart.md delete mode 100644 website/docs/api/exception.md delete mode 100644 website/docs/api/handler.md delete mode 100644 website/docs/api/log.md delete mode 100644 website/docs/api/matcher.md delete mode 100644 website/docs/api/message.md delete mode 100644 website/docs/api/nonebot.md delete mode 100644 website/docs/api/permission.md delete mode 100644 website/docs/api/plugin.md delete mode 100644 website/docs/api/rule.md delete mode 100644 website/docs/api/typing.md delete mode 100644 website/docs/api/utils.md rename website/docs/guide/{start => }/README.md (89%) rename website/docs/guide/{start => }/basic-configuration.md (99%) delete mode 100644 website/docs/guide/coding/_category_.json rename website/docs/guide/{coding => }/creating-a-handler.md (92%) rename website/docs/guide/{coding => }/creating-a-matcher.md (88%) rename website/docs/guide/{coding => }/creating-a-plugin.md (98%) rename website/docs/guide/{start => }/creating-a-project.md (98%) rename website/docs/guide/{coding => }/end-or-start.md (100%) rename website/docs/guide/{start => }/getting-started.md (99%) rename website/docs/guide/{start => }/installation.md (97%) rename website/docs/guide/{coding => }/loading-a-plugin.md (97%) delete mode 100644 website/docs/guide/start/_category_.json rename website/yarn.lock => yarn.lock (99%) diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index b09146ee..29ddb22f 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -1,4 +1,4 @@ -name-template: 'v$RESOLVED_VERSION 🌈' +name-template: 'Release v$RESOLVED_VERSION 🌈' tag-template: 'v$RESOLVED_VERSION' categories: - title: '💥 Breaking Changes' diff --git a/.github/workflows/publish_bot.yml b/.github/workflows/publish-bot.yml similarity index 68% rename from .github/workflows/publish_bot.yml rename to .github/workflows/publish-bot.yml index 542ca6d2..47d21ab9 100644 --- a/.github/workflows/publish_bot.yml +++ b/.github/workflows/publish-bot.yml @@ -1,4 +1,4 @@ -name: 'NoneBot2 Publish Bot' +name: NoneBot2 Publish Bot on: push: @@ -22,6 +22,6 @@ jobs: with: token: ${{ secrets.GH_TOKEN }} base: master - plugin_path: docs/.vuepress/public/plugins.json - bot_path: docs/.vuepress/public/bots.json - adapter_path: docs/.vuepress/public/adapters.json + plugin_path: website/static/plugins.json + bot_path: website/static/bots.json + adapter_path: website/static/adapters.json diff --git a/.github/workflows/release-draft.yml b/.github/workflows/release-draft.yml deleted file mode 100644 index 17fdb961..00000000 --- a/.github/workflows/release-draft.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: Release Drafter - -on: - push: - branches: - - master - -jobs: - update_release_draft: - runs-on: ubuntu-latest - steps: - - uses: release-drafter/release-drafter@v5 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release-github.yml b/.github/workflows/release-github.yml new file mode 100644 index 00000000..32ac17ec --- /dev/null +++ b/.github/workflows/release-github.yml @@ -0,0 +1,28 @@ +name: Release Drafter + +on: + push: + branches: + - master + tags: + - v* + +jobs: + update-release-draft: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - uses: release-drafter/release-drafter@v5 + if: github.ref == 'refs/heads/master' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - uses: release-drafter/release-drafter@v5 + if: startsWith(github.ref, 'refs/tags/') + with: + name: Release v${GITHUB_REF#refs/tags/} 🌈 + tag: ${GITHUB_REF#refs/tags/} + publish: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/nonebot_plugin_docs.yml b/.github/workflows/release-plugin-docs.yml similarity index 68% rename from .github/workflows/nonebot_plugin_docs.yml rename to .github/workflows/release-plugin-docs.yml index 032d4ad5..518804b2 100644 --- a/.github/workflows/nonebot_plugin_docs.yml +++ b/.github/workflows/release-plugin-docs.yml @@ -14,12 +14,7 @@ jobs: - name: Setup Node uses: actions/setup-node@v1 with: - node-version: '12' - - run: npm ci - - name: Build Docs - env: - VUEPRESS_BASE: '/docs/' - run: npx vuepress build docs --dest packages/nonebot-plugin-docs/nonebot_plugin_docs/dist + node-version: '16' - name: Set up Python uses: actions/setup-python@v2 @@ -29,10 +24,14 @@ jobs: - uses: Gr1N/setup-poetry@v4 + - name: Build Docs + run: | + yarn install + yarn build:plugin --out-dir ./packages/nonebot-plugin-docs/nonebot_plugin_docs/dist + - name: Publish Package run: | - export NONEBOT_VERSION=`poetry version -s` cd packages/nonebot-plugin-docs/ - poetry version $NONEBOT_VERSION + poetry version $(poetry version -s) poetry build poetry publish -u ${{secrets.PYPI_USERNAME}} -p ${{secrets.PYPI_PASSWORD}} diff --git a/.github/workflows/build_docs.yml b/.github/workflows/release.yml similarity index 51% rename from .github/workflows/build_docs.yml rename to .github/workflows/release.yml index 2c47090a..3fd39030 100644 --- a/.github/workflows/build_docs.yml +++ b/.github/workflows/release.yml @@ -1,8 +1,7 @@ -name: Build API Doc +name: Release on: - pull_request: - types: [opened, synchronize, reopened] + workflow_dispatch: jobs: build: @@ -11,7 +10,7 @@ jobs: steps: - uses: actions/checkout@v2 with: - ref: ${{ github.event.pull_request.head.sha }} + ref: master - name: Set up Python uses: actions/setup-python@v2 @@ -34,9 +33,18 @@ jobs: run: poetry run sphinx-build -M markdown ./docs_build ./build - name: Copy Files - run: cp -r ./build/markdown/* ./docs/api/ + run: cp -r ./build/markdown/* ./website/docs/api/ - - uses: actions/upload-artifact@v2 - with: - name: docs - path: docs/ + - name: Archive Files + run: yarn archive $(poetry version -s) + + - name: Push Tag and Release to PyPI + run: | + git config user.name github-actions + git config user.email github-actions@github.com + git add . + git commit -m ":bookmark: Release $(poetry version -s)" + git tag v$(poetry version -s) + git push --tags + poetry build + poetry publish -u ${{secrets.PYPI_USERNAME}} -p ${{secrets.PYPI_PASSWORD}} diff --git a/.github/workflows/upload_docs.yml b/.github/workflows/upload_docs.yml deleted file mode 100644 index 7c628645..00000000 --- a/.github/workflows/upload_docs.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: Upload API Doc - -on: - workflow_run: - workflows: ["Build API Doc"] - types: - - completed - -jobs: - upload: - runs-on: ubuntu-latest - if: ${{ github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success' }} - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ github.event.workflow_run.head_sha }} - token: ${{ secrets.GH_TOKEN }} - - - uses: dawidd6/action-download-artifact@v2 - with: - workflow: ${{ github.event.workflow_run.workflow_id }} - run_id: ${{ github.event.workflow_run.id }} - name: docs - path: docs/ - - - env: - REF: ${{ github.event.workflow_run.head_branch }} - PR_REPO: ${{ github.event.workflow_run.head_repository.full_name }} - PR_USER: ${{ github.event.workflow_run.head_repository.owner.login }} - run: | - git config user.name $PR_USER - git config user.email $PR_USER@users.noreply.github.com - git add . - git diff-index --quiet HEAD || git commit -m ":memo: update api docs" - git remote add target https://github.com/$PR_REPO.git - git push target HEAD:$REF diff --git a/.github/workflows/site_deploy.yml b/.github/workflows/website-deploy.yml similarity index 91% rename from .github/workflows/site_deploy.yml rename to .github/workflows/website-deploy.yml index f44cb7eb..f77013bf 100644 --- a/.github/workflows/site_deploy.yml +++ b/.github/workflows/website-deploy.yml @@ -2,7 +2,7 @@ name: Build Upload Site on: push: - pull_request_target: + pull_request: jobs: publish: @@ -22,11 +22,10 @@ jobs: run: echo "::set-output name=dir::$(yarn cache dir)" - name: Cache Packages - id: yarn-cache uses: actions/cache@v2 with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/package-lock.json') }} + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- @@ -44,7 +43,6 @@ jobs: echo "DEPLOY_NAME=${{ env.BRANCH_NAME }}" >> $GITHUB_ENV echo "PRODUCTION=${{ env.BRANCH_NAME == 'master' }}" >> $GITHUB_ENV - - name: Get Deploy Name if: github.event_name != 'push' run: | @@ -54,7 +52,7 @@ jobs: - name: Deploy to Netlify uses: nwtgck/actions-netlify@v1.1 with: - publish-dir: './docs/.vuepress/dist' + publish-dir: './website/build' production-deploy: ${{ env.PRODUCTION }} github-token: ${{ secrets.GITHUB_TOKEN }} deploy-message: 'Deploy ${{ env.DEPLOY_NAME }}@${{ github.sha }}' diff --git a/.gitignore b/.gitignore index 1a98e4e6..e8413f88 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ dev docs_build/_build !tests/.env .docusaurus +website/docs/api/**/*.md # Created by https://www.toptal.com/developers/gitignore/api/python,node,visualstudiocode,jetbrains,macos,windows,linux # Edit at https://www.toptal.com/developers/gitignore?templates=python,node,visualstudiocode,jetbrains,macos,windows,linux diff --git a/docs_build/README.rst b/docs_build/README.rst index 8046fd08..ca5d7948 100644 --- a/docs_build/README.rst +++ b/docs_build/README.rst @@ -7,24 +7,23 @@ NoneBot Api Reference ===================== :模块索引: - - `nonebot `_ - - `nonebot.config `_ - - `nonebot.plugin `_ - - `nonebot.message `_ - - `nonebot.matcher `_ - - `nonebot.handler `_ - - `nonebot.rule `_ - - `nonebot.permission `_ - - `nonebot.log `_ - - `nonebot.utils `_ - - `nonebot.typing `_ - - `nonebot.exception `_ - - `nonebot.drivers `_ - - `nonebot.drivers.fastapi `_ - - `nonebot.drivers.quart `_ - - `nonebot.drivers.aiohttp `_ - - `nonebot.adapters `_ - - `nonebot.adapters.cqhttp `_ - - `nonebot.adapters.ding `_ - - `nonebot.adapters.mirai `_ - - `nonebot.adapters.feishu `_ + - `nonebot <./nonebot.md>`_ + - `nonebot.config <./config.md>`_ + - `nonebot.plugin <./plugin.md>`_ + - `nonebot.message <./message.md>`_ + - `nonebot.matcher <./matcher.md>`_ + - `nonebot.handler <./handler.md>`_ + - `nonebot.rule <./rule.md>`_ + - `nonebot.permission <./permission.md>`_ + - `nonebot.log <./log.md>`_ + - `nonebot.utils <./utils.md>`_ + - `nonebot.typing <./typing.md>`_ + - `nonebot.exception <./exception.md>`_ + - `nonebot.drivers <./drivers/README.md>`_ + - `nonebot.drivers.fastapi <./drivers/fastapi.md>`_ + - `nonebot.drivers.quart <./drivers/quart.md>`_ + - `nonebot.drivers.aiohttp <./drivers/aiohttp.md>`_ + - `nonebot.adapters <./adapters/README.md>`_ + - `nonebot.adapters.ding <./adapters/ding.md>`_ + - `nonebot.adapters.mirai <./adapters/mirai.md>`_ + - `nonebot.adapters.feishu <./adapters/feishu.md>`_ diff --git a/docs_build/adapters/README.rst b/docs_build/adapters/README.rst index e570e2c2..79b58e61 100644 --- a/docs_build/adapters/README.rst +++ b/docs_build/adapters/README.rst @@ -1,4 +1,7 @@ - +\-\-\- +id: index +slug: /api/adapters/ +\-\-\- NoneBot.adapters 模块 ===================== diff --git a/docs_build/drivers/README.rst b/docs_build/drivers/README.rst index 397e2d65..2d190e18 100644 --- a/docs_build/drivers/README.rst +++ b/docs_build/drivers/README.rst @@ -1,4 +1,7 @@ - +\-\-\- +id: index +slug: /api/drivers/ +\-\-\- NoneBot.drivers 模块 ===================== diff --git a/nonebot/plugin/on.py b/nonebot/plugin/on.py index a60d45d5..ca7bafef 100644 --- a/nonebot/plugin/on.py +++ b/nonebot/plugin/on.py @@ -387,7 +387,7 @@ def on_command( 注册一个消息事件响应器,并且当消息以指定命令开头时响应。 - 命令匹配规则参考: `命令形式匹配 `_ + 命令匹配规则参考: `命令形式匹配 `_ :参数: @@ -499,7 +499,7 @@ def on_regex( 注册一个消息事件响应器,并且当消息匹配正则表达式时响应。 - 命令匹配规则参考: `正则匹配 `_ + 命令匹配规则参考: `正则匹配 `_ :参数: @@ -851,7 +851,7 @@ class MatcherGroup: 注册一个消息事件响应器,并且当消息以指定命令开头时响应。 - 命令匹配规则参考: `命令形式匹配 `_ + 命令匹配规则参考: `命令形式匹配 `_ :参数: @@ -928,7 +928,7 @@ class MatcherGroup: 注册一个消息事件响应器,并且当消息匹配正则表达式时响应。 - 命令匹配规则参考: `正则匹配 `_ + 命令匹配规则参考: `正则匹配 `_ :参数: diff --git a/package.json b/package.json new file mode 100644 index 00000000..c6635c8b --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "name": "root", + "private": true, + "workspaces": [ + "website" + ], + "scripts": { + "archive": "yarn workspace nonebot docusaurus docs:version", + "build": "yarn workspace nonebot build", + "build:plugin": "cross-env BASE_URL='/docs/' yarn workspace nonebot build", + "start": "yarn workspace nonebot start", + "prettier": "prettier --config ./.prettierrc --write \"./website/**/*.md\"" + }, + "devDependencies": { + "prettier": "^2.5.0" + }, + "dependencies": { + "docusaurus-preset-nonepress": "0.0.0-108" + } +} diff --git a/packages/nonebot-adapter-ding/nonebot/adapters/ding/bot.py b/packages/nonebot-adapter-ding/nonebot/adapters/ding/bot.py index df5af674..bfcab03f 100644 --- a/packages/nonebot-adapter-ding/nonebot/adapters/ding/bot.py +++ b/packages/nonebot-adapter-ding/nonebot/adapters/ding/bot.py @@ -37,7 +37,7 @@ SEND = "send" class Bot(BaseBot): """ - 钉钉 协议 Bot 适配。继承属性参考 `BaseBot <./#class-basebot>`_ 。 + 钉钉 协议 Bot 适配。继承属性参考 `BaseBot `_ 。 """ ding_config: DingConfig diff --git a/packages/nonebot-adapter-feishu/nonebot/adapters/feishu/bot.py b/packages/nonebot-adapter-feishu/nonebot/adapters/feishu/bot.py index 6fa3756c..98696bf9 100644 --- a/packages/nonebot-adapter-feishu/nonebot/adapters/feishu/bot.py +++ b/packages/nonebot-adapter-feishu/nonebot/adapters/feishu/bot.py @@ -151,7 +151,7 @@ def _handle_api_result( class Bot(BaseBot): """ - 飞书 协议 Bot 适配。继承属性参考 `BaseBot <./#class-basebot>`_ 。 + 飞书 协议 Bot 适配。继承属性参考 `BaseBot `_ 。 """ @property diff --git a/website/docs/advanced/README.md b/website/docs/advanced/README.md index e302594d..094a5367 100644 --- a/website/docs/advanced/README.md +++ b/website/docs/advanced/README.md @@ -1,12 +1,12 @@ --- sidebar_position: 1 -id: advanced +id: index slug: /advanced options: menu: weight: 10 - catogory: advanced + category: advanced --- # 深入 @@ -95,14 +95,14 @@ options: 关于`hook`的更多信息,可以查阅[这里](./runtime-hook.md) ::: -2. **Matcher**与**matcher**,在**指南**中,我们讲述了[如何注册事件响应器](../guide/creating-a-matcher),这里的事件响应器或者说 `Matcher` 并不是一个具体的实例 `instance`,而是一个具有特定属性的类 `class`。只有当 `Matcher` **响应事件**时,才会实例化为具体的 `instance`,也就是 `matcher`。`matcher` 可以认为是 `nonebot` 处理 `Event` 的基本单位,运行 `matcher` 是`nonebot`工作的主要内容。 +2. **Matcher**与**matcher**,在**指南**中,我们讲述了[如何注册事件响应器](../guide/creating-a-matcher.md),这里的事件响应器或者说 `Matcher` 并不是一个具体的实例 `instance`,而是一个具有特定属性的类 `class`。只有当 `Matcher` **响应事件**时,才会实例化为具体的 `instance`,也就是 `matcher`。`matcher` 可以认为是 `nonebot` 处理 `Event` 的基本单位,运行 `matcher` 是`nonebot`工作的主要内容。 3. **handler**,或者说**事件处理函数**, 它们可以认为是 `nonebot` 处理 `Event` 的最小单位。在不考虑 `hook` 的情况下,**运行 matcher 就是顺序运行 matcher.handlers**,这句话换种表达方式就是,`handler` 只有添加到 `matcher.handlers` 时,才可以参与到 `nonebot` 的工作中来。 ::: tip 如何让 `handler` 添加到 `matcher.handlers`? - 一方面,我们可以参照[这里](../guide/creating-a-handler)利用装饰器来添加;另一方面,我们在用 `on()` 或者 `on_*()` 注册事件响应器时,可以添加 `handlers=[handler1, handler2, ...]` 这样的关键词参数来添加。 + 一方面,我们可以参照[这里](../guide/creating-a-handler.md)利用装饰器来添加;另一方面,我们在用 `on()` 或者 `on_*()` 注册事件响应器时,可以添加 `handlers=[handler1, handler2, ...]` 这样的关键词参数来添加。 ::: #### 处理 Event diff --git a/website/docs/advanced/developer/_category_.json b/website/docs/advanced/developer/_category_.json deleted file mode 100644 index 0c774ade..00000000 --- a/website/docs/advanced/developer/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "发布", - "position": 1 -} diff --git a/website/docs/advanced/export-and-require.md b/website/docs/advanced/export-and-require.md index 83297333..5bb97852 100644 --- a/website/docs/advanced/export-and-require.md +++ b/website/docs/advanced/export-and-require.md @@ -4,7 +4,7 @@ sidebar_position: 5 options: menu: weight: 50 - catogory: advanced + category: advanced --- # 跨插件访问 diff --git a/website/docs/advanced/developer/images/plugin_store_publish.png b/website/docs/advanced/images/plugin_store_publish.png similarity index 100% rename from website/docs/advanced/developer/images/plugin_store_publish.png rename to website/docs/advanced/images/plugin_store_publish.png diff --git a/website/docs/advanced/developer/images/plugin_store_publish_2.png b/website/docs/advanced/images/plugin_store_publish_2.png similarity index 100% rename from website/docs/advanced/developer/images/plugin_store_publish_2.png rename to website/docs/advanced/images/plugin_store_publish_2.png diff --git a/website/docs/advanced/overloaded-handlers.md b/website/docs/advanced/overloaded-handlers.md index a56b6cbf..d30211c5 100644 --- a/website/docs/advanced/overloaded-handlers.md +++ b/website/docs/advanced/overloaded-handlers.md @@ -4,7 +4,7 @@ sidebar_position: 6 options: menu: weight: 60 - catogory: advanced + category: advanced --- # 事件处理函数重载 diff --git a/website/docs/advanced/permission.md b/website/docs/advanced/permission.md index 2faef928..f9d411ad 100644 --- a/website/docs/advanced/permission.md +++ b/website/docs/advanced/permission.md @@ -4,7 +4,7 @@ sidebar_position: 3 options: menu: weight: 30 - catogory: advanced + category: advanced --- # 权限控制 diff --git a/website/docs/advanced/developer/publish-plugin.md b/website/docs/advanced/publish-plugin.md similarity index 98% rename from website/docs/advanced/developer/publish-plugin.md rename to website/docs/advanced/publish-plugin.md index d0142570..9396a886 100644 --- a/website/docs/advanced/developer/publish-plugin.md +++ b/website/docs/advanced/publish-plugin.md @@ -1,10 +1,10 @@ --- -sidebar_position: 5 +sidebar_position: 7 options: menu: - weight: 110 - catogory: advanced + weight: 70 + category: advanced --- # 发布插件 diff --git a/website/docs/advanced/runtime-hook.md b/website/docs/advanced/runtime-hook.md index 949bfc2d..d6f1f271 100644 --- a/website/docs/advanced/runtime-hook.md +++ b/website/docs/advanced/runtime-hook.md @@ -4,7 +4,7 @@ sidebar_position: 4 options: menu: weight: 40 - catogory: advanced + category: advanced --- # 钩子函数 diff --git a/website/docs/advanced/scheduler.md b/website/docs/advanced/scheduler.md index d4b55eb7..8caf30b6 100644 --- a/website/docs/advanced/scheduler.md +++ b/website/docs/advanced/scheduler.md @@ -4,7 +4,7 @@ sidebar_position: 2 options: menu: weight: 20 - catogory: advanced + category: advanced --- # 定时任务 diff --git a/website/docs/api/README.md b/website/docs/api/README.md deleted file mode 100644 index 72941d0f..00000000 --- a/website/docs/api/README.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -id: index -slug: /api/ ---- - -# NoneBot Api Reference - -- **模块索引** - - - [nonebot](nonebot.html) - - - [nonebot.config](config.html) - - - [nonebot.plugin](plugin.html) - - - [nonebot.message](message.html) - - - [nonebot.matcher](matcher.html) - - - [nonebot.handler](handler.html) - - - [nonebot.rule](rule.html) - - - [nonebot.permission](permission.html) - - - [nonebot.log](log.html) - - - [nonebot.utils](utils.html) - - - [nonebot.typing](typing.html) - - - [nonebot.exception](exception.html) - - - [nonebot.drivers](drivers/) - - - [nonebot.drivers.fastapi](drivers/fastapi.html) - - - [nonebot.drivers.quart](drivers/quart.html) - - - [nonebot.drivers.aiohttp](drivers/aiohttp.html) - - - [nonebot.adapters](adapters/) - - - [nonebot.adapters.cqhttp](adapters/cqhttp.html) - - - [nonebot.adapters.ding](adapters/ding.html) - - - [nonebot.adapters.mirai](adapters/mirai.html) - - - [nonebot.adapters.feishu](adapters/feishu.html) diff --git a/website/docs/api/adapters/README.md b/website/docs/api/adapters/README.md deleted file mode 100644 index 59fcfe10..00000000 --- a/website/docs/api/adapters/README.md +++ /dev/null @@ -1,574 +0,0 @@ -# NoneBot.adapters 模块 - -## 协议适配基类 - -各协议请继承以下基类,并使用 `driver.register_adapter` 注册适配器 - - -## _class_ `Bot` - -基类:`abc.ABC` - -Bot 基类。用于处理上报消息,并提供 API 调用接口。 - - -### `driver` - -Driver 对象 - - -### `config` - -Config 配置对象 - - -### `_calling_api_hook` - - -* **类型** - - `Set[T_CallingAPIHook]` - - - -* **说明** - - call_api 时执行的函数 - - - -### `_called_api_hook` - - -* **类型** - - `Set[T_CalledAPIHook]` - - - -* **说明** - - call_api 后执行的函数 - - - -### `__init__(self_id, request)` - - -* **参数** - - - * `self_id: str`: 机器人 ID - - - * `request: HTTPConnection`: request 连接对象 - - - -### `self_id` - -机器人 ID - - -### `request` - -连接信息 - - -### _abstract property_ `type` - -Adapter 类型 - - -### _classmethod_ `register(driver, config, **kwargs)` - - -* **说明** - - `register` 方法会在 `driver.register_adapter` 时被调用,用于初始化相关配置 - - - -### _abstract async classmethod_ `check_permission(driver, request)` - - -* **说明** - - 检查连接请求是否合法的函数,如果合法则返回当前连接 `唯一标识符`,通常为机器人 ID;如果不合法则抛出 `RequestDenied` 异常。 - - - -* **参数** - - - * `driver: Driver`: Driver 对象 - - - * `request: HTTPConnection`: request 请求详情 - - - -* **返回** - - - * `Optional[str]`: 连接唯一标识符,`None` 代表连接不合法 - - - * `Optional[HTTPResponse]`: HTTP 上报响应 - - - -### _abstract async_ `handle_message(message)` - - -* **说明** - - 处理上报消息的函数,转换为 `Event` 事件后调用 `nonebot.message.handle_event` 进一步处理事件。 - - - -* **参数** - - - * `message: bytes`: 收到的上报消息 - - - -### _abstract async_ `_call_api(api, **data)` - - -* **说明** - - `adapter` 实际调用 api 的逻辑实现函数,实现该方法以调用 api。 - - - -* **参数** - - - * `api: str`: API 名称 - - - * `**data`: API 数据 - - - -### _async_ `call_api(api, **data)` - - -* **说明** - - 调用机器人 API 接口,可以通过该函数或直接通过 bot 属性进行调用 - - - -* **参数** - - - * `api: str`: API 名称 - - - * `**data`: API 数据 - - - -* **示例** - - -```python -await bot.call_api("send_msg", message="hello world") -await bot.send_msg(message="hello world") -``` - - -### _abstract async_ `send(event, message, **kwargs)` - - -* **说明** - - 调用机器人基础发送消息接口 - - - -* **参数** - - - * `event: Event`: 上报事件 - - - * `message: Union[str, Message, MessageSegment]`: 要发送的消息 - - - * `**kwargs` - - - -### _classmethod_ `on_calling_api(func)` - - -* **说明** - - 调用 api 预处理。 - - - -* **参数** - - - * `bot: Bot`: 当前 bot 对象 - - - * `api: str`: 调用的 api 名称 - - - * `data: Dict[str, Any]`: api 调用的参数字典 - - - -### _classmethod_ `on_called_api(func)` - - -* **说明** - - 调用 api 后处理。 - - - -* **参数** - - - * `bot: Bot`: 当前 bot 对象 - - - * `exception: Optional[Exception]`: 调用 api 时发生的错误 - - - * `api: str`: 调用的 api 名称 - - - * `data: Dict[str, Any]`: api 调用的参数字典 - - - * `result: Any`: api 调用的返回 - - - -## _class_ `MessageSegment` - -基类:`Mapping`, `abc.ABC`, `Generic`[`nonebot.adapters._message.TM`] - -消息段基类 - - -### `type` - - -* 类型: `str` - - -* 说明: 消息段类型 - - -### `data` - - -* 类型: `Dict[str, Union[str, list]]` - - -* 说明: 消息段数据 - - -## _class_ `Message` - -基类:`List`[`nonebot.adapters._message.TMS`], `abc.ABC` - -消息数组 - - -### `__init__(message=None, *args, **kwargs)` - - -* **参数** - - - * `message: Union[str, list, dict, MessageSegment, Message, Any]`: 消息内容 - - - -### _classmethod_ `template(format_string)` - - -* **说明** - - 根据创建消息模板, 用法和 `str.format` 大致相同, 但是可以输出消息对象, 并且支持以 `Message` 对象作为消息模板 - 并且提供了拓展的格式化控制符, 可以用适用于该消息类型的 `MessageSegment` 的工厂方法创建消息 - - - -* **示例** - - -```python ->>> Message.template("{} {}").format("hello", "world") # 基础演示 -Message(MessageSegment(type='text', data={'text': 'hello world'})) ->>> Message.template("{} {}").format(MessageSegment.image("file///..."), "world") # 支持消息段等对象 -Message(MessageSegment(type='image', data={'file': 'file///...'}), MessageSegment(type='text', data={'text': 'world'})) ->>> Message.template( # 支持以Message对象作为消息模板 -... MessageSegment.text('test {event.user_id}') + MessageSegment.face(233) + -... MessageSegment.text('test {event.message}')).format(event={'user_id':123456, 'message':'hello world'}) -Message(MessageSegment(type='text', data={'text': 'test 123456'}), - MessageSegment(type='face', data={'face': 233}), - MessageSegment(type='text', data={'text': 'test hello world'})) ->>> Message.template("{link:image}").format(link='https://...') # 支持拓展格式化控制符 -Message(MessageSegment(type='image', data={'file': 'https://...'})) -``` - - -* **参数** - - - * `format_string: str`: 格式化字符串 - - - -* **返回** - - - * `MessageFormatter[TM]`: 消息格式化器 - - - -### `append(obj)` - - -* **说明** - - 添加一个消息段到消息数组末尾 - - - -* **参数** - - - * `obj: Union[str, MessageSegment]`: 要添加的消息段 - - - -### `extend(obj)` - - -* **说明** - - 拼接一个消息数组或多个消息段到消息数组末尾 - - - -* **参数** - - - * `obj: Union[Message, Iterable[MessageSegment]]`: 要添加的消息数组 - - - -### `extract_plain_text()` - - -* **说明** - - 提取消息内纯文本消息 - - - -## _class_ `Event` - -基类:`abc.ABC`, `pydantic.main.BaseModel` - -Event 基类。提供获取关键信息的方法,其余信息可直接获取。 - - -### _abstract_ `get_type()` - - -* **说明** - - 获取事件类型的方法,类型通常为 NoneBot 内置的四种类型。 - - - -* **返回** - - - * `Literal["message", "notice", "request", "meta_event"]` - - - * 其他自定义 `str` - - - -### _abstract_ `get_event_name()` - - -* **说明** - - 获取事件名称的方法。 - - - -* **返回** - - - * `str` - - - -### _abstract_ `get_event_description()` - - -* **说明** - - 获取事件描述的方法,通常为事件具体内容。 - - - -* **返回** - - - * `str` - - - -### `get_log_string()` - - -* **说明** - - 获取事件日志信息的方法,通常你不需要修改这个方法,只有当希望 NoneBot 隐藏该事件日志时,可以抛出 `NoLogException` 异常。 - - - -* **返回** - - - * `str` - - - -* **异常** - - - * `NoLogException` - - - -### _abstract_ `get_user_id()` - - -* **说明** - - 获取事件主体 id 的方法,通常是用户 id 。 - - - -* **返回** - - - * `str` - - - -### _abstract_ `get_session_id()` - - -* **说明** - - 获取会话 id 的方法,用于判断当前事件属于哪一个会话,通常是用户 id、群组 id 组合。 - - - -* **返回** - - - * `str` - - - -### _abstract_ `get_message()` - - -* **说明** - - 获取事件消息内容的方法。 - - - -* **返回** - - - * `Message` - - - -### `get_plaintext()` - - -* **说明** - - 获取消息纯文本的方法,通常不需要修改,默认通过 `get_message().extract_plain_text` 获取。 - - - -* **返回** - - - * `str` - - - -### _abstract_ `is_tome()` - - -* **说明** - - 获取事件是否与机器人有关的方法。 - - - -* **返回** - - - * `bool` - - - -## _class_ `MessageTemplate` - -基类:`string.Formatter`, `Generic`[`nonebot.adapters._template.TF`] - -消息模板格式化实现类 - - -### `__init__(template, factory=)` - - -* **说明** - - 创建一个模板 - - - -* **参数** - - - * `template: Union[str, Message]`: 模板 - - - * `factory: Union[str, Message]`: 消息构造类型,默认为 str - - - -### `format(*args, **kwargs)` - - -* **说明** - - 根据模板和参数生成消息对象 diff --git a/website/docs/api/adapters/ding.md b/website/docs/api/adapters/ding.md deleted file mode 100644 index 228c4a22..00000000 --- a/website/docs/api/adapters/ding.md +++ /dev/null @@ -1,329 +0,0 @@ -# NoneBot.adapters.ding 模块 - -## 钉钉群机器人 协议适配 - -协议详情请看: [钉钉文档](https://ding-doc.dingtalk.com/document#/org-dev-guide/elzz1p) - -# NoneBot.adapters.ding.config 模块 - - -## _class_ `Config` - -钉钉配置类 - - -* **配置项** - - - * `access_token` / `ding_access_token`: 钉钉令牌 - - - * `secret` / `ding_secret`: 钉钉 HTTP 上报数据签名口令 - - -# NoneBot.adapters.ding.exception 模块 - - -## _exception_ `DingAdapterException` - -基类:[`nonebot.exception.AdapterException`](../exception.md#nonebot.exception.AdapterException) - - -* **说明** - - 钉钉 Adapter 错误基类 - - - -## _exception_ `ActionFailed` - -基类:[`nonebot.exception.ActionFailed`](../exception.md#nonebot.exception.ActionFailed), `nonebot.adapters.ding.exception.DingAdapterException` - - -* **说明** - - API 请求返回错误信息。 - - - -* **参数** - - - * `errcode: Optional[int]`: 错误码 - - - * `errmsg: Optional[str]`: 错误信息 - - - -## _exception_ `NetworkError` - -基类:[`nonebot.exception.NetworkError`](../exception.md#nonebot.exception.NetworkError), `nonebot.adapters.ding.exception.DingAdapterException` - - -* **说明** - - 网络错误。 - - - -* **参数** - - - * `retcode: Optional[int]`: 错误码 - - - -## _exception_ `SessionExpired` - -基类:`nonebot.adapters.ding.exception.ApiNotAvailable`, `nonebot.adapters.ding.exception.DingAdapterException` - - -* **说明** - - 发消息的 session 已经过期。 - - -# NoneBot.adapters.ding.bot 模块 - - -## _class_ `Bot` - -基类:[`nonebot.adapters._bot.Bot`](README.md#nonebot.adapters._bot.Bot) - -钉钉 协议 Bot 适配。继承属性参考 [BaseBot](./#class-basebot) 。 - - -### _property_ `type` - - -* 返回: `"ding"` - - -### _async classmethod_ `check_permission(driver, request)` - - -* **说明** - - 钉钉协议鉴权。参考 [鉴权](https://ding-doc.dingtalk.com/doc#/serverapi2/elzz1p) - - - -### _async_ `call_api(api, event=None, **data)` - - -* **说明** - - 调用 钉钉 协议 API - - - -* **参数** - - - * `api: str`: API 名称 - - - * `event: Optional[MessageEvent]`: Event 对象 - - - * `**data: Any`: API 参数 - - - -* **返回** - - - * `Any`: API 调用返回数据 - - - -* **异常** - - - * `NetworkError`: 网络错误 - - - * `ActionFailed`: API 调用失败 - - - -### _async_ `send(event, message, at_sender=False, webhook=None, secret=None, **kwargs)` - - -* **说明** - - 根据 `event` 向触发事件的主体发送消息。 - - - -* **参数** - - - * `event: Event`: Event 对象 - - - * `message: Union[str, Message, MessageSegment]`: 要发送的消息 - - - * `at_sender: bool`: 是否 @ 事件主体 - - - * `webhook: Optional[str]`: 该条消息将调用的 webhook 地址。不传则将使用 sessionWebhook,若其也不存在,该条消息不发送,使用自定义 webhook 时注意你设置的安全方式,如加关键词,IP地址,加签等等。 - - - * `secret: Optional[str]`: 如果你使用自定义的 webhook 地址,推荐使用加签方式对消息进行验证,将 机器人安全设置页面,加签一栏下面显示的SEC开头的字符串 传入这个参数即可。 - - - * `**kwargs`: 覆盖默认参数 - - - -* **返回** - - - * `Any`: API 调用返回数据 - - - -* **异常** - - - * `ValueError`: 缺少 `user_id`, `group_id` - - - * `NetworkError`: 网络错误 - - - * `ActionFailed`: API 调用失败 - - -# NoneBot.adapters.ding.message 模块 - - -## _class_ `MessageSegment` - -基类:[`nonebot.adapters._message.MessageSegment`](README.md#nonebot.adapters._message.MessageSegment)[`Message`] - -钉钉 协议 MessageSegment 适配。具体方法参考协议消息段类型或源码。 - - -### _static_ `atAll()` - -@全体 - - -### _static_ `atMobiles(*mobileNumber)` - -@指定手机号人员 - - -### _static_ `atDingtalkIds(*dingtalkIds)` - -@指定 id,@ 默认会在消息段末尾。 -所以你可以在消息中使用 @{senderId} 占位,发送出去之后 @ 就会出现在占位的位置: -``python -message = MessageSegment.text(f"@{event.senderId},你好") -message += MessageSegment.atDingtalkIds(event.senderId) -`` - - -### _static_ `text(text)` - -发送 `text` 类型消息 - - -### _static_ `image(picURL)` - -发送 `image` 类型消息 - - -### _static_ `extension(dict_)` - -标记 text 文本的 extension 属性,需要与 text 消息段相加。 - - -### _static_ `code(code_language, code)` - -发送 code 消息段 - - -### _static_ `markdown(title, text)` - -发送 `markdown` 类型消息 - - -### _static_ `actionCardSingleBtn(title, text, singleTitle, singleURL)` - -发送 `actionCardSingleBtn` 类型消息 - - -### _static_ `actionCardMultiBtns(title, text, btns, hideAvatar=False, btnOrientation='1')` - -发送 `actionCardMultiBtn` 类型消息 - - -* **参数** - - - * `btnOrientation`: 0:按钮竖直排列 1:按钮横向排列 - - - * `btns`: `[{ "title": title, "actionURL": actionURL }, ...]` - - - -### _static_ `feedCard(links)` - -发送 `feedCard` 类型消息 - - -* **参数** - - - * `links`: `[{ "title": xxx, "messageURL": xxx, "picURL": xxx }, ...]` - - - -## _class_ `Message` - -基类:[`nonebot.adapters._message.Message`](README.md#nonebot.adapters._message.Message)[`nonebot.adapters.ding.message.MessageSegment`] - -钉钉 协议 Message 适配。 - -# NoneBot.adapters.ding.event 模块 - - -## _class_ `Event` - -基类:[`nonebot.adapters._event.Event`](README.md#nonebot.adapters._event.Event) - -钉钉协议事件。各事件字段参考 [钉钉文档](https://ding-doc.dingtalk.com/document#/org-dev-guide/elzz1p) - - -## _class_ `ConversationType` - -基类:`str`, `enum.Enum` - -An enumeration. - - -## _class_ `MessageEvent` - -基类:`nonebot.adapters.ding.event.Event` - -消息事件 - - -## _class_ `PrivateMessageEvent` - -基类:`nonebot.adapters.ding.event.MessageEvent` - -私聊消息事件 - - -## _class_ `GroupMessageEvent` - -基类:`nonebot.adapters.ding.event.MessageEvent` - -群消息事件 diff --git a/website/docs/api/adapters/feishu.md b/website/docs/api/adapters/feishu.md deleted file mode 100644 index d341539d..00000000 --- a/website/docs/api/adapters/feishu.md +++ /dev/null @@ -1,244 +0,0 @@ -# NoneBot.adapters.feishu 模块 - -# NoneBot.adapters.feishu.config 模块 - - -## _class_ `Config` - -飞书配置类 - - -* **配置项** - - - * `app_id` / `feishu_app_id`: 飞书开放平台后台“凭证与基础信息”处给出的 App ID - - - * `app_secret` / `feishu_app_secret`: 飞书开放平台后台“凭证与基础信息”处给出的 App Secret - - - * `encrypt_key` / `feishu_encrypt_key`: 飞书开放平台后台“事件订阅”处设置的 Encrypt Key - - - * `verification_token` / `feishu_verification_token`: 飞书开放平台后台“事件订阅”处设置的 Verification Token - - - * `tenant_access_token` / `feishu_tenant_access_token`: 请求飞书 API 后返回的租户密钥 - - - * `is_lark` / `feishu_is_lark`: 是否使用Lark(飞书海外版),默认为 false - - -# NoneBot.adapters.feishu.exception 模块 - - -## _exception_ `ActionFailed` - -基类:[`nonebot.exception.ActionFailed`](../exception.md#nonebot.exception.ActionFailed), `nonebot.adapters.feishu.exception.FeishuAdapterException` - - -* **说明** - - API 请求返回错误信息。 - - - -* **参数** - - - * `retcode: Optional[int]`: 错误码 - - - -## _exception_ `NetworkError` - -基类:[`nonebot.exception.NetworkError`](../exception.md#nonebot.exception.NetworkError), `nonebot.adapters.feishu.exception.FeishuAdapterException` - - -* **说明** - - 网络错误。 - - - -* **参数** - - - * `retcode: Optional[int]`: 错误码 - - -# NoneBot.adapters.feishu.bot 模块 - - -## `_check_at_me(bot, event)` - - -* **说明** - - 检查消息开头或结尾是否存在 @机器人,去除并赋值 `event.reply`, `event.to_me` - - - -* **参数** - - - * `bot: Bot`: Bot 对象 - - - * `event: Event`: Event 对象 - - - -## `_check_nickname(bot, event)` - - -* **说明** - - 检查消息开头是否存在昵称,去除并赋值 `event.to_me` - - - -* **参数** - - - * `bot: Bot`: Bot 对象 - - - * `event: Event`: Event 对象 - - - -## `_handle_api_result(result)` - - -* **说明** - - 处理 API 请求返回值。 - - - -* **参数** - - - * `result: Optional[Dict[str, Any]]`: API 返回数据 - - - -* **返回** - - - * `Any`: API 调用返回数据 - - - -* **异常** - - - * `ActionFailed`: API 调用失败 - - - -## _class_ `Bot` - -基类:[`nonebot.adapters._bot.Bot`](README.md#nonebot.adapters._bot.Bot) - -飞书 协议 Bot 适配。继承属性参考 [BaseBot](./#class-basebot) 。 - - -### _async_ `handle_message(message)` - - -* **说明** - - 处理事件并转换为 [Event](#class-event) - - - -### _async_ `call_api(api, **data)` - - -* **说明** - - 调用 飞书 协议 API - - - -* **参数** - - - * `api: str`: API 名称 - - - * `**data: Any`: API 参数 - - - -* **返回** - - - * `Any`: API 调用返回数据 - - - -* **异常** - - - * `NetworkError`: 网络错误 - - - * `ActionFailed`: API 调用失败 - - -# NoneBot.adapters.feishu.message 模块 - - -## _class_ `MessageSegment` - -基类:[`nonebot.adapters._message.MessageSegment`](README.md#nonebot.adapters._message.MessageSegment)[`Message`] - -飞书 协议 MessageSegment 适配。具体方法参考协议消息段类型或源码。 - - -## _class_ `Message` - -基类:[`nonebot.adapters._message.Message`](README.md#nonebot.adapters._message.Message)[`nonebot.adapters.feishu.message.MessageSegment`] - -飞书 协议 Message 适配。 - - -## _class_ `MessageSerializer` - -基类:`object` - -飞书 协议 Message 序列化器。 - - -## _class_ `MessageDeserializer` - -基类:`object` - -飞书 协议 Message 反序列化器。 - -# NoneBot.adapters.feishu.event 模块 - - -## _class_ `Event` - -基类:[`nonebot.adapters._event.Event`](README.md#nonebot.adapters._event.Event) - -飞书协议事件。各事件字段参考 [飞书文档](https://open.feishu.cn/document/ukTMukTMukTM/uYDNxYjL2QTM24iN0EjN/event-list) - - -## `get_event_model(event_name)` - - -* **说明** - - 根据事件名获取对应 `Event Model` 及 `FallBack Event Model` 列表 - - - -* **返回** - - - * `List[Type[Event]]` diff --git a/website/docs/api/adapters/mirai.md b/website/docs/api/adapters/mirai.md deleted file mode 100644 index ba855bb4..00000000 --- a/website/docs/api/adapters/mirai.md +++ /dev/null @@ -1,1896 +0,0 @@ -# NoneBot.adapters.mirai 模块 - -## Mirai-API-HTTP 协议适配 - -协议详情请看: [mirai-api-http 文档](https://github.com/project-mirai/mirai-api-http/tree/master/docs) - -::: tip -该Adapter目前仍然处在早期实验性阶段, 并未经过充分测试 - -如果你在使用过程中遇到了任何问题, 请前往 [Issue页面](https://github.com/nonebot/nonebot2/issues) 为我们提供反馈 -::: - -::: danger -Mirai-API-HTTP 的适配器以 [AGPLv3许可](https://opensource.org/licenses/AGPL-3.0) 单独开源 - -这意味着在使用该适配器时需要 **以该许可开源您的完整程序代码** -::: - -# NoneBot.adapters.mirai.config 模块 - - -## _class_ `Config` - -Mirai 配置类 - - -* **必填** - - - * `auth_key` / `mirai_auth_key`: mirai-api-http 的 auth_key - - - * `mirai_host`: mirai-api-http 的地址 - - - * `mirai_port`: mirai-api-http 的端口 - - -# NoneBot.adapters.mirai.bot 模块 - - -## _class_ `SessionManager` - -基类:`object` - -Bot会话管理器, 提供API主动调用接口 - - -### _async_ `post(path, *, params=None)` - - -* **说明** - - 以POST方式主动提交API请求 - - - -* **参数** - - - * `path: str`: 对应API路径 - - - * `params: Optional[Dict[str, Any]]`: 请求参数 (无需sessionKey) - - - -* **返回** - - - * `Dict[str, Any]`: API 返回值 - - - -### _async_ `request(path, *, params=None)` - - -* **说明** - - 以GET方式主动提交API请求 - - - -* **参数** - - - * `path: str`: 对应API路径 - - - * `params: Optional[Dict[str, Any]]`: 请求参数 (无需sessionKey) - - - -### _async_ `upload(path, *, params)` - - -* **说明** - - 以表单(`multipart/form-data`)形式主动提交API请求 - - - -* **参数** - - - * `path: str`: 对应API路径 - - - * `params: Dict[str, Any]`: 请求参数 (无需sessionKey) - - - -## _class_ `Bot` - -基类:[`nonebot.adapters._bot.Bot`](README.md#nonebot.adapters._bot.Bot) - -mirai-api-http 协议 Bot 适配。 - -::: warning -API中为了使代码更加整洁, 我们采用了与PEP8相符的命名规则取代Mirai原有的驼峰命名 - -部分字段可能与文档在符号上不一致 -::: - - -### _property_ `api` - -返回该Bot对象的会话管理实例以提供API主动调用 - - -### _async_ `call_api(api, **data)` - -::: danger -由于Mirai的HTTP API特殊性, 该API暂时无法实现 -::: - -::: tip -你可以使用 `MiraiBot.api` 中提供的调用方法来代替 -::: - - -### `send(event, message, at_sender=False)` - - -* **说明** - - 根据 `event` 向触发事件的主体发送信息 - - - -* **参数** - - - * `event: Event`: Event对象 - - - * `message: Union[MessageChain, MessageSegment, str]`: 要发送的消息 - - - * `at_sender: bool`: 是否 @ 事件主体 - - - -### `send_friend_message(target, message_chain)` - - -* **说明** - - 使用此方法向指定好友发送消息 - - - -* **参数** - - - * `target: int`: 发送消息目标好友的 QQ 号 - - - * `message_chain: MessageChain`: 消息链,是一个消息对象构成的数组 - - - -### `send_temp_message(qq, group, message_chain)` - - -* **说明** - - 使用此方法向临时会话对象发送消息 - - - -* **参数** - - - * `qq: int`: 临时会话对象 QQ 号 - - - * `group: int`: 临时会话群号 - - - * `message_chain: MessageChain`: 消息链,是一个消息对象构成的数组 - - - -### `send_group_message(group, message_chain, quote=None)` - - -* **说明** - - 使用此方法向指定群发送消息 - - - -* **参数** - - - * `group: int`: 发送消息目标群的群号 - - - * `message_chain: MessageChain`: 消息链,是一个消息对象构成的数组 - - - * `quote: Optional[int]`: 引用一条消息的 message_id 进行回复 - - - -### `recall(target)` - - -* **说明** - - 使用此方法撤回指定消息。对于bot发送的消息,有2分钟时间限制。对于撤回群聊中群员的消息,需要有相应权限 - - - -* **参数** - - - * `target: int`: 需要撤回的消息的message_id - - - -### `send_image_message(target, qq, group, urls)` - - -* **说明** - - 使用此方法向指定对象(群或好友)发送图片消息 - 除非需要通过此手段获取image_id,否则不推荐使用该接口 - - > 当qq和group同时存在时,表示发送临时会话图片,qq为临时会话对象QQ号,group为临时会话发起的群号 - - - -* **参数** - - - * `target: int`: 发送对象的QQ号或群号,可能存在歧义 - - - * `qq: int`: 发送对象的QQ号 - - - * `group: int`: 发送对象的群号 - - - * `urls: List[str]`: 是一个url字符串构成的数组 - - - -* **返回** - - - * `List[str]`: 一个包含图片imageId的数组 - - - -### `upload_image(type, img)` - - -* **说明** - - 使用此方法上传图片文件至服务器并返回Image_id - - - -* **参数** - - - * `type: str`: “friend” 或 “group” 或 “temp” - - - * `img: BytesIO`: 图片的BytesIO对象 - - - -### `upload_voice(type, voice)` - - -* **说明** - - 使用此方法上传语音文件至服务器并返回voice_id - - - -* **参数** - - - * `type: str`: 当前仅支持 “group” - - - * `voice: BytesIO`: 语音的BytesIO对象 - - - -### `fetch_message(count=10)` - - -* **说明** - - 使用此方法获取bot接收到的最老消息和最老各类事件 - (会从MiraiApiHttp消息记录中删除) - - - -* **参数** - - - * `count: int`: 获取消息和事件的数量 - - - -### `fetch_latest_message(count=10)` - - -* **说明** - - 使用此方法获取bot接收到的最新消息和最新各类事件 - (会从MiraiApiHttp消息记录中删除) - - - -* **参数** - - - * `count: int`: 获取消息和事件的数量 - - - -### `peek_message(count=10)` - - -* **说明** - - 使用此方法获取bot接收到的最老消息和最老各类事件 - (不会从MiraiApiHttp消息记录中删除) - - - -* **参数** - - - * `count: int`: 获取消息和事件的数量 - - - -### `peek_latest_message(count=10)` - - -* **说明** - - 使用此方法获取bot接收到的最新消息和最新各类事件 - (不会从MiraiApiHttp消息记录中删除) - - - -* **参数** - - - * `count: int`: 获取消息和事件的数量 - - - -### `messsage_from_id(id)` - - -* **说明** - - 通过messageId获取一条被缓存的消息 - 使用此方法获取bot接收到的消息和各类事件 - - - -* **参数** - - - * `id: int`: 获取消息的message_id - - - -### `count_message()` - - -* **说明** - - 使用此方法获取bot接收并缓存的消息总数,注意不包含被删除的 - - - -### `friend_list()` - - -* **说明** - - 使用此方法获取bot的好友列表 - - - -* **返回** - - - * `List[Dict[str, Any]]`: 返回的好友列表数据 - - - -### `group_list()` - - -* **说明** - - 使用此方法获取bot的群列表 - - - -* **返回** - - - * `List[Dict[str, Any]]`: 返回的群列表数据 - - - -### `member_list(target)` - - -* **说明** - - 使用此方法获取bot指定群种的成员列表 - - - -* **参数** - - - * `target: int`: 指定群的群号 - - - -* **返回** - - - * `List[Dict[str, Any]]`: 返回的群成员列表数据 - - - -### `mute(target, member_id, time)` - - -* **说明** - - 使用此方法指定群禁言指定群员(需要有相关权限) - - - -* **参数** - - - * `target: int`: 指定群的群号 - - - * `member_id: int`: 指定群员QQ号 - - - * `time: int`: 禁言时长,单位为秒,最多30天 - - - -### `unmute(target, member_id)` - - -* **说明** - - 使用此方法指定群解除群成员禁言(需要有相关权限) - - - -* **参数** - - - * `target: int`: 指定群的群号 - - - * `member_id: int`: 指定群员QQ号 - - - -### `kick(target, member_id, msg)` - - -* **说明** - - 使用此方法移除指定群成员(需要有相关权限) - - - -* **参数** - - - * `target: int`: 指定群的群号 - - - * `member_id: int`: 指定群员QQ号 - - - * `msg: str`: 信息 - - - -### `quit(target)` - - -* **说明** - - 使用此方法使Bot退出群聊 - - - -* **参数** - - - * `target: int`: 退出的群号 - - - -### `mute_all(target)` - - -* **说明** - - 使用此方法令指定群进行全体禁言(需要有相关权限) - - - -* **参数** - - - * `target: int`: 指定群的群号 - - - -### `unmute_all(target)` - - -* **说明** - - 使用此方法令指定群解除全体禁言(需要有相关权限) - - - -* **参数** - - - * `target: int`: 指定群的群号 - - - -### `group_config(target)` - - -* **说明** - - 使用此方法获取群设置 - - - -* **参数** - - - * `target: int`: 指定群的群号 - - - -* **返回** - - -```json -{ - "name": "群名称", - "announcement": "群公告", - "confessTalk": true, - "allowMemberInvite": true, - "autoApprove": true, - "anonymousChat": true -} -``` - - -### `modify_group_config(target, config)` - - -* **说明** - - 使用此方法修改群设置(需要有相关权限) - - - -* **参数** - - - * `target: int`: 指定群的群号 - - - * `config: Dict[str, Any]`: 群设置, 格式见 `group_config` 的返回值 - - - -### `member_info(target, member_id)` - - -* **说明** - - 使用此方法获取群员资料 - - - -* **参数** - - - * `target: int`: 指定群的群号 - - - * `member_id: int`: 群员QQ号 - - - -* **返回** - - -```json -{ - "name": "群名片", - "specialTitle": "群头衔" -} -``` - - -### `modify_member_info(target, member_id, info)` - - -* **说明** - - 使用此方法修改群员资料(需要有相关权限) - - - -* **参数** - - - * `target: int`: 指定群的群号 - - - * `member_id: int`: 群员QQ号 - - - * `info: Dict[str, Any]`: 群员资料, 格式见 `member_info` 的返回值 - - -# NoneBot.adapters.mirai.message 模块 - - -## _class_ `MessageType` - -基类:`str`, `enum.Enum` - -消息类型枚举类 - - -## _class_ `MessageSegment` - -基类:[`nonebot.adapters._message.MessageSegment`](README.md#nonebot.adapters._message.MessageSegment)[`MessageChain`] - -Mirai-API-HTTP 协议 MessageSegment 适配。具体方法参考 [mirai-api-http 消息类型](https://github.com/project-mirai/mirai-api-http/blob/master/docs/MessageType.md) - - -### `as_dict()` - -导出可以被正常json序列化的结构体 - - -### _classmethod_ `quote(id, group_id, sender_id, target_id, origin)` - - -* **说明** - - 生成回复引用消息段 - - - -* **参数** - - - * `id: int`: 被引用回复的原消息的message_id - - - * `group_id: int`: 被引用回复的原消息所接收的群号,当为好友消息时为0 - - - * `sender_id: int`: 被引用回复的原消息的发送者的QQ号 - - - * `target_id: int`: 被引用回复的原消息的接收者者的QQ号(或群号) - - - * `origin: MessageChain`: 被引用回复的原消息的消息链对象 - - - -### _classmethod_ `at(target)` - - -* **说明** - - @某个人 - - - -* **参数** - - - * `target: int`: 群员QQ号 - - - -### _classmethod_ `at_all()` - - -* **说明** - - @全体成员 - - - -### _classmethod_ `face(face_id=None, name=None)` - - -* **说明** - - 发送QQ表情 - - - -* **参数** - - - * `face_id: Optional[int]`: QQ表情编号,可选,优先高于name - - - * `name: Optional[str]`: QQ表情拼音,可选 - - - -### _classmethod_ `plain(text)` - - -* **说明** - - 纯文本消息 - - - -* **参数** - - - * `text: str`: 文字消息 - - - -### _classmethod_ `image(image_id=None, url=None, path=None)` - - -* **说明** - - 图片消息 - - - -* **参数** - - - * `image_id: Optional[str]`: 图片的image_id,群图片与好友图片格式不同。不为空时将忽略url属性 - - - * `url: Optional[str]`: 图片的URL,发送时可作网络图片的链接 - - - * `path: Optional[str]`: 图片的路径,发送本地图片 - - - -### _classmethod_ `flash_image(image_id=None, url=None, path=None)` - - -* **说明** - - 闪照消息 - - - -* **参数** - - 同 `image` - - - -### _classmethod_ `voice(voice_id=None, url=None, path=None)` - - -* **说明** - - 语音消息 - - - -* **参数** - - - * `voice_id: Optional[str]`: 语音的voice_id,不为空时将忽略url属性 - - - * `url: Optional[str]`: 语音的URL,发送时可作网络语音的链接 - - - * `path: Optional[str]`: 语音的路径,发送本地语音 - - - -### _classmethod_ `xml(xml)` - - -* **说明** - - XML消息 - - - -* **参数** - - - * `xml: str`: XML文本 - - - -### _classmethod_ `json(json)` - - -* **说明** - - Json消息 - - - -* **参数** - - - * `json: str`: Json文本 - - - -### _classmethod_ `app(content)` - - -* **说明** - - 应用程序消息 - - - -* **参数** - - - * `content: str`: 内容 - - - -### _classmethod_ `poke(name)` - - -* **说明** - - 戳一戳消息 - - - -* **参数** - - - * `name: str`: 戳一戳的类型 - - - * `Poke`: 戳一戳 - - - * `ShowLove`: 比心 - - - * `Like`: 点赞 - - - * `Heartbroken`: 心碎 - - - * `SixSixSix`: 666 - - - * `FangDaZhao`: 放大招 - - - -## _class_ `MessageChain` - -基类:[`nonebot.adapters._message.Message`](README.md#nonebot.adapters._message.Message)[`nonebot.adapters.mirai.message.MessageSegment`] - -Mirai 协议 Message 适配 - -由于Mirai协议的Message实现较为特殊, 故使用MessageChain命名 - - -### `export()` - -导出为可以被正常json序列化的数组 - - -### `extract_first(*type)` - - -* **说明** - - 弹出该消息链的第一个消息 - - - -* **参数** - - - * \*type: MessageType: 指定的消息类型, 当指定后如类型不匹配不弹出 - - -# NoneBot.adapters.mirai.utils 模块 - - -## _exception_ `ActionFailed` - -基类:[`nonebot.exception.ActionFailed`](../exception.md#nonebot.exception.ActionFailed) - - -* **说明** - - API 请求成功返回数据,但 API 操作失败。 - - - -## _exception_ `InvalidArgument` - -基类:[`nonebot.exception.AdapterException`](../exception.md#nonebot.exception.AdapterException) - - -* **说明** - - 调用API的参数出错 - - - -## `catch_network_error(function)` - - -* **说明** - - 捕捉函数抛出的httpx网络异常并释放 `NetworkError` 异常 - - 处理返回数据, 在code不为0时释放 `ActionFailed` 异常 - - -::: warning -此装饰器只支持使用了httpx的异步函数 -::: - - -## `argument_validation(function)` - - -* **说明** - - 通过函数签名中的类型注解来对传入参数进行运行时校验 - - 会在参数出错时释放 `InvalidArgument` 异常 - - -# NoneBot.adapters.mirai.event 模块 - -::: warning -事件中为了使代码更加整洁, 我们采用了与PEP8相符的命名规则取代Mirai原有的驼峰命名 - -部分字段可能与文档在符号上不一致 -::: - - -## _class_ `Event` - -基类:[`nonebot.adapters._event.Event`](README.md#nonebot.adapters._event.Event) - -mirai-api-http 协议事件,字段与 mirai-api-http 一致。各事件字段参考 [mirai-api-http 事件类型](https://github.com/project-mirai/mirai-api-http/blob/master/docs/EventType.md) - - -### _classmethod_ `new(data)` - -此事件类的工厂函数, 能够通过事件数据选择合适的子类进行序列化 - - -### `normalize_dict(**kwargs)` - -返回可以被json正常反序列化的结构体 - - -## _class_ `UserPermission` - -基类:`str`, `enum.Enum` - - -* **说明** - - 用户权限枚举类 - - - * `OWNER`: 群主 - - - * `ADMINISTRATOR`: 群管理 - - - * `MEMBER`: 普通群成员 - - - -## _class_ `MessageEvent` - -基类:`nonebot.adapters.mirai.event.base.Event` - -消息事件基类 - - -## _class_ `GroupMessage` - -基类:`nonebot.adapters.mirai.event.message.MessageEvent` - -群消息事件 - - -## _class_ `FriendMessage` - -基类:`nonebot.adapters.mirai.event.message.MessageEvent` - -好友消息事件 - - -## _class_ `TempMessage` - -基类:`nonebot.adapters.mirai.event.message.MessageEvent` - -临时会话消息事件 - - -## _class_ `NoticeEvent` - -基类:`nonebot.adapters.mirai.event.base.Event` - -通知事件基类 - - -## _class_ `MuteEvent` - -基类:`nonebot.adapters.mirai.event.notice.NoticeEvent` - -禁言类事件基类 - - -## _class_ `BotMuteEvent` - -基类:`nonebot.adapters.mirai.event.notice.MuteEvent` - -Bot被禁言 - - -## _class_ `BotUnmuteEvent` - -基类:`nonebot.adapters.mirai.event.notice.MuteEvent` - -Bot被取消禁言 - - -## _class_ `MemberMuteEvent` - -基类:`nonebot.adapters.mirai.event.notice.MuteEvent` - -群成员被禁言事件(该成员不是Bot) - - -## _class_ `MemberUnmuteEvent` - -基类:`nonebot.adapters.mirai.event.notice.MuteEvent` - -群成员被取消禁言事件(该成员不是Bot) - - -## _class_ `BotJoinGroupEvent` - -基类:`nonebot.adapters.mirai.event.notice.NoticeEvent` - -Bot加入了一个新群 - - -## _class_ `BotLeaveEventActive` - -基类:`nonebot.adapters.mirai.event.notice.BotJoinGroupEvent` - -Bot主动退出一个群 - - -## _class_ `BotLeaveEventKick` - -基类:`nonebot.adapters.mirai.event.notice.BotJoinGroupEvent` - -Bot被踢出一个群 - - -## _class_ `MemberJoinEvent` - -基类:`nonebot.adapters.mirai.event.notice.NoticeEvent` - -新人入群的事件 - - -## _class_ `MemberLeaveEventKick` - -基类:`nonebot.adapters.mirai.event.notice.MemberJoinEvent` - -成员被踢出群(该成员不是Bot) - - -## _class_ `MemberLeaveEventQuit` - -基类:`nonebot.adapters.mirai.event.notice.MemberJoinEvent` - -成员主动离群(该成员不是Bot) - - -## _class_ `FriendRecallEvent` - -基类:`nonebot.adapters.mirai.event.notice.NoticeEvent` - -好友消息撤回 - - -## _class_ `GroupRecallEvent` - -基类:`nonebot.adapters.mirai.event.notice.FriendRecallEvent` - -群消息撤回 - - -## _class_ `GroupStateChangeEvent` - -基类:`nonebot.adapters.mirai.event.notice.NoticeEvent` - -群变化事件基类 - - -## _class_ `GroupNameChangeEvent` - -基类:`nonebot.adapters.mirai.event.notice.GroupStateChangeEvent` - -某个群名改变 - - -## _class_ `GroupEntranceAnnouncementChangeEvent` - -基类:`nonebot.adapters.mirai.event.notice.GroupStateChangeEvent` - -某群入群公告改变 - - -## _class_ `GroupMuteAllEvent` - -基类:`nonebot.adapters.mirai.event.notice.GroupStateChangeEvent` - -全员禁言 - - -## _class_ `GroupAllowAnonymousChatEvent` - -基类:`nonebot.adapters.mirai.event.notice.GroupStateChangeEvent` - -匿名聊天 - - -## _class_ `GroupAllowConfessTalkEvent` - -基类:`nonebot.adapters.mirai.event.notice.GroupStateChangeEvent` - -坦白说 - - -## _class_ `GroupAllowMemberInviteEvent` - -基类:`nonebot.adapters.mirai.event.notice.GroupStateChangeEvent` - -允许群员邀请好友加群 - - -## _class_ `MemberStateChangeEvent` - -基类:`nonebot.adapters.mirai.event.notice.NoticeEvent` - -群成员变化事件基类 - - -## _class_ `MemberCardChangeEvent` - -基类:`nonebot.adapters.mirai.event.notice.MemberStateChangeEvent` - -群名片改动 - - -## _class_ `MemberSpecialTitleChangeEvent` - -基类:`nonebot.adapters.mirai.event.notice.MemberStateChangeEvent` - -群头衔改动(只有群主有操作限权) - - -## _class_ `BotGroupPermissionChangeEvent` - -基类:`nonebot.adapters.mirai.event.notice.MemberStateChangeEvent` - -Bot在群里的权限被改变 - - -## _class_ `MemberPermissionChangeEvent` - -基类:`nonebot.adapters.mirai.event.notice.MemberStateChangeEvent` - -成员权限改变的事件(该成员不是Bot) - - -## _class_ `RequestEvent` - -基类:`nonebot.adapters.mirai.event.base.Event` - -请求事件基类 - - -## _class_ `NewFriendRequestEvent` - -基类:`nonebot.adapters.mirai.event.request.RequestEvent` - -添加好友申请 - - -### _async_ `approve(bot)` - - -* **说明** - - 通过此人的好友申请 - - - -* **参数** - - - * `bot: Bot`: 当前的 `Bot` 对象 - - - -### _async_ `reject(bot, operate=1, message='')` - - -* **说明** - - 拒绝此人的好友申请 - - - -* **参数** - - - * `bot: Bot`: 当前的 `Bot` 对象 - - - * `operate: Literal[1, 2]`: 响应的操作类型 - - - * `1`: 拒绝添加好友 - - - * `2`: 拒绝添加好友并添加黑名单,不再接收该用户的好友申请 - - - * `message: str`: 回复的信息 - - - -## _class_ `MemberJoinRequestEvent` - -基类:`nonebot.adapters.mirai.event.request.RequestEvent` - -用户入群申请(Bot需要有管理员权限) - - -### _async_ `approve(bot)` - - -* **说明** - - 通过此人的加群申请 - - - -* **参数** - - - * `bot: Bot`: 当前的 `Bot` 对象 - - - -### _async_ `reject(bot, operate=1, message='')` - - -* **说明** - - 拒绝(忽略)此人的加群申请 - - - -* **参数** - - - * `bot: Bot`: 当前的 `Bot` 对象 - - - * `operate: Literal[1, 2, 3, 4]`: 响应的操作类型 - - - * `1`: 拒绝入群 - - - * `2`: 忽略请求 - - - * `3`: 拒绝入群并添加黑名单,不再接收该用户的入群申请 - - - * `4`: 忽略入群并添加黑名单,不再接收该用户的入群申请 - - - * `message: str`: 回复的信息 - - - -## _class_ `BotInvitedJoinGroupRequestEvent` - -基类:`nonebot.adapters.mirai.event.request.RequestEvent` - -Bot被邀请入群申请 - - -### _async_ `approve(bot)` - - -* **说明** - - 通过这份被邀请入群申请 - - - -* **参数** - - - * `bot: Bot`: 当前的 `Bot` 对象 - - - -### _async_ `reject(bot, message='')` - - -* **说明** - - 拒绝这份被邀请入群申请 - - - -* **参数** - - - * `bot: Bot`: 当前的 `Bot` 对象 - - - * `message: str`: 邀请消息 - - -# NoneBot.adapters.mirai.event.base 模块 - - -## _class_ `UserPermission` - -基类:`str`, `enum.Enum` - - -* **说明** - - 用户权限枚举类 - - - * `OWNER`: 群主 - - - * `ADMINISTRATOR`: 群管理 - - - * `MEMBER`: 普通群成员 - - - -## _class_ `NudgeSubjectKind` - -基类:`str`, `enum.Enum` - - -* **说明** - - 戳一戳类型枚举类 - - - * `Group`: 群 - - - * `Friend`: 好友 - - - -## _class_ `Event` - -基类:[`nonebot.adapters._event.Event`](README.md#nonebot.adapters._event.Event) - -mirai-api-http 协议事件,字段与 mirai-api-http 一致。各事件字段参考 [mirai-api-http 事件类型](https://github.com/project-mirai/mirai-api-http/blob/master/docs/EventType.md) - - -### _classmethod_ `new(data)` - -此事件类的工厂函数, 能够通过事件数据选择合适的子类进行序列化 - - -### `normalize_dict(**kwargs)` - -返回可以被json正常反序列化的结构体 - -# NoneBot.adapters.mirai.event.meta 模块 - - -## _class_ `MetaEvent` - -基类:`nonebot.adapters.mirai.event.base.Event` - -元事件基类 - - -## _class_ `BotOnlineEvent` - -基类:`nonebot.adapters.mirai.event.meta.MetaEvent` - -Bot登录成功 - - -## _class_ `BotOfflineEventActive` - -基类:`nonebot.adapters.mirai.event.meta.MetaEvent` - -Bot主动离线 - - -## _class_ `BotOfflineEventForce` - -基类:`nonebot.adapters.mirai.event.meta.MetaEvent` - -Bot被挤下线 - - -## _class_ `BotOfflineEventDropped` - -基类:`nonebot.adapters.mirai.event.meta.MetaEvent` - -Bot被服务器断开或因网络问题而掉线 - - -## _class_ `BotReloginEvent` - -基类:`nonebot.adapters.mirai.event.meta.MetaEvent` - -Bot主动重新登录 - -# NoneBot.adapters.mirai.event.message 模块 - - -## _class_ `MessageEvent` - -基类:`nonebot.adapters.mirai.event.base.Event` - -消息事件基类 - - -## _class_ `GroupMessage` - -基类:`nonebot.adapters.mirai.event.message.MessageEvent` - -群消息事件 - - -## _class_ `FriendMessage` - -基类:`nonebot.adapters.mirai.event.message.MessageEvent` - -好友消息事件 - - -## _class_ `TempMessage` - -基类:`nonebot.adapters.mirai.event.message.MessageEvent` - -临时会话消息事件 - -# NoneBot.adapters.mirai.event.notice 模块 - - -## _class_ `NoticeEvent` - -基类:`nonebot.adapters.mirai.event.base.Event` - -通知事件基类 - - -## _class_ `MuteEvent` - -基类:`nonebot.adapters.mirai.event.notice.NoticeEvent` - -禁言类事件基类 - - -## _class_ `BotMuteEvent` - -基类:`nonebot.adapters.mirai.event.notice.MuteEvent` - -Bot被禁言 - - -## _class_ `BotUnmuteEvent` - -基类:`nonebot.adapters.mirai.event.notice.MuteEvent` - -Bot被取消禁言 - - -## _class_ `MemberMuteEvent` - -基类:`nonebot.adapters.mirai.event.notice.MuteEvent` - -群成员被禁言事件(该成员不是Bot) - - -## _class_ `MemberUnmuteEvent` - -基类:`nonebot.adapters.mirai.event.notice.MuteEvent` - -群成员被取消禁言事件(该成员不是Bot) - - -## _class_ `BotJoinGroupEvent` - -基类:`nonebot.adapters.mirai.event.notice.NoticeEvent` - -Bot加入了一个新群 - - -## _class_ `BotLeaveEventActive` - -基类:`nonebot.adapters.mirai.event.notice.BotJoinGroupEvent` - -Bot主动退出一个群 - - -## _class_ `BotLeaveEventKick` - -基类:`nonebot.adapters.mirai.event.notice.BotJoinGroupEvent` - -Bot被踢出一个群 - - -## _class_ `MemberJoinEvent` - -基类:`nonebot.adapters.mirai.event.notice.NoticeEvent` - -新人入群的事件 - - -## _class_ `MemberLeaveEventKick` - -基类:`nonebot.adapters.mirai.event.notice.MemberJoinEvent` - -成员被踢出群(该成员不是Bot) - - -## _class_ `MemberLeaveEventQuit` - -基类:`nonebot.adapters.mirai.event.notice.MemberJoinEvent` - -成员主动离群(该成员不是Bot) - - -## _class_ `FriendRecallEvent` - -基类:`nonebot.adapters.mirai.event.notice.NoticeEvent` - -好友消息撤回 - - -## _class_ `GroupRecallEvent` - -基类:`nonebot.adapters.mirai.event.notice.FriendRecallEvent` - -群消息撤回 - - -## _class_ `GroupStateChangeEvent` - -基类:`nonebot.adapters.mirai.event.notice.NoticeEvent` - -群变化事件基类 - - -## _class_ `GroupNameChangeEvent` - -基类:`nonebot.adapters.mirai.event.notice.GroupStateChangeEvent` - -某个群名改变 - - -## _class_ `GroupEntranceAnnouncementChangeEvent` - -基类:`nonebot.adapters.mirai.event.notice.GroupStateChangeEvent` - -某群入群公告改变 - - -## _class_ `GroupMuteAllEvent` - -基类:`nonebot.adapters.mirai.event.notice.GroupStateChangeEvent` - -全员禁言 - - -## _class_ `GroupAllowAnonymousChatEvent` - -基类:`nonebot.adapters.mirai.event.notice.GroupStateChangeEvent` - -匿名聊天 - - -## _class_ `GroupAllowConfessTalkEvent` - -基类:`nonebot.adapters.mirai.event.notice.GroupStateChangeEvent` - -坦白说 - - -## _class_ `GroupAllowMemberInviteEvent` - -基类:`nonebot.adapters.mirai.event.notice.GroupStateChangeEvent` - -允许群员邀请好友加群 - - -## _class_ `MemberStateChangeEvent` - -基类:`nonebot.adapters.mirai.event.notice.NoticeEvent` - -群成员变化事件基类 - - -## _class_ `MemberCardChangeEvent` - -基类:`nonebot.adapters.mirai.event.notice.MemberStateChangeEvent` - -群名片改动 - - -## _class_ `MemberSpecialTitleChangeEvent` - -基类:`nonebot.adapters.mirai.event.notice.MemberStateChangeEvent` - -群头衔改动(只有群主有操作限权) - - -## _class_ `BotGroupPermissionChangeEvent` - -基类:`nonebot.adapters.mirai.event.notice.MemberStateChangeEvent` - -Bot在群里的权限被改变 - - -## _class_ `MemberPermissionChangeEvent` - -基类:`nonebot.adapters.mirai.event.notice.MemberStateChangeEvent` - -成员权限改变的事件(该成员不是Bot) - - -## _class_ `NudgeEvent` - -基类:`nonebot.adapters.mirai.event.notice.NoticeEvent` - -戳一戳触发事件 - -# NoneBot.adapters.mirai.event.request 模块 - - -## _class_ `RequestEvent` - -基类:`nonebot.adapters.mirai.event.base.Event` - -请求事件基类 - - -## _class_ `NewFriendRequestEvent` - -基类:`nonebot.adapters.mirai.event.request.RequestEvent` - -添加好友申请 - - -### _async_ `approve(bot)` - - -* **说明** - - 通过此人的好友申请 - - - -* **参数** - - - * `bot: Bot`: 当前的 `Bot` 对象 - - - -### _async_ `reject(bot, operate=1, message='')` - - -* **说明** - - 拒绝此人的好友申请 - - - -* **参数** - - - * `bot: Bot`: 当前的 `Bot` 对象 - - - * `operate: Literal[1, 2]`: 响应的操作类型 - - - * `1`: 拒绝添加好友 - - - * `2`: 拒绝添加好友并添加黑名单,不再接收该用户的好友申请 - - - * `message: str`: 回复的信息 - - - -## _class_ `MemberJoinRequestEvent` - -基类:`nonebot.adapters.mirai.event.request.RequestEvent` - -用户入群申请(Bot需要有管理员权限) - - -### _async_ `approve(bot)` - - -* **说明** - - 通过此人的加群申请 - - - -* **参数** - - - * `bot: Bot`: 当前的 `Bot` 对象 - - - -### _async_ `reject(bot, operate=1, message='')` - - -* **说明** - - 拒绝(忽略)此人的加群申请 - - - -* **参数** - - - * `bot: Bot`: 当前的 `Bot` 对象 - - - * `operate: Literal[1, 2, 3, 4]`: 响应的操作类型 - - - * `1`: 拒绝入群 - - - * `2`: 忽略请求 - - - * `3`: 拒绝入群并添加黑名单,不再接收该用户的入群申请 - - - * `4`: 忽略入群并添加黑名单,不再接收该用户的入群申请 - - - * `message: str`: 回复的信息 - - - -## _class_ `BotInvitedJoinGroupRequestEvent` - -基类:`nonebot.adapters.mirai.event.request.RequestEvent` - -Bot被邀请入群申请 - - -### _async_ `approve(bot)` - - -* **说明** - - 通过这份被邀请入群申请 - - - -* **参数** - - - * `bot: Bot`: 当前的 `Bot` 对象 - - - -### _async_ `reject(bot, message='')` - - -* **说明** - - 拒绝这份被邀请入群申请 - - - -* **参数** - - - * `bot: Bot`: 当前的 `Bot` 对象 - - - * `message: str`: 邀请消息 diff --git a/website/docs/api/config.md b/website/docs/api/config.md deleted file mode 100644 index a7772946..00000000 --- a/website/docs/api/config.md +++ /dev/null @@ -1,306 +0,0 @@ -# NoneBot.config 模块 - -## 配置 - -NoneBot 使用 [pydantic](https://pydantic-docs.helpmanual.io/) 以及 [python-dotenv](https://saurabh-kumar.com/python-dotenv/) 来读取配置。 - -配置项需符合特殊格式或 json 序列化格式。详情见 [pydantic Field Type](https://pydantic-docs.helpmanual.io/usage/types/) 文档。 - - -## _class_ `Env` - -基类:`nonebot.config.BaseConfig` - -运行环境配置。大小写不敏感。 - -将会从 `nonebot.init 参数` > `环境变量` > `.env 环境配置文件` 的优先级读取配置。 - - -### `environment` - - -* **类型**: `str` - - -* **默认值**: `"prod"` - - -* **说明** - - 当前环境名。 NoneBot 将从 `.env.{environment}` 文件中加载配置。 - - - -## _class_ `Config` - -基类:`nonebot.config.BaseConfig` - -NoneBot 主要配置。大小写不敏感。 - -除了 NoneBot 的配置项外,还可以自行添加配置项到 `.env.{environment}` 文件中。 -这些配置将会在 json 反序列化后一起带入 `Config` 类中。 - - -### `driver` - - -* **类型**: `str` - - -* **默认值**: `"nonebot.drivers.fastapi"` - - -* **说明** - - NoneBot 运行所使用的 `Driver` 。继承自 `nonebot.driver.BaseDriver` 。 - - 配置格式为 `[:]`,默认类名为 `Driver`。 - - - -### `host` - - -* **类型**: `IPvAnyAddress` - - -* **默认值**: `127.0.0.1` - - -* **说明** - - NoneBot 的 HTTP 和 WebSocket 服务端监听的 IP/主机名。 - - - -### `port` - - -* **类型**: `int` - - -* **默认值**: `8080` - - -* **说明** - - NoneBot 的 HTTP 和 WebSocket 服务端监听的端口。 - - - -### `debug` - - -* **类型**: `bool` - - -* **默认值**: `False` - - -* **说明** - - 是否以调试模式运行 NoneBot。 - - - -### `log_level` - - -* **类型**: `Union[int, str]` - - -* **默认值**: `None` - - -* **说明** - - 配置 NoneBot 日志输出等级,可以为 `int` 类型等级或等级名称,参考 [loguru 日志等级](https://loguru.readthedocs.io/en/stable/api/logger.html#levels)。 - - - -* **示例** - - -```default -LOG_LEVEL=25 -LOG_LEVEL=INFO -``` - - -### `api_root` - - -* **类型**: `Dict[str, str]` - - -* **默认值**: `{}` - - -* **说明** - - 以机器人 ID 为键,上报地址为值的字典,环境变量或文件中应使用 json 序列化。 - - - -* **示例** - - -```default -API_ROOT={"123456": "http://127.0.0.1:5700"} -``` - - -### `api_timeout` - - -* **类型**: `Optional[float]` - - -* **默认值**: `30.` - - -* **说明** - - API 请求超时时间,单位: 秒。 - - - -### `access_token` - - -* **类型**: `Optional[str]` - - -* **默认值**: `None` - - -* **说明** - - API 请求以及上报所需密钥,在请求头中携带。 - - - -* **示例** - - -```http -POST /cqhttp/ HTTP/1.1 -Authorization: Bearer kSLuTF2GC2Q4q4ugm3 -``` - - -### `secret` - - -* **类型**: `Optional[str]` - - -* **默认值**: `None` - - -* **说明** - - HTTP POST 形式上报所需签名,在请求头中携带。 - - - -* **示例** - - -```http -POST /cqhttp/ HTTP/1.1 -X-Signature: sha1=f9ddd4863ace61e64f462d41ca311e3d2c1176e2 -``` - - -### `superusers` - - -* **类型**: `Set[str]` - - -* **默认值**: `set()` - - -* **说明** - - 机器人超级用户。 - - - -* **示例** - - -```default -SUPERUSERS=["12345789"] -``` - - -### `nickname` - - -* **类型**: `Set[str]` - - -* **默认值**: `set()` - - -* **说明** - - 机器人昵称。 - - - -### `command_start` - - -* **类型**: `Set[str]` - - -* **默认值**: `{"/"}` - - -* **说明** - - 命令的起始标记,用于判断一条消息是不是命令。 - - - -### `command_sep` - - -* **类型**: `Set[str]` - - -* **默认值**: `{"."}` - - -* **说明** - - 命令的分隔标记,用于将文本形式的命令切分为元组(实际的命令名)。 - - - -### `session_expire_timeout` - - -* **类型**: `timedelta` - - -* **默认值**: `timedelta(minutes=2)` - - -* **说明** - - 等待用户回复的超时时间。 - - - -* **示例** - - -```default -SESSION_EXPIRE_TIMEOUT=120 # 单位: 秒 -SESSION_EXPIRE_TIMEOUT=[DD ][HH:MM]SS[.ffffff] -SESSION_EXPIRE_TIMEOUT=P[DD]DT[HH]H[MM]M[SS]S # ISO 8601 -``` diff --git a/website/docs/api/dependencies.md b/website/docs/api/dependencies.md deleted file mode 100644 index 6ad3e4bb..00000000 --- a/website/docs/api/dependencies.md +++ /dev/null @@ -1,38 +0,0 @@ -# NoneBot.handler 模块 - -## 依赖注入处理模块 - -该模块实现了依赖注入的定义与处理。 - - -## `Depends(dependency=None, *, use_cache=True)` - - -* **说明** - - 参数依赖注入装饰器 - - - -* **参数** - - - * `dependency: Optional[Callable[..., Any]] = None`: 依赖函数。默认为参数的类型注释。 - - - * `use_cache: bool = True`: 是否使用缓存。默认为 `True`。 - - -```python -def depend_func() -> Any: - return ... - -def depend_gen_func(): - try: - yield ... - finally: - ... - -async def handler(param_name: Any = Depends(depend_func), gen: Any = Depends(depend_gen_func)): - ... -``` diff --git a/website/docs/api/drivers/README.md b/website/docs/api/drivers/README.md deleted file mode 100644 index 4cf2ee40..00000000 --- a/website/docs/api/drivers/README.md +++ /dev/null @@ -1,529 +0,0 @@ -# NoneBot.drivers 模块 - -## 后端驱动适配基类 - -各驱动请继承以下基类 - - -## _class_ `Driver` - -基类:`abc.ABC` - -Driver 基类。 - - -### `_adapters` - - -* **类型** - - `Dict[str, Type[Bot]]` - - - -* **说明** - - 已注册的适配器列表 - - - -### `_bot_connection_hook` - - -* **类型** - - `Set[T_BotConnectionHook]` - - - -* **说明** - - Bot 连接建立时执行的函数 - - - -### `_bot_disconnection_hook` - - -* **类型** - - `Set[T_BotDisconnectionHook]` - - - -* **说明** - - Bot 连接断开时执行的函数 - - - -### `__init__(env, config)` - - -* **参数** - - - * `env: Env`: 包含环境信息的 Env 对象 - - - * `config: Config`: 包含配置信息的 Config 对象 - - - -### `env` - - -* **类型** - - `str` - - - -* **说明** - - 环境名称 - - - -### `config` - - -* **类型** - - `Config` - - - -* **说明** - - 配置对象 - - - -### `_clients` - - -* **类型** - - `Dict[str, Bot]` - - - -* **说明** - - 已连接的 Bot - - - -### _property_ `bots` - - -* **类型** - - `Dict[str, Bot]` - - - -* **说明** - - 获取当前所有已连接的 Bot - - - -### `register_adapter(name, adapter, **kwargs)` - - -* **说明** - - 注册一个协议适配器 - - - -* **参数** - - - * `name: str`: 适配器名称,用于在连接时进行识别 - - - * `adapter: Type[Bot]`: 适配器 Class - - - * `**kwargs`: 其他传递给适配器的参数 - - - -### _abstract property_ `type` - -驱动类型名称 - - -### _abstract property_ `logger` - -驱动专属 logger 日志记录器 - - -### _abstract_ `run(*args, **kwargs)` - - -* **说明** - - 启动驱动框架 - - - -* **参数** - - - * `*args` - - - * `**kwargs` - - - -### _abstract_ `on_startup(func)` - -注册一个在驱动启动时运行的函数 - - -### _abstract_ `on_shutdown(func)` - -注册一个在驱动停止时运行的函数 - - -### `on_bot_connect(func)` - - -* **说明** - - 装饰一个函数使他在 bot 通过 WebSocket 连接成功时执行。 - - - -* **函数参数** - - - * `bot: Bot`: 当前连接上的 Bot 对象 - - - -### `on_bot_disconnect(func)` - - -* **说明** - - 装饰一个函数使他在 bot 通过 WebSocket 连接断开时执行。 - - - -* **函数参数** - - - * `bot: Bot`: 当前连接上的 Bot 对象 - - - -### `_bot_connect(bot)` - -在 WebSocket 连接成功后,调用该函数来注册 bot 对象 - - -### `_bot_disconnect(bot)` - -在 WebSocket 连接断开后,调用该函数来注销 bot 对象 - - -## _class_ `ForwardDriver` - -基类:`nonebot.drivers.Driver` - -Forward Driver 基类。将客户端框架封装,以满足适配器使用。 - - -### _abstract_ `setup_http_polling(setup)` - - -* **说明** - - 注册一个 HTTP 轮询连接,如果传入一个函数,则该函数会在每次连接时被调用 - - - -* **参数** - - - * `setup: Union[HTTPPollingSetup, Callable[[], Awaitable[HTTPPollingSetup]]]` - - - -### _abstract_ `setup_websocket(setup)` - - -* **说明** - - 注册一个 WebSocket 连接,如果传入一个函数,则该函数会在每次重连时被调用 - - - -* **参数** - - - * `setup: Union[WebSocketSetup, Callable[[], Awaitable[WebSocketSetup]]]` - - - -## _class_ `ReverseDriver` - -基类:`nonebot.drivers.Driver` - -Reverse Driver 基类。将后端框架封装,以满足适配器使用。 - - -### _abstract property_ `server_app` - -驱动 APP 对象 - - -### _abstract property_ `asgi` - -驱动 ASGI 对象 - - -## _class_ `HTTPConnection` - -基类:`abc.ABC` - - -### `http_version` - -One of `"1.0"`, `"1.1"` or `"2"`. - - -### `scheme` - -URL scheme portion (likely `"http"` or `"https"`). - - -### `path` - -HTTP request target excluding any query string, -with percent-encoded sequences and UTF-8 byte sequences -decoded into characters. - - -### `query_string` - -URL portion after the `?`, percent-encoded. - - -### `headers` - -A dict of name-value pairs, -where name is the header name, and value is the header value. - -Order of header values must be preserved from the original HTTP request; -order of header names is not important. - -Header names must be lowercased. - - -### _abstract property_ `type` - -Connection type. - - -## _class_ `HTTPRequest` - -基类:`nonebot.drivers.HTTPConnection` - -HTTP 请求封装。参考 [asgi http scope](https://asgi.readthedocs.io/en/latest/specs/www.html#http-connection-scope)。 - - -### `method` - -The HTTP method name, uppercased. - - -### `body` - -Body of the request. - -Optional; if missing defaults to `b""`. - - -### _property_ `type` - -Always `http` - - -## _class_ `HTTPResponse` - -基类:`object` - -HTTP 响应封装。参考 [asgi http scope](https://asgi.readthedocs.io/en/latest/specs/www.html#http-connection-scope)。 - - -### `status` - -HTTP status code. - - -### `body` - -HTTP body content. - -Optional; if missing defaults to `None`. - - -### `headers` - -A dict of name-value pairs, -where name is the header name, and value is the header value. - -Order must be preserved in the HTTP response. - -Header names must be lowercased. - -Optional; if missing defaults to an empty dict. - - -### _property_ `type` - -Always `http` - - -## _class_ `WebSocket` - -基类:`nonebot.drivers.HTTPConnection`, `abc.ABC` - -WebSocket 连接封装。参考 [asgi websocket scope](https://asgi.readthedocs.io/en/latest/specs/www.html#websocket-connection-scope)。 - - -### _property_ `type` - -Always `websocket` - - -### _abstract property_ `closed` - - -* **类型** - - `bool` - - - -* **说明** - - 连接是否已经关闭 - - - -### _abstract async_ `accept()` - -接受 WebSocket 连接请求 - - -### _abstract async_ `close(code)` - -关闭 WebSocket 连接请求 - - -### _abstract async_ `receive()` - -接收一条 WebSocket text 信息 - - -### _abstract async_ `receive_bytes()` - -接收一条 WebSocket binary 信息 - - -### _abstract async_ `send(data)` - -发送一条 WebSocket text 信息 - - -### _abstract async_ `send_bytes(data)` - -发送一条 WebSocket binary 信息 - - -## _class_ `HTTPPollingSetup` - -基类:`object` - - -### `adapter` - -协议适配器名称 - - -### `self_id` - -机器人 ID - - -### `url` - -URL - - -### `method` - -HTTP method - - -### `body` - -HTTP body - - -### `headers` - -HTTP headers - - -### `http_version` - -HTTP version - - -### `poll_interval` - -HTTP 轮询间隔 - - -## _class_ `WebSocketSetup` - -基类:`object` - - -### `adapter` - -协议适配器名称 - - -### `self_id` - -机器人 ID - - -### `url` - -URL - - -### `headers` - -HTTP headers - - -### `reconnect` - -WebSocket 是否重连 - - -### `reconnect_interval` - -WebSocket 重连间隔 diff --git a/website/docs/api/drivers/aiohttp.md b/website/docs/api/drivers/aiohttp.md deleted file mode 100644 index 1b8d2f5c..00000000 --- a/website/docs/api/drivers/aiohttp.md +++ /dev/null @@ -1,96 +0,0 @@ -# NoneBot.drivers.aiohttp 模块 - -## AIOHTTP 驱动适配 - -本驱动仅支持客户端连接 - - -## _class_ `Driver` - -基类:[`nonebot.drivers.ForwardDriver`](README.md#nonebot.drivers.ForwardDriver) - -AIOHTTP 驱动框架 - - -### _property_ `type` - -驱动名称: `aiohttp` - - -### _property_ `logger` - -aiohttp driver 使用的 logger - - -### `on_startup(func)` - - -* **说明** - - 注册一个启动时执行的函数 - - - -* **参数** - - - * `func: Callable[[], Awaitable[None]]` - - - -### `on_shutdown(func)` - - -* **说明** - - 注册一个停止时执行的函数 - - - -* **参数** - - - * `func: Callable[[], Awaitable[None]]` - - - -### `setup_http_polling(setup)` - - -* **说明** - - 注册一个 HTTP 轮询连接,如果传入一个函数,则该函数会在每次连接时被调用 - - - -* **参数** - - - * `setup: Union[HTTPPollingSetup, Callable[[], Awaitable[HTTPPollingSetup]]]` - - - -### `setup_websocket(setup)` - - -* **说明** - - 注册一个 WebSocket 连接,如果传入一个函数,则该函数会在每次重连时被调用 - - - -* **参数** - - - * `setup: Union[WebSocketSetup, Callable[[], Awaitable[WebSocketSetup]]]` - - - -### `run(*args, **kwargs)` - -启动 aiohttp driver - - -## _class_ `WebSocket` - -基类:[`nonebot.drivers.WebSocket`](README.md#nonebot.drivers.WebSocket) diff --git a/website/docs/api/drivers/fastapi.md b/website/docs/api/drivers/fastapi.md deleted file mode 100644 index 98262b3a..00000000 --- a/website/docs/api/drivers/fastapi.md +++ /dev/null @@ -1,249 +0,0 @@ -# NoneBot.drivers.fastapi 模块 - -## FastAPI 驱动适配 - -本驱动同时支持服务端以及客户端连接 - -后端使用方法请参考: [FastAPI 文档](https://fastapi.tiangolo.com/) - - -## _class_ `Config` - -基类:`pydantic.env_settings.BaseSettings` - -FastAPI 驱动框架设置,详情参考 FastAPI 文档 - - -### `fastapi_openapi_url` - - -* **类型** - - `Optional[str]` - - - -* **说明** - - `openapi.json` 地址,默认为 `None` 即关闭 - - - -### `fastapi_docs_url` - - -* **类型** - - `Optional[str]` - - - -* **说明** - - `swagger` 地址,默认为 `None` 即关闭 - - - -### `fastapi_redoc_url` - - -* **类型** - - `Optional[str]` - - - -* **说明** - - `redoc` 地址,默认为 `None` 即关闭 - - - -### `fastapi_reload` - - -* **类型** - - `Optional[bool]` - - - -* **说明** - - 开启/关闭冷重载,默认会在配置了 app 的 debug 模式启用 - - - -### `fastapi_reload_dirs` - - -* **类型** - - `Optional[List[str]]` - - - -* **说明** - - 重载监控文件夹列表,默认为 uvicorn 默认值 - - - -### `fastapi_reload_delay` - - -* **类型** - - `Optional[float]` - - - -* **说明** - - 重载延迟,默认为 uvicorn 默认值 - - - -### `fastapi_reload_includes` - - -* **类型** - - `Optional[List[str]]` - - - -* **说明** - - 要监听的文件列表,支持 glob pattern,默认为 uvicorn 默认值 - - - -### `fastapi_reload_excludes` - - -* **类型** - - `Optional[List[str]]` - - - -* **说明** - - 不要监听的文件列表,支持 glob pattern,默认为 uvicorn 默认值 - - - -## _class_ `Driver` - -基类:[`nonebot.drivers.ReverseDriver`](README.md#nonebot.drivers.ReverseDriver) - -FastAPI 驱动框架。包含反向 Server 功能。 - - -* **上报地址** - - - * `/{adapter name}/`: HTTP POST 上报 - - - * `/{adapter name}/http/`: HTTP POST 上报 - - - * `/{adapter name}/ws`: WebSocket 上报 - - - * `/{adapter name}/ws/`: WebSocket 上报 - - - -### _property_ `type` - -驱动名称: `fastapi` - - -### _property_ `server_app` - -`FastAPI APP` 对象 - - -### _property_ `asgi` - -`FastAPI APP` 对象 - - -### _property_ `logger` - -fastapi 使用的 logger - - -### `on_startup(func)` - -参考文档: [Events](https://fastapi.tiangolo.com/advanced/events/#startup-event) - - -### `on_shutdown(func)` - -参考文档: [Events](https://fastapi.tiangolo.com/advanced/events/#startup-event) - - -### `run(host=None, port=None, *, app=None, **kwargs)` - -使用 `uvicorn` 启动 FastAPI - - -## _class_ `FullDriver` - -基类:[`nonebot.drivers.ForwardDriver`](README.md#nonebot.drivers.ForwardDriver), `nonebot.drivers.fastapi.Driver` - -完整的 FastAPI 驱动框架,包含正向 Client 支持和反向 Server 支持。 - - -* **使用方法** - - -```dotenv -DRIVER=nonebot.drivers.fastapi:FullDriver -``` - - -### _property_ `type` - -驱动名称: `fastapi_full` - - -### `setup_http_polling(setup)` - - -* **说明** - - 注册一个 HTTP 轮询连接,如果传入一个函数,则该函数会在每次连接时被调用 - - - -* **参数** - - - * `setup: Union[HTTPPollingSetup, Callable[[], Awaitable[HTTPPollingSetup]]]` - - - -### `setup_websocket(setup)` - - -* **说明** - - 注册一个 WebSocket 连接,如果传入一个函数,则该函数会在每次重连时被调用 - - - -* **参数** - - - * `setup: Union[WebSocketSetup, Callable[[], Awaitable[WebSocketSetup]]]` - - - -## _class_ `WebSocket` - -基类:[`nonebot.drivers.WebSocket`](README.md#nonebot.drivers.WebSocket) diff --git a/website/docs/api/drivers/quart.md b/website/docs/api/drivers/quart.md deleted file mode 100644 index 2809b3c1..00000000 --- a/website/docs/api/drivers/quart.md +++ /dev/null @@ -1,144 +0,0 @@ -# NoneBot.drivers.quart 模块 - -## Quart 驱动适配 - -后端使用方法请参考: [Quart 文档](https://pgjones.gitlab.io/quart/index.html) - - -## _class_ `Config` - -基类:`pydantic.env_settings.BaseSettings` - -Quart 驱动框架设置 - - -### `quart_reload` - - -* **类型** - - `Optional[bool]` - - - -* **说明** - - 开启/关闭冷重载,默认会在配置了 app 的 debug 模式启用 - - - -### `quart_reload_dirs` - - -* **类型** - - `Optional[List[str]]` - - - -* **说明** - - 重载监控文件夹列表,默认为 uvicorn 默认值 - - - -### `quart_reload_delay` - - -* **类型** - - `Optional[float]` - - - -* **说明** - - 重载延迟,默认为 uvicorn 默认值 - - - -### `quart_reload_includes` - - -* **类型** - - `Optional[List[str]]` - - - -* **说明** - - 要监听的文件列表,支持 glob pattern,默认为 uvicorn 默认值 - - - -### `quart_reload_excludes` - - -* **类型** - - `Optional[List[str]]` - - - -* **说明** - - 不要监听的文件列表,支持 glob pattern,默认为 uvicorn 默认值 - - - -## _class_ `Driver` - -基类:[`nonebot.drivers.ReverseDriver`](README.md#nonebot.drivers.ReverseDriver) - -Quart 驱动框架 - - -* **上报地址** - - - * `/{adapter name}/http`: HTTP POST 上报 - - - * `/{adapter name}/ws`: WebSocket 上报 - - - -### _property_ `type` - -驱动名称: `quart` - - -### _property_ `server_app` - -`Quart` 对象 - - -### _property_ `asgi` - -`Quart` 对象 - - -### _property_ `logger` - -Quart 使用的 logger - - -### `on_startup(func)` - -参考文档: [Startup and Shutdown](https://pgjones.gitlab.io/quart/how_to_guides/startup_shutdown.html) - - -### `on_shutdown(func)` - -参考文档: [Startup and Shutdown](https://pgjones.gitlab.io/quart/how_to_guides/startup_shutdown.html) - - -### `run(host=None, port=None, *, app=None, **kwargs)` - -使用 `uvicorn` 启动 Quart - - -## _class_ `WebSocket` - -基类:[`nonebot.drivers.WebSocket`](README.md#nonebot.drivers.WebSocket) diff --git a/website/docs/api/exception.md b/website/docs/api/exception.md deleted file mode 100644 index d0b5fe05..00000000 --- a/website/docs/api/exception.md +++ /dev/null @@ -1,245 +0,0 @@ -# NoneBot.exception 模块 - -## 异常 - -下列文档中的异常是所有 NoneBot 运行时可能会抛出的。 -这些异常并非所有需要用户处理,在 NoneBot 内部运行时被捕获,并进行对应操作。 - - -## _exception_ `NoneBotException` - -基类:`Exception` - - -* **说明** - - 所有 NoneBot 发生的异常基类。 - - - -## _exception_ `ParserExit` - -基类:`nonebot.exception.NoneBotException` - - -* **说明** - - `shell command` 处理消息失败时返回的异常 - - - -* **参数** - - - * `status` - - - * `message` - - - -## _exception_ `ProcessException` - -基类:`nonebot.exception.NoneBotException` - - -* **说明** - - 事件处理过程中发生的异常基类。 - - - -## _exception_ `IgnoredException` - -基类:`nonebot.exception.ProcessException` - - -* **说明** - - 指示 NoneBot 应该忽略该事件。可由 PreProcessor 抛出。 - - - -* **参数** - - - * `reason`: 忽略事件的原因 - - - -## _exception_ `MockApiException` - -基类:`nonebot.exception.ProcessException` - - -* **说明** - - 指示 NoneBot 阻止本次 API 调用或修改本次调用返回值,并返回自定义内容。可由 api hook 抛出。 - - - -* **参数** - - - * `result`: 返回的内容 - - - -## _exception_ `StopPropagation` - -基类:`nonebot.exception.ProcessException` - - -* **说明** - - 指示 NoneBot 终止事件向下层传播。 - - - -* **用法** - - 在 `Matcher.block == True` 时抛出。 - - - -## _exception_ `MatcherException` - -基类:`nonebot.exception.NoneBotException` - - -* **说明** - - 所有 Matcher 发生的异常基类。 - - - -## _exception_ `SkippedException` - -基类:`nonebot.exception.MatcherException` - - -* **说明** - - 指示 NoneBot 立即结束当前 `Handler` 的处理,继续处理下一个 `Handler`。 - - - -* **用法** - - 可以在 `Handler` 中通过 `Matcher.skip()` 抛出。 - - - -## _exception_ `PausedException` - -基类:`nonebot.exception.MatcherException` - - -* **说明** - - 指示 NoneBot 结束当前 `Handler` 并等待下一条消息后继续下一个 `Handler`。 - 可用于用户输入新信息。 - - - -* **用法** - - 可以在 `Handler` 中通过 `Matcher.pause()` 抛出。 - - - -## _exception_ `RejectedException` - -基类:`nonebot.exception.MatcherException` - - -* **说明** - - 指示 NoneBot 结束当前 `Handler` 并等待下一条消息后重新运行当前 `Handler`。 - 可用于用户重新输入。 - - - -* **用法** - - 可以在 `Handler` 中通过 `Matcher.reject()` 抛出。 - - - -## _exception_ `FinishedException` - -基类:`nonebot.exception.MatcherException` - - -* **说明** - - 指示 NoneBot 结束当前 `Handler` 且后续 `Handler` 不再被运行。 - 可用于结束用户会话。 - - - -* **用法** - - 可以在 `Handler` 中通过 `Matcher.finish()` 抛出。 - - - -## _exception_ `AdapterException` - -基类:`nonebot.exception.NoneBotException` - - -* **说明** - - 代表 `Adapter` 抛出的异常,所有的 `Adapter` 都要在内部继承自这个 `Exception` - - - -* **参数** - - - * `adapter_name: str`: 标识 adapter - - - -## _exception_ `NoLogException` - -基类:`nonebot.exception.AdapterException` - - -* **说明** - - 指示 NoneBot 对当前 `Event` 进行处理但不显示 Log 信息,可在 `get_log_string` 时抛出 - - - -## _exception_ `ApiNotAvailable` - -基类:`nonebot.exception.AdapterException` - - -* **说明** - - 在 API 连接不可用时抛出。 - - - -## _exception_ `NetworkError` - -基类:`nonebot.exception.AdapterException` - - -* **说明** - - 在网络出现问题时抛出,如: API 请求地址不正确, API 请求无返回或返回状态非正常等。 - - - -## _exception_ `ActionFailed` - -基类:`nonebot.exception.AdapterException` - - -* **说明** - - API 请求成功返回数据,但 API 操作失败。 diff --git a/website/docs/api/handler.md b/website/docs/api/handler.md deleted file mode 100644 index dffcbbe3..00000000 --- a/website/docs/api/handler.md +++ /dev/null @@ -1,96 +0,0 @@ -# NoneBot.handler 模块 - -## 事件处理函数 - -该模块实现事件处理函数的封装,以实现动态参数等功能。 - - -## _class_ `Handler` - -基类:`object` - -事件处理器类。支持依赖注入。 - - -### `__init__(func, *, name=None, dependencies=None, allow_types=None)` - - -* **说明** - - 装饰一个函数为事件处理器。 - - - -* **参数** - - - * `func: Callable[..., Any]`: 事件处理函数。 - - - * `name: Optional[str]`: 事件处理器名称。默认为函数名。 - - - * `dependencies: Optional[List[DependsWrapper]]`: 额外的非参数依赖注入。 - - - * `allow_types: Optional[List[Type[Param]]]`: 允许的参数类型。 - - - -### `func` - - -* **类型** - - `Callable[..., Any]` - - - -* **说明** - - 事件处理函数 - - - -### `name` - - -* **类型** - - `str` - - - -* **说明** - - 事件处理函数名 - - - -### `allow_types` - - -* **类型** - - `List[Type[Param]]` - - - -* **说明** - - 事件处理器允许的参数类型 - - - -### `dependencies` - - -* **类型** - - `List[DependsWrapper]` - - - -* **说明** - - 事件处理器的额外依赖 diff --git a/website/docs/api/log.md b/website/docs/api/log.md deleted file mode 100644 index 69819413..00000000 --- a/website/docs/api/log.md +++ /dev/null @@ -1,37 +0,0 @@ -# NoneBot.log 模块 - -## 日志 - -NoneBot 使用 [loguru](https://github.com/Delgan/loguru) 来记录日志信息。 - -自定义 logger 请参考 [loguru](https://github.com/Delgan/loguru) 文档。 - - -## `logger` - - -* **说明** - - NoneBot 日志记录器对象。 - - - -* **默认信息** - - - * 格式: `[%(asctime)s %(name)s] %(levelname)s: %(message)s` - - - * 等级: `DEBUG` / `INFO` ,根据 config 配置改变 - - - * 输出: 输出至 stdout - - - -* **用法** - - -```python -from nonebot.log import logger -``` diff --git a/website/docs/api/matcher.md b/website/docs/api/matcher.md deleted file mode 100644 index 067e9dec..00000000 --- a/website/docs/api/matcher.md +++ /dev/null @@ -1,584 +0,0 @@ -# NoneBot.matcher 模块 - -## 事件响应器 - -该模块实现事件响应器的创建与运行,并提供一些快捷方法来帮助用户更好的与机器人进行对话 。 - - -## `matchers` - - -* **类型** - - `Dict[int, List[Type[Matcher]]]` - - - -* **说明** - - 用于存储当前所有的事件响应器 - - - -## _class_ `Matcher` - -基类:`object` - -事件响应器类 - - -### `plugin` - - -* **类型** - - `Optional[Plugin]` - - - -* **说明** - - 事件响应器所在插件 - - - -### `module` - - -* **类型** - - `Optional[ModuleType]` - - - -* **说明** - - 事件响应器所在插件模块 - - - -### `plugin_name` - - -* **类型** - - `Optional[str]` - - - -* **说明** - - 事件响应器所在插件名 - - - -### `module_name` - - -* **类型** - - `Optional[str]` - - - -* **说明** - - 事件响应器所在点分割插件模块路径 - - - -### `type` - - -* **类型** - - `str` - - - -* **说明** - - 事件响应器类型 - - - -### `rule` - - -* **类型** - - `Rule` - - - -* **说明** - - 事件响应器匹配规则 - - - -### `permission` - - -* **类型** - - `Permission` - - - -* **说明** - - 事件响应器触发权限 - - - -### `priority` - - -* **类型** - - `int` - - - -* **说明** - - 事件响应器优先级 - - - -### `block` - - -* **类型** - - `bool` - - - -* **说明** - - 事件响应器是否阻止事件传播 - - - -### `temp` - - -* **类型** - - `bool` - - - -* **说明** - - 事件响应器是否为临时 - - - -### `expire_time` - - -* **类型** - - `Optional[datetime]` - - - -* **说明** - - 事件响应器过期时间点 - - - -### `_default_state` - - -* **类型** - - `T_State` - - - -* **说明** - - 事件响应器默认状态 - - - -### `_default_state_factory` - - -* **类型** - - `Optional[T_State]` - - - -* **说明** - - 事件响应器默认工厂函数 - - - -### `_default_parser` - - -* **类型** - - `Optional[T_ArgsParser]` - - - -* **说明** - - 事件响应器默认参数解析函数 - - - -### `_default_type_updater` - - -* **类型** - - `Optional[T_TypeUpdater]` - - - -* **说明** - - 事件响应器类型更新函数 - - - -### `_default_permission_updater` - - -* **类型** - - `Optional[T_PermissionUpdater]` - - - -* **说明** - - 事件响应器权限更新函数 - - - -### `__init__()` - -实例化 Matcher 以便运行 - - -### `handlers` - - -* **类型** - - `List[Handler]` - - - -* **说明** - - 事件响应器拥有的事件处理函数列表 - - - -### _classmethod_ `new(type_='', rule=None, permission=None, handlers=None, temp=False, priority=1, block=False, *, plugin=None, module=None, expire_time=None, default_state=None, default_state_factory=None, default_parser=None, default_type_updater=None, default_permission_updater=None)` - - -* **说明** - - 创建一个新的事件响应器,并存储至 [matchers](#matchers) - - - -* **参数** - - - * `type_: str`: 事件响应器类型,与 `event.get_type()` 一致时触发,空字符串表示任意 - - - * `rule: Optional[Rule]`: 匹配规则 - - - * `permission: Optional[Permission]`: 权限 - - - * `handlers: Optional[List[T_Handler]]`: 事件处理函数列表 - - - * `temp: bool`: 是否为临时事件响应器,即触发一次后删除 - - - * `priority: int`: 响应优先级 - - - * `block: bool`: 是否阻止事件向更低优先级的响应器传播 - - - * `plugin: Optional[Plugin]`: 事件响应器所在插件 - - - * `module: Optional[ModuleType]`: 事件响应器所在模块 - - - * `default_state: Optional[T_State]`: 默认状态 `state` - - - * `default_state_factory: Optional[T_StateFactory]`: 默认状态 `state` 的工厂函数 - - - * `expire_time: Optional[datetime]`: 事件响应器最终有效时间点,过时即被删除 - - - -* **返回** - - - * `Type[Matcher]`: 新的事件响应器类 - - - -### _async classmethod_ `check_perm(bot, event, stack=None, dependency_cache=None)` - - -* **说明** - - 检查是否满足触发权限 - - - -* **参数** - - - * `bot: Bot`: Bot 对象 - - - * `event: Event`: 上报事件 - - - -* **返回** - - - * `bool`: 是否满足权限 - - - -### _async classmethod_ `check_rule(bot, event, state, stack=None, dependency_cache=None)` - - -* **说明** - - 检查是否满足匹配规则 - - - -* **参数** - - - * `bot: Bot`: Bot 对象 - - - * `event: Event`: 上报事件 - - - * `state: T_State`: 当前状态 - - - -* **返回** - - - * `bool`: 是否满足匹配规则 - - - -### _classmethod_ `args_parser(func)` - - -* **说明** - - 装饰一个函数来更改当前事件响应器的默认参数解析函数 - - - -* **参数** - - - * `func: T_ArgsParser`: 参数解析函数 - - - -### _classmethod_ `type_updater(func)` - - -* **说明** - - 装饰一个函数来更改当前事件响应器的默认响应事件类型更新函数 - - - -* **参数** - - - * `func: T_TypeUpdater`: 响应事件类型更新函数 - - - -### _classmethod_ `permission_updater(func)` - - -* **说明** - - 装饰一个函数来更改当前事件响应器的默认会话权限更新函数 - - - -* **参数** - - - * `func: T_PermissionUpdater`: 会话权限更新函数 - - - -### _classmethod_ `handle()` - - -* **说明** - - 装饰一个函数来向事件响应器直接添加一个处理函数 - - - -* **参数** - - - * 无 - - - -### _classmethod_ `receive()` - - -* **说明** - - 装饰一个函数来指示 NoneBot 在接收用户新的一条消息后继续运行该函数 - - - -* **参数** - - - * 无 - - - -### _classmethod_ `got(key, prompt=None, args_parser=None)` - - -* **说明** - - 装饰一个函数来指示 NoneBot 当要获取的 `key` 不存在时接收用户新的一条消息并经过 `ArgsParser` 处理后再运行该函数,如果 `key` 已存在则直接继续运行 - - - -* **参数** - - - * `key: str`: 参数名 - - - * `prompt: Optional[Union[str, Message, MessageSegment, MessageFormatter]]`: 在参数不存在时向用户发送的消息 - - - * `args_parser: Optional[T_ArgsParser]`: 可选参数解析函数,空则使用默认解析函数 - - - -### _async classmethod_ `send(message, **kwargs)` - - -* **说明** - - 发送一条消息给当前交互用户 - - - -* **参数** - - - * `message: Union[str, Message, MessageSegment]`: 消息内容 - - - * `**kwargs`: 其他传递给 `bot.send` 的参数,请参考对应 adapter 的 bot 对象 api - - - -### _async classmethod_ `finish(message=None, **kwargs)` - - -* **说明** - - 发送一条消息给当前交互用户并结束当前事件响应器 - - - -* **参数** - - - * `message: Union[str, Message, MessageSegment]`: 消息内容 - - - * `**kwargs`: 其他传递给 `bot.send` 的参数,请参考对应 adapter 的 bot 对象 api - - - -### _async classmethod_ `pause(prompt=None, **kwargs)` - - -* **说明** - - 发送一条消息给当前交互用户并暂停事件响应器,在接收用户新的一条消息后继续下一个处理函数 - - - -* **参数** - - - * `prompt: Union[str, Message, MessageSegment]`: 消息内容 - - - * `**kwargs`: 其他传递给 `bot.send` 的参数,请参考对应 adapter 的 bot 对象 api - - - -### _async classmethod_ `reject(prompt=None, **kwargs)` - - -* **说明** - - 发送一条消息给当前交互用户并暂停事件响应器,在接收用户新的一条消息后重新运行当前处理函数 - - - -* **参数** - - - * `prompt: Union[str, Message, MessageSegment]`: 消息内容 - - - * `**kwargs`: 其他传递给 `bot.send` 的参数,请参考对应 adapter 的 bot 对象 api - - - -### `stop_propagation()` - - -* **说明** - - 阻止事件传播 diff --git a/website/docs/api/message.md b/website/docs/api/message.md deleted file mode 100644 index 6c8425b5..00000000 --- a/website/docs/api/message.md +++ /dev/null @@ -1,69 +0,0 @@ -# NoneBot.message 模块 - -## 事件处理 - -NoneBot 内部处理并按优先级分发事件给所有事件响应器,提供了多个插槽以进行事件的预处理等。 - - -## `event_preprocessor(func)` - - -* **说明** - - 事件预处理。装饰一个函数,使它在每次接收到事件并分发给各响应器之前执行。 - - - -## `event_postprocessor(func)` - - -* **说明** - - 事件后处理。装饰一个函数,使它在每次接收到事件并分发给各响应器之后执行。 - - - -## `run_preprocessor(func)` - - -* **说明** - - 运行预处理。装饰一个函数,使它在每次事件响应器运行前执行。 - - - -## `run_postprocessor(func)` - - -* **说明** - - 运行后处理。装饰一个函数,使它在每次事件响应器运行后执行。 - - - -## _async_ `handle_event(bot, event)` - - -* **说明** - - 处理一个事件。调用该函数以实现分发事件。 - - - -* **参数** - - - * `bot: Bot`: Bot 对象 - - - * `event: Event`: Event 对象 - - - -* **示例** - - -```python -import asyncio -asyncio.create_task(handle_event(bot, event)) -``` diff --git a/website/docs/api/nonebot.md b/website/docs/api/nonebot.md deleted file mode 100644 index 30be8023..00000000 --- a/website/docs/api/nonebot.md +++ /dev/null @@ -1,319 +0,0 @@ -# NoneBot 模块 - -## 快捷导入 - -为方便使用,`nonebot` 模块从子模块导入了部分内容 - - -* `on_message` => `nonebot.plugin.on_message` - - -* `on_notice` => `nonebot.plugin.on_notice` - - -* `on_request` => `nonebot.plugin.on_request` - - -* `on_metaevent` => `nonebot.plugin.on_metaevent` - - -* `on_startswith` => `nonebot.plugin.on_startswith` - - -* `on_endswith` => `nonebot.plugin.on_endswith` - - -* `on_keyword` => `nonebot.plugin.on_keyword` - - -* `on_command` => `nonebot.plugin.on_command` - - -* `on_shell_command` => `nonebot.plugin.on_shell_command` - - -* `on_regex` => `nonebot.plugin.on_regex` - - -* `CommandGroup` => `nonebot.plugin.CommandGroup` - - -* `Matchergroup` => `nonebot.plugin.MatcherGroup` - - -* `load_plugin` => `nonebot.plugin.load_plugin` - - -* `load_plugins` => `nonebot.plugin.load_plugins` - - -* `load_all_plugins` => `nonebot.plugin.load_all_plugins` - - -* `load_from_json` => `nonebot.plugin.load_from_json` - - -* `load_from_toml` => `nonebot.plugin.load_from_toml` - - -* `load_builtin_plugins` => `nonebot.plugin.load_builtin_plugins` - - -* `get_plugin` => `nonebot.plugin.get_plugin` - - -* `get_loaded_plugins` => `nonebot.plugin.get_loaded_plugins` - - -* `export` => `nonebot.plugin.export` - - -* `require` => `nonebot.plugin.require` - - -## `get_driver()` - - -* **说明** - - 获取全局 Driver 对象。可用于在计划任务的回调中获取当前 Driver 对象。 - - - -* **返回** - - - * `Driver`: 全局 Driver 对象 - - - -* **异常** - - - * `ValueError`: 全局 Driver 对象尚未初始化 (nonebot.init 尚未调用) - - - -* **用法** - - -```python -driver = nonebot.get_driver() -``` - - -## `get_app()` - - -* **说明** - - 获取全局 Driver 对应 Server App 对象。 - - - -* **返回** - - - * `Any`: Server App 对象 - - - -* **异常** - - - * `ValueError`: 全局 Driver 对象尚未初始化 (nonebot.init 尚未调用) - - - -* **用法** - - -```python -app = nonebot.get_app() -``` - - -## `get_asgi()` - - -* **说明** - - 获取全局 Driver 对应 Asgi 对象。 - - - -* **返回** - - - * `Any`: Asgi 对象 - - - -* **异常** - - - * `ValueError`: 全局 Driver 对象尚未初始化 (nonebot.init 尚未调用) - - - -* **用法** - - -```python -asgi = nonebot.get_asgi() -``` - - -## `get_bot(self_id=None)` - - -* **说明** - - 当提供 self_id 时,此函数是 get_bots()[self_id] 的简写;当不提供时,返回一个 Bot。 - - - -* **参数** - - - * `self_id: Optional[str]`: 用来识别 Bot 的 ID - - - -* **返回** - - - * `Bot`: Bot 对象 - - - -* **异常** - - - * `KeyError`: 对应 ID 的 Bot 不存在 - - - * `ValueError`: 全局 Driver 对象尚未初始化 (nonebot.init 尚未调用) - - - * `ValueError`: 没有传入 ID 且没有 Bot 可用 - - - -* **用法** - - -```python -assert nonebot.get_bot('12345') == nonebot.get_bots()['12345'] - -another_unspecified_bot = nonebot.get_bot() -``` - - -## `get_bots()` - - -* **说明** - - 获取所有通过 ws 连接 NoneBot 的 Bot 对象。 - - - -* **返回** - - - * `Dict[str, Bot]`: 一个以字符串 ID 为键,Bot 对象为值的字典 - - - -* **异常** - - - * `ValueError`: 全局 Driver 对象尚未初始化 (nonebot.init 尚未调用) - - - -* **用法** - - -```python -bots = nonebot.get_bots() -``` - - -## `init(*, _env_file=None, **kwargs)` - - -* **说明** - - 初始化 NoneBot 以及 全局 Driver 对象。 - - NoneBot 将会从 .env 文件中读取环境信息,并使用相应的 env 文件配置。 - - 你也可以传入自定义的 _env_file 来指定 NoneBot 从该文件读取配置。 - - - -* **参数** - - - * `_env_file: Optional[str]`: 配置文件名,默认从 .env.{env_name} 中读取配置 - - - * `**kwargs`: 任意变量,将会存储到 Config 对象里 - - - -* **返回** - - - * `None` - - - -* **用法** - - -```python -nonebot.init(database=Database(...)) -``` - - -## `run(host=None, port=None, *args, **kwargs)` - - -* **说明** - - 启动 NoneBot,即运行全局 Driver 对象。 - - - -* **参数** - - - * `host: Optional[str]`: 主机名/IP,若不传入则使用配置文件中指定的值 - - - * `port: Optional[int]`: 端口,若不传入则使用配置文件中指定的值 - - - * `*args`: 传入 Driver.run 的位置参数 - - - * `**kwargs`: 传入 Driver.run 的命名参数 - - - -* **返回** - - - * `None` - - - -* **用法** - - -```python -nonebot.run(host="127.0.0.1", port=8080) -``` diff --git a/website/docs/api/permission.md b/website/docs/api/permission.md deleted file mode 100644 index f43d2aca..00000000 --- a/website/docs/api/permission.md +++ /dev/null @@ -1,138 +0,0 @@ -# NoneBot.permission 模块 - -## 权限 - -每个 `Matcher` 拥有一个 `Permission` ,其中是 `PermissionChecker` 的集合,只要有一个 `PermissionChecker` 检查结果为 `True` 时就会继续运行。 - -:::tip 提示 -`PermissionChecker` 既可以是 async function 也可以是 sync function -::: - - -## _class_ `Permission` - -基类:`object` - - -* **说明** - - `Matcher` 规则类,当事件传递时,在 `Matcher` 运行前进行检查。 - - - -* **示例** - - -```python -Permission(async_function) | sync_function -# 等价于 -from nonebot.utils import run_sync -Permission(async_function, run_sync(sync_function)) -``` - - -### `__init__(*checkers)` - - -* **参数** - - - * `*checkers: Union[T_PermissionChecker, Handler]`: PermissionChecker - - - -### `checkers` - - -* **说明** - - 存储 `PermissionChecker` - - - -* **类型** - - - * `Set[Handler]` - - - -### _async_ `__call__(bot, event, stack=None, dependency_cache=None)` - - -* **说明** - - 检查是否满足某个权限 - - - -* **参数** - - - * `bot: Bot`: Bot 对象 - - - * `event: Event`: Event 对象 - - - * `stack: Optional[AsyncExitStack]`: 异步上下文栈 - - - * `dependency_cache: Optional[Dict[Callable[..., Any], Any]]`: 依赖缓存 - - - -* **返回** - - - * `bool` - - - -## `MESSAGE` - - -* **说明**: 匹配任意 `message` 类型事件,仅在需要同时捕获不同类型事件时使用。优先使用 message type 的 Matcher。 - - -## `NOTICE` - - -* **说明**: 匹配任意 `notice` 类型事件,仅在需要同时捕获不同类型事件时使用。优先使用 notice type 的 Matcher。 - - -## `REQUEST` - - -* **说明**: 匹配任意 `request` 类型事件,仅在需要同时捕获不同类型事件时使用。优先使用 request type 的 Matcher。 - - -## `METAEVENT` - - -* **说明**: 匹配任意 `meta_event` 类型事件,仅在需要同时捕获不同类型事件时使用。优先使用 meta_event type 的 Matcher。 - - -## `USER(*user, perm=None)` - - -* **说明** - - `event` 的 `session_id` 在白名单内且满足 perm - - - -* **参数** - - - * `*user: str`: 白名单 - - - * `perm: Optional[Permission]`: 需要同时满足的权限 - - - -## `SUPERUSER` - - -* **说明**: 匹配任意超级用户消息类型事件 diff --git a/website/docs/api/plugin.md b/website/docs/api/plugin.md deleted file mode 100644 index f38d228e..00000000 --- a/website/docs/api/plugin.md +++ /dev/null @@ -1,1521 +0,0 @@ -# NoneBot.plugin 模块 - -## 插件 - -为 NoneBot 插件开发提供便携的定义函数。 - - -## `plugins` - - -* **类型** - - `Dict[str, Plugin]` - - - -* **说明** - - 已加载的插件 - - - -## _class_ `Plugin` - -基类:`object` - -存储插件信息 - - -### `name` - - -* **类型**: `str` - - -* **说明**: 插件名称,使用 文件/文件夹 名称作为插件名 - - -### `module` - - -* **类型**: `ModuleType` - - -* **说明**: 插件模块对象 - - -### `module_name` - - -* **类型**: `str` - - -* **说明**: 点分割模块路径 - - -### `export` - - -* **类型**: `Export` - - -* **说明**: 插件内定义的导出内容 - - -### `matcher` - - -* **类型**: `Set[Type[Matcher]]` - - -* **说明**: 插件内定义的 `Matcher` - - -### `parent_plugin` - - -* **类型**: `Optional[Plugin]` - - -* **说明**: 父插件 - - -### `sub_plugins` - - -* **类型**: `Set[Plugin]` - - -* **说明**: 子插件集合 - - -## `get_plugin(name)` - - -* **说明** - - 获取当前导入的某个插件。 - - - -* **参数** - - - * `name: str`: 插件名,与 `load_plugin` 参数一致。如果为 `load_plugins` 导入的插件,则为文件(夹)名。 - - - -* **返回** - - - * `Optional[Plugin]` - - - -## `get_loaded_plugins()` - - -* **说明** - - 获取当前已导入的所有插件。 - - - -* **返回** - - - * `Set[Plugin]` - - - -## `on(type='', rule=None, permission=None, *, handlers=None, temp=False, priority=1, block=False, state=None, state_factory=None, _depth=0)` - - -* **说明** - - 注册一个基础事件响应器,可自定义类型。 - - - -* **参数** - - - * `type: str`: 事件响应器类型 - - - * `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则 - - - * `permission: Optional[Permission]`: 事件响应权限 - - - * `handlers: Optional[List[Union[T_Handler, Handler]]]`: 事件处理函数列表 - - - * `temp: bool`: 是否为临时事件响应器(仅执行一次) - - - * `priority: int`: 事件响应器优先级 - - - * `block: bool`: 是否阻止事件向更低优先级传递 - - - * `state: Optional[T_State]`: 默认 state - - - * `state_factory: Optional[T_StateFactory]`: 默认 state 的工厂函数 - - - -* **返回** - - - * `Type[Matcher]` - - - -## `on_metaevent(rule=None, *, handlers=None, temp=False, priority=1, block=False, state=None, state_factory=None, _depth=0)` - - -* **说明** - - 注册一个元事件响应器。 - - - -* **参数** - - - * `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则 - - - * `handlers: Optional[List[Union[T_Handler, Handler]]]`: 事件处理函数列表 - - - * `temp: bool`: 是否为临时事件响应器(仅执行一次) - - - * `priority: int`: 事件响应器优先级 - - - * `block: bool`: 是否阻止事件向更低优先级传递 - - - * `state: Optional[T_State]`: 默认 state - - - * `state_factory: Optional[T_StateFactory]`: 默认 state 的工厂函数 - - - -* **返回** - - - * `Type[Matcher]` - - - -## `on_message(rule=None, permission=None, *, handlers=None, temp=False, priority=1, block=True, state=None, state_factory=None, _depth=0)` - - -* **说明** - - 注册一个消息事件响应器。 - - - -* **参数** - - - * `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则 - - - * `permission: Optional[Permission]`: 事件响应权限 - - - * `handlers: Optional[List[Union[T_Handler, Handler]]]`: 事件处理函数列表 - - - * `temp: bool`: 是否为临时事件响应器(仅执行一次) - - - * `priority: int`: 事件响应器优先级 - - - * `block: bool`: 是否阻止事件向更低优先级传递 - - - * `state: Optional[T_State]`: 默认 state - - - * `state_factory: Optional[T_StateFactory]`: 默认 state 的工厂函数 - - - -* **返回** - - - * `Type[Matcher]` - - - -## `on_notice(rule=None, *, handlers=None, temp=False, priority=1, block=False, state=None, state_factory=None, _depth=0)` - - -* **说明** - - 注册一个通知事件响应器。 - - - -* **参数** - - - * `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则 - - - * `handlers: Optional[List[Union[T_Handler, Handler]]]`: 事件处理函数列表 - - - * `temp: bool`: 是否为临时事件响应器(仅执行一次) - - - * `priority: int`: 事件响应器优先级 - - - * `block: bool`: 是否阻止事件向更低优先级传递 - - - * `state: Optional[T_State]`: 默认 state - - - * `state_factory: Optional[T_StateFactory]`: 默认 state 的工厂函数 - - - -* **返回** - - - * `Type[Matcher]` - - - -## `on_request(rule=None, *, handlers=None, temp=False, priority=1, block=False, state=None, state_factory=None, _depth=0)` - - -* **说明** - - 注册一个请求事件响应器。 - - - -* **参数** - - - * `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则 - - - * `handlers: Optional[List[Union[T_Handler, Handler]]]`: 事件处理函数列表 - - - * `temp: bool`: 是否为临时事件响应器(仅执行一次) - - - * `priority: int`: 事件响应器优先级 - - - * `block: bool`: 是否阻止事件向更低优先级传递 - - - * `state: Optional[T_State]`: 默认 state - - - * `state_factory: Optional[T_StateFactory]`: 默认 state 的工厂函数 - - - -* **返回** - - - * `Type[Matcher]` - - - -## `on_startswith(msg, rule=None, ignorecase=False, _depth=0, **kwargs)` - - -* **说明** - - 注册一个消息事件响应器,并且当消息的\*\*文本部分\*\*以指定内容开头时响应。 - - - -* **参数** - - - * `msg: Union[str, Tuple[str, ...]]`: 指定消息开头内容 - - - * `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则 - - - * `ignorecase: bool`: 是否忽略大小写 - - - * `permission: Optional[Permission]`: 事件响应权限 - - - * `handlers: Optional[List[Union[T_Handler, Handler]]]`: 事件处理函数列表 - - - * `temp: bool`: 是否为临时事件响应器(仅执行一次) - - - * `priority: int`: 事件响应器优先级 - - - * `block: bool`: 是否阻止事件向更低优先级传递 - - - * `state: Optional[T_State]`: 默认 state - - - * `state_factory: Optional[T_StateFactory]`: 默认 state 的工厂函数 - - - -* **返回** - - - * `Type[Matcher]` - - - -## `on_endswith(msg, rule=None, ignorecase=False, _depth=0, **kwargs)` - - -* **说明** - - 注册一个消息事件响应器,并且当消息的\*\*文本部分\*\*以指定内容结尾时响应。 - - - -* **参数** - - - * `msg: Union[str, Tuple[str, ...]]`: 指定消息结尾内容 - - - * `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则 - - - * `ignorecase: bool`: 是否忽略大小写 - - - * `permission: Optional[Permission]`: 事件响应权限 - - - * `handlers: Optional[List[Union[T_Handler, Handler]]]`: 事件处理函数列表 - - - * `temp: bool`: 是否为临时事件响应器(仅执行一次) - - - * `priority: int`: 事件响应器优先级 - - - * `block: bool`: 是否阻止事件向更低优先级传递 - - - * `state: Optional[T_State]`: 默认 state - - - * `state_factory: Optional[T_StateFactory]`: 默认 state 的工厂函数 - - - -* **返回** - - - * `Type[Matcher]` - - - -## `on_keyword(keywords, rule=None, _depth=0, **kwargs)` - - -* **说明** - - 注册一个消息事件响应器,并且当消息纯文本部分包含关键词时响应。 - - - -* **参数** - - - * `keywords: Set[str]`: 关键词列表 - - - * `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则 - - - * `permission: Optional[Permission]`: 事件响应权限 - - - * `handlers: Optional[List[Union[T_Handler, Handler]]]`: 事件处理函数列表 - - - * `temp: bool`: 是否为临时事件响应器(仅执行一次) - - - * `priority: int`: 事件响应器优先级 - - - * `block: bool`: 是否阻止事件向更低优先级传递 - - - * `state: Optional[T_State]`: 默认 state - - - * `state_factory: Optional[T_StateFactory]`: 默认 state 的工厂函数 - - - -* **返回** - - - * `Type[Matcher]` - - - -## `on_command(cmd, rule=None, aliases=None, _depth=0, **kwargs)` - - -* **说明** - - 注册一个消息事件响应器,并且当消息以指定命令开头时响应。 - - 命令匹配规则参考: [命令形式匹配](rule.html#command-command) - - - -* **参数** - - - * `cmd: Union[str, Tuple[str, ...]]`: 指定命令内容 - - - * `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则 - - - * `aliases: Optional[Set[Union[str, Tuple[str, ...]]]]`: 命令别名 - - - * `permission: Optional[Permission]`: 事件响应权限 - - - * `handlers: Optional[List[Union[T_Handler, Handler]]]`: 事件处理函数列表 - - - * `temp: bool`: 是否为临时事件响应器(仅执行一次) - - - * `priority: int`: 事件响应器优先级 - - - * `block: bool`: 是否阻止事件向更低优先级传递 - - - * `state: Optional[T_State]`: 默认 state - - - * `state_factory: Optional[T_StateFactory]`: 默认 state 的工厂函数 - - - -* **返回** - - - * `Type[Matcher]` - - - -## `on_shell_command(cmd, rule=None, aliases=None, parser=None, _depth=0, **kwargs)` - - -* **说明** - - 注册一个支持 `shell_like` 解析参数的命令消息事件响应器。 - - 与普通的 `on_command` 不同的是,在添加 `parser` 参数时, 响应器会自动处理消息。 - - 并将用户输入的原始参数列表保存在 `state["argv"]`, `parser` 处理的参数保存在 `state["args"]` 中 - - - -* **参数** - - - * `cmd: Union[str, Tuple[str, ...]]`: 指定命令内容 - - - * `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则 - - - * `aliases: Optional[Set[Union[str, Tuple[str, ...]]]]`: 命令别名 - - - * `parser: Optional[ArgumentParser]`: `nonebot.rule.ArgumentParser` 对象 - - - * `permission: Optional[Permission]`: 事件响应权限 - - - * `handlers: Optional[List[Union[T_Handler, Handler]]]`: 事件处理函数列表 - - - * `temp: bool`: 是否为临时事件响应器(仅执行一次) - - - * `priority: int`: 事件响应器优先级 - - - * `block: bool`: 是否阻止事件向更低优先级传递 - - - * `state: Optional[T_State]`: 默认 state - - - * `state_factory: Optional[T_StateFactory]`: 默认 state 的工厂函数 - - - -* **返回** - - - * `Type[Matcher]` - - - -## `on_regex(pattern, flags=0, rule=None, _depth=0, **kwargs)` - - -* **说明** - - 注册一个消息事件响应器,并且当消息匹配正则表达式时响应。 - - 命令匹配规则参考: [正则匹配](rule.html#regex-regex-flags-0) - - - -* **参数** - - - * `pattern: str`: 正则表达式 - - - * `flags: Union[int, re.RegexFlag]`: 正则匹配标志 - - - * `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则 - - - * `permission: Optional[Permission]`: 事件响应权限 - - - * `handlers: Optional[List[Union[T_Handler, Handler]]]`: 事件处理函数列表 - - - * `temp: bool`: 是否为临时事件响应器(仅执行一次) - - - * `priority: int`: 事件响应器优先级 - - - * `block: bool`: 是否阻止事件向更低优先级传递 - - - * `state: Optional[T_State]`: 默认 state - - - * `state_factory: Optional[T_StateFactory]`: 默认 state 的工厂函数 - - - -* **返回** - - - * `Type[Matcher]` - - - -## _class_ `CommandGroup` - -基类:`object` - -命令组,用于声明一组有相同名称前缀的命令。 - - -### `__init__(cmd, **kwargs)` - - -* **参数** - - - * `cmd: Union[str, Tuple[str, ...]]`: 命令前缀 - - - * `**kwargs`: 其他传递给 `on_command` 的参数默认值,参考 [on_command](#on-command-cmd-rule-none-aliases-none-kwargs) - - - -### `basecmd` - - -* **类型**: `Tuple[str, ...]` - - -* **说明**: 命令前缀 - - -### `base_kwargs` - - -* **类型**: `Dict[str, Any]` - - -* **说明**: 其他传递给 `on_command` 的参数默认值 - - -### `command(cmd, **kwargs)` - - -* **说明** - - 注册一个新的命令。 - - - -* **参数** - - - * `cmd: Union[str, Tuple[str, ...]]`: 命令前缀 - - - * `**kwargs`: 其他传递给 `on_command` 的参数,将会覆盖命令组默认值 - - - -* **返回** - - - * `Type[Matcher]` - - - -### `shell_command(cmd, **kwargs)` - - -* **说明** - - 注册一个新的命令。 - - - -* **参数** - - - * `cmd: Union[str, Tuple[str, ...]]`: 命令前缀 - - - * `**kwargs`: 其他传递给 `on_shell_command` 的参数,将会覆盖命令组默认值 - - - -* **返回** - - - * `Type[Matcher]` - - - -## _class_ `MatcherGroup` - -基类:`object` - -事件响应器组合,统一管理。为 `Matcher` 创建提供默认属性。 - - -### `__init__(**kwargs)` - - -* **说明** - - 创建一个事件响应器组合,参数为默认值,与 `on` 一致 - - - -### `matchers` - - -* **类型** - - `List[Type[Matcher]]` - - - -* **说明** - - 组内事件响应器列表 - - - -### `base_kwargs` - - -* **类型**: `Dict[str, Any]` - - -* **说明**: 其他传递给 `on` 的参数默认值 - - -### `on(**kwargs)` - - -* **说明** - - 注册一个基础事件响应器,可自定义类型。 - - - -* **参数** - - - * `type: str`: 事件响应器类型 - - - * `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则 - - - * `permission: Optional[Permission]`: 事件响应权限 - - - * `handlers: Optional[List[Union[T_Handler, Handler]]]`: 事件处理函数列表 - - - * `temp: bool`: 是否为临时事件响应器(仅执行一次) - - - * `priority: int`: 事件响应器优先级 - - - * `block: bool`: 是否阻止事件向更低优先级传递 - - - * `state: Optional[T_State]`: 默认 state - - - * `state_factory: Optional[T_StateFactory]`: 默认 state 的工厂函数 - - - -* **返回** - - - * `Type[Matcher]` - - - -### `on_metaevent(**kwargs)` - - -* **说明** - - 注册一个元事件响应器。 - - - -* **参数** - - - * `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则 - - - * `handlers: Optional[List[Union[T_Handler, Handler]]]`: 事件处理函数列表 - - - * `temp: bool`: 是否为临时事件响应器(仅执行一次) - - - * `priority: int`: 事件响应器优先级 - - - * `block: bool`: 是否阻止事件向更低优先级传递 - - - * `state: Optional[T_State]`: 默认 state - - - * `state_factory: Optional[T_StateFactory]`: 默认 state 的工厂函数 - - - -* **返回** - - - * `Type[Matcher]` - - - -### `on_message(**kwargs)` - - -* **说明** - - 注册一个消息事件响应器。 - - - -* **参数** - - - * `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则 - - - * `permission: Optional[Permission]`: 事件响应权限 - - - * `handlers: Optional[List[Union[T_Handler, Handler]]]`: 事件处理函数列表 - - - * `temp: bool`: 是否为临时事件响应器(仅执行一次) - - - * `priority: int`: 事件响应器优先级 - - - * `block: bool`: 是否阻止事件向更低优先级传递 - - - * `state: Optional[T_State]`: 默认 state - - - * `state_factory: Optional[T_StateFactory]`: 默认 state 的工厂函数 - - - -* **返回** - - - * `Type[Matcher]` - - - -### `on_notice(**kwargs)` - - -* **说明** - - 注册一个通知事件响应器。 - - - -* **参数** - - - * `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则 - - - * `handlers: Optional[List[Union[T_Handler, Handler]]]`: 事件处理函数列表 - - - * `temp: bool`: 是否为临时事件响应器(仅执行一次) - - - * `priority: int`: 事件响应器优先级 - - - * `block: bool`: 是否阻止事件向更低优先级传递 - - - * `state: Optional[T_State]`: 默认 state - - - * `state_factory: Optional[T_StateFactory]`: 默认 state 的工厂函数 - - - -* **返回** - - - * `Type[Matcher]` - - - -### `on_request(**kwargs)` - - -* **说明** - - 注册一个请求事件响应器。 - - - -* **参数** - - - * `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则 - - - * `handlers: Optional[List[Union[T_Handler, Handler]]]`: 事件处理函数列表 - - - * `temp: bool`: 是否为临时事件响应器(仅执行一次) - - - * `priority: int`: 事件响应器优先级 - - - * `block: bool`: 是否阻止事件向更低优先级传递 - - - * `state: Optional[T_State]`: 默认 state - - - * `state_factory: Optional[T_StateFactory]`: 默认 state 的工厂函数 - - - -* **返回** - - - * `Type[Matcher]` - - - -### `on_startswith(msg, **kwargs)` - - -* **说明** - - 注册一个消息事件响应器,并且当消息的\*\*文本部分\*\*以指定内容开头时响应。 - - - -* **参数** - - - * `msg: Union[str, Tuple[str, ...]]`: 指定消息开头内容 - - - * `ignorecase: bool`: 是否忽略大小写 - - - * `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则 - - - * `permission: Optional[Permission]`: 事件响应权限 - - - * `handlers: Optional[List[Union[T_Handler, Handler]]]`: 事件处理函数列表 - - - * `temp: bool`: 是否为临时事件响应器(仅执行一次) - - - * `priority: int`: 事件响应器优先级 - - - * `block: bool`: 是否阻止事件向更低优先级传递 - - - * `state: Optional[T_State]`: 默认 state - - - * `state_factory: Optional[T_StateFactory]`: 默认 state 的工厂函数 - - - -* **返回** - - - * `Type[Matcher]` - - - -### `on_endswith(msg, **kwargs)` - - -* **说明** - - 注册一个消息事件响应器,并且当消息的\*\*文本部分\*\*以指定内容结尾时响应。 - - - -* **参数** - - - * `msg: Union[str, Tuple[str, ...]]`: 指定消息结尾内容 - - - * `ignorecase: bool`: 是否忽略大小写 - - - * `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则 - - - * `permission: Optional[Permission]`: 事件响应权限 - - - * `handlers: Optional[List[Union[T_Handler, Handler]]]`: 事件处理函数列表 - - - * `temp: bool`: 是否为临时事件响应器(仅执行一次) - - - * `priority: int`: 事件响应器优先级 - - - * `block: bool`: 是否阻止事件向更低优先级传递 - - - * `state: Optional[T_State]`: 默认 state - - - * `state_factory: Optional[T_StateFactory]`: 默认 state 的工厂函数 - - - -* **返回** - - - * `Type[Matcher]` - - - -### `on_keyword(keywords, **kwargs)` - - -* **说明** - - 注册一个消息事件响应器,并且当消息纯文本部分包含关键词时响应。 - - - -* **参数** - - - * `keywords: Set[str]`: 关键词列表 - - - * `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则 - - - * `permission: Optional[Permission]`: 事件响应权限 - - - * `handlers: Optional[List[Union[T_Handler, Handler]]]`: 事件处理函数列表 - - - * `temp: bool`: 是否为临时事件响应器(仅执行一次) - - - * `priority: int`: 事件响应器优先级 - - - * `block: bool`: 是否阻止事件向更低优先级传递 - - - * `state: Optional[T_State]`: 默认 state - - - * `state_factory: Optional[T_StateFactory]`: 默认 state 的工厂函数 - - - -* **返回** - - - * `Type[Matcher]` - - - -### `on_command(cmd, aliases=None, **kwargs)` - - -* **说明** - - 注册一个消息事件响应器,并且当消息以指定命令开头时响应。 - - 命令匹配规则参考: [命令形式匹配](rule.html#command-command) - - - -* **参数** - - - * `cmd: Union[str, Tuple[str, ...]]`: 指定命令内容 - - - * `aliases: Optional[Set[Union[str, Tuple[str, ...]]]]`: 命令别名 - - - * `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则 - - - * `permission: Optional[Permission]`: 事件响应权限 - - - * `handlers: Optional[List[Union[T_Handler, Handler]]]`: 事件处理函数列表 - - - * `temp: bool`: 是否为临时事件响应器(仅执行一次) - - - * `priority: int`: 事件响应器优先级 - - - * `block: bool`: 是否阻止事件向更低优先级传递 - - - * `state: Optional[T_State]`: 默认 state - - - * `state_factory: Optional[T_StateFactory]`: 默认 state 的工厂函数 - - - -* **返回** - - - * `Type[Matcher]` - - - -### `on_shell_command(cmd, aliases=None, parser=None, **kwargs)` - - -* **说明** - - 注册一个支持 `shell_like` 解析参数的命令消息事件响应器。 - - 与普通的 `on_command` 不同的是,在添加 `parser` 参数时, 响应器会自动处理消息。 - - 并将用户输入的原始参数列表保存在 `state["argv"]`, `parser` 处理的参数保存在 `state["args"]` 中 - - - -* **参数** - - - * `cmd: Union[str, Tuple[str, ...]]`: 指定命令内容 - - - * `aliases: Optional[Set[Union[str, Tuple[str, ...]]]]`: 命令别名 - - - * `parser: Optional[ArgumentParser]`: `nonebot.rule.ArgumentParser` 对象 - - - * `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则 - - - * `permission: Optional[Permission]`: 事件响应权限 - - - * `handlers: Optional[List[Union[T_Handler, Handler]]]`: 事件处理函数列表 - - - * `temp: bool`: 是否为临时事件响应器(仅执行一次) - - - * `priority: int`: 事件响应器优先级 - - - * `block: bool`: 是否阻止事件向更低优先级传递 - - - * `state: Optional[T_State]`: 默认 state - - - * `state_factory: Optional[T_StateFactory]`: 默认 state 的工厂函数 - - - -* **返回** - - - * `Type[Matcher]` - - - -### `on_regex(pattern, flags=0, **kwargs)` - - -* **说明** - - 注册一个消息事件响应器,并且当消息匹配正则表达式时响应。 - - 命令匹配规则参考: [正则匹配](rule.html#regex-regex-flags-0) - - - -* **参数** - - - * `pattern: str`: 正则表达式 - - - * `flags: Union[int, re.RegexFlag]`: 正则匹配标志 - - - * `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则 - - - * `permission: Optional[Permission]`: 事件响应权限 - - - * `handlers: Optional[List[Union[T_Handler, Handler]]]`: 事件处理函数列表 - - - * `temp: bool`: 是否为临时事件响应器(仅执行一次) - - - * `priority: int`: 事件响应器优先级 - - - * `block: bool`: 是否阻止事件向更低优先级传递 - - - * `state: Optional[T_State]`: 默认 state - - - * `state_factory: Optional[T_StateFactory]`: 默认 state 的工厂函数 - - - -* **返回** - - - * `Type[Matcher]` - - - -## `load_plugin(module_path)` - - -* **说明** - - 使用 `PluginManager` 加载单个插件,可以是本地插件或是通过 `pip` 安装的插件。 - - - -* **参数** - - - * `module_path: str`: 插件名称 `path.to.your.plugin` - - - -* **返回** - - - * `Optional[Plugin]` - - - -## `load_plugins(*plugin_dir)` - - -* **说明** - - 导入目录下多个插件,以 `_` 开头的插件不会被导入! - - - -* **参数** - - - * `*plugin_dir: str`: 插件路径 - - - -* **返回** - - - * `Set[Plugin]` - - - -## `load_all_plugins(module_path, plugin_dir)` - - -* **说明** - - 导入指定列表中的插件以及指定目录下多个插件,以 `_` 开头的插件不会被导入! - - - -* **参数** - - - * `module_path: Iterable[str]`: 指定插件集合 - - - * `plugin_dir: Iterable[str]`: 指定插件路径集合 - - - -* **返回** - - - * `Set[Plugin]` - - - -## `load_from_json(file_path, encoding='utf-8')` - - -* **说明** - - 导入指定 json 文件中的 `plugins` 以及 `plugin_dirs` 下多个插件,以 `_` 开头的插件不会被导入! - - - -* **参数** - - - * `file_path: str`: 指定 json 文件路径 - - - * `encoding: str`: 指定 json 文件编码 - - - -* **返回** - - - * `Set[Plugin]` - - - -## `load_from_toml(file_path, encoding='utf-8')` - - -* **说明** - - 导入指定 toml 文件 `[tool.nonebot]` 中的 `plugins` 以及 `plugin_dirs` 下多个插件, - 以 `_` 开头的插件不会被导入! - - - -* **参数** - - - * `file_path: str`: 指定 toml 文件路径 - - - * `encoding: str`: 指定 toml 文件编码 - - - -* **返回** - - - * `Set[Plugin]` - - - -## `load_builtin_plugins(name='echo')` - - -* **说明** - - 导入 NoneBot 内置插件, 默认导入 `echo` 插件 - - - -* **返回** - - - * `Plugin` - - - -## `require(name)` - - -* **说明** - - 获取一个插件的导出内容 - - - -* **参数** - - - * `name: str`: 插件名,与 `load_plugin` 参数一致。如果为 `load_plugins` 导入的插件,则为文件(夹)名。 - - - -* **返回** - - - * `Export` - - - -* **异常** - - - * `RuntimeError`: 插件无法加载 - - - -## _class_ `Export` - -基类:`dict` - - -* **说明** - - 插件导出内容以使得其他插件可以获得。 - - - -* **示例** - - -```python -nonebot.export().default = "bar" - -@nonebot.export() -def some_function(): - pass - -# this doesn't work before python 3.9 -# use -# export = nonebot.export(); @export.sub -# instead -# See also PEP-614: https://www.python.org/dev/peps/pep-0614/ -@nonebot.export().sub -def something_else(): - pass -``` - - -## `export()` - - -* **说明** - - 获取插件的导出内容对象 - - - -* **返回** - - - * `Export` diff --git a/website/docs/api/rule.md b/website/docs/api/rule.md deleted file mode 100644 index aab3e68c..00000000 --- a/website/docs/api/rule.md +++ /dev/null @@ -1,267 +0,0 @@ -# NoneBot.rule 模块 - -## 规则 - -每个事件响应器 `Matcher` 拥有一个匹配规则 `Rule` ,其中是 `RuleChecker` 的集合,只有当所有 `RuleChecker` 检查结果为 `True` 时继续运行。 - -:::tip 提示 -`RuleChecker` 既可以是 async function 也可以是 sync function -::: - - -## _class_ `Rule` - -基类:`object` - - -* **说明** - - `Matcher` 规则类,当事件传递时,在 `Matcher` 运行前进行检查。 - - - -* **示例** - - -```python -Rule(async_function) & sync_function -# 等价于 -from nonebot.utils import run_sync -Rule(async_function, run_sync(sync_function)) -``` - - -### `__init__(*checkers)` - - -* **参数** - - - * `*checkers: Union[T_RuleChecker, Handler]`: RuleChecker - - - -### `checkers` - - -* **说明** - - 存储 `RuleChecker` - - - -* **类型** - - - * `Set[Handler]` - - - -### _async_ `__call__(bot, event, state, stack=None, dependency_cache=None)` - - -* **说明** - - 检查是否符合所有规则 - - - -* **参数** - - - * `bot: Bot`: Bot 对象 - - - * `event: Event`: Event 对象 - - - * `state: T_State`: 当前 State - - - * `stack: Optional[AsyncExitStack]`: 异步上下文栈 - - - * `dependency_cache: Optional[Dict[Callable[..., Any], Any]]`: 依赖缓存 - - - -* **返回** - - - * `bool` - - - -## `startswith(msg, ignorecase=False)` - - -* **说明** - - 匹配消息开头 - - - -* **参数** - - - * `msg: str`: 消息开头字符串 - - - -## `endswith(msg, ignorecase=False)` - - -* **说明** - - 匹配消息结尾 - - - -* **参数** - - - * `msg: str`: 消息结尾字符串 - - - -## `keyword(*keywords)` - - -* **说明** - - 匹配消息关键词 - - - -* **参数** - - - * `*keywords: str`: 关键词 - - - -## `command(*cmds)` - - -* **说明** - - 命令形式匹配,根据配置里提供的 `command_start`, `command_sep` 判断消息是否为命令。 - - 可以通过 `state["_prefix"]["command"]` 获取匹配成功的命令(例:`("test",)`),通过 `state["_prefix"]["raw_command"]` 获取匹配成功的原始命令文本(例:`"/test"`)。 - - - -* **参数** - - - * `*cmds: Union[str, Tuple[str, ...]]`: 命令内容 - - - -* **示例** - - 使用默认 `command_start`, `command_sep` 配置 - - 命令 `("test",)` 可以匹配:`/test` 开头的消息 - 命令 `("test", "sub")` 可以匹配”`/test.sub` 开头的消息 - - -:::tip 提示 -命令内容与后续消息间无需空格! -::: - - -## _class_ `ArgumentParser` - -基类:`argparse.ArgumentParser` - - -* **说明** - - `shell_like` 命令参数解析器,解析出错时不会退出程序。 - - - -## `shell_command(*cmds, parser=None)` - - -* **说明** - - 支持 `shell_like` 解析参数的命令形式匹配,根据配置里提供的 `command_start`, `command_sep` 判断消息是否为命令。 - - 可以通过 `state["_prefix"]["command"]` 获取匹配成功的命令(例:`("test",)`),通过 `state["_prefix"]["raw_command"]` 获取匹配成功的原始命令文本(例:`"/test"`)。 - - 可以通过 `state["argv"]` 获取用户输入的原始参数列表 - - 添加 `parser` 参数后, 可以自动处理消息并将结果保存在 `state["args"]` 中。 - - - -* **参数** - - - * `*cmds: Union[str, Tuple[str, ...]]`: 命令内容 - - - * `parser: Optional[ArgumentParser]`: `nonebot.rule.ArgumentParser` 对象 - - - -* **示例** - - 使用默认 `command_start`, `command_sep` 配置,更多示例参考 `argparse` 标准库文档。 - - -```python -from nonebot.rule import ArgumentParser - -parser = ArgumentParser() -parser.add_argument("-a", action="store_true") - -rule = shell_command("ls", parser=parser) -``` - -:::tip 提示 -命令内容与后续消息间无需空格! -::: - - -## `regex(regex, flags=0)` - - -* **说明** - - 根据正则表达式进行匹配。 - - 可以通过 `state["_matched"]` `state["_matched_groups"]` `state["_matched_dict"]` - 获取正则表达式匹配成功的文本。 - - - -* **参数** - - - * `regex: str`: 正则表达式 - - - * `flags: Union[int, re.RegexFlag]`: 正则标志 - - -:::tip 提示 -正则表达式匹配使用 search 而非 match,如需从头匹配请使用 `r"^xxx"` 来确保匹配开头 -::: - - -## `to_me()` - - -* **说明** - - 通过 `event.is_tome()` 判断事件是否与机器人有关 - - - -* **参数** - - - * 无 diff --git a/website/docs/api/typing.md b/website/docs/api/typing.md deleted file mode 100644 index b380762f..00000000 --- a/website/docs/api/typing.md +++ /dev/null @@ -1,363 +0,0 @@ -# NoneBot.typing 模块 - -## 类型 - -下面的文档中,「类型」部分使用 Python 的 Type Hint 语法,见 [PEP 484](https://www.python.org/dev/peps/pep-0484/)、[PEP 526](https://www.python.org/dev/peps/pep-0526/) 和 [typing](https://docs.python.org/3/library/typing.html)。 - -除了 Python 内置的类型,下面还出现了如下 NoneBot 自定类型,实际上它们是 Python 内置类型的别名。 - -以下类型均可从 nonebot.typing 模块导入。 - - -## `T_State` - - -* **类型** - - `Dict[Any, Any]` - - - -* **说明** - - 事件处理状态 State 类型 - - - - -## `T_StateFactory` - - -* **类型** - - `Callable[[Bot, Event], Awaitable[T_State]]` - - - -* **说明** - - 事件处理状态 State 类工厂函数 - - - - -## `T_BotConnectionHook` - - -* **类型** - - `Callable[[Bot], Awaitable[None]]` - - - -* **说明** - - Bot 连接建立时执行的函数 - - - - -## `T_BotDisconnectionHook` - - -* **类型** - - `Callable[[Bot], Awaitable[None]]` - - - -* **说明** - - Bot 连接断开时执行的函数 - - - - -## `T_CallingAPIHook` - - -* **类型** - - `Callable[[Bot, str, Dict[str, Any]], Awaitable[None]]` - - - -* **说明** - - `bot.call_api` 时执行的函数 - - - - -## `T_CalledAPIHook` - - -* **类型** - - `Callable[[Bot, Optional[Exception], str, Dict[str, Any], Any], Awaitable[None]]` - - - -* **说明** - - `bot.call_api` 后执行的函数,参数分别为 bot, exception, api, data, result - - - - -## `T_EventPreProcessor` - - -* **类型** - - `Callable[..., Union[None, Awaitable[None]]]` - - - -* **依赖参数** - - - * `BotParam`: Bot 对象 - - - * `EventParam`: Event 对象 - - - * `StateParam`: State 对象 - - - -* **说明** - - 事件预处理函数 EventPreProcessor 类型 - - - - -## `T_EventPostProcessor` - - -* **类型** - - `Callable[..., Union[None, Awaitable[None]]]` - - - -* **依赖参数** - - - * `BotParam`: Bot 对象 - - - * `EventParam`: Event 对象 - - - * `StateParam`: State 对象 - - - -* **说明** - - 事件预处理函数 EventPostProcessor 类型 - - - - -## `T_RunPreProcessor` - - -* **类型** - - `Callable[..., Union[None, Awaitable[None]]]` - - - -* **依赖参数** - - - * `BotParam`: Bot 对象 - - - * `EventParam`: Event 对象 - - - * `StateParam`: State 对象 - - - * `MatcherParam`: Matcher 对象 - - - -* **说明** - - 事件响应器运行前预处理函数 RunPreProcessor 类型 - - - - -## `T_RunPostProcessor` - - -* **类型** - - `Callable[..., Union[None, Awaitable[None]]]` - - - -* **依赖参数** - - - * `BotParam`: Bot 对象 - - - * `EventParam`: Event 对象 - - - * `StateParam`: State 对象 - - - * `MatcherParam`: Matcher 对象 - - - * `ExceptionParam`: 异常对象(可能为 None) - - - -* **说明** - - 事件响应器运行前预处理函数 RunPostProcessor 类型,第二个参数为运行时产生的错误(如果存在) - - - - -## `T_RuleChecker` - - -* **类型** - - `Callable[..., Union[bool, Awaitable[bool]]]` - - - -* **依赖参数** - - - * `BotParam`: Bot 对象 - - - * `EventParam`: Event 对象 - - - * `StateParam`: State 对象 - - - -* **说明** - - RuleChecker 即判断是否响应事件的处理函数。 - - - - -## `T_PermissionChecker` - - -* **类型** - - `Callable[..., Union[bool, Awaitable[bool]]]` - - - -* **依赖参数** - - - * `BotParam`: Bot 对象 - - - * `EventParam`: Event 对象 - - - -* **说明** - - RuleChecker 即判断是否响应消息的处理函数。 - - - - -## `T_Handler` - - -* **类型** - - `Callable[..., Any]` - - - -* **说明** - - Handler 处理函数。 - - - - -## `T_DependencyCache` - - -* **类型** - - `Dict[T_Handler, Any]` - - - -* **说明** - - 依赖缓存, 用于存储依赖函数的返回值 - - - - -## `T_ArgsParser` - - -* **类型** - - `Callable[[Bot, Event, T_State], Union[Awaitable[None], Awaitable[NoReturn]]]` - - - -* **说明** - - ArgsParser 即消息参数解析函数,在 Matcher.got 获取参数时被运行。 - - - - -## `T_TypeUpdater` - - -* **类型** - - `Callable[[Bot, Event, T_State, str], Awaitable[str]]` - - - -* **说明** - - TypeUpdater 在 Matcher.pause, Matcher.reject 时被运行,用于更新响应的事件类型。默认会更新为 `message`。 - - - - -## `T_PermissionUpdater` - - -* **类型** - - `Callable[[Bot, Event, T_State, Permission], Awaitable[Permission]]` - - - -* **说明** - - PermissionUpdater 在 Matcher.pause, Matcher.reject 时被运行,用于更新会话对象权限。默认会更新为当前事件的触发对象。 diff --git a/website/docs/api/utils.md b/website/docs/api/utils.md deleted file mode 100644 index 9874687e..00000000 --- a/website/docs/api/utils.md +++ /dev/null @@ -1,80 +0,0 @@ -# NoneBot.utils 模块 - - -## `escape_tag(s)` - - -* **说明** - - 用于记录带颜色日志时转义 `` 类型特殊标签 - - - -* **参数** - - - * `s: str`: 需要转义的字符串 - - - -* **返回** - - - * `str` - - - -## `run_sync(func)` - - -* **说明** - - 一个用于包装 sync function 为 async function 的装饰器 - - - -* **参数** - - - * `func: Callable[P, R]`: 被装饰的同步函数 - - - -* **返回** - - - * `Callable[P, Awaitable[R]]` - - - -## _class_ `DataclassEncoder` - -基类:`json.encoder.JSONEncoder` - - -* **说明** - - 在JSON序列化 `Message` (List[Dataclass]) 时使用的 `JSONEncoder` - - - -## `logger_wrapper(logger_name)` - - -* **说明** - - -用于打印 adapter 的日志。 - - -* **Log 参数** - - - -* `level: Literal['WARNING', 'DEBUG', 'INFO']`: 日志等级 - - -* `message: str`: 日志信息 - - -* `exception: Optional[Exception]`: 异常信息 diff --git a/website/docs/guide/start/README.md b/website/docs/guide/README.md similarity index 89% rename from website/docs/guide/start/README.md rename to website/docs/guide/README.md index 186fe7c0..daa7704f 100644 --- a/website/docs/guide/start/README.md +++ b/website/docs/guide/README.md @@ -1,20 +1,16 @@ --- sidebar_position: 1 -id: guide +id: index slug: /guide options: menu: weight: 10 - catogory: guide + category: guide --- # 概览 - - :::tip 提示 初次使用时可能会觉得这里的概览过于枯燥,可以先简单略读之后直接前往 [安装](./installation.md) 查看安装方法,并进行后续的基础使用教程。 ::: diff --git a/website/docs/guide/start/basic-configuration.md b/website/docs/guide/basic-configuration.md similarity index 99% rename from website/docs/guide/start/basic-configuration.md rename to website/docs/guide/basic-configuration.md index 4df965b7..9a7cc59c 100644 --- a/website/docs/guide/start/basic-configuration.md +++ b/website/docs/guide/basic-configuration.md @@ -4,7 +4,7 @@ sidebar_position: 5 options: menu: weight: 50 - catogory: guide + category: guide --- # 基本配置 diff --git a/website/docs/guide/coding/_category_.json b/website/docs/guide/coding/_category_.json deleted file mode 100644 index 6f8024f6..00000000 --- a/website/docs/guide/coding/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "编写插件", - "position": 2 -} diff --git a/website/docs/guide/coding/creating-a-handler.md b/website/docs/guide/creating-a-handler.md similarity index 92% rename from website/docs/guide/coding/creating-a-handler.md rename to website/docs/guide/creating-a-handler.md index 647fb355..eb7adb73 100644 --- a/website/docs/guide/coding/creating-a-handler.md +++ b/website/docs/guide/creating-a-handler.md @@ -1,10 +1,10 @@ --- -sidebar_position: 4 +sidebar_position: 9 options: menu: - weight: 140 - catogory: guide + weight: 90 + category: guide --- # 事件处理 @@ -122,8 +122,8 @@ async def handle(bot: Bot): 参数分别为: -1. [nonebot.adapters.Bot](../api/adapters/#class-bot): 即事件上报连接对应的 Bot 对象,为 BaseBot 的子类。特别注意,此处的类型注释可以替换为指定的 Bot 类型,例如:`nonebot.adapters.cqhttp.Bot`,只有在上报事件的 Bot 类型与类型注释相符时才会执行该处理函数!可用于多平台进行不同的处理。 -2. [nonebot.adapters.Event](../api/adapters/#class-event): 即上报事件对象,可以获取到上报的所有信息。 +1. [nonebot.adapters.Bot](../api/adapters/README.md#class-bot): 即事件上报连接对应的 Bot 对象,为 BaseBot 的子类。特别注意,此处的类型注释可以替换为指定的 Bot 类型,例如:`nonebot.adapters.cqhttp.Bot`,只有在上报事件的 Bot 类型与类型注释相符时才会执行该处理函数!可用于多平台进行不同的处理。 +2. [nonebot.adapters.Event](../api/adapters/README.md#class-event): 即上报事件对象,可以获取到上报的所有信息。 3. [state](../api/typing.md#t-state): 状态字典,可以存储任意的信息,其中还包含一些特殊的值以获取 NoneBot 内部处理时的一些信息,如: - `state["_current_key"]`: 存储当前 `got` 获取的参数名 diff --git a/website/docs/guide/coding/creating-a-matcher.md b/website/docs/guide/creating-a-matcher.md similarity index 88% rename from website/docs/guide/coding/creating-a-matcher.md rename to website/docs/guide/creating-a-matcher.md index 3be42481..e028d718 100644 --- a/website/docs/guide/coding/creating-a-matcher.md +++ b/website/docs/guide/creating-a-matcher.md @@ -1,10 +1,10 @@ --- -sidebar_position: 3 +sidebar_position: 8 options: menu: - weight: 130 - catogory: guide + weight: 80 + category: guide --- # 注册事件响应器 @@ -50,7 +50,7 @@ async def get_weather(city: str): 从这里开始,你需要对 Python 的 asyncio 编程有所了解,因为 NoneBot 是完全基于 asyncio 的,具体可以参考 [廖雪峰的 Python 教程](https://www.liaoxuefeng.com/wiki/1016959663602400/1017959540289152) ::: -## [事件响应器](../../api/matcher.md) +## [事件响应器](../api/matcher.md) ```python{5} from nonebot import on_command @@ -81,11 +81,11 @@ weather = on_command("天气", rule=to_me(), permission=Permission(), priority=5 - `on_message()` ~ `on("message")`: 消息事件响应器 - `on_request()` ~ `on("request")`: 请求事件响应器 - `on_notice()` ~ `on("notice")`: 通知事件响应器 -- `on_startswith(str)` ~ `on("message", startswith(str))`: 消息开头匹配响应器,参考 [startswith](../../api/rule.md#startswith-msg) -- `on_endswith(str)` ~ `on("message", endswith(str))`: 消息结尾匹配响应器,参考 [endswith](../../api/rule.md#endswith-msg) -- `on_keyword(set)` ~ `on("message", keyword(str))`: 消息关键词匹配响应器,参考 [keyword](../../api/rule.md#keyword-keywords) -- `on_command(str|tuple)` ~ `on("message", command(str|tuple))`: 命令响应器,参考 [command](../../api/rule.md#command-cmds) -- `on_regex(pattern_str)` ~ `on("message", regex(pattern_str))`: 正则匹配处理器,参考 [regex](../../api/rule.md#regex-regex-flags-0) +- `on_startswith(str)` ~ `on("message", startswith(str))`: 消息开头匹配响应器,参考 [startswith](../api/rule.md#startswith-msg) +- `on_endswith(str)` ~ `on("message", endswith(str))`: 消息结尾匹配响应器,参考 [endswith](../api/rule.md#endswith-msg) +- `on_keyword(set)` ~ `on("message", keyword(str))`: 消息关键词匹配响应器,参考 [keyword](../api/rule.md#keyword-keywords) +- `on_command(str|tuple)` ~ `on("message", command(str|tuple))`: 命令响应器,参考 [command](../api/rule.md#command-cmds) +- `on_regex(pattern_str)` ~ `on("message", regex(pattern_str))`: 正则匹配处理器,参考 [regex](../api/rule.md#regex-regex-flags-0) ### 匹配规则 rule @@ -116,11 +116,11 @@ NoneBot 内置的事件响应器中,所有 `message` 类的事件响应器默 rule 的出现使得 nonebot 对事件的响应可以非常自由,nonebot 内置了一些规则: -- [startswith(msg)](../../api/rule.md#startswith-msg) -- [endswith(msg)](../../api/rule.md#endswith-msg) -- [keyword(\*keywords)](../../api/rule.md#keyword-keywords) -- [command(\*cmds)](../../api/rule.md#command-cmds) -- [regex(regex, flag)](../../api/rule.md#regex-regex-flags-0) +- [startswith(msg)](../api/rule.md#startswith-msg) +- [endswith(msg)](../api/rule.md#endswith-msg) +- [keyword(\*keywords)](../api/rule.md#keyword-keywords) +- [command(\*cmds)](../api/rule.md#command-cmds) +- [regex(regex, flag)](../api/rule.md#regex-regex-flags-0) 以上规则都是返回类型为 `Rule` 的函数,`Rule` 由非负个 `RuleChecker` 组成,当所有 `RuleChecker` 返回 `True` 时匹配成功。这些 `Rule`, `RuleChecker` 的形式如下: diff --git a/website/docs/guide/coding/creating-a-plugin.md b/website/docs/guide/creating-a-plugin.md similarity index 98% rename from website/docs/guide/coding/creating-a-plugin.md rename to website/docs/guide/creating-a-plugin.md index dc896101..3ab21e35 100644 --- a/website/docs/guide/coding/creating-a-plugin.md +++ b/website/docs/guide/creating-a-plugin.md @@ -1,10 +1,10 @@ --- -sidebar_position: 2 +sidebar_position: 7 options: menu: - weight: 120 - catogory: guide + weight: 70 + category: guide --- # 创建插件 diff --git a/website/docs/guide/start/creating-a-project.md b/website/docs/guide/creating-a-project.md similarity index 98% rename from website/docs/guide/start/creating-a-project.md rename to website/docs/guide/creating-a-project.md index 858f75c2..ce2a76b0 100644 --- a/website/docs/guide/start/creating-a-project.md +++ b/website/docs/guide/creating-a-project.md @@ -4,7 +4,7 @@ sidebar_position: 4 options: menu: weight: 40 - catogory: guide + category: guide --- # 创建一个完整的项目 diff --git a/website/docs/guide/coding/end-or-start.md b/website/docs/guide/end-or-start.md similarity index 100% rename from website/docs/guide/coding/end-or-start.md rename to website/docs/guide/end-or-start.md diff --git a/website/docs/guide/feishu-guide.md b/website/docs/guide/feishu-guide.md index b58aca83..83c7fb24 100644 --- a/website/docs/guide/feishu-guide.md +++ b/website/docs/guide/feishu-guide.md @@ -99,4 +99,3 @@ async def feishu_helper(bot: FeishuBot, event: MessageEvent, state: T_State): 以上代码注册了一个对飞书平台适用的`say`指令,并会提取`/say`之后的内容发送到事件所对应的群或私聊。 大功告成!现在可以试试向机器人发送类似`/say Hello, Feishu!`的消息进行测试了。 - diff --git a/website/docs/guide/start/getting-started.md b/website/docs/guide/getting-started.md similarity index 99% rename from website/docs/guide/start/getting-started.md rename to website/docs/guide/getting-started.md index 251dd428..fc19eb8d 100644 --- a/website/docs/guide/start/getting-started.md +++ b/website/docs/guide/getting-started.md @@ -4,7 +4,7 @@ sidebar_position: 3 options: menu: weight: 30 - catogory: guide + category: guide --- # 开始使用 diff --git a/website/docs/guide/start/installation.md b/website/docs/guide/installation.md similarity index 97% rename from website/docs/guide/start/installation.md rename to website/docs/guide/installation.md index 75868e48..081a0e2e 100644 --- a/website/docs/guide/start/installation.md +++ b/website/docs/guide/installation.md @@ -4,7 +4,7 @@ sidebar_position: 2 options: menu: weight: 20 - catogory: guide + category: guide --- # 安装 @@ -115,7 +115,7 @@ nb plugin install ### 其他插件 -还有更多的插件在 [这里](/store.html) 等着你发现~ +还有更多的插件在 [这里](/store) 等着你发现~ ## 安装开发环境(可选) diff --git a/website/docs/guide/coding/loading-a-plugin.md b/website/docs/guide/loading-a-plugin.md similarity index 97% rename from website/docs/guide/coding/loading-a-plugin.md rename to website/docs/guide/loading-a-plugin.md index 164369e8..1913008f 100644 --- a/website/docs/guide/coding/loading-a-plugin.md +++ b/website/docs/guide/loading-a-plugin.md @@ -1,10 +1,10 @@ --- -sidebar_position: 1 +sidebar_position: 6 options: menu: - weight: 110 - catogory: guide + weight: 60 + category: guide --- # 加载插件 @@ -42,7 +42,7 @@ if __name__ == "__main__": - 命令 `say`:可由**superuser**使用,可以将消息内容由特殊纯文本转为富文本 - 命令 `echo`:可由任何人使用,将消息原样返回 -以上命令均需要指定机器人,即私聊、群聊内@机器人、群聊内称呼机器人昵称。参考 [Rule: to_me](../../api/rule.md#to-me) +以上命令均需要指定机器人,即私聊、群聊内@机器人、群聊内称呼机器人昵称。参考 [Rule: to_me](../api/rule.md#to-me) ## 加载插件目录 @@ -71,7 +71,7 @@ if __name__ == "__main__": ::: :::danger 警告 -插件间不应该存在过多的耦合,如果确实需要导入某个插件内的数据,可以参考 [进阶-跨插件访问](../../advanced/export-and-require.md) +插件间不应该存在过多的耦合,如果确实需要导入某个插件内的数据,可以参考 [进阶-跨插件访问](../advanced/export-and-require.md) ::: ## 加载单个插件 diff --git a/website/docs/guide/mirai-guide.md b/website/docs/guide/mirai-guide.md index aa598dfa..60b72a35 100644 --- a/website/docs/guide/mirai-guide.md +++ b/website/docs/guide/mirai-guide.md @@ -133,11 +133,11 @@ pip install nonebot-adapter-mirai from nonebot.adapters.mirai import Bot nonebot.init() - nonebot.get_driver().register_adapter('mirai', - Bot, + nonebot.get_driver().register_adapter('mirai', + Bot, qq=12345678) # qq参数需要填在mah中登录的qq, 如果需要多个帐号, 可以填写类似于 [123456,789100] 的数组形式 - + nonebot.load_builtin_plugins() # 加载 nonebot 内置插件 nonebot.run() ``` @@ -246,7 +246,7 @@ async def _echo(bot: Bot, event: MessageEvent): 它具有两种行为 -- 在指定机器人,即私聊、群聊内@机器人、群聊内称呼机器人昵称的情况下 (即 [Rule: to_me](../api/rule.md#to-me)), 如果消息内包含 `reply` 字段, 则该消息会被机器人重复一次 +- 在指定机器人,即私聊、群聊内@机器人、群聊内称呼机器人昵称的情况下 (即 [Rule: to_me](../api/rule.md#to_me)), 如果消息内包含 `reply` 字段, 则该消息会被机器人重复一次 - 在执行指令`miecho xxx`时, 机器人会发送回参数`xxx` diff --git a/website/docs/guide/start/_category_.json b/website/docs/guide/start/_category_.json deleted file mode 100644 index 1962f43b..00000000 --- a/website/docs/guide/start/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "开始", - "position": 1 -} diff --git a/website/sidebars.js b/website/sidebars.js index 1ad7e6b8..1ad12483 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -14,8 +14,64 @@ /** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ const sidebars = { // By default, Docusaurus generates a sidebar from the docs folder structure - guide: [{ type: "autogenerated", dirName: "guide" }], - advanced: [{ type: "autogenerated", dirName: "advanced" }], + guide: [ + { + type: "category", + label: "开始", + collapsible: false, + items: [ + "guide/index", + "guide/installation", + "guide/getting-started", + "guide/creating-a-project", + "guide/basic-configuration", + ], + }, + { + type: "category", + label: "编写插件", + collapsible: false, + items: [ + "guide/loading-a-plugin", + "guide/creating-a-plugin", + "guide/creating-a-matcher", + "guide/creating-a-handler", + "guide/end-or-start", + ], + }, + { + type: "category", + label: "协议适配", + collapsible: false, + items: [ + "guide/cqhttp-guide", + "guide/ding-guide", + "guide/mirai-guide", + "guide/feishu-guide", + ], + }, + ], + advanced: [ + { + type: "category", + label: "进阶", + collapsible: false, + items: [ + "advanced/index", + "advanced/scheduler", + "advanced/permission", + "advanced/runtime-hook", + "advanced/export-and-require", + "advanced/overloaded-handlers", + ], + }, + { + type: "category", + label: "发布", + collapsible: false, + items: ["advanced/publish-plugin"], + }, + ], api: [{ type: "autogenerated", dirName: "api" }], // But you can create a sidebar manually diff --git a/website/yarn.lock b/yarn.lock similarity index 99% rename from website/yarn.lock rename to yarn.lock index 4e043dc2..1809a587 100644 --- a/website/yarn.lock +++ b/yarn.lock @@ -1553,10 +1553,10 @@ resolved "https://registry.nlark.com/@seznam/compose-react-refs/download/@seznam/compose-react-refs-1.0.6.tgz#6ec4e70bdd6e32f8e70b4100f27267cf306bd8df" integrity sha1-bsTnC91uMvjnC0EA8nJnzzBr2N8= -"@sideway/address@^4.1.0": - version "4.1.2" - resolved "https://registry.nlark.com/@sideway/address/download/@sideway/address-4.1.2.tgz?cache=0&sync_timestamp=1620367945721&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40sideway%2Faddress%2Fdownload%2F%40sideway%2Faddress-4.1.2.tgz#811b84333a335739d3969cfc434736268170cad1" - integrity sha1-gRuEMzozVznTlpz8Q0c2JoFwytE= +"@sideway/address@^4.1.3": + version "4.1.3" + resolved "https://registry.npmmirror.com/@sideway/address/download/@sideway/address-4.1.3.tgz#d93cce5d45c5daec92ad76db492cc2ee3c64ab27" + integrity sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ== dependencies: "@hapi/hoek" "^9.0.0" @@ -3230,20 +3230,20 @@ dns-txt@^2.0.2: dependencies: buffer-indexof "^1.0.0" -docusaurus-preset-nonepress@canary: - version "0.0.0-107" - resolved "https://registry.npmmirror.com/docusaurus-preset-nonepress/download/docusaurus-preset-nonepress-0.0.0-107.tgz#b9a1727f5452fc7d15d706aa9e07daf0079b665f" - integrity sha512-26xugwSdg3iIlzoNKOaw5aGAFVnyzAX23q7xTixzbYVtDXJc628trbm3kJ+YzatXaOz+LkItBrB3kqIQMK5UJw== +docusaurus-preset-nonepress@0.0.0-108, docusaurus-preset-nonepress@canary: + version "0.0.0-108" + resolved "https://registry.npmmirror.com/docusaurus-preset-nonepress/download/docusaurus-preset-nonepress-0.0.0-108.tgz#37a4068c71fe335d2486d9effcadcb18503b50cb" + integrity sha512-GuH22RrrI5FWiUPIKEWWisWJ/laymWMY+aFbfXY5fNLzarLFkAmshUpGHuuAMAnL/U1W812RYyJNoNHnUA/XgQ== dependencies: "@docusaurus/core" "2.0.0-beta.9" "@docusaurus/plugin-content-docs" "2.0.0-beta.9" "@docusaurus/plugin-content-pages" "2.0.0-beta.9" - docusaurus-theme-nonepress "0.0.0-107" + docusaurus-theme-nonepress "0.0.0-108" -docusaurus-theme-nonepress@0.0.0-107: - version "0.0.0-107" - resolved "https://registry.npmmirror.com/docusaurus-theme-nonepress/download/docusaurus-theme-nonepress-0.0.0-107.tgz#bc9a4ee894f7162848e71abebca9ce2aad61378f" - integrity sha512-ShYfDCHLP/g+RIMB+ET89u9/43EwUvuSeuHwsr1dvxSn/yebiw4K5ZBFZOaJLw0ftcFolgqt2tJL5i5DagQLNg== +docusaurus-theme-nonepress@0.0.0-108: + version "0.0.0-108" + resolved "https://registry.npmmirror.com/docusaurus-theme-nonepress/download/docusaurus-theme-nonepress-0.0.0-108.tgz#d1e381a446d1179841ae4fe5f51cd6314df9b0a1" + integrity sha512-PSawVRZFvn6kBKBsiET7Ihs98jRxnq+Mg9J6KRTTGdJBOyUCBd/9E1oE2YF9VaQGil0NbhuM7Avysri4YP3meA== dependencies: "@docsearch/react" "^3.0.0-alpha.39" "@docusaurus/core" "2.0.0-beta.9" @@ -3392,9 +3392,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.896: - version "1.4.6" - resolved "https://registry.npmmirror.com/electron-to-chromium/download/electron-to-chromium-1.4.6.tgz#7bf0c03001bcdbd0fc57a45c6b23bc6432246ade" - integrity sha512-YDZAXP0P8USm0YoyIXWijxFT3tJHbt3WwY7CTQiK3+Ad6Ai/b9N4GqfDR107jfGilAfxl7Gkhb+h0KPoKXAgqw== + version "1.4.7" + resolved "https://registry.npmmirror.com/electron-to-chromium/download/electron-to-chromium-1.4.7.tgz#58e0b4ec9096ee1422e4d9e83ceeb05b0cf076eb" + integrity sha512-UPy2MsQw1OdcbxR7fvwWZH/rXcv+V26+uvQVHx0fGa1kqRfydtfOw+NMGAvZJ63hyaH4aEBxbhSEtqbpliSNWA== emoji-regex@^8.0.0: version "8.0.0" @@ -4721,13 +4721,13 @@ jest-worker@^27.0.2, jest-worker@^27.0.6: supports-color "^8.0.0" joi@^17.4.0, joi@^17.4.2: - version "17.4.2" - resolved "https://registry.nlark.com/joi/download/joi-17.4.2.tgz#02f4eb5cf88e515e614830239379dcbbe28ce7f7" - integrity sha1-AvTrXPiOUV5hSDAjk3ncu+KM5/c= + version "17.4.3" + resolved "https://registry.npmmirror.com/joi/download/joi-17.4.3.tgz#462941fd994f11fcb92f59ba9f004706b9a45d17" + integrity sha512-8W3oOogFRuy2aLAdlhMpzS4fNBIMiyIa3xBaBYMFgA272/d5sob1DAth6jjo+5VrOlzbEgmbBGbU4cLrffPKog== dependencies: "@hapi/hoek" "^9.0.0" "@hapi/topo" "^5.0.0" - "@sideway/address" "^4.1.0" + "@sideway/address" "^4.1.3" "@sideway/formula" "^3.0.0" "@sideway/pinpoint" "^2.0.0" @@ -5148,11 +5148,6 @@ mime@1.6.0: resolved "https://registry.npmmirror.com/mime/download/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE= -mime@^2.3.1: - version "2.6.0" - resolved "https://registry.npmmirror.com/mime/download/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" - integrity sha1-oqaCqVzU0MsdYlfij4PafjWAA2c= - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -5204,6 +5199,11 @@ mkdirp@^0.5.5, mkdirp@~0.5.1: dependencies: minimist "^1.2.5" +mrmime@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/mrmime/download/mrmime-1.0.0.tgz#14d387f0585a5233d291baba339b063752a2398b" + integrity sha1-FNOH8FhaUjPSkbq6M5sGN1KiOYs= + ms@2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -5996,6 +5996,11 @@ prepend-http@^2.0.0: resolved "https://registry.nlark.com/prepend-http/download/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= +prettier@^2.5.0: + version "2.5.0" + resolved "https://registry.npmmirror.com/prettier/download/prettier-2.5.0.tgz#a6370e2d4594e093270419d9cc47f7670488f893" + integrity sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg== + pretty-error@^4.0.0: version "4.0.0" resolved "https://registry.npmmirror.com/pretty-error/download/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" @@ -6829,12 +6834,12 @@ signal-exit@^3.0.2, signal-exit@^3.0.3: integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== sirv@^1.0.7: - version "1.0.18" - resolved "https://registry.npmmirror.com/sirv/download/sirv-1.0.18.tgz#105fab52fb656ce8a2bebbf36b11052005952899" - integrity sha1-EF+rUvtlbOiivrvzaxEFIAWVKJk= + version "1.0.19" + resolved "https://registry.npmmirror.com/sirv/download/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" + integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== dependencies: "@polka/url" "^1.0.0-next.20" - mime "^2.3.1" + mrmime "^1.0.0" totalist "^1.0.0" sisteransi@^1.0.5: