什么?首段一定要写什么前言概述吗?
总之,这是一个 Nonebot2 机器人的插件编写经验总结。
当然,Nonebot 官方教程已经写得很全面、很详细了,但是过大的信息量反而很难让新手把思路理清。这篇文章会抛弃一些过于复杂的东西(可能是作者也没搞懂),从最简单的插件开始逐步理清插件编写过程中会遇到的各种奇奇怪怪的东西。
惯例的免责声明:本文不能代替官方文档。如果遇到了矛盾或者没有解释到的地方,请以官方文档为准。
预备工作
编写插件之前,你需要有一定的 Python 基础。至少要知道类(class)是什么吧。
你还需要有一个已经安装好的,可以正常使用的 Nonebot2 机器人。你需要安装 Nonebot2,创建实例,同时需要有一个能连接到机器人的转发客户端。(这里使用 Lagrange.Onebot 登陆 QQ,以 OneBot 协议通信。)
如果你是按照 Nonebot2 官方指南安装的,那么你至少应该完成了 “快速上手” 部分,并且可以成功运行 /echo
命令。(顺带一提,在 “创建项目” 一节,选择项目模板时请选择 simple
。这对于后面的插件编写更为方便。)
在本文撰写时,Nonebot2 的最新稳定版本是 2.3.3。
Nonebot2 机器人运行原理(超简略)
Nonebot2 并不是一个针对特定平台设计的机器人应用,而是一个通用机器人框架,因此它不直接与聊天平台通信。它通过不同的适配器,连接到本地的客户端,接收客户端转发来的消息,并调用客户端 API 发送信息。在这个双向通讯的过程中,本地客户端与 Nonebot2 的适配器遵循一定的协议。
在我们的实例中,我们编写的插件决定了机器人的行为;插件执行时,以 OneBot 协议,通过适配器(NoneBot-Adapter-OneBot),与客户端双向通信;客户端 Lagrange.Onebot 则实际完成收发 QQ 信息的操作。
不过,由于每个模块各司其职,我们编写插件时只需要了解 Nonebot2 本身的 API 以及少量 OneBot 协议实现的 API 即可。
还是预备工作
创建一个新的插件吧。
Nonebot2 官方文档提供了在 nb-cli
中创建插件的指令:
$ nb plugin create
[?] 插件名称: weather
[?] 使用嵌套插件? (y/N) N
[?] 输出目录: awesome_bot/plugins
不过,如果你嫌麻烦的话,你完全可以手动创建文件,以最简单的方法:
打开你的插件目录(通常是机器人目录下的 src/plugins/
或 项目名称/plugins/
,然后在里面创建一个 .py
文件,文件名随意。你也可以创建一个目录,并在里面创建一个 __init__.py
。
这样就完成了。如果你没有修改默认配置,那么机器人在启动时会自动读取其中的插件内容。
到此为止,我们已经完成了正式开始编程以前的所有杂项内容。
如果上面的内容没有遇到问题,那么以后你大概率不需要再去纠结它们了。
现在文件创建好了,接下来应该做什么?我们从 Part 1 开始编写插件内容。