nonebot2/docs/guide/loading-a-plugin.md
2020-11-07 12:36:47 +08:00

2.5 KiB

加载插件

创建一个完整的项目 一章节中,我们已经创建了插件目录 awesome_bot/plugins,现在我们在机器人入口文件中加载它。当然,你也可以单独加载一个插件。

加载内置插件

bot.py 文件中添加以下行:

import nonebot

nonebot.init()
# 加载 nonebot 内置插件
nonebot.load_bulitin_plugins()

app = nonebot.get_asgi()

if __name__ == "__main__":
    nonebot.run()

这将会加载 nonebot 内置的插件,它包含:

  • 命令 say:可由superuser使用,可以将消息内容由特殊纯文本转为富文本
  • 命令 echo:可由任何人使用,将消息原样返回

以上命令均需要指定机器人,即私聊、群聊内@机器人、群聊内称呼机器人昵称。参考 Rule: to_me

加载插件目录

bot.py 文件中添加以下行:

import nonebot

nonebot.init()
# 加载插件目录,该目录下为各插件,以下划线开头的插件将不会被加载
nonebot.load_plugins("awesome_bot/plugins")

app = nonebot.get_asgi()

if __name__ == "__main__":
    nonebot.run()

:::tip 提示 加载插件目录时,目录下以 _ 下划线开头的插件将不会被加载! :::

:::warning 提示 插件不能存在相同名称! :::

:::danger 警告 插件间不应该存在过多的耦合,如果确实需要导入某个插件内的数据,可以使用如下两种方法:

  1. (推荐) from plugin_name import xxx 而非 from awesome_bot.plugins.plugin_name import xxx
  2. 在需要导入其他插件的文件中添加 __package__ = "plugins"; from .plugin_name import xxx (将共同的上层目录设定为父包后使用相对导入)

具体可以参考:nonebot/nonebot2#32 :::

加载单个插件

bot.py 文件中添加以下行:

import nonebot

nonebot.init()
# 加载一个 pip 安装的插件
nonebot.load_plugin("nonebot_plugin_status")
# 加载本地的单独插件
nonebot.load_plugin("awesome_bot.plugins.xxx")

app = nonebot.get_asgi()

if __name__ == "__main__":
    nonebot.run()

子插件(嵌套插件)

待填坑

运行结果

尝试运行 nb run 或者 python bot.py,可以看到日志输出了类似如下内容:

09-19 21:51:59 [INFO] nonebot | Succeeded to import "nonebot.plugins.base"
09-19 21:51:59 [INFO] nonebot | Succeeded to import "plugin_in_folder"