diff --git a/README.md b/README.md index ef70023c..07c73b45 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,18 @@ -# QQBot +# XiaoKai Bot 小开机器人 -此 QQBot 非彼 QQBot,不是对 SmartQQ 的封装,而是基于开源的 [sjdy521/Mojo-Webqq](https://github.com/sjdy521/Mojo-Webqq) 实现的对消息的自动处理程序,支持自定义插件。 +基于 [sjdy521/Mojo-Webqq](https://github.com/sjdy521/Mojo-Webqq) 实现的对 QQ 消息的自动处理机器人,支持自定义插件。 -## 如何部署 +## 快速开始 + +### 部署 推荐使用 Docker 部署,因为基本可以一键开启,如果你想手动运行,也可以参考第二个小标题「手动部署」。 -### 使用 Docker +#### 使用 Docker 本仓库根目录下的 `docker-compose.yml` 即为 Docker Compose 的配置文件,直接跑就行。如果你想对镜像进行修改,可以自行更改 Dockerfile 来构建或者继承已经构建好的镜像。 -### 手动运行 +#### 手动运行 首先需要运行 sjdy521/Mojo-Webqq,具体见它的 GitHub 仓库的使用教程。然后运行: @@ -21,15 +23,25 @@ python app.py 注意要求 Python 3.x。 +## 使用 + +![](https://raw.githubusercontent.com/CCZU-DEV/xiaokai-bot/master/docs/assets/Screenshot.png) + +## 局限性 + +由于 QQ 的限制,现有下列问题: + +- 可能无法连续在线较长时间,因此需要频繁重启服务(大约一到两天一次) +- 无法处理临时消息和讨论组消息 +- 单条消息无法发送很长的内容 +- 有时候群消息会被屏蔽,私聊消息则正常 + ## 插件 程序支持两种插件形式,一种是过滤器/Filter,一种是命令/Command。 -本质上程序主体是一个 web app,接受 sjdy521/Mojo-Webqq 的 POST 请求,从而收到消息。收到消息后,首先运行过滤器,按照优先级从大到小顺序运行 `filters` 目录中的 `.py` 文件中指定的过滤器函数,函数返回非 False 即表示不拦截消息,从而消息继续传给下一个过滤器,如果返回了 False,则消息不再进行后续处理,而直接抛弃。过滤器运行完之后,会开始按照命令执行,首先根据命令的开始标志判断有没有消息中有没有指定命令,如果指定了,则执行指定的命令,如果没指定,则看当前用户有没有开启交互式会话,如果开启了会话,则执行会话指定的命令,否则,使用默认的 fallback 命令。 +收到消息后,依次运行所有过滤器,即按照优先级从大到小顺序运行 `filters` 目录中的 `.py` 文件中指定的过滤器函数,函数返回非 False 即表示不拦截消息,从而消息继续传给下一个过滤器,如果返回了 False,则消息不再进行后续处理,而直接抛弃。 -过滤器和命令的使用场景区别: +命令分发器(`filters/command_dispatcher.py`)是一个预设的优先级为 0 的过滤器,它根据命令的开始标志判断消息中有没有指定命令,如果指定了,则执行指定的命令,如果没指定,则看当前用户有没有开启交互式会话,如果开启了会话,则执行会话指定的命令,否则,使用默认的 fallback 命令。 -- 过滤器:可用于消息的后台日志、频率控制、关键词分析,一般在使用者无意识的情况下进行; -- 命令:使用者有意识地想要使用某个给定的命令的功能。 - -关于过滤器和命令的细节,请参考 [编写过滤器](Write_Filter.md) 和 [编写命令](Write_Command.md)。 +用户可以自行编写插件来扩展功能,具体请看 [文档](https://cczu-dev.github.io/xiaokai-bot/)。 diff --git a/app.py b/app.py index 8fc46fa6..8e7a90a7 100644 --- a/app.py +++ b/app.py @@ -3,7 +3,7 @@ import importlib from flask import Flask, request -from little_shit import * +from little_shit import SkipException, get_filters_dir from filter import apply_filters app = Flask(__name__) diff --git a/Write_Command.md b/docs/Write_Command.md similarity index 100% rename from Write_Command.md rename to docs/Write_Command.md diff --git a/Write_Filter.md b/docs/Write_Filter.md similarity index 100% rename from Write_Filter.md rename to docs/Write_Filter.md diff --git a/docs/assets/Screenshot.png b/docs/assets/Screenshot.png new file mode 100644 index 00000000..ec34c0a6 Binary files /dev/null and b/docs/assets/Screenshot.png differ diff --git a/docs/config.js b/docs/config.js new file mode 100644 index 00000000..9d45c9a6 --- /dev/null +++ b/docs/config.js @@ -0,0 +1,26 @@ +self.$config = { + title: 'XiaoKai Bot 文档', + home: 'https://raw.githubusercontent.com/CCZU-DEV/xiaokai-bot/master/README.md', + repo: 'CCZU-DEV/xiaokai-bot', + url: 'https://cczu-dev.github.io/xiaokai-bot', + 'edit-link': 'https://github.com/CCZU-DEV/xiaokai-bot/blob/master/docs', + nav: { + default: [ + { + title: '首页', path: '/' + }, + { + title: '编写插件', type: 'dropdown', + items: [ + { + title: '过滤器', path: '/Write_Filter' + }, + { + title: '命令', path: '/Write_Command' + } + ] + } + ] + }, + plugins: [] +} diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 00000000..530ee3b8 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,20 @@ + + + + + + + + XiaoKai Bot 文档 + + + + +
+ + + + + + + \ No newline at end of file