Replace "酷 Q" with "酷Q"

This commit is contained in:
Richard Chien 2018-12-27 20:52:40 +08:00
parent 89401ee792
commit bbf19a245f
12 changed files with 45 additions and 45 deletions

View File

@ -1,6 +1,6 @@
module.exports = {
title: 'NoneBot',
description: '基于 Q 的 Python 异步 QQ 机器人框架',
description: '基于 Q 的 Python 异步 QQ 机器人框架',
markdown: {
lineNumbers: true
},

View File

@ -18,7 +18,7 @@ sidebar: auto
- **说明:**
Q HTTP API 上报的事件数据对象的类型。
酷Q HTTP API 上报的事件数据对象的类型。
### `Message_T`
@ -62,7 +62,7 @@ sidebar: auto
- **说明:**
Q HTTP API 插件的 HTTP 接口地址,如果不使用 HTTP 通信,则无需设置。
酷Q HTTP API 插件的 HTTP 接口地址,如果不使用 HTTP 通信,则无需设置。
- **用法:**
@ -70,7 +70,7 @@ sidebar: auto
API_ROOT = 'http://127.0.0.1:5700'
```
告诉 NoneBot 酷 Q HTTP API 插件的 HTTP 服务运行在 `http://127.0.0.1:5700`
告诉 NoneBot 酷Q HTTP API 插件的 HTTP 服务运行在 `http://127.0.0.1:5700`
### `ACCESS_TOKEN`
@ -80,7 +80,7 @@ sidebar: auto
- **说明:**
需要和 Q HTTP API 插件的配置中的 `access_token` 相同。
需要和 Q HTTP API 插件的配置中的 `access_token` 相同。
### `SECRET`
@ -90,7 +90,7 @@ sidebar: auto
- **说明:**
需要和 Q HTTP API 插件的配置中的 `secret` 相同。
需要和 Q HTTP API 插件的配置中的 `secret` 相同。
### `HOST`
@ -1072,7 +1072,7 @@ sidebar: auto
- **参数:**
- `reduce: bool`: 是否先化简消息段列表(合并相邻的 `text` 段),对于从 Q 收到的消息,通常不需要开启
- `reduce: bool`: 是否先化简消息段列表(合并相邻的 `text` 段),对于从 Q 收到的消息,通常不需要开启
- **返回:**
@ -1281,7 +1281,7 @@ sidebar: auto
- **说明:**
命令会话当前参数。实际上是 Q 收到的消息去掉命令名的剩下部分,因此可能存在 CQ 码。
命令会话当前参数。实际上是 Q 收到的消息去掉命令名的剩下部分,因此可能存在 CQ 码。
#### `current_arg_text`
@ -1751,7 +1751,7 @@ sidebar: auto
- **说明:**
Q HTTP API 上报的事件数据对象,或称事件上下文,具体请参考 [事件上报](https://cqhttp.cc/docs/#/Post)。
酷Q HTTP API 上报的事件数据对象,或称事件上下文,具体请参考 [事件上报](https://cqhttp.cc/docs/#/Post)。
- **用法:**

View File

@ -4,15 +4,15 @@ sidebar: auto
# 术语表
## 酷 Q
## 酷Q
[ Q](https://cqp.cc) 是一个易语言编写的 QQ 机器人平台,其本身没有任何具体的功能,只是负责实现 QQ 协议,并以 DLL 导出函数的形式向插件提供 API 和事件上报。
[Q](https://cqp.cc) 是一个易语言编写的 QQ 机器人平台,其本身没有任何具体的功能,只是负责实现 QQ 协议,并以 DLL 导出函数的形式向插件提供 API 和事件上报。
## CoolQ HTTP API 插件
[CoolQ HTTP API 插件](https://cqhttp.cc/) 是 Q 的一个第三方插件,用于将 Q 所提供的所有 DLL 接口转换为 HTTP 或 WebSocket 的 web 形式,从而使利用任意语言编写 Q 插件成为可能。
[CoolQ HTTP API 插件](https://cqhttp.cc/) 是 Q 的一个第三方插件,用于将 Q 所提供的所有 DLL 接口转换为 HTTP 或 WebSocket 的 web 形式,从而使利用任意语言编写 Q 插件成为可能。
有时被称为 cqhttp、CQHTTP、酷 Q HTTP API 等。
有时被称为 cqhttp、CQHTTP、酷Q HTTP API 等。
## aiocqhttp
@ -32,7 +32,7 @@ sidebar: auto
## 通信方式
CoolQ HTTP API 插件中的一个术语,表示其与通过 web 技术编写的 Q 插件之间通信的手段。
CoolQ HTTP API 插件中的一个术语,表示其与通过 web 技术编写的 Q 插件之间通信的手段。
目前 CoolQ HTTP API 插件支持 HTTP、WebSocket、反向 WebSocket 三种通信方式,见 [通信方式](https://cqhttp.cc/docs/#/CommunicationMethods)NoneBot 支持其中的 HTTP 和反向 WebSocket。
@ -108,7 +108,7 @@ Expression 可以是一个 `str`、元素类型是 `str` 的序列(一般为 `
## CQ 码
Q 用来表示非文本消息的一种表示方法,形如 `[CQ:image,file=ABC.jpg]`。具体的格式规则,请参考 Q 文档的 [CQ 码](https://d.cqp.me/Pro/CQ%E7%A0%81) 和 CoolQ HTTP API 插件文档的 [CQ 码](https://cqhttp.cc/docs/#/CQCode)。
Q 用来表示非文本消息的一种表示方法,形如 `[CQ:image,file=ABC.jpg]`。具体的格式规则,请参考 Q 文档的 [CQ 码](https://d.cqp.me/Pro/CQ%E7%A0%81) 和 CoolQ HTTP API 插件文档的 [CQ 码](https://cqhttp.cc/docs/#/CQCode)。
## 消息段

View File

@ -8,19 +8,19 @@
初次使用时可能会觉得这里的概览过于枯燥,可以先简单略读之后直接前往 [安装](/guide/installation.md) 查看安装方法,并进行后续的基础使用教程。
:::
NoneBot 是一个基于 [ Q](https://cqp.cc/) 的 Python 异步 QQ 机器人框架,它会对 QQ 机器人收到的消息进行解析和处理,并以插件化的形式,分发给消息所对应的命令处理器和自然语言处理器,来完成具体的功能。
NoneBot 是一个基于 [Q](https://cqp.cc/) 的 Python 异步 QQ 机器人框架,它会对 QQ 机器人收到的消息进行解析和处理,并以插件化的形式,分发给消息所对应的命令处理器和自然语言处理器,来完成具体的功能。
除了起到解析消息的作用NoneBot 还为插件提供了大量实用的预设操作和权限控制机制,尤其对于命令处理器,它更是提供了完善且易用的会话机制和内部调用机制,以分别适应命令的连续交互和插件内部功能复用等需求。
NoneBot 在其底层与 Q 交互的部分使用 [python-aiocqhttp](https://github.com/richardchien/python-aiocqhttp) 库,后者是 [CoolQ HTTP API 插件](https://cqhttp.cc/) 的一个 Python 异步 SDK在 [Quart](https://pgjones.gitlab.io/quart/) 的基础上封装了与 CoolQ HTTP API 插件的网络交互。
NoneBot 在其底层与 Q 交互的部分使用 [python-aiocqhttp](https://github.com/richardchien/python-aiocqhttp) 库,后者是 [CoolQ HTTP API 插件](https://cqhttp.cc/) 的一个 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 仅支持 Python 3.6.1+ 及 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` 类型,以便处理。

View File

@ -26,7 +26,7 @@ async def tuling(session: CommandSession):
reply = await call_tuling_api(session, message)
if reply:
# 如果调用图灵机器人成功,得到了回复,则转义之后发送给用户
# 转义会把消息中的某些特殊字符做转换,以避免 Q 将它们理解为 CQ 码
# 转义会把消息中的某些特殊字符做转换,以避免 Q 将它们理解为 CQ 码
await session.send(escape(reply))
else:
# 如果调用失败,或者它返回的内容我们目前处理不了,发送无法获取图灵回复时的「表达」

View File

@ -26,7 +26,7 @@ async def tuling(session: CommandSession):
reply = await call_tuling_api(session, message)
if reply:
# 如果调用图灵机器人成功,得到了回复,则转义之后发送给用户
# 转义会把消息中的某些特殊字符做转换,以避免 Q 将它们理解为 CQ 码
# 转义会把消息中的某些特殊字符做转换,以避免 Q 将它们理解为 CQ 码
await session.send(escape(reply))
else:
# 如果调用失败,或者它返回的内容我们目前处理不了,发送无法获取图灵回复时的「表达」

View File

@ -26,7 +26,7 @@ async def tuling(session: CommandSession):
reply = await call_tuling_api(session, message)
if reply:
# 如果调用图灵机器人成功,得到了回复,则转义之后发送给用户
# 转义会把消息中的某些特殊字符做转换,以避免 Q 将它们理解为 CQ 码
# 转义会把消息中的某些特殊字符做转换,以避免 Q 将它们理解为 CQ 码
await session.send(escape(reply))
else:
# 如果调用失败,或者它返回的内容我们目前处理不了,发送无法获取图灵回复时的「表达」

View File

@ -22,7 +22,7 @@ if __name__ == '__main__':
3. 在地址 `127.0.0.1:8080` 运行 NoneBot
::: tip 提示
这里 `nonebot.run()` 的参数 `host='127.0.0.1'` 表示让 NoneBot 监听本地环回地址,如果你的 Q 运行在非本机的其它位置,例如 Docker 容器内、局域网内的另一台机器上等,则这里需要修改 `host` 参数为希望让 CoolQ HTTP API 插件访问的 IP。如果不清楚该使用哪个 IP或者希望本机的所有 IP 都被监听,可以使用 `0.0.0.0`
这里 `nonebot.run()` 的参数 `host='127.0.0.1'` 表示让 NoneBot 监听本地环回地址,如果你的 Q 运行在非本机的其它位置,例如 Docker 容器内、局域网内的另一台机器上等,则这里需要修改 `host` 参数为希望让 CoolQ HTTP API 插件访问的 IP。如果不清楚该使用哪个 IP或者希望本机的所有 IP 都被监听,可以使用 `0.0.0.0`
:::
在命令行使用如下命令即可运行这个 NoneBot 实例:
@ -33,9 +33,9 @@ python bot.py
## 配置 CoolQ HTTP API 插件
单纯运行 NoneBot 实例并不会产生任何效果,因为此刻 Q 这边还不知道 NoneBot 的存在,也就无法把消息发送给它,因此现在需要对 CoolQ HTTP API 插件做一个简单的配置来让它把消息等事件上报给 NoneBot。
单纯运行 NoneBot 实例并不会产生任何效果,因为此刻 Q 这边还不知道 NoneBot 的存在,也就无法把消息发送给它,因此现在需要对 CoolQ HTTP API 插件做一个简单的配置来让它把消息等事件上报给 NoneBot。
如果你在之前已经按照 [安装](/guide/installation.md) 的建议使用默认配置运行了一次 CoolQ HTTP API 插件,此时 Q 的 `data\app\io.github.richardchien.coolqhttpapi\config\` 目录中应该已经有了一个名为 `<user-id>.json` 的文件(`<user-id>` 为你登录的 QQ 账号)。修改这个文件,**添加**如下配置项:
如果你在之前已经按照 [安装](/guide/installation.md) 的建议使用默认配置运行了一次 CoolQ HTTP API 插件,此时 Q 的 `data\app\io.github.richardchien.coolqhttpapi\config\` 目录中应该已经有了一个名为 `<user-id>.json` 的文件(`<user-id>` 为你登录的 QQ 账号)。修改这个文件,**添加**如下配置项:
```json
{
@ -47,10 +47,10 @@ python bot.py
```
::: tip 提示
这里的 `127.0.0.1:8080` 对应 `nonebot.run()` 中传入的 `host``port`,如果在 `nonebot.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/))。
这里的 `127.0.0.1:8080` 对应 `nonebot.run()` 中传入的 `host``port`,如果在 `nonebot.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以使新的配置文件生效。
修改之后,在 Q 的应用菜单中重启 CoolQ HTTP API 插件,或直接重启 Q以使新的配置文件生效。
## 历史性的第一次对话

View File

@ -3,7 +3,7 @@
## NoneBot
::: warning 注意
请确保你的 Python 版本 >= 3.6。
请确保你的 Python 版本 >= 3.6.1
:::
可以使用 pip 安装已发布的最新版本:
@ -22,19 +22,19 @@ python setup.py install
以上命令中的 `pip`、`python` 可能需要根据情况换成 `pip3`、`python3`。
## 酷 Q
## 酷Q
前往 Q 官方论坛的 [版本发布](https://cqp.cc/b/news) 页面根据需要下载最新版本的 Q Air 或 Pro解压后启动 `CQA.exe``CQP.exe` 并登录 QQ 机器人账号。
前往 Q 官方论坛的 [版本发布](https://cqp.cc/b/news) 页面根据需要下载最新版本的 Q Air 或 Pro解压后启动 `CQA.exe``CQP.exe` 并登录 QQ 机器人账号。
如果你的操作系统是 Linux 或 macOS可以使用版本发布页中 Q 官方提供的 Docker 镜像,也可以直接跳至下一节,使用 CoolQ HTTP API 插件官方提供的 Docker 镜像。
如果你的操作系统是 Linux 或 macOS可以使用版本发布页中 Q 官方提供的 Docker 镜像,也可以直接跳至下一节,使用 CoolQ HTTP API 插件官方提供的 Docker 镜像。
::: tip 提示
如果这是你第一次使用 Q建议完成它自带的新手教程从而对 Q 的运行机制有所了解。
如果这是你第一次使用 Q建议完成它自带的新手教程从而对 Q 的运行机制有所了解。
:::
## CoolQ HTTP API 插件
前往 [CoolQ HTTP API 插件官方文档](https://cqhttp.cc/docs/),按照其教程安装插件。安装后,请先使用默认配置运行,并查看 Q 日志窗口的输出,以确定插件的加载、配置的生成和读取、插件版本等符合预期。
前往 [CoolQ HTTP API 插件官方文档](https://cqhttp.cc/docs/),按照其教程安装插件。安装后,请先使用默认配置运行,并查看 Q 日志窗口的输出,以确定插件的加载、配置的生成和读取、插件版本等符合预期。
::: warning 注意
请确保你安装的插件版本 >= 4.2,通常建议插件在大版本内尽量及时升级至最新版本。

View File

@ -1,6 +1,6 @@
# 处理通知和请求
除了聊天消息,酷 Q 还提供了加群请求、加好友请求、出入群通知、管理员变动通知等很多其它事件,很多时候我们需要利用这些事件来实现群管功能,这也是 QQ 机器人除聊天之外的另一个很重要的应用之一。
除了聊天消息酷Q 还提供了加群请求、加好友请求、出入群通知、管理员变动通知等很多其它事件,很多时候我们需要利用这些事件来实现群管功能,这也是 QQ 机器人除聊天之外的另一个很重要的应用之一。
本章将介绍如何在插件中处理通知和请求。

View File

@ -49,7 +49,7 @@ async def tuling(session: CommandSession):
reply = await call_tuling_api(session, message)
if reply:
# 如果调用图灵机器人成功,得到了回复,则转义之后发送给用户
# 转义会把消息中的某些特殊字符做转换,以避免 Q 将它们理解为 CQ 码
# 转义会把消息中的某些特殊字符做转换,以避免 Q 将它们理解为 CQ 码
await session.send(escape(reply))
else:
# 如果调用失败,或者它返回的内容我们目前处理不了,发送无法获取图灵回复时的「表达」
@ -231,9 +231,9 @@ async def tuling(session: CommandSession):
### 消息转义
再看第 16 行,在调用 `session.send()` 之前先对 `reply` 调用了 `escape()`,这个 `escape()` 函数是 `aiocqhttp.message` 模块提供的,用于将字符串中的某些特殊字符进行转义。具体来说,这些特殊字符是 Q 看作是 CQ 码的一部分的那些字符,包括 `&`、`[`、`]`、`,`。
再看第 16 行,在调用 `session.send()` 之前先对 `reply` 调用了 `escape()`,这个 `escape()` 函数是 `aiocqhttp.message` 模块提供的,用于将字符串中的某些特殊字符进行转义。具体来说,这些特殊字符是 Q 看作是 CQ 码的一部分的那些字符,包括 `&`、`[`、`]`、`,`。
CQ 码是 Q 用来表示非文本消息的一种表示方法,形如 `[CQ:image,file=ABC.jpg]`。具体的格式规则,请参考 Q 文档的 [CQ 码](https://d.cqp.me/Pro/CQ%E7%A0%81) 和 CoolQ HTTP API 插件文档的 [CQ 码](https://cqhttp.cc/docs/#/CQCode)。
CQ 码是 Q 用来表示非文本消息的一种表示方法,形如 `[CQ:image,file=ABC.jpg]`。具体的格式规则,请参考 Q 文档的 [CQ 码](https://d.cqp.me/Pro/CQ%E7%A0%81) 和 CoolQ HTTP API 插件文档的 [CQ 码](https://cqhttp.cc/docs/#/CQCode)。
### 发送 Expression

View File

@ -1,20 +1,20 @@
# 发生了什么?
上一章中我们已经运行了一个最小的 NoneBot 实例,在看着 QQ 机器人回复了自己的消息的同时你可能想问这是如何实现的具体来说NoneBot、CoolQ HTTP API 插件、酷 Q这三者是如何协同工作的本章将对这个问题做一个初步解答。
上一章中我们已经运行了一个最小的 NoneBot 实例,在看着 QQ 机器人回复了自己的消息的同时你可能想问这是如何实现的具体来说NoneBot、CoolQ HTTP API 插件、酷Q这三者是如何协同工作的本章将对这个问题做一个初步解答。
::: tip 提示
如果你已经有较丰富的 QQ 机器人开发经验,尤其是使用 CoolQ HTTP API 插件的经验,可以直接跳到 [NoneBot 出场](#nonebot-出场)。
:::
## 一切从 Q 开始
## 一切从 Q 开始
我们在 [概览](/guide/) 中提到过,酷 Q 扮演着「无头 QQ 客户端」的角色,一切的消息、通知、请求的发送和接收,最根本上都是由它来完成的,我们的最小 NoneBot 实例也不例外。
我们在 [概览](/guide/) 中提到过酷Q 扮演着「无头 QQ 客户端」的角色,一切的消息、通知、请求的发送和接收,最根本上都是由它来完成的,我们的最小 NoneBot 实例也不例外。
首先,我们向机器人发送的 `/echo 你好,世界` 进入腾讯的服务器,后者随后会把消息推送给 Q就像推送给一个真正的 QQ 客户端一样。到这里,酷 Q 就已经收到了我们发送的消息了。
首先,我们向机器人发送的 `/echo 你好,世界` 进入腾讯的服务器,后者随后会把消息推送给 Q就像推送给一个真正的 QQ 客户端一样。到这里酷Q 就已经收到了我们发送的消息了。
## 进入 CoolQ HTTP API 插件
Q 在收到消息之后,按优先级依次将消息转交给已启用的各插件处理,在我们的例子中,只有一个插件,就是 CoolQ HTTP API 插件。
酷Q 在收到消息之后,按优先级依次将消息转交给已启用的各插件处理,在我们的例子中,只有一个插件,就是 CoolQ HTTP API 插件。
CoolQ HTTP API 插件收到消息后会将其包装为一个统一的事件格式并对消息内容进行一个初步的处理例如编码转换、数组化、CQ 码增强等,这里的细节目前为止不需要完全明白,在需要的时候,可以去参考 CoolQ HTTP API 插件的 [文档](https://cqhttp.cc/docs/)。
@ -79,10 +79,10 @@ async def echo(session: CommandSession):
## 再次进入 CoolQ HTTP API 插件
命令处理器在调用 `session.send()` 之后NoneBot 把消息内容发送给了 CoolQ HTTP API 插件那边已连接的反向 WebSocket 客户端同时告诉它要把消息发送到和收到消息相同的地方即接收到消息所在的群组、讨论组或私聊。CoolQ HTTP API 插件明白了 NoneBot 的要求之后,会对消息做一些必要的处理,然后按照指示调用 Q 提供的相应接口。
命令处理器在调用 `session.send()` 之后NoneBot 把消息内容发送给了 CoolQ HTTP API 插件那边已连接的反向 WebSocket 客户端同时告诉它要把消息发送到和收到消息相同的地方即接收到消息所在的群组、讨论组或私聊。CoolQ HTTP API 插件明白了 NoneBot 的要求之后,会对消息做一些必要的处理,然后按照指示调用 Q 提供的相应接口。
## 一切又在 Q 结束
## 一切又在 Q 结束
Q 收到 CoolQ HTTP API 插件的接口调用之后,将消息内容发送给腾讯的服务器,就像一个真正的 QQ 客户端一样,于是你就收到了 QQ 机器人发来的消息了。
酷Q 收到 CoolQ HTTP API 插件的接口调用之后,将消息内容发送给腾讯的服务器,就像一个真正的 QQ 客户端一样,于是你就收到了 QQ 机器人发来的消息了。
至此,我们已经理清楚了第一次对话中每一步到底都发生了些什么,以及 NoneBot 如何解析消息并调用到相应的命令处理器来进行回复。下面的几章中我们将一步一步地对最小 NoneBot 实例进行扩充,以实现一些非常棒的功能!