Update docs

This commit is contained in:
Richard Chien 2018-08-14 23:52:52 +08:00
parent d5ac3c8462
commit 7e3d09d32b
8 changed files with 113 additions and 26 deletions

View File

@ -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) 项目。

View File

@ -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)

View File

@ -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',
] ]
} }
] ]

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

@ -1,5 +1,6 @@
--- ---
home: true home: true
heroImage: /hero.png
actionText: 即刻开始 actionText: 即刻开始
actionLink: /guide/ actionLink: /guide/
features: features:

View File

@ -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 通信方式
- 支持命令、自然语言处理器等多种插件形式
- 提供直观的交互式会话接口
- 命令和自然语言处理器提供权限控制机制
- 支持在命令会话运行过程中切换到其它命令或自然语言处理器
- 多种方式渲染要发送的消息内容,使对话足够自然

View File

@ -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 机器人的创意之旅!

View File

@ -0,0 +1,3 @@
# 发生了什么?
本节将带你理解上一节中的 NoneBot 最小实例是如何对你发送的消息做出反应的。