Version: 2.3.3
编写适配器
在编写适配器之前,我们需要先了解适配器的功能与组成,适配器通常由 Adapter
、Bot
、Event
和 Message
四个部分组成,在编写适配器时,我们 需要继承 NoneBot 中的基类,并根据实际平台来编写每个部分功能。
组织结构
NoneBot 适配器项目通常以 nonebot-adapter-{adapter-name}
作为项目名,并以命名空间包的形式编写,即在 nonebot/adapters/{adapter-name}
目录中编写实际代码,例如:
📦 nonebot-adapter-{adapter-name}
├── 📂 nonebot
│ ├── 📂 adapters
│ │ ├── 📂 {adapter-name}
│ │ │ ├── 📜 __init__.py
│ │ │ ├── 📜 adapter.py
│ │ │ ├── 📜 bot.py
│ │ │ ├── 📜 config.py
│ │ │ ├── 📜 event.py
│ │ │ └── 📜 message.py
├── 📜 pyproject.toml
└── 📜 README.md
提示
上述的项目结构仅作推荐,不做强制要求,保证实际可用性即可。
使用 NB-CLI 创建项目
我们可以使用脚手架快速创建项目:
nb adapter create
按照指引,输入适配器名称以及存储位置,即可创建一个带有基本结构的适配器项目。
组成部分
提示
本章节的代码中提到的 Adapter
、Bot
、Event
和 Message
等,均为下文中适配器所编写的类,而非 NoneBot 中的基类。
Log
适配器在处理时通常需要打印日志,但直接使用 NoneBot 的默认 logger
不方便区分适配器输出和其它日志。因此我们可以使用 NoneBot 提供的 logger_wrapper
方法,自定义一个 log
函数用于快捷打印适配器日志:
from nonebot.utils import logger_wrapper
log = logger_wrapper("your_adapter_name")
这个 log
函数会在默认 logger
中添加适配器名称前缀,它接收三个参 数:日志等级、日志内容以及可选的异常,具体用法如下:
from .log import log
log("DEBUG", "A DEBUG log.")
log("INFO", "A INFO log.")
try:
...
except Exception as e:
log("ERROR", "something error.", e)
Config
通常适配器需要一些配置项,例如平台连接密钥等。适配器的配置方法与插件配置类似,例如:
from pydantic import BaseModel
class Config(BaseModel):
xxx_id: str
xxx_token: str
配置项的读取将在下方 Adapter 中介绍。
Adapter
Adapter 负责转换事件、调用接口,以及正确创建 Bot 对象并注册到 NoneBot 中。在编写平台相关内容之前,我们需要继承基类,并实现适配器的基本信息:
from typing import Any
from typing_extensions import override
from nonebot.drivers import Driver
from nonebot import get_plugin_config
from nonebot.adapters import Adapter as BaseAdapter
from .config import Config
class Adapter(BaseAdapter):
@override
def __init__(self, driver: Driver, **kwargs: Any):
super().__init__(driver, **kwargs)
# 读取适配器所需的配置项
self.adapter_config: Config = get_plugin_config(Config)
@classmethod
@override
def get_name(cls) -> str:
"""适配器名称"""
return "your_adapter_name"