2.6 KiB
创建插件
如果之前使用 nb-cli
生成了项目结构,那我们已经有了一个空的插件目录 Awesome-Bot/awesome_bot/plugins
,并且它已在 bot.py
中被加载,我们现在可以开始创建插件了!
插件通常有两种形式,下面分别介绍
单文件形式
在插件目录下创建名为 foo.py
的 Python 文件,暂时留空,此时目录结构如下:
:::vue
AweSome-Bot
├── awesome_bot
│ └── plugins
│ └── foo.py
├── .env
├── .env.dev
├── .env.prod
├── .gitignore
├── bot.py
├── docker-compose.yml
├── Dockerfile
├── pyproject.toml
└── README.md
:::
这个时候它已经可以被称为一个插件了,尽管它还什么都没做。
包形式(推荐)
在插件目录下创建文件夹 foo
,并在该文件夹下创建文件 __init__.py
,此时目录结构如下:
:::vue
AweSome-Bot
├── awesome_bot
│ └── plugins
│ └── foo
│ └── __init__.py
├── .env
├── .env.dev
├── .env.prod
├── .gitignore
├── bot.py
├── docker-compose.yml
├── Dockerfile
├── pyproject.toml
└── README.md
:::
这个时候 foo
就是一个合法的 Python 包了,同时也是合法的 NoneBot 插件,插件内容可以在 __init__.py
中编写。
推荐结构(仅供参考)
:::vue
foo
├── __init__.py
├── config.py
├── data_source.py
└── model.py
:::
__init__.py
在该文件中编写各类事件响应及处理逻辑。
config.py
在该文件中使用 pydantic
定义插件所需要的配置项以及类型。
示例:
from pydantic import BaseSetting
class Config(BaseSetting):
# plugin custom config
plugin_setting: str = "default"
class Config:
extra = "ignore"
并在 __init__.py
文件中添加以下行
import nonebot
from .config import Config
global_config = nonebot.get_driver().config
plugin_config = Config(**global_config.dict())
此时就可以通过 plugin_config.plugin_setting
获取到插件所需要的配置项了。
data_source.py
在该文件中编写数据获取函数。
:::warning 警告 数据获取应尽量使用异步处理!例如使用 httpx 而非 requests :::
model.py
在该文件中编写数据库模型。