🔖 Release: v2.0.0 (#2070)

This commit is contained in:
Ju4tCode 2023-06-01 14:18:16 +08:00 committed by GitHub
parent 8af21f6e76
commit f3d5c1f226
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 1337 additions and 576 deletions

View File

@ -1,3 +1,3 @@
# Changelog
See [changelog.md](./website/src/pages/changelog.md) or <https://v2.nonebot.dev/changelog>
See [changelog.md](./website/src/pages/changelog.md) or <https://nonebot.dev/changelog>

View File

@ -84,7 +84,7 @@ NoneBot2 的代码风格遵循 [PEP 8](https://www.python.org/dev/peps/pep-0008/
## 为社区做贡献
你可以在 NoneBot 商店上架自己的适配器、插件、机器人,具体步骤可参考 [发布插件](https://v2.nonebot.dev/docs/developer/plugin-publishing) 一节。
你可以在 NoneBot 商店上架自己的适配器、插件、机器人,具体步骤可参考 [发布插件](https://nonebot.dev/docs/developer/plugin-publishing) 一节。
我们仅对插件的兼容性进行简单测试,并会在下一个版本发布前对与该版本不兼容的插件作出处理。

View File

@ -1,6 +1,6 @@
<!-- markdownlint-disable MD033 MD041 -->
<p align="center">
<a href="https://v2.nonebot.dev/"><img src="https://v2.nonebot.dev/logo.png" width="200" height="200" alt="nonebot"></a>
<a href="https://nonebot.dev/"><img src="https://nonebot.dev/logo.png" width="200" height="200" alt="nonebot"></a>
</p>
<div align="center">
@ -69,16 +69,16 @@ _✨ 跨平台 Python 异步机器人框架 ✨_
</p>
<p align="center">
<a href="https://v2.nonebot.dev/">文档</a>
<a href="https://nonebot.dev/">文档</a>
·
<a href="https://v2.nonebot.dev/docs/quick-start">快速上手</a>
<a href="https://nonebot.dev/docs/quick-start">快速上手</a>
·
<a href="#插件">文档打不开?</a>
</p>
<p align="center">
<a href="https://asciinema.org/a/569440">
<img src="https://v2.nonebot.dev/img/setup.svg">
<img src="https://nonebot.dev/img/setup.svg">
</a>
</p>
@ -90,7 +90,7 @@ NoneBot2 是一个现代、跨平台、可扩展的 Python 聊天机器人框架
- 异步优先:基于 Python 的异步特性,即使是~~非常~~大量的消息,也能吞吐自如
- 易于开发:配合 NB-CLI 脚手架,代码编写上手简单,没有过多的冗余代码,可以让开发者专注于业务逻辑
- 生而可靠100% 类型注解覆盖,配合编辑器的类型推导功能,能将绝大多数的 Bug 杜绝在编辑器中 ([编辑器支持](https://v2.nonebot.dev/docs/editor-support))
- 生而可靠100% 类型注解覆盖,配合编辑器的类型推导功能,能将绝大多数的 Bug 杜绝在编辑器中 ([编辑器支持](https://nonebot.dev/docs/editor-support))
- 社区丰富:社区用户众多,直接和间接用户超过十万人,每天都有大量的活跃用户 ([社区资源](#社区资源))
- 海纳百川:一个框架,支持多个聊天软件平台,可自定义通信协议
@ -120,7 +120,7 @@ NoneBot2 是一个现代、跨平台、可扩展的 Python 聊天机器人框架
| [httpx](https://www.python-httpx.org/) | 客户端 |
| [websockets](https://websockets.readthedocs.io/en/stable/) | 客户端 |
更多:[概览](https://v2.nonebot.dev/docs/)
更多:[概览](https://nonebot.dev/docs/)
## 什么不是 NoneBot2
@ -132,7 +132,7 @@ NoneBot2 不是 NoneBot1 的替代品。事实上,它们都在被积极的维
## 即刻开始
~~完整~~文档可以在 [这里](https://v2.nonebot.dev/) 查看。
~~完整~~文档可以在 [这里](https://nonebot.dev/) 查看。
懒得看文档?下面是快速安装指南:
@ -189,7 +189,7 @@ NoneBot2 不是 NoneBot1 的替代品。事实上,它们都在被积极的维
- [文档镜像(中国境内)](https://nb2.baka.icu)
- [文档镜像(Vercel)](https://nonebot2-vercel-mirror.vercel.app)
- 其他插件请查看 [商店](https://v2.nonebot.dev/store)
- 其他插件请查看 [商店](https://nonebot.dev/store)
## 许可证

View File

@ -158,7 +158,7 @@ class Config(BaseConfig):
除了 NoneBot 的配置项外还可以自行添加配置项到 `.env.{environment}` 文件中
这些配置将会在 json 反序列化后一起带入 `Config` 类中
配置方法参考: [配置](https://v2.nonebot.dev/docs/appendices/config)
配置方法参考: [配置](https://nonebot.dev/docs/appendices/config)
"""
_env_file: DotenvType = ".env", ".env.prod"

View File

@ -2,7 +2,7 @@
NoneBot 使用 [`loguru`][loguru] 来记录日志信息
自定义 logger 请参考 [自定义日志](https://v2.nonebot.dev/docs/appendices/log)
自定义 logger 请参考 [自定义日志](https://nonebot.dev/docs/appendices/log)
以及 [`loguru`][loguru] 文档
[loguru]: https://github.com/Delgan/loguru

View File

@ -196,7 +196,7 @@ def resolve_dot_notation(
class DataclassEncoder(json.JSONEncoder):
"""在JSON序列化 {re}`nonebot.adapters._message.Message` (List[Dataclass]) 时使用的 `JSONEncoder`"""
"""在JSON序列化 {ref}`nonebot.adapters.Message` (List[Dataclass]) 时使用的 `JSONEncoder`"""
@overrides(json.JSONEncoder)
def default(self, o):

View File

@ -1,5 +1,5 @@
<p align="center">
<a href="https://v2.nonebot.dev/"><img src="https://raw.githubusercontent.com/nonebot/nonebot2/master/docs/.vuepress/public/logo.png" width="200" height="200" alt="nonebot"></a>
<a href="https://nonebot.dev/"><img src="https://nonebot.dev/logo.png" width="200" height="200" alt="nonebot"></a>
</p>
<div align="center">

954
poetry.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -1,13 +1,13 @@
[tool.poetry]
name = "nonebot2"
version = "2.0.0rc4"
version = "2.0.0"
description = "An asynchronous python bot framework."
authors = ["yanyongyu <yyy@nonebot.dev>"]
license = "MIT"
readme = "README.md"
homepage = "https://v2.nonebot.dev/"
homepage = "https://nonebot.dev/"
repository = "https://github.com/nonebot/nonebot2"
documentation = "https://v2.nonebot.dev/"
documentation = "https://nonebot.dev/"
keywords = ["bot", "qq", "qqbot", "mirai", "coolq"]
classifiers = [
"Development Status :: 5 - Production/Stable",
@ -21,16 +21,21 @@ packages = [
]
include = ["nonebot/py.typed"]
[tool.poetry.urls]
"Bug Tracker" = "https://github.com/nonebot/nonebot2/issues"
"Changelog" = "https://nonebot.dev/changelog"
"Funding" = "https://afdian.net/@nonebot"
[tool.poetry.dependencies]
python = "^3.8"
yarl = "^1.7.2"
loguru = "^0.6.0"
pygtrie = "^2.4.1"
loguru = ">=0.6.0,<1.0.0"
typing-extensions = ">=4.0.0,<5.0.0"
tomli = { version = "^2.0.1", python = "<3.11" }
pydantic = { version = "^1.10.0", extras = ["dotenv"] }
websockets = { version = "^10.0", optional = true }
websockets = { version = ">=10.0", optional = true }
Quart = { version = ">=0.18.0,<1.0.0", optional = true }
fastapi = { version = ">=0.93.0,<1.0.0", optional = true }
aiohttp = { version = "^3.7.4", extras = ["speedups"], optional = true }

View File

@ -17,7 +17,7 @@ __plugin_meta__ = PluginMetadata(
description="测试插件元信息",
usage="无法使用",
type="application",
homepage="https://v2.nonebot.dev",
homepage="https://nonebot.dev",
config=Config,
supported_adapters={"~onebot.v11", "plugins.metadata:FakeAdapter"},
extra={"author": "NoneBot"},

View File

@ -138,7 +138,7 @@ async def test_plugin_metadata():
"description": "测试插件元信息",
"usage": "无法使用",
"type": "application",
"homepage": "https://v2.nonebot.dev",
"homepage": "https://nonebot.dev",
"config": Config,
"supported_adapters": {"~onebot.v11", "plugins.metadata:FakeAdapter"},
"extra": {"author": "NoneBot"},

View File

@ -444,7 +444,7 @@ async def get_client() -> AsyncGenerator[httpx.AsyncClient, None]:
@test.handle()
async def _(x: Annotated[httpx.AsyncClient, Depends(get_client)]):
resp = await x.get("https://v2.nonebot.dev")
resp = await x.get("https://nonebot.dev")
```
</TabItem>
@ -466,7 +466,7 @@ async def get_client() -> AsyncGenerator[httpx.AsyncClient, None]:
@test.handle()
async def _(x: httpx.AsyncClient = Depends(get_client)):
resp = await x.get("https://v2.nonebot.dev")
resp = await x.get("https://nonebot.dev")
```
</TabItem>

191
website/docs/ospp/2021.md Normal file
View File

@ -0,0 +1,191 @@
---
sidebar_position: 0
description: 开源软件供应链点亮计划 - 暑期 2021
---
# 暑期 2021
**开源软件供应链点亮计划 - 暑期 2021** 是**中国科学院软件研究所**与 **openEuler 社区**共同举办的一项面向高校学生的暑期活动,旨在鼓励在校学生积极参与开源软件的开发维护,促进优秀开源软件社区的蓬勃发展。关于具体的活动规划、报名方式,请查看该活动的 [官网](https://summer.iscas.ac.cn/) 和 [帮助文档](https://summer.iscas.ac.cn/help/)。
NoneBot 社区有幸作为开源社区参与了本次活动,下面列出了目前我们已经发布的项目,欢迎感兴趣的同学在上面给出的活动官网报名,或通过 <contact@nonebot.dev> 联系我们。
## NoneBot v1
### 更新 NoneBot v1 文档中的“指南”部分
由于 NoneBot v1 和 aiocqhttp 最初基于的 QQ 机器人平台不再提供服务CQHTTP 接口也转型且改名为 OneBot 标准,目前 NoneBot v1 文档的“指南”部分和 aiocqhttp 文档有部分过时内容需要更新。我们希望将其中与旧的机器人平台相关的内容改为基于 go-cqhttp 或通用的 OneBot 表述,同时对 NoneBot v1 的 awesome-bot 示例做一次全面检查,修改其中可能已经不可用的部分。
**难度**:低
**导师**[@cleoold](https://github.com/cleoold)
**产出要求**
- 修改“指南”文档和 aiocqhttp 文档中与旧的 QQ 机器人平台相关的部分
- 检查 awesome-bot 示例是否有已经过时/不可用的地方,并更新/修复
- 修改“图灵机器人”案例,使用其它 AI 聊天 API 提供商(需先做简单调研)
**技术要求**
- 熟悉 Python 编程语言及 asyncio 机制
- 了解 Git 基本用法
- 了解聊天机器人基本开发过程
- 了解 VuePress 更佳
### NoneBot v1 API 文档自动生成
目前 NoneBot v1 的文档中“API”部分是手动编写的在更新代码接口的同时需要手动更新文档可能造成文档与代码不匹配形成额外的维护成本。我们希望将 API 文档改为直接编写在 Python docstring 中,通过工具自动生成 API 文档。
**难度**:中
**导师**[@cleoold](https://github.com/cleoold)
**产出要求**
- 调研市面上常见的 Python API 文档生成工具
- 在代码中补充 API 文档
- 编写或应用开源工具自动生成 API 文档
- 配置 GitHub Actions 或其它 CI 自动化构建和部署 API 文档
**技术要求**
- 熟悉 Python 编程语言及 asyncio 和 Type Hints
- 了解 Git 基本用法
- 了解 Sphinx 等文档生成工具更佳
- 了解 GitHub Actions 等 CI 工具更佳
## NoneBot v2
### NoneBot v2 自动化测试框架“NoneBug”
在聊天机器人的开发过程中,一套自动化的测试机制是非常重要的,特别是对于 NoneBot 2 这类为大型机器人开发而设计的项目来说,需要手动测试每一个边际条件是非常痛苦的。我们希望能够开发一款基于 NoneBot 2 插件机制的自动化测试框架,为 NoneBot 2 用户提供一套易用便捷、高度灵活的自动化测试框架。
**难度**:高
**导师**[@yanyongyu](https://github.com/yanyongyu)
**产出要求**
- 调研现有的 Python 和其它语言集成测试框架
- 设计 NoneBug 的用户 API 和实现方式
- 实现 NoneBug 自动化测试框架
- 编写详细的使用文档
**技术要求**
- 熟悉 Python 编程语言及 asyncio 和 Type Hints
- 了解 Git 基本用法
- 了解 NoneBot v2 的基本原理和使用方式
- 了解主流的 Python 自动化测试框架
### NoneBot v2 Telegram 适配器
目前 NoneBot v2 已支持 OneBot、Mirai HTTP API、钉钉协议社区反馈有更多的平台需求希望能在 NoneBot v2 获得更多的跨平台支持,提高机器人的便携性。同时,我们也希望随着新平台加入,提升现有 NoneBot v2 核心代码的平台通用性。Telegram 是一款较为广泛使用的安全即时聊天软件,同时其官方提供了丰富的聊天机器人 API因此我们希望为 NoneBot v2 编写一个 Telegram 适配器来支持 Telegram 机器人的开发。
**难度**:中
**导师**[@yanyongyu](https://github.com/yanyongyu)
**产出要求**
- 调研 Telegram Bot API 以及 WebHook 等官方接口
- 编写 Telegram 适配器并能够使用
- 代码遵守项目 Contributing 规范
**技术要求**
- 熟悉 Python 编程语言及 asyncio 和 Type Hints
- 了解 Git 基本用法
- 了解 Web 开发相关知识
- 了解 Sphinx 等文档生成工具更佳
### NoneBot v2 飞书适配器
目前 NoneBot v2 已支持 OneBot、Mirai HTTP API、钉钉协议社区反馈有更多的平台需求希望能在 NoneBot v2 获得更多的跨平台支持,提高机器人的便携性。同时,我们也希望随着新平台加入,提升现有 NoneBot v2 核心代码的平台通用性。飞书是目前企业用户广泛使用的即时聊天和协作软件,其官方提供了丰富的聊天机器人 API因此我们希望为 NoneBot v2 编写一个飞书适配器来支持飞书机器人的开发。
**难度**:中
**导师**[@yanyongyu](https://github.com/yanyongyu)
**产出要求**
- 调研飞书机器人 API 以及 WebHook 等官方接口
- 编写飞书适配器并能够使用
- 代码遵守项目 Contributing 规范
**技术要求**
- 熟悉 Python 编程语言及 asyncio 和 Type Hints
- 了解 Git 基本用法
- 了解 Web 开发相关知识
- 了解 Sphinx 等文档生成工具更佳
## OneBot
### 设计 OneBot v12 接口标准
目前的 OneBot 标准的 v11 版本仍然与 QQ 平台有较多耦合,我们希望在 v12 去掉与 QQ 耦合的历史包袱,形成一个通用的、可扩展的、易于使用的同时易于实现的聊天机器人接口标准。
**难度**:中
**导师**[@richardchien](https://github.com/richardchien)
**产出要求**
- 调研各聊天机器人平台的官方/非官方接口特点
- 通用化 OneBot 核心 API分离 QQ 特定的 API去掉无用 API
- 优化现有的通信、消息表示机制
- 补充 QQ 特定的缺失 API
- 文档需符合风格指南
**技术要求**
- 熟悉至少两个聊天平台的聊天机器人开发
- 了解 Git 基本用法
- 了解使用不同语言编写聊天机器人时的常用实践
- 对文档的优雅性与美观性有追求更佳
### 实现 Rust 版 libonebot
目前最常用的 OneBot 实现包括 go-cqhttp、onebot-kotlin、node-onebot 等,这些实现都各自重复实现了 Web 通信、消息解析、配置读写等功能,当社区中的开发者想针对一个新的聊天平台实现 OneBot 时,他们往往同样需要再次实现类似逻辑。我们希望使用 Rust 编写一个 libonebot 模块,该模块实现所有 OneBot 实现所共享的功能,从而方便其他开发者们使用 Rust 快速编写具体的 OneBot 实现。同时,我们希望借此项目在聊天机器人社区中推广 Rust 编程语言。
> 注:这里的逻辑是 libonebot + 针对某聊天平台的对接代码 = 某聊天平台的 OneBot 实现libonebot 要做的是让 OneBot 实现的开发者只需编写针对特定聊天平台的对接代码,而无需关心 OneBot 标准定义的通信方式、消息格式等。
**难度**:高
**导师**[@richardchien](https://github.com/richardchien)
**产出要求**
- 实现所有 OneBot 实现所共享的功能,包括 Web 通信、消息解析、配置读写等
- 充分考虑同时兼容 OneBot v11 和 v12 接口
- 能够根据用户OneBot 实现的开发者)所实现的接口自动实现类似 get_available_apis 等接口
- 编写详细的使用文档
- 如果可能,与 v12 设计项目联动,实现第一手 v12 支持
**技术要求**
- 熟悉聊天机器人开发
- 熟悉 Rust Web 开发
### 实现自选语言版 libonebot
目前最常用的 OneBot 实现包括 go-cqhttp、onebot-kotlin、node-onebot 等,这些实现都各自重复实现了 Web 通信、消息解析、配置读写等功能,当社区中的开发者想针对一个新的聊天平台实现 OneBot 时,他们往往同样需要再次实现类似逻辑。我们希望使用 Python、Go、Kotlin、Node、PHP、C#.NET 等主流语言(任选一个)编写 libonebot 模块,该模块实现所有 OneBot 实现所共享的功能,从而方便其他开发者们使用对应语言快速编写具体的 OneBot 实现。
> 注:这里的逻辑是 libonebot + 针对某聊天平台的对接代码 = 某聊天平台的 OneBot 实现libonebot 要做的是让 OneBot 实现的开发者只需编写针对特定聊天平台的对接代码,而无需关心 OneBot 标准定义的通信方式、消息格式等。
**难度**:中
**导师**[@richardchien](https://github.com/richardchien)
**产出要求**
- 实现所有 OneBot 实现所共享的功能,包括 Web 通信、消息解析、配置读写等
- 充分考虑同时兼容 OneBot v11 和 v12 接口
- 编写详细的使用文档
- 如果可能实现更多附加特性如根据用户OneBot 实现的开发者)所实现的接口自动实现类似 get_available_apis 等接口、实现第一手 v12 支持等
**技术要求**
- 熟悉聊天机器人开发
- 熟悉所选语言的 Web 开发

96
website/docs/ospp/2022.md Normal file
View File

@ -0,0 +1,96 @@
---
sidebar_position: 1
description: 开源之夏 - 暑期 2022
---
# 暑期 2022
**开源之夏 - 暑期 2022** 是由**开源软件供应链点亮计划**发起、由**中国科学院软件研究所**与 **openEuler 社区**主办的一项面向高校学生的暑期活动,类似 Google Summer of CodeGSoC旨在鼓励在校学生积极参与开源软件的开发维护促进优秀开源软件社区的蓬勃发展。关于具体的活动规划、报名方式请查看该活动的 [官网](https://summer-ospp.ac.cn/) 和 [帮助文档](https://summer-ospp.ac.cn/help/)。
NoneBot 社区有幸作为开源社区 [参与](https://summer-ospp.ac.cn/#/org/orgdetail/e1fb5b8d-125a-4138-b756-25bd32c0a31a/) 了本次活动,下面列出了目前我们已经发布的项目,欢迎感兴趣的同学加入 QQ 群 [737131827](https://jq.qq.com/?_wv=1027&k=PEgyGeEu) 或通过 <contact@nonebot.dev> 联系我们。
## NoneBot2 命令行 CLI 交互体验升级
NoneBot2 为用户提供了命令行脚手架 ──`nb-cli`辅助用户更好地上手项目以及进行开发。nb-cli 主要包括:创建项目、运行项目、安装与卸载插件、部署项目等功能。随着 NoneBot2 Beta 版本的发布,脚手架功能存在一定的定位不明确、功能体验不佳。本项目旨在重新设计 nb-cli 功能框架,完善功能,优化用户体验。
**难度**:进阶
**导师**[@yanyongyu](https://github.com/yanyongyu)
**产出要求**
- 设计 nb-cli 功能框架
- 明确各功能模块
- 设计用户交互模式
- 完成 nb-cli 主要功能代码
- 项目管理
- 插件管理
- 其它
- 同步更新使用文档
**技术要求**
- 熟悉 Python 命令行交互代码编写
- 熟悉 NoneBot2 框架功能
- 熟悉 NoneBot2 项目组织方式
**成果仓库**
- <https://github.com/nonebot/nb-cli>
- <https://github.com/nonebot/nonebot2>
## NoneBot2 命令行即时交互通信设计与实现
NoneBot2 在早期提供了基于网页的 nonebot-plugin-test 插件,无需平台适配接入即可对机器人进行测试,方便了开发者直观的感受机器人文本交互功能。我们希望提供一款基于命令行的适配器/驱动器,用于无平台适配接入、可以运行机器人的场景进行功能体验或测试。
**难度**:进阶
**导师**[@mnixry](https://github.com/mnixry)
**产出要求**
- 设计命令行与 NoneBot2 通信模式
- 直接调用/HTTP/WebSocket
- 设计命令行交互界面
- 实现相应适配器/驱动器
- 同步更新使用说明文档
**技术要求**
- 熟悉 Python 命令行交互代码编写
- 熟悉 NoneBot2 框架功能
- 熟悉 NoneBot2 项目组织方式
**成果仓库**
- <https://github.com/nonebot/adapter-console>
## NoneBot2 用户上手与深入教程设计
NoneBot2 为用户提供了详细的文档介绍,辅助用户更好的上手项目以及进行开发。文档分为基础与进阶两个部分。基础部分帮助新用户快速上手开发,主要包括:安装 NoneBot2、使用脚手架、创建配置项目、使用适配器、加载插件、定义消息事件、处理消息事件、调用平台 API 等。进阶部分向已经熟悉开发流程的用户介绍更多高级技巧主要包括NoneBot2 工作原理、定时任务、权限控制、钩子函数、跨插件访问、单元测试、发布插件等。目前文档对于用户而言过于费解,导致用户难以理解 NoneBot2 开发。本项目旨在优化文档内容,使其更加通俗易懂,不让文档成为用户上手的阻碍,同时完善进阶内容,让有更复杂需求的用户,同样能从文档中受益。
相关 issue
- <https://github.com/nonebot/nonebot2/issues/793>
- <https://github.com/nonebot/nonebot2/issues/295>
**难度**:进阶
**导师**[@SK-415](https://github.com/SK-415)
**产出要求**
- 文档通俗易懂
- 附有适当的图片指引(如 asciinema
- 内容完整,由浅入深
- 适当的界面美化,合理分配布局
**技术要求**
- 熟悉文档结构组织与语言表达
- 熟悉 NoneBot2 框架功能
- 熟悉 NoneBot2 项目组织方式
**成果仓库**
- <https://github.com/nonebot/nonebot2>

89
website/docs/ospp/2023.md Normal file
View File

@ -0,0 +1,89 @@
---
sidebar_position: 2
description: 开源之夏 - 暑期 2023
---
# 暑期 2023
**开源之夏 - 暑期 2023** 是由**开源软件供应链点亮计划**发起、由**中国科学院软件研究所**与 **openEuler 社区**主办的一项面向高校学生的暑期活动,类似 Google Summer of CodeGSoC旨在鼓励在校学生积极参与开源软件的开发维护促进优秀开源软件社区的蓬勃发展。关于具体的活动规划、报名方式请查看该活动的 [官网](https://summer-ospp.ac.cn/) 和 [帮助文档](https://summer-ospp.ac.cn/help/)。
NoneBot 社区有幸作为开源社区 [参与](https://summer-ospp.ac.cn/org/orgdetail/e1fb5b8d-125a-4138-b756-25bd32c0a31a?lang=zh) 了本次活动,下面列出了目前我们已经发布的项目,欢迎感兴趣的同学通过 <contact@nonebot.dev> 联系我们。
## NoneBot 项目管理图形化面板
NoneBot 目前提供了开箱即用的命令行脚手架来帮助初次使用的用户更快的上手编写应用。但是,对于未有一定开发经验的用户,命令行的使用仍具有一定的困难。此外,其他项目如 koishi、vue 等,均可通过图形化界面的形式为用户提供更便捷的项目开发。因此,我们希望借助现有命令行脚手架的可扩展特性,提供一个项目管理面板服务,以网页的形式帮助用户开发 NoneBot 应用。
**难度**:进阶
**导师**[@mnixry](https://github.com/mnixry)
**产出要求**
- 设计并实现项目管理面板相关功能
- 创建与管理项目
- 配置与运行项目
- NoneBot 插件管理
- 实现相应 nb-cli 插件提供面板服务
- 代码符合 NoneBot Contributing 规范
**技术要求**
- 熟悉 nb-cli 相关功能
- 熟悉 NoneBot 框架功能
- 熟悉前后端相关实现方式
**成果仓库**
- <https://github.com/nonebot/cli-plugin-webui>
## NoneBot Discord 适配器
NoneBot 作为一个跨平台聊天机器人框架,目前已有 OneBot、飞书、Telegram、QQ 频道等诸多平台的适配支持。作为众多用户期待的平台适配之一,我们希望借此机会接入 Discord 聊天机器人。
**难度**:进阶
**导师**[@iyume](https://github.com/iyume)
**产出要求**
- 调研 Discord Bot 相关功能与接口
- 设计与编写 NoneBot Discord 适配器
- 代码符合 NoneBot Contributing 规范
**技术要求**
- 熟悉 NoneBot 框架功能
- 熟悉 NoneBot 各模块职责与适配器编写
**成果仓库**
- <https://github.com/nonebot/adapter-discord>
## NoneBot 数据库支持插件
NoneBot 的插件系统为用户实现应用提供了极高的便捷性,但因此也增加了插件统一管理的难度。目前,我们发现许多用户发布的插件中存在文件存储结构化数据、数据存放散乱等现象,同时插件间也可能产生冲突。因此,我们希望提供一个统一的数据存储与管理方式,便于用户读写应用数据。
**难度**:进阶
**导师**[@yanyongyu](https://github.com/yanyongyu)
**产出要求**
- 设计并实现 ORM 插件
- 提供关系模型定义功能
- 提供模型迁移与管理功能
- 能较好的支持 Python 类型检查与推导
- 编写相应的用户使用文档
- 代码符合 NoneBot Contributing 规范
**技术要求**
- 熟悉 NoneBot 框架功能与插件编写
- 熟悉 SQLAlchemy 等 ORM 框架
- 熟悉 SQLAlchemy ORM
- 熟悉 alembic 等迁移工具
- 熟悉 nb-cli 插件编写
**成果仓库**
- <https://github.com/nonebot/plugin-orm>

View File

@ -8,7 +8,7 @@ const darkCodeTheme = require("prism-react-renderer/themes/dracula");
const config = {
title: "NoneBot",
tagline: "跨平台 Python 异步机器人框架",
url: "https://v2.nonebot.dev",
url: "https://nonebot.dev",
baseUrl: process.env.BASE_URL || "/",
onBrokenLinks: "throw",
onBrokenMarkdownLinks: "warn",
@ -100,8 +100,10 @@ const config = {
docId: "developer/plugin-publishing",
},
{ label: "社区", type: "docLink", docId: "community/contact" },
{ label: "开源之夏", type: "docLink", docId: "ospp/2023" },
{ label: "商店", to: "/store" },
{ label: "更新日志", to: "/changelog" },
{ label: "论坛", href: "https://discussions.nonebot.dev" },
],
},
{
@ -110,14 +112,14 @@ const config = {
},
],
docsVersionItemAfter: [
{
label: "2.0.0rc3",
href: "https://63ccf1c05efb245d36e901fa--nonebot2.netlify.app/",
},
{
label: "2.0.0a16",
href: "https://61d3d9dbcadf413fd3238e89--nonebot2.netlify.app/",
},
{
label: "1.x",
href: "https://v1.nonebot.dev/",
},
],
},
hideableSidebar: true,

View File

@ -3,7 +3,7 @@
"version": "2.0.0",
"description": "跨平台 Python 异步机器人框架",
"private": true,
"homepage": "https://v2.nonebot.dev/",
"homepage": "https://nonebot.dev/",
"repository": "https://github.com/nonebot/nonebot2/",
"bugs": {
"url": "https://github.com/nonebot/nonebot2/issues"

View File

@ -84,6 +84,17 @@ const sidebars = {
},
],
},
{
type: "category",
label: "开源之夏",
collapsible: false,
items: [
{
type: "autogenerated",
dirName: "ospp",
},
],
},
{
type: "category",
label: "社区资源",
@ -94,6 +105,11 @@ const sidebars = {
label: "商店",
href: "/store",
},
{
type: "link",
label: "论坛",
href: "https://discussions.nonebot.dev",
},
],
},
],

View File

@ -19,31 +19,96 @@ function FooterCopyright() {
Deployed by
<Link to="https://www.netlify.com" className="ml-1 opacity-100">
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 147 40"
height="1rem"
viewBox="0 0 256 105"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<radialGradient
id="netlify-logo"
cy="0%"
r="100.11%"
gradientTransform="matrix(0 .9989 -1.152 0 .5 -.5)"
>
<stop offset="0" stop-color="#20c6b7" />
<stop offset="1" stop-color="#4d9abf" />
</radialGradient>
<g fill="none" fill-rule="evenodd">
<g clip-path="url(#clip0_236_25)">
<path
fill="currentcolor"
d="m53.37 12.978.123 2.198c1.403-1.7 3.245-2.55 5.525-2.55 3.951 0 5.962 2.268 6.032 6.804v12.568h-4.26v-12.322c0-1.207-.26-2.1-.78-2.681-.52-.58-1.371-.87-2.552-.87-1.719 0-3 .78-3.84 2.338v13.535h-4.262v-19.02h4.016zm24.378 19.372c-2.7 0-4.89-.852-6.567-2.557-1.678-1.705-2.517-3.976-2.517-6.812v-.527c0-1.898.365-3.595 1.096-5.089.73-1.494 1.757-2.657 3.078-3.49 1.321-.831 2.794-1.247 4.42-1.247 2.583 0 4.58.826 5.988 2.478 1.41 1.653 2.114 3.99 2.114 7.014v1.723h-12.4c.13 1.57.652 2.812 1.57 3.726s2.073 1.371 3.464 1.371c1.952 0 3.542-.79 4.77-2.373l2.297 2.198c-.76 1.136-1.774 2.018-3.042 2.645-1.269.627-2.692.94-4.27.94zm-.508-16.294c-1.17 0-2.113.41-2.832 1.23-.72.82-1.178 1.963-1.377 3.428h8.12v-.317c-.094-1.43-.474-2.51-1.14-3.243-.667-.732-1.59-1.098-2.771-1.098zm16.765-7.7v4.623h3.35v3.164h-3.35v10.617c0 .726.144 1.25.43 1.573.286.322.798.483 1.535.483a6.55 6.55 0 0 0 1.49-.176v3.305c-.97.27-1.905.404-2.806.404-3.273 0-4.91-1.81-4.91-5.431v-10.776h-3.124v-3.164h3.122v-4.623h4.261zm11.137 23.643h-4.262v-27h4.262zm9.172 0h-4.262v-19.02h4.262zm-4.525-23.96c0-.655.207-1.2.622-1.634.416-.433 1.009-.65 1.78-.65.772 0 1.368.217 1.79.65.42.434.63.979.63 1.635 0 .644-.21 1.18-.63 1.608-.422.428-1.018.642-1.79.642-.771 0-1.364-.214-1.78-.642-.415-.427-.622-.964-.622-1.608zm10.663 23.96v-15.857h-2.894v-3.164h2.894v-1.74c0-2.11.584-3.738 1.753-4.887 1.17-1.148 2.806-1.722 4.91-1.722.749 0 1.544.105 2.386.316l-.105 3.34a8.375 8.375 0 0 0 -1.631-.14c-2.035 0-3.052 1.048-3.052 3.146v1.687h3.858v3.164h-3.858v15.856h-4.261zm17.87-6.117 3.858-12.903h4.542l-7.54 21.903c-1.158 3.199-3.122 4.799-5.893 4.799-.62 0-1.304-.106-2.052-.317v-3.305l.807.053c1.075 0 1.885-.196 2.429-.589.543-.392.973-1.051 1.289-1.977l.613-1.635-6.664-18.932h4.595z"
d="M58.4704 103.765V77.4144L59.0165 76.8683H65.6043L66.1504 77.4144V103.765L65.6043 104.311H59.0165L58.4704 103.765Z"
fill="#05BDBA"
/>
<path
fill="url(#netlify-logo)"
fill-rule="nonzero"
d="m28.589 14.135-.014-.006c-.008-.003-.016-.006-.023-.013a.11.11 0 0 1 -.028-.093l.773-4.726 3.625 3.626-3.77 1.604a.083.083 0 0 1 -.033.006h-.015c-.005-.003-.01-.007-.02-.017a1.716 1.716 0 0 0 -.495-.381zm5.258-.288 3.876 3.876c.805.806 1.208 1.208 1.355 1.674.022.069.04.138.054.209l-9.263-3.923a.728.728 0 0 0 -.015-.006c-.037-.015-.08-.032-.08-.07s.044-.056.081-.071l.012-.005zm5.127 7.003c-.2.376-.59.766-1.25 1.427l-4.37 4.369-5.652-1.177-.03-.006c-.05-.008-.103-.017-.103-.062a1.706 1.706 0 0 0 -.655-1.193c-.023-.023-.017-.059-.01-.092 0-.005 0-.01.002-.014l1.063-6.526.004-.022c.006-.05.015-.108.06-.108a1.73 1.73 0 0 0 1.16-.665c.009-.01.015-.021.027-.027.032-.015.07 0 .103.014l9.65 4.082zm-6.625 6.801-7.186 7.186 1.23-7.56.002-.01c.001-.01.003-.02.006-.029.01-.024.036-.034.061-.044l.012-.005a1.85 1.85 0 0 0 .695-.517c.024-.028.053-.055.09-.06a.09.09 0 0 1 .029 0l5.06 1.04zm-8.707 8.707-.81.81-8.955-12.942a.424.424 0 0 0 -.01-.014c-.014-.019-.029-.038-.026-.06 0-.016.011-.03.022-.042l.01-.013c.027-.04.05-.08.075-.123l.02-.035.003-.003c.014-.024.027-.047.051-.06.021-.01.05-.006.073-.001l9.921 2.046a.164.164 0 0 1 .076.033c.013.013.016.027.019.043a1.757 1.757 0 0 0 1.028 1.175c.028.014.016.045.003.078a.238.238 0 0 0 -.015.045c-.125.76-1.197 7.298-1.485 9.063zm-1.692 1.691c-.597.591-.949.904-1.347 1.03a2 2 0 0 1 -1.206 0c-.466-.148-.869-.55-1.674-1.356l-8.993-8.993 2.349-3.643c.011-.018.022-.034.04-.047.025-.018.061-.01.091 0a2.434 2.434 0 0 0 1.638-.083c.027-.01.054-.017.075.002a.19.19 0 0 1 .028.032l8.999 13.059zm-14.087-10.186-2.063-2.063 4.074-1.738a.084.084 0 0 1 .033-.007c.034 0 .054.034.072.065a2.91 2.91 0 0 0 .13.184l.013.016c.012.017.004.034-.008.05l-2.25 3.493zm-2.976-2.976-2.61-2.61c-.444-.444-.766-.766-.99-1.043l7.936 1.646a.84.84 0 0 0 .03.005c.049.008.103.017.103.063 0 .05-.059.073-.109.092l-.023.01zm-4.056-4.995a2 2 0 0 1 .09-.495c.148-.466.55-.868 1.356-1.674l3.34-3.34a2175.525 2175.525 0 0 0 4.626 6.687c.027.036.057.076.026.106-.146.161-.292.337-.395.528a.16.16 0 0 1 -.05.062c-.013.008-.027.005-.042.002h-.002l-8.949-1.877zm5.68-6.403 4.489-4.491c.423.185 1.96.834 3.333 1.414 1.04.44 1.988.84 2.286.97.03.012.057.024.07.054.008.018.004.041 0 .06a2.003 2.003 0 0 0 .523 1.828c.03.03 0 .073-.026.11l-.014.021-4.56 7.063c-.012.02-.023.037-.043.05-.024.015-.058.008-.086.001a2.274 2.274 0 0 0 -.543-.074c-.164 0-.342.03-.522.063h-.001c-.02.003-.038.007-.054-.005a.21.21 0 0 1 -.045-.051l-4.808-7.013zm5.398-5.398 5.814-5.814c.805-.805 1.208-1.208 1.674-1.355a2 2 0 0 1 1.206 0c.466.147.869.55 1.674 1.355l1.26 1.26-4.135 6.404a.155.155 0 0 1 -.041.048c-.025.017-.06.01-.09 0a2.097 2.097 0 0 0 -1.92.37c-.027.028-.067.012-.101-.003-.54-.235-4.74-2.01-5.341-2.265zm12.506-3.676 3.818 3.818-.92 5.698v.015a.135.135 0 0 1 -.008.038c-.01.02-.03.024-.05.03a1.83 1.83 0 0 0 -.548.273.154.154 0 0 0 -.02.017c-.011.012-.022.023-.04.025a.114.114 0 0 1 -.043-.007l-5.818-2.472-.011-.005c-.037-.015-.081-.033-.081-.071a2.198 2.198 0 0 0 -.31-.915c-.028-.046-.059-.094-.035-.141zm-3.932 8.606 5.454 2.31c.03.014.063.027.076.058a.106.106 0 0 1 0 .057c-.016.08-.03.171-.03.263v.153c0 .038-.039.054-.075.069l-.011.004c-.864.369-12.13 5.173-12.147 5.173s-.035 0-.052-.017c-.03-.03 0-.072.027-.11a.76.76 0 0 0 .014-.02l4.482-6.94.008-.012c.026-.042.056-.089.104-.089l.045.007c.102.014.192.027.283.027.68 0 1.31-.331 1.69-.897a.16.16 0 0 1 .034-.04c.027-.02.067-.01.098.004zm-6.246 9.185 12.28-5.237s.018 0 .035.017c.067.067.124.112.179.154l.027.017c.025.014.05.03.052.056 0 .01 0 .016-.002.025l-1.052 6.462-.004.026c-.007.05-.014.107-.061.107a1.729 1.729 0 0 0 -1.373.847l-.005.008c-.014.023-.027.045-.05.057-.021.01-.048.006-.07.001l-9.793-2.02c-.01-.002-.152-.519-.163-.52z"
transform="translate(-.702)"
d="M58.4704 26.8971V0.546133L59.0165 0H65.6043L66.1504 0.546133V26.8971L65.6043 27.4432H59.0165L58.4704 26.8971Z"
fill="#05BDBA"
/>
<path
d="M35.7973 85.2395H34.8928L30.3616 80.7083V79.8037L38.8523 71.3045L43.648 71.3131L44.288 71.9445V76.7403L35.7973 85.2395Z"
fill="#05BDBA"
/>
<path
d="M30.3616 24.7467V23.8336L34.8928 19.3109H35.7973L44.288 27.8016V32.5888L43.648 33.2373H38.8523L30.3616 24.7467Z"
fill="#05BDBA"
/>
<path
d="M0.546133 48.3072H37.8795L38.4256 48.8533V55.4496L37.8795 55.9958H0.546133L0 55.4496V48.8533L0.546133 48.3072Z"
fill="#05BDBA"
/>
<path
d="M255.445 48.3157L255.991 48.8619V55.4496L255.445 55.9957H217.566L217.02 55.4496L219.759 48.8619L220.305 48.3157H255.445Z"
fill="#05BDBA"
/>
<path
d="M74.6667 65.8859H68.0789L67.5328 65.3397V49.92C67.5328 47.1723 66.4576 45.0475 63.1467 44.9792C61.44 44.9365 59.4944 44.9792 57.4123 45.0645L57.0965 45.3803V65.3312L56.5504 65.8773H49.9627L49.4165 65.3312V38.9803L49.9627 38.4341H64.7851C70.5451 38.4341 75.2128 43.1019 75.2128 48.8619V65.3312L74.6667 65.8773V65.8859Z"
fill="#014847"
/>
<path
d="M106.573 54.3488L106.027 54.8949H88.9941L88.448 55.4411C88.448 56.5419 89.5488 59.8357 93.9435 59.8357C95.5904 59.8357 97.2373 59.2896 97.792 58.1888L98.3381 57.6427H104.926L105.472 58.1888C104.926 61.4827 102.178 66.432 93.9349 66.432C84.5995 66.432 80.2048 59.8443 80.2048 52.1472C80.2048 44.4501 84.5995 37.8624 93.3888 37.8624C102.178 37.8624 106.573 44.4501 106.573 52.1472V54.3488ZM98.3296 48.8533C98.3296 48.3072 97.7835 44.4587 93.3888 44.4587C88.9941 44.4587 88.448 48.3072 88.448 48.8533L88.9941 49.3995H97.7835L98.3296 48.8533Z"
fill="#014847"
/>
<path
d="M121.95 57.6427C121.95 58.7435 122.496 59.2896 123.597 59.2896H128.538L129.084 59.8358V65.3312L128.538 65.8773H123.597C118.656 65.8773 114.261 63.6758 114.261 57.6342V45.5509L113.715 45.0048H109.867L109.321 44.4587V38.9632L109.867 38.4171H113.715L114.261 37.8709V32.9301L114.807 32.384H121.395L121.941 32.9301V37.8709L122.487 38.4171H128.529L129.075 38.9632V44.4587L128.529 45.0048H122.487L121.941 45.5509V57.6342L121.95 57.6427Z"
fill="#014847"
/>
<path
d="M142.276 65.8859H135.689L135.142 65.3397V27.9808L135.689 27.4347H142.276L142.822 27.9808V65.3312L142.276 65.8773V65.8859Z"
fill="#014847"
/>
<path
d="M157.107 34.0224H150.519L149.973 33.4763V27.9808L150.519 27.4347H157.107L157.653 27.9808V33.4763L157.107 34.0224ZM157.107 65.8859H150.519L149.973 65.3397V38.9717L150.519 38.4256H157.107L157.653 38.9717V65.3397L157.107 65.8859Z"
fill="#014847"
/>
<path
d="M182.929 27.9808V33.4763L182.383 34.0224H177.442C176.341 34.0224 175.795 34.5685 175.795 35.6693V37.8709L176.341 38.4171H181.837L182.383 38.9632V44.4587L181.837 45.0048H176.341L175.795 45.5509V65.3227L175.249 65.8688H168.661L168.115 65.3227V45.5509L167.569 45.0048H163.721L163.174 44.4587V38.9632L163.721 38.4171H167.569L168.115 37.8709V35.6693C168.115 29.6277 172.51 27.4261 177.451 27.4261H182.391L182.938 27.9723L182.929 27.9808Z"
fill="#014847"
/>
<path
d="M203.247 66.432C201.045 71.9275 198.852 75.2213 191.164 75.2213H188.416L187.87 74.6752V69.1797L188.416 68.6336H191.164C193.911 68.6336 194.458 68.0875 195.012 66.4405V65.8944L186.223 44.4672V38.9717L186.769 38.4256H191.71L192.256 38.9717L198.844 57.6512H199.39L205.978 38.9717L206.524 38.4256H211.465L212.011 38.9717V44.4672L203.221 66.4405L203.247 66.432Z"
fill="#014847"
/>
</g>
<defs>
<clipPath id="clip0_236_25">
<rect width="256" height="104.311" fill="white" />
</clipPath>
</defs>
</svg>
</Link>
<Link to="https://www.cloudflare.com/" className="ml-1 opacity-100">
<svg
height="1rem"
viewBox="0 0 651.29 94.76"
xmlns="http://www.w3.org/2000/svg"
>
<path
fill="#f78100"
d="M143.05,93.42l1.07-3.71c1.27-4.41.8-8.48-1.34-11.48-2-2.76-5.26-4.38-9.25-4.57L58,72.7a1.47,1.47,0,0,1-1.35-2,2,2,0,0,1,1.75-1.34l76.26-1c9-.41,18.84-7.75,22.27-16.71l4.34-11.36a2.68,2.68,0,0,0,.18-1,3.31,3.31,0,0,0-.06-.54,49.67,49.67,0,0,0-95.49-5.14,22.35,22.35,0,0,0-35,23.42A31.73,31.73,0,0,0,.34,93.45a1.47,1.47,0,0,0,1.45,1.27l139.49,0h0A1.83,1.83,0,0,0,143.05,93.42Z"
/>
<path
fill="#fcad32"
d="M168.22,41.15q-1,0-2.1.06a.88.88,0,0,0-.32.07,1.17,1.17,0,0,0-.76.8l-3,10.26c-1.28,4.41-.81,8.48,1.34,11.48a11.65,11.65,0,0,0,9.24,4.57l16.11,1a1.44,1.44,0,0,1,1.14.62,1.5,1.5,0,0,1,.17,1.37,2,2,0,0,1-1.75,1.34l-16.73,1c-9.09.42-18.88,7.75-22.31,16.7l-1.21,3.16a.9.9,0,0,0,.79,1.22h57.63A1.55,1.55,0,0,0,208,93.63a41.34,41.34,0,0,0-39.76-52.48Z"
/>
<polygon points="273.03 59.66 282.56 59.66 282.56 85.72 299.23 85.72 299.23 94.07 273.03 94.07 273.03 59.66" />
<path d="M309.11,77v-.09c0-9.88,8-17.9,18.58-17.9s18.48,7.92,18.48,17.8v.1c0,9.88-8,17.89-18.58,17.89S309.11,86.85,309.11,77m27.33,0v-.09c0-5-3.59-9.29-8.85-9.29s-8.7,4.22-8.7,9.19v.1c0,5,3.59,9.29,8.8,9.29s8.75-4.23,8.75-9.2" />
<path d="M357.84,79V59.66h9.69V78.78c0,5,2.5,7.33,6.34,7.33s6.34-2.26,6.34-7.08V59.66h9.68V78.73c0,11.11-6.34,16-16.12,16s-15.93-5-15.93-15.73" />
<path d="M404.49,59.66h13.27c12.29,0,19.42,7.08,19.42,17v.1c0,9.93-7.23,17.3-19.61,17.3H404.49Zm13.42,26c5.7,0,9.49-3.15,9.49-8.71v-.09c0-5.51-3.79-8.71-9.49-8.71H414V85.62Z" />
<polygon points="451.04 59.66 478.56 59.66 478.56 68.02 460.58 68.02 460.58 73.87 476.85 73.87 476.85 81.78 460.58 81.78 460.58 94.07 451.04 94.07 451.04 59.66" />
<polygon points="491.84 59.66 501.37 59.66 501.37 85.72 518.04 85.72 518.04 94.07 491.84 94.07 491.84 59.66" />
<path d="M543,59.42h9.19L566.8,94.07H556.58l-2.51-6.14H540.79l-2.45,6.14h-10Zm8.35,21.08-3.83-9.78L543.6,80.5Z" />
<path d="M579.08,59.66h16.27c5.27,0,8.9,1.38,11.21,3.74a10.64,10.64,0,0,1,3.05,8v.1a10.88,10.88,0,0,1-7.08,10.57l8.21,12h-11L592.8,83.65h-4.18V94.07h-9.54Zm15.83,16.52c3.25,0,5.12-1.58,5.12-4.08V72c0-2.71-2-4.08-5.17-4.08h-6.24v8.26Z" />
<polygon points="623.37 59.66 651.05 59.66 651.05 67.77 632.81 67.77 632.81 72.98 649.33 72.98 649.33 80.5 632.81 80.5 632.81 85.96 651.29 85.96 651.29 94.07 623.37 94.07 623.37 59.66" />
<path d="M252.15,81a8.44,8.44,0,0,1-7.88,5.16c-5.22,0-8.8-4.33-8.8-9.29v-.1c0-5,3.49-9.2,8.7-9.2a8.64,8.64,0,0,1,8.18,5.71h10C260.79,65.09,253.6,59,244.27,59c-10.62,0-18.58,8-18.58,17.9V77c0,9.88,7.86,17.8,18.48,17.8,9.08,0,16.18-5.88,18.05-13.76Z" />
</svg>
</Link>
</span>

View File

@ -428,7 +428,7 @@ async def get_client() -> AsyncGenerator[httpx.AsyncClient, None]:
@test.handle()
async def _(x: Annotated[httpx.AsyncClient, Depends(get_client)]):
resp = await x.get("https://v2.nonebot.dev")
resp = await x.get("https://nonebot.dev")
```
</TabItem>
@ -450,7 +450,7 @@ async def get_client() -> AsyncGenerator[httpx.AsyncClient, None]:
@test.handle()
async def _(x: httpx.AsyncClient = Depends(get_client)):
resp = await x.get("https://v2.nonebot.dev")
resp = await x.get("https://nonebot.dev")
```
</TabItem>

View File

@ -42,7 +42,7 @@ NoneBot 使用 [`pydantic`](https://pydantic-docs.helpmanual.io/) 以及 [`pytho
除了 NoneBot 的配置项外,还可以自行添加配置项到 `.env.{environment}` 文件中。
这些配置将会在 json 反序列化后一起带入 `Config` 类中。
配置方法参考: [配置](https://v2.nonebot.dev/docs/appendices/config)
配置方法参考: [配置](https://nonebot.dev/docs/appendices/config)
- **参数**

View File

@ -9,7 +9,7 @@ description: nonebot.log 模块
NoneBot 使用 [`loguru`][loguru] 来记录日志信息。
自定义 logger 请参考 [自定义日志](https://v2.nonebot.dev/docs/appendices/log)
自定义 logger 请参考 [自定义日志](https://nonebot.dev/docs/appendices/log)
以及 [`loguru`][loguru] 文档。
[loguru]: https://github.com/Delgan/loguru

View File

@ -0,0 +1,191 @@
---
sidebar_position: 0
description: 开源软件供应链点亮计划 - 暑期 2021
---
# 暑期 2021
**开源软件供应链点亮计划 - 暑期 2021** 是**中国科学院软件研究所**与 **openEuler 社区**共同举办的一项面向高校学生的暑期活动,旨在鼓励在校学生积极参与开源软件的开发维护,促进优秀开源软件社区的蓬勃发展。关于具体的活动规划、报名方式,请查看该活动的 [官网](https://summer.iscas.ac.cn/) 和 [帮助文档](https://summer.iscas.ac.cn/help/)。
NoneBot 社区有幸作为开源社区参与了本次活动,下面列出了目前我们已经发布的项目,欢迎感兴趣的同学在上面给出的活动官网报名,或通过 <contact@nonebot.dev> 联系我们。
## NoneBot v1
### 更新 NoneBot v1 文档中的“指南”部分
由于 NoneBot v1 和 aiocqhttp 最初基于的 QQ 机器人平台不再提供服务CQHTTP 接口也转型且改名为 OneBot 标准,目前 NoneBot v1 文档的“指南”部分和 aiocqhttp 文档有部分过时内容需要更新。我们希望将其中与旧的机器人平台相关的内容改为基于 go-cqhttp 或通用的 OneBot 表述,同时对 NoneBot v1 的 awesome-bot 示例做一次全面检查,修改其中可能已经不可用的部分。
**难度**:低
**导师**[@cleoold](https://github.com/cleoold)
**产出要求**
- 修改“指南”文档和 aiocqhttp 文档中与旧的 QQ 机器人平台相关的部分
- 检查 awesome-bot 示例是否有已经过时/不可用的地方,并更新/修复
- 修改“图灵机器人”案例,使用其它 AI 聊天 API 提供商(需先做简单调研)
**技术要求**
- 熟悉 Python 编程语言及 asyncio 机制
- 了解 Git 基本用法
- 了解聊天机器人基本开发过程
- 了解 VuePress 更佳
### NoneBot v1 API 文档自动生成
目前 NoneBot v1 的文档中“API”部分是手动编写的在更新代码接口的同时需要手动更新文档可能造成文档与代码不匹配形成额外的维护成本。我们希望将 API 文档改为直接编写在 Python docstring 中,通过工具自动生成 API 文档。
**难度**:中
**导师**[@cleoold](https://github.com/cleoold)
**产出要求**
- 调研市面上常见的 Python API 文档生成工具
- 在代码中补充 API 文档
- 编写或应用开源工具自动生成 API 文档
- 配置 GitHub Actions 或其它 CI 自动化构建和部署 API 文档
**技术要求**
- 熟悉 Python 编程语言及 asyncio 和 Type Hints
- 了解 Git 基本用法
- 了解 Sphinx 等文档生成工具更佳
- 了解 GitHub Actions 等 CI 工具更佳
## NoneBot v2
### NoneBot v2 自动化测试框架“NoneBug”
在聊天机器人的开发过程中,一套自动化的测试机制是非常重要的,特别是对于 NoneBot 2 这类为大型机器人开发而设计的项目来说,需要手动测试每一个边际条件是非常痛苦的。我们希望能够开发一款基于 NoneBot 2 插件机制的自动化测试框架,为 NoneBot 2 用户提供一套易用便捷、高度灵活的自动化测试框架。
**难度**:高
**导师**[@yanyongyu](https://github.com/yanyongyu)
**产出要求**
- 调研现有的 Python 和其它语言集成测试框架
- 设计 NoneBug 的用户 API 和实现方式
- 实现 NoneBug 自动化测试框架
- 编写详细的使用文档
**技术要求**
- 熟悉 Python 编程语言及 asyncio 和 Type Hints
- 了解 Git 基本用法
- 了解 NoneBot v2 的基本原理和使用方式
- 了解主流的 Python 自动化测试框架
### NoneBot v2 Telegram 适配器
目前 NoneBot v2 已支持 OneBot、Mirai HTTP API、钉钉协议社区反馈有更多的平台需求希望能在 NoneBot v2 获得更多的跨平台支持,提高机器人的便携性。同时,我们也希望随着新平台加入,提升现有 NoneBot v2 核心代码的平台通用性。Telegram 是一款较为广泛使用的安全即时聊天软件,同时其官方提供了丰富的聊天机器人 API因此我们希望为 NoneBot v2 编写一个 Telegram 适配器来支持 Telegram 机器人的开发。
**难度**:中
**导师**[@yanyongyu](https://github.com/yanyongyu)
**产出要求**
- 调研 Telegram Bot API 以及 WebHook 等官方接口
- 编写 Telegram 适配器并能够使用
- 代码遵守项目 Contributing 规范
**技术要求**
- 熟悉 Python 编程语言及 asyncio 和 Type Hints
- 了解 Git 基本用法
- 了解 Web 开发相关知识
- 了解 Sphinx 等文档生成工具更佳
### NoneBot v2 飞书适配器
目前 NoneBot v2 已支持 OneBot、Mirai HTTP API、钉钉协议社区反馈有更多的平台需求希望能在 NoneBot v2 获得更多的跨平台支持,提高机器人的便携性。同时,我们也希望随着新平台加入,提升现有 NoneBot v2 核心代码的平台通用性。飞书是目前企业用户广泛使用的即时聊天和协作软件,其官方提供了丰富的聊天机器人 API因此我们希望为 NoneBot v2 编写一个飞书适配器来支持飞书机器人的开发。
**难度**:中
**导师**[@yanyongyu](https://github.com/yanyongyu)
**产出要求**
- 调研飞书机器人 API 以及 WebHook 等官方接口
- 编写飞书适配器并能够使用
- 代码遵守项目 Contributing 规范
**技术要求**
- 熟悉 Python 编程语言及 asyncio 和 Type Hints
- 了解 Git 基本用法
- 了解 Web 开发相关知识
- 了解 Sphinx 等文档生成工具更佳
## OneBot
### 设计 OneBot v12 接口标准
目前的 OneBot 标准的 v11 版本仍然与 QQ 平台有较多耦合,我们希望在 v12 去掉与 QQ 耦合的历史包袱,形成一个通用的、可扩展的、易于使用的同时易于实现的聊天机器人接口标准。
**难度**:中
**导师**[@richardchien](https://github.com/richardchien)
**产出要求**
- 调研各聊天机器人平台的官方/非官方接口特点
- 通用化 OneBot 核心 API分离 QQ 特定的 API去掉无用 API
- 优化现有的通信、消息表示机制
- 补充 QQ 特定的缺失 API
- 文档需符合风格指南
**技术要求**
- 熟悉至少两个聊天平台的聊天机器人开发
- 了解 Git 基本用法
- 了解使用不同语言编写聊天机器人时的常用实践
- 对文档的优雅性与美观性有追求更佳
### 实现 Rust 版 libonebot
目前最常用的 OneBot 实现包括 go-cqhttp、onebot-kotlin、node-onebot 等,这些实现都各自重复实现了 Web 通信、消息解析、配置读写等功能,当社区中的开发者想针对一个新的聊天平台实现 OneBot 时,他们往往同样需要再次实现类似逻辑。我们希望使用 Rust 编写一个 libonebot 模块,该模块实现所有 OneBot 实现所共享的功能,从而方便其他开发者们使用 Rust 快速编写具体的 OneBot 实现。同时,我们希望借此项目在聊天机器人社区中推广 Rust 编程语言。
> 注:这里的逻辑是 libonebot + 针对某聊天平台的对接代码 = 某聊天平台的 OneBot 实现libonebot 要做的是让 OneBot 实现的开发者只需编写针对特定聊天平台的对接代码,而无需关心 OneBot 标准定义的通信方式、消息格式等。
**难度**:高
**导师**[@richardchien](https://github.com/richardchien)
**产出要求**
- 实现所有 OneBot 实现所共享的功能,包括 Web 通信、消息解析、配置读写等
- 充分考虑同时兼容 OneBot v11 和 v12 接口
- 能够根据用户OneBot 实现的开发者)所实现的接口自动实现类似 get_available_apis 等接口
- 编写详细的使用文档
- 如果可能,与 v12 设计项目联动,实现第一手 v12 支持
**技术要求**
- 熟悉聊天机器人开发
- 熟悉 Rust Web 开发
### 实现自选语言版 libonebot
目前最常用的 OneBot 实现包括 go-cqhttp、onebot-kotlin、node-onebot 等,这些实现都各自重复实现了 Web 通信、消息解析、配置读写等功能,当社区中的开发者想针对一个新的聊天平台实现 OneBot 时,他们往往同样需要再次实现类似逻辑。我们希望使用 Python、Go、Kotlin、Node、PHP、C#.NET 等主流语言(任选一个)编写 libonebot 模块,该模块实现所有 OneBot 实现所共享的功能,从而方便其他开发者们使用对应语言快速编写具体的 OneBot 实现。
> 注:这里的逻辑是 libonebot + 针对某聊天平台的对接代码 = 某聊天平台的 OneBot 实现libonebot 要做的是让 OneBot 实现的开发者只需编写针对特定聊天平台的对接代码,而无需关心 OneBot 标准定义的通信方式、消息格式等。
**难度**:中
**导师**[@richardchien](https://github.com/richardchien)
**产出要求**
- 实现所有 OneBot 实现所共享的功能,包括 Web 通信、消息解析、配置读写等
- 充分考虑同时兼容 OneBot v11 和 v12 接口
- 编写详细的使用文档
- 如果可能实现更多附加特性如根据用户OneBot 实现的开发者)所实现的接口自动实现类似 get_available_apis 等接口、实现第一手 v12 支持等
**技术要求**
- 熟悉聊天机器人开发
- 熟悉所选语言的 Web 开发

View File

@ -0,0 +1,96 @@
---
sidebar_position: 1
description: 开源之夏 - 暑期 2022
---
# 暑期 2022
**开源之夏 - 暑期 2022** 是由**开源软件供应链点亮计划**发起、由**中国科学院软件研究所**与 **openEuler 社区**主办的一项面向高校学生的暑期活动,类似 Google Summer of CodeGSoC旨在鼓励在校学生积极参与开源软件的开发维护促进优秀开源软件社区的蓬勃发展。关于具体的活动规划、报名方式请查看该活动的 [官网](https://summer-ospp.ac.cn/) 和 [帮助文档](https://summer-ospp.ac.cn/help/)。
NoneBot 社区有幸作为开源社区 [参与](https://summer-ospp.ac.cn/#/org/orgdetail/e1fb5b8d-125a-4138-b756-25bd32c0a31a/) 了本次活动,下面列出了目前我们已经发布的项目,欢迎感兴趣的同学加入 QQ 群 [737131827](https://jq.qq.com/?_wv=1027&k=PEgyGeEu) 或通过 <contact@nonebot.dev> 联系我们。
## NoneBot2 命令行 CLI 交互体验升级
NoneBot2 为用户提供了命令行脚手架 ──`nb-cli`辅助用户更好地上手项目以及进行开发。nb-cli 主要包括:创建项目、运行项目、安装与卸载插件、部署项目等功能。随着 NoneBot2 Beta 版本的发布,脚手架功能存在一定的定位不明确、功能体验不佳。本项目旨在重新设计 nb-cli 功能框架,完善功能,优化用户体验。
**难度**:进阶
**导师**[@yanyongyu](https://github.com/yanyongyu)
**产出要求**
- 设计 nb-cli 功能框架
- 明确各功能模块
- 设计用户交互模式
- 完成 nb-cli 主要功能代码
- 项目管理
- 插件管理
- 其它
- 同步更新使用文档
**技术要求**
- 熟悉 Python 命令行交互代码编写
- 熟悉 NoneBot2 框架功能
- 熟悉 NoneBot2 项目组织方式
**成果仓库**
- <https://github.com/nonebot/nb-cli>
- <https://github.com/nonebot/nonebot2>
## NoneBot2 命令行即时交互通信设计与实现
NoneBot2 在早期提供了基于网页的 nonebot-plugin-test 插件,无需平台适配接入即可对机器人进行测试,方便了开发者直观的感受机器人文本交互功能。我们希望提供一款基于命令行的适配器/驱动器,用于无平台适配接入、可以运行机器人的场景进行功能体验或测试。
**难度**:进阶
**导师**[@mnixry](https://github.com/mnixry)
**产出要求**
- 设计命令行与 NoneBot2 通信模式
- 直接调用/HTTP/WebSocket
- 设计命令行交互界面
- 实现相应适配器/驱动器
- 同步更新使用说明文档
**技术要求**
- 熟悉 Python 命令行交互代码编写
- 熟悉 NoneBot2 框架功能
- 熟悉 NoneBot2 项目组织方式
**成果仓库**
- <https://github.com/nonebot/adapter-console>
## NoneBot2 用户上手与深入教程设计
NoneBot2 为用户提供了详细的文档介绍,辅助用户更好的上手项目以及进行开发。文档分为基础与进阶两个部分。基础部分帮助新用户快速上手开发,主要包括:安装 NoneBot2、使用脚手架、创建配置项目、使用适配器、加载插件、定义消息事件、处理消息事件、调用平台 API 等。进阶部分向已经熟悉开发流程的用户介绍更多高级技巧主要包括NoneBot2 工作原理、定时任务、权限控制、钩子函数、跨插件访问、单元测试、发布插件等。目前文档对于用户而言过于费解,导致用户难以理解 NoneBot2 开发。本项目旨在优化文档内容,使其更加通俗易懂,不让文档成为用户上手的阻碍,同时完善进阶内容,让有更复杂需求的用户,同样能从文档中受益。
相关 issue
- <https://github.com/nonebot/nonebot2/issues/793>
- <https://github.com/nonebot/nonebot2/issues/295>
**难度**:进阶
**导师**[@SK-415](https://github.com/SK-415)
**产出要求**
- 文档通俗易懂
- 附有适当的图片指引(如 asciinema
- 内容完整,由浅入深
- 适当的界面美化,合理分配布局
**技术要求**
- 熟悉文档结构组织与语言表达
- 熟悉 NoneBot2 框架功能
- 熟悉 NoneBot2 项目组织方式
**成果仓库**
- <https://github.com/nonebot/nonebot2>

View File

@ -0,0 +1,89 @@
---
sidebar_position: 2
description: 开源之夏 - 暑期 2023
---
# 暑期 2023
**开源之夏 - 暑期 2023** 是由**开源软件供应链点亮计划**发起、由**中国科学院软件研究所**与 **openEuler 社区**主办的一项面向高校学生的暑期活动,类似 Google Summer of CodeGSoC旨在鼓励在校学生积极参与开源软件的开发维护促进优秀开源软件社区的蓬勃发展。关于具体的活动规划、报名方式请查看该活动的 [官网](https://summer-ospp.ac.cn/) 和 [帮助文档](https://summer-ospp.ac.cn/help/)。
NoneBot 社区有幸作为开源社区 [参与](https://summer-ospp.ac.cn/org/orgdetail/e1fb5b8d-125a-4138-b756-25bd32c0a31a?lang=zh) 了本次活动,下面列出了目前我们已经发布的项目,欢迎感兴趣的同学通过 <contact@nonebot.dev> 联系我们。
## NoneBot 项目管理图形化面板
NoneBot 目前提供了开箱即用的命令行脚手架来帮助初次使用的用户更快的上手编写应用。但是,对于未有一定开发经验的用户,命令行的使用仍具有一定的困难。此外,其他项目如 koishi、vue 等,均可通过图形化界面的形式为用户提供更便捷的项目开发。因此,我们希望借助现有命令行脚手架的可扩展特性,提供一个项目管理面板服务,以网页的形式帮助用户开发 NoneBot 应用。
**难度**:进阶
**导师**[@mnixry](https://github.com/mnixry)
**产出要求**
- 设计并实现项目管理面板相关功能
- 创建与管理项目
- 配置与运行项目
- NoneBot 插件管理
- 实现相应 nb-cli 插件提供面板服务
- 代码符合 NoneBot Contributing 规范
**技术要求**
- 熟悉 nb-cli 相关功能
- 熟悉 NoneBot 框架功能
- 熟悉前后端相关实现方式
**成果仓库**
- <https://github.com/nonebot/cli-plugin-webui>
## NoneBot Discord 适配器
NoneBot 作为一个跨平台聊天机器人框架,目前已有 OneBot、飞书、Telegram、QQ 频道等诸多平台的适配支持。作为众多用户期待的平台适配之一,我们希望借此机会接入 Discord 聊天机器人。
**难度**:进阶
**导师**[@iyume](https://github.com/iyume)
**产出要求**
- 调研 Discord Bot 相关功能与接口
- 设计与编写 NoneBot Discord 适配器
- 代码符合 NoneBot Contributing 规范
**技术要求**
- 熟悉 NoneBot 框架功能
- 熟悉 NoneBot 各模块职责与适配器编写
**成果仓库**
- <https://github.com/nonebot/adapter-discord>
## NoneBot 数据库支持插件
NoneBot 的插件系统为用户实现应用提供了极高的便捷性,但因此也增加了插件统一管理的难度。目前,我们发现许多用户发布的插件中存在文件存储结构化数据、数据存放散乱等现象,同时插件间也可能产生冲突。因此,我们希望提供一个统一的数据存储与管理方式,便于用户读写应用数据。
**难度**:进阶
**导师**[@yanyongyu](https://github.com/yanyongyu)
**产出要求**
- 设计并实现 ORM 插件
- 提供关系模型定义功能
- 提供模型迁移与管理功能
- 能较好的支持 Python 类型检查与推导
- 编写相应的用户使用文档
- 代码符合 NoneBot Contributing 规范
**技术要求**
- 熟悉 NoneBot 框架功能与插件编写
- 熟悉 SQLAlchemy 等 ORM 框架
- 熟悉 SQLAlchemy ORM
- 熟悉 alembic 等迁移工具
- 熟悉 nb-cli 插件编写
**成果仓库**
- <https://github.com/nonebot/plugin-orm>

View File

@ -100,6 +100,18 @@
],
"collapsed": true
},
{
"type": "category",
"label": "开源之夏",
"collapsible": false,
"items": [
{
"type": "autogenerated",
"dirName": "ospp"
}
],
"collapsed": true
},
{
"type": "category",
"label": "社区资源",
@ -109,6 +121,11 @@
"type": "link",
"label": "商店",
"href": "/store"
},
{
"type": "link",
"label": "论坛",
"href": "https://discussions.nonebot.dev"
}
],
"collapsed": true