参考: Nonebot2文档
配置自定义插件的存储位置
在项目的pyproject.toml中:
1 | [tool.nonebot] |
插件配置
插件格式:
1 | 📂 <plugin name> |
插件的配置项会由插件模块的config.py进行读取,对应.env文件的配置
配置项解析
.env文件中的配置值使用 JSON 进行解析。如果配置项值无法被解析,将作为字符串处理。例如:
1 | STRING_CONFIG=some string |
将被解析为:
1 | dotenv_config = { |
特别的,NoneBot 支持使用 env_nested_delimiter 配置嵌套字典,在层与层之间使用 __ 分隔即可:
1 | DICT={"k1": "v1", "k2": null} |
将被解析为:
1 | dotenv_config = { |
文件存储
需要插件nonebot-plugin-localstore
同时代码中使用:
1 | from nonebot import require |
这些目录均为Pathlib.Path类型
自定义存储位置:
1 | # 重定向 localstore 插件的存储路径,便于后续迁移 Bot |
配置数据库
需要插件nonebot-plugin-orm
需要另行安装数据库驱动:
pdm add "nonebot-plugin-orm[sqlite]"
默认情况下,数据库文件为 <data path>/nonebot-plugin-orm/db.sqlite3(数据目录由 nonebot-plugin-localstore 提供)。 或者,你可以通过配置 SQLALCHEMY_DATABASE_URL 来指定数据库文件路径:SQLALCHEMY_DATABASE_URL=sqlite+aiosqlite:///file_path
使用时,当有新的使用数据库的插件时,执行同步数据库(需要迁移脚本)
1 | nb orm upgrade |
之后,检查一下:
1 | nb orm check |
如果输出是 没有检测到新的升级操作,那么恭喜你,数据库已经迁移完成了,你可以启动机器人了。
定义模型
首先,我们需要设计存储的数据的结构。
例:
1 | from nonebot_plugin_orm import Model |
结构定义完成之后,不用创建表,nonebot会自动帮我们创建
创建迁移脚本
原来是我们定义了模型,但是数据库中并没有对应的表,这会导致插件不能正常运行。 所以,我们需要迁移数据库。
首先,我们需要创建一个迁移脚本:
1 | nb orm revision -m "first revision" --branch-label weather |
其中,-m 参数是迁移脚本的描述,--branch-label 参数是迁移脚本的分支,一般为插件模块名。 执行命令过后,出现了一个 /migrations 目录,其中有一个 xxxxxxxxxxxx_first_revision.py 文件。
然后就可以用nb orm upgrade进行数据库迁移了。
APScheduler配置
当使用用APScheduler进行计划任务的插件,未在计划时间内执行则可能会导致bot进程退出
你可以设置一个容错时间misfire_grace_time让它可以在迟到多少秒后依然可以执行。
1 | APSCHEDULER_CONFIG='{"apscheduler.timezone": "Asia/Shanghai", "apscheduler.job_defaults.misfire_grace_time": 40}' |
Discord Slash(斜杠)命令注册
当安装了Discord适配器时,就可以适配Discord。但,Discord有个很坑人的设置:消息内容意图开关。机器人启动后需要约45分钟才能真正收到Discord消息的内容,否则只会收到空消息。为了规避这一点,可以利用Discord的斜杠命令系统。
以下为Discord斜杠命令示例:
1 | import asyncio |
对斜杠命令的响应:
1 | import asyncio |