mirror of
https://github.com/nonebot/nonebot2.git
synced 2024-11-24 09:05:04 +08:00
Update docs
This commit is contained in:
parent
d5ac3c8462
commit
7e3d09d32b
@ -3,8 +3,8 @@
|
|||||||
[![License](https://img.shields.io/pypi/l/none-bot.svg)](LICENSE)
|
[![License](https://img.shields.io/pypi/l/none-bot.svg)](LICENSE)
|
||||||
[![PyPI](https://img.shields.io/pypi/v/none-bot.svg)](https://pypi.python.org/pypi/none-bot)
|
[![PyPI](https://img.shields.io/pypi/v/none-bot.svg)](https://pypi.python.org/pypi/none-bot)
|
||||||
|
|
||||||
NoneBot 是一个基于 [酷 Q](https://cqp.cc/) 的 Python 异步 QQ 机器人框架,框架与酷 Q 交互的部分使用 [aiocqhttp](https://github.com/richardchien/python-aiocqhttp),后者是 [CoolQ HTTP API 插件](https://github.com/richardchien/coolq-http-api) 的一个 Python 异步 SDK。NoneBot 仅支持 Python 3.6+ 及 CoolQ HTTP API 插件 v4.2+。
|
NoneBot 是一个基于 [酷 Q](https://cqp.cc/) 的 Python 异步 QQ 机器人框架,底层与酷 Q 交互的部分使用 [python-aiocqhttp](https://github.com/richardchien/python-aiocqhttp),后者是 [CoolQ HTTP API 插件](https://github.com/richardchien/coolq-http-api) 的一个 Python 异步 SDK。NoneBot 仅支持 Python 3.6+ 及 CoolQ HTTP API 插件 v4.2+。
|
||||||
|
|
||||||
NoneBot 本身不包含任何实际功能,仅仅提供处理消息、解析命令等核心功能,框架的使用者需要使用框架提供的接口,以插件的形式来编写具体功能。
|
NoneBot 本身不包含任何实际功能,仅仅提供处理消息、解析命令等核心功能,框架的使用者需要使用框架提供的接口,以插件的形式来编写具体功能。
|
||||||
|
|
||||||
文档暂时还没完成,请先参考 [none.plugins](none/plugins)、[demo](demo) 模块和 [richardchien/maruko](https://github.com/richardchien/maruko) 项目中的使用方式。
|
文档暂时还没完成,可以在 [这里](https://none.rclab.tk/) 访问正在编写中的文档,对于文档中目前尚未写到的部分,请先参考 [none.plugins](none/plugins)、[demo](demo) 和 [richardchien/maruko](https://github.com/richardchien/maruko) 项目。
|
||||||
|
@ -1,13 +1,20 @@
|
|||||||
from os import path
|
# from os import path
|
||||||
|
#
|
||||||
|
# import none
|
||||||
|
# from demo import config
|
||||||
|
#
|
||||||
|
# none.init(config)
|
||||||
|
# app = none.get_bot().asgi
|
||||||
|
#
|
||||||
|
# if __name__ == '__main__':
|
||||||
|
# none.load_builtin_plugins()
|
||||||
|
# none.load_plugins(path.join(path.dirname(__file__), 'plugins'),
|
||||||
|
# 'demo.plugins')
|
||||||
|
# none.run(host=config.HOST, port=config.PORT)
|
||||||
|
|
||||||
import none
|
import none
|
||||||
from demo import config
|
|
||||||
|
|
||||||
none.init(config)
|
|
||||||
app = none.get_bot().asgi
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
none.init()
|
||||||
none.load_builtin_plugins()
|
none.load_builtin_plugins()
|
||||||
none.load_plugins(path.join(path.dirname(__file__), 'plugins'),
|
none.run(host='0.0.0.0', port=8080)
|
||||||
'demo.plugins')
|
|
||||||
none.run(host=config.HOST, port=config.PORT)
|
|
||||||
|
@ -13,8 +13,8 @@ module.exports = {
|
|||||||
lastUpdated: '上次更新',
|
lastUpdated: '上次更新',
|
||||||
activeHeaderLinks: false,
|
activeHeaderLinks: false,
|
||||||
nav: [
|
nav: [
|
||||||
{ text: '指南', link: '/guide/' },
|
{ text: '入门指南', link: '/guide/' },
|
||||||
{ text: '术语表', link: '/glossary' },
|
{ text: '术语表', link: '/glossary.md' },
|
||||||
],
|
],
|
||||||
sidebar: {
|
sidebar: {
|
||||||
'/guide/': [
|
'/guide/': [
|
||||||
@ -25,6 +25,7 @@ module.exports = {
|
|||||||
'',
|
'',
|
||||||
'installation',
|
'installation',
|
||||||
'getting-started',
|
'getting-started',
|
||||||
|
'whats-happened',
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
BIN
docs/.vuepress/public/hero.png
Normal file
BIN
docs/.vuepress/public/hero.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.4 KiB |
@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
home: true
|
home: true
|
||||||
|
heroImage: /hero.png
|
||||||
actionText: 即刻开始
|
actionText: 即刻开始
|
||||||
actionLink: /guide/
|
actionLink: /guide/
|
||||||
features:
|
features:
|
||||||
|
@ -1,29 +1,37 @@
|
|||||||
# 介绍
|
# 介绍
|
||||||
|
|
||||||
NoneBot 是一个基于 [酷 Q](https://cqp.cc/) 的 Python 异步 QQ 机器人框架,它会对 QQ 机器人收到的消息进行解析和处理,并以插件化的形式,分发给消息所对应的命令处理器和自然语言处理器,来完成具体的功能。
|
|
||||||
|
|
||||||
除了起到解析消息的作用,NoneBot 还为插件提供了大量实用的预设操作和权限控制机制,尤其对于命令处理器,它更是提供了完善且易用的用户会话机制和内部调用机制,以分别适应命令的连续交互和插件内部功能复用等需求。
|
|
||||||
|
|
||||||
NoneBot 在其底层与酷 Q 交互的部分使用 [python-aiocqhttp](https://github.com/richardchien/python-aiocqhttp) 库,后者是 [CoolQ HTTP API 插件](https://github.com/richardchien/coolq-http-api) 的一个 Python 异步 SDK,在 [Quart](https://pgjones.gitlab.io/quart/) 的基础上封装了与 CoolQ HTTP API 插件的网络交互。
|
|
||||||
|
|
||||||
得益于 Python 的 [asyncio](https://docs.python.org/3/library/asyncio.html) 机制,NoneBot 处理消息的吞吐量有了很大的保障,再配合 CoolQ HTTP API 插件可选的 WebSocket 通信方式(也是最建议的通信方式),NoneBot 的性能可以达到 HTTP 通信方式的两倍以上,相较于传统同步 I/O 的 HTTP 通信,性能更是有质的飞跃。
|
|
||||||
|
|
||||||
需要注意的是,NoneBot 仅支持 Python 3.6+ 及 CoolQ HTTP API 插件 v4.2+。
|
|
||||||
|
|
||||||
::: tip 提示
|
::: tip 提示
|
||||||
如果在阅读本文档时遇到难以理解的词汇,请随时查阅 [术语表](/glossary.md) 或使用 [Google 搜索](https://www.google.com/ncr)。
|
如果在阅读本文档时遇到难以理解的词汇,请随时查阅 [术语表](/glossary.md) 或使用 [Google 搜索](https://www.google.com/ncr)。
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: tip 提示
|
::: tip 提示
|
||||||
如果初次使用时觉得这里的介绍过于枯燥,可简单略读之后直接前往 [安装](/guide/installation.md) 查看安装方法,并进行后续的基础使用教程。
|
初次使用时可能会觉得这里的介绍过于枯燥,可以先简单略读之后直接前往 [安装](/guide/installation.md) 查看安装方法,并进行后续的基础使用教程。
|
||||||
:::
|
:::
|
||||||
|
|
||||||
## NoneBot 如何工作?
|
NoneBot 是一个基于 [酷 Q](https://cqp.cc/) 的 Python 异步 QQ 机器人框架,它会对 QQ 机器人收到的消息进行解析和处理,并以插件化的形式,分发给消息所对应的命令处理器和自然语言处理器,来完成具体的功能。
|
||||||
|
|
||||||
|
除了起到解析消息的作用,NoneBot 还为插件提供了大量实用的预设操作和权限控制机制,尤其对于命令处理器,它更是提供了完善且易用的会话机制和内部调用机制,以分别适应命令的连续交互和插件内部功能复用等需求。
|
||||||
|
|
||||||
|
NoneBot 在其底层与酷 Q 交互的部分使用 [python-aiocqhttp](https://github.com/richardchien/python-aiocqhttp) 库,后者是 [CoolQ HTTP API 插件](https://github.com/richardchien/coolq-http-api) 的一个 Python 异步 SDK,在 [Quart](https://pgjones.gitlab.io/quart/) 的基础上封装了与 CoolQ HTTP API 插件的网络交互。
|
||||||
|
|
||||||
|
得益于 Python 的 [asyncio](https://docs.python.org/3/library/asyncio.html) 机制,NoneBot 处理消息的吞吐量有了很大的保障,再配合 CoolQ HTTP API 插件可选的 WebSocket 通信方式(也是最建议的通信方式),NoneBot 的性能可以达到 HTTP 通信方式的两倍以上,相较于传统同步 I/O 的 HTTP 通信,更是有质的飞跃。
|
||||||
|
|
||||||
|
需要注意的是,NoneBot 仅支持 Python 3.6+ 及 CoolQ HTTP API 插件 v4.2+。
|
||||||
|
|
||||||
|
## 它如何工作?
|
||||||
|
|
||||||
NoneBot 的运行离不开酷 Q 和 CoolQ HTTP API 插件。酷 Q 扮演着「无头 QQ 客户端」的角色,它进行实际的消息、通知、请求的接收和发送,当酷 Q 收到消息时,它将这个消息包装为一个事件(通知和请求同理),并通过它自己的插件机制将事件传送给 CoolQ HTTP API 插件,后者再根据其配置中的 `post_url` 或 `ws_reverse_event_url` 等项来将事件发送至 NoneBot。
|
NoneBot 的运行离不开酷 Q 和 CoolQ HTTP API 插件。酷 Q 扮演着「无头 QQ 客户端」的角色,它进行实际的消息、通知、请求的接收和发送,当酷 Q 收到消息时,它将这个消息包装为一个事件(通知和请求同理),并通过它自己的插件机制将事件传送给 CoolQ HTTP API 插件,后者再根据其配置中的 `post_url` 或 `ws_reverse_event_url` 等项来将事件发送至 NoneBot。
|
||||||
|
|
||||||
在 NoneBot 收到事件前,它底层的 aiocqhttp 实际已经先看到了事件,aiocqhttp 根据事件的类型信息,通知到 NoneBot 的相应函数。特别地,对于消息类型的事件,还将消息内容转换成了 `aiocqhttp.message.Message` 类型,以便处理。
|
在 NoneBot 收到事件前,它底层的 aiocqhttp 实际已经先看到了事件,aiocqhttp 根据事件的类型信息,通知到 NoneBot 的相应函数。特别地,对于消息类型的事件,还将消息内容转换成了 `aiocqhttp.message.Message` 类型,以便处理。
|
||||||
|
|
||||||
NoneBot 的事件处理函数收到通知后,对于不同类型的事件,再做相应的预处理和解析,然后调用对应的插件,并向其提供适合此类事件的 `Session` 对象。NoneBot 插件的编写者要做的,就是利用 `Session` 对象所提供的数据,在插件的处理函数中实现所需的功能。
|
NoneBot 的事件处理函数收到通知后,对于不同类型的事件,再做相应的预处理和解析,然后调用对应的插件,并向其提供适合此类事件的会话(Session)对象。NoneBot 插件的编写者要做的,就是利用 Session 对象中提供的数据,在插件的处理函数中实现所需的功能。
|
||||||
|
|
||||||
## 特点
|
## 特色
|
||||||
|
|
||||||
|
- 基于异步 I/O
|
||||||
|
- 同时支持 HTTP 和反向 WebSocket 通信方式
|
||||||
|
- 支持命令、自然语言处理器等多种插件形式
|
||||||
|
- 提供直观的交互式会话接口
|
||||||
|
- 命令和自然语言处理器提供权限控制机制
|
||||||
|
- 支持在命令会话运行过程中切换到其它命令或自然语言处理器
|
||||||
|
- 多种方式渲染要发送的消息内容,使对话足够自然
|
||||||
|
@ -1,3 +1,70 @@
|
|||||||
# 开始使用
|
# 开始使用
|
||||||
|
|
||||||
一切都安装成功后,你就已经做好了进行简单配置以运行一个最小的 NoneBot 实例的准备。
|
一切都安装成功后,你就已经做好了进行简单配置以运行一个最小的 NoneBot 实例的准备。
|
||||||
|
|
||||||
|
## 最小实例
|
||||||
|
|
||||||
|
使用你最熟悉的编辑器或 IDE,创建一个名为 `bot.py` 的文件,内容如下:
|
||||||
|
|
||||||
|
```python
|
||||||
|
# bot.py
|
||||||
|
|
||||||
|
import none
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
none.init()
|
||||||
|
none.load_builtin_plugins()
|
||||||
|
none.run(host='127.0.0.1', port=8080)
|
||||||
|
```
|
||||||
|
|
||||||
|
`if __name__ == '__main__'` 语句块的这几行代码将依次:
|
||||||
|
|
||||||
|
1. 使用默认配置初始化 NoneBot 包
|
||||||
|
2. 加载 NoneBot 内置的插件
|
||||||
|
3. 在地址 `127.0.0.1:8080` 运行 NoneBot
|
||||||
|
|
||||||
|
在命令行使用如下命令即可运行这个 NoneBot 实例:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python bot.py
|
||||||
|
```
|
||||||
|
|
||||||
|
## 配置 CoolQ HTTP API 插件
|
||||||
|
|
||||||
|
单纯运行 NoneBot 实例并不会产生任何效果,因为此刻酷 Q 这边还不知道 NoneBot 的存在,也就无法把消息发送给它,因此现在需要对 CoolQ HTTP API 插件做一个简单的配置来让它把消息等事件上报给 NoneBot。
|
||||||
|
|
||||||
|
如果你在之前已经按照 [安装](/guide/installation.md) 的建议使用默认配置运行了一次 CoolQ HTTP API 插件,此时酷 Q 的 `app\io.github.richardchien.coolqhttpapi\config\` 目录中应该已经有了一个名为 `<user-id>.json` 的文件(`<user-id>` 为你登录的 QQ 账号)。修改这个文件,**添加**如下配置项:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"ws_reverse_api_url": "ws://127.0.0.1:8080/ws/api/",
|
||||||
|
"ws_reverse_event_url": "ws://127.0.0.1:8080/ws/event/",
|
||||||
|
"ws_reverse_reconnect_on_code_1000": true,
|
||||||
|
"use_ws_reverse": true
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
注意,这里的 `127.0.0.1:8080` 即对应 `none.run()` 中传入的 `host` 和 `port`,如果在 `none.run()` 中传入的 `host` 是 `0.0.0.0`,则插件的配置中需使用任意一个能够访问到 NoneBot 所在环境的 IP。特别地,如果你的酷 Q 运行在 Docker 容器中,NoneBot 运行在宿主机中,则默认情况下这里需使用 `172.17.0.1`(不同机器有可能不同,需使用 `docker inspect bridge` 查看,具体见 Docker 文档的 [Configure networking](https://docs.docker.com/network/))。
|
||||||
|
|
||||||
|
修改之后,在酷 Q 的应用菜单中重启 CoolQ HTTP API 插件,或直接重启酷 Q,以使新的配置文件生效。
|
||||||
|
|
||||||
|
## 历史性的第一次对话
|
||||||
|
|
||||||
|
一旦新的配置文件正确生效之后,NoneBot 所在的控制台(如果正在运行的话)应该会输出类似下面的内容:
|
||||||
|
|
||||||
|
```
|
||||||
|
[2018-08-14 23:35:35,532] 127.0.0.1:8080 GET /ws/api/ ws 101 - 2736
|
||||||
|
[2018-08-14 23:35:35,534] 127.0.0.1:8080 GET /ws/event/ ws 101 - 4682
|
||||||
|
```
|
||||||
|
|
||||||
|
这表示 CoolQ HTTP API 插件已经成功地连接上了 NoneBot,与此同时,插件的日志文件中也会输出反向 WebSocket 连接成功的日志。
|
||||||
|
|
||||||
|
如果到这一步你没有看到上面这样的日志,请注意排查配置中的 IP 和端口是否确实可以访问。
|
||||||
|
|
||||||
|
现在,尝试向你的 QQ 机器人账号发送如下内容:
|
||||||
|
|
||||||
|
```
|
||||||
|
/echo 你好,世界
|
||||||
|
```
|
||||||
|
|
||||||
|
到这里如果一切都没有问题,你应该会收到机器人给你回复了 `你好,世界`。这一历史性的对话标志着你已经成功地运行了一个 NoneBot 的最小实例,开始了编写更强大的 QQ 机器人的创意之旅!
|
||||||
|
3
docs/guide/whats-happened.md
Normal file
3
docs/guide/whats-happened.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# 发生了什么?
|
||||||
|
|
||||||
|
本节将带你理解上一节中的 NoneBot 最小实例是如何对你发送的消息做出反应的。
|
Loading…
Reference in New Issue
Block a user