Skip to main content

Nonebot Plugin Manager base on import hook

Reason this release was yanked:

fatal bug

Project description

logo

Nonebot Plugin Manager

基于 nonebot2go-cqhttp非侵入式插件管理器

License Python Version NoneBot Version Pypi Version

安装

插件仍在快速开发中,如果你只想要一个较为稳定的版本,那么 0.3.13 或许是更好的选择。

从 PyPI 安装(推荐)

  • 使用 nb-cli
nb plugin install nonebot_plugin_manager
  • 使用 poetry
poetry add nonebot_plugin_manager
  • 使用 pip
pip install nonebot_plugin_manager

从 GitHub 安装(不推荐)

git clone https://github.com/Jigsaw111/nonebot_plugin_manager.git

使用

权限

权限与 linux 的权限类似,分为三种用户:超级用户、用户、群。

每种用户包含读、写、执行 3 个权限,分别对应数字 4、2、1,将 3 个权限对应的数字累加,最终得到的值即可作为每种用户所具有的权限。

包含 Matcher 的插件默认权限为 755,不含 Matcher 的插件默认权限为 311

例:npm chmod nonebot_plugin_nodice 757 命令可将 nonebot_plugin_nodice 的权限设置为 757 即超级用户可写可读可执行,用户可读可执行,群可写可读可执行。

只有超级用户可以修改插件的权限,可以使用绝对模式(八进制数字模式),符号模式指定文件的权限。

命令

使用前请先确保命令前缀为空,否则请在以下命令前加上命令前缀 (默认为 / )。

  • npm ls 查看当前会话插件列表

    • -s, --store 互斥参数,查看插件商店列表(仅超级用户可用)
    • -u user_id, --user user_id 互斥参数,查看指定用户插件列表(仅超级用户可用)
    • -g group_id, --group group_id 互斥参数,查看指定群插件列表(仅超级用户可用)
    • -a, --all 可选参数,查看所有插件(包括不含 Matcher 的插件)
  • npm info 插件名 查询插件信息 (仅超级用户可用)

  • npm chmod plugin... mode 设置插件权限(仅超级用户可用)

    • plugin... 必选参数,需要设置的插件名
    • mode 必选参数,需要设置的权限,参考上文
    • -a, --all 可选参数,全选插件
    • -r, --reverse 可选参数,反选插件
  • npm block plugin... 禁用当前会话插件(需要权限)

    • plugin... 必选参数,需要禁用的插件名
    • -a, --all 可选参数,全选插件
    • -r, --reverse 可选参数,反选插件
    • -u user_id ..., --user user_id ... 可选参数,管理指定用户设置(仅超级用户可用)
    • -g group_id ..., --group group_id ... 可选参数,管理指定群设置(仅超级用户可用)
  • npm unblock plugin... 启用当前会话插件(需要权限)

    • plugin... 必选参数,需要禁用的插件名
    • -a, --all 可选参数,全选插件
    • -r, --reverse 可选参数,反选插件
    • -u user_id ..., --user user_id ... 可选参数,管理指定用户设置(仅超级用户可用)
    • -g group_id ..., --group group_id ... 可选参数,管理指定群设置(仅超级用户可用)

以下功能尚未实现

  • npm install 插件名... 安装插件(仅超级用户可用)

    • -i index, --index index 指定 PyPI 源
  • npm uninstall 插件名... 卸载插件(仅超级用户可用)

    • -a, --all 可选参数,全选插件

导入

PluginManager 是封装好的插件管理器类,导入后可以直接使用。

from nonebot_plugin_manager import PluginManager

Q&A

  • 这是什么?
    基于 import hook 的插件管理器,能够在不重启 nonebot2 的情况下分群管理插件。
  • 有什么用?
    在 nonebot2 仍然缺乏插件管理机制的时期暂时充当插件管理器。
  • 自造 Rule 不是更好?
    Rule 当然更好且更有效率,但是 Rule 是一种侵入式的插件管理方式,需要用户自行修改其他插件,这对于管理从 pypi 安装的插件来说相对复杂。而使用本插件,你不需要修改其他插件的任何内容,更符合插件之间松耦合的设计原则。

Thanks

nonebot/nb-cli

展开更多

原理

使用 run_preprocessor 装饰器,在 Matcher 运行之前检测其所属的 Plugin 判断是否打断。

事实上 Nonebot 还是加载了插件,所以只能算是屏蔽而非卸载

以下功能尚未实现

当然,你也可以使用 npm uninstall 命令来真正卸载插件,但我不建议你这样做,因为该命令将会重启 Nonebot 。

To Do

  • 分群插件管理
  • 完善权限系统
  • 设置插件别名

咕咕咕

  • 安装卸载插件

Bug

  • 无法停用 Matcher 以外的机器人行为(如 APScheduler )
    解决方法: 暂无
  • 任何人都可以屏蔽/启用插件
  • 如果加载了内置插件将会导致错误
    解决方法: 问低调佬

Changelog

  • 210428 0.5.0-alpha.3
    • 不再保留插件历史记录
    • 新增类 UNIX 权限系统
    • 命令 list 改为 ls
  • 210423 0.5.0-alpha.2
    • 将 ignore, global 等配置整合成 mode
    • 新增 npm set 命令切换黑/白名单模式
  • 210421 0.5.0-alpha.1
    • 调整优先级为 global > user > group
    • 黑/白名单模式切换
    • 可一次管理多个群/用户的插件
  • 210418 0.4.0-alpha.4
    • 新增 --ignore 用于显示已忽略的插件(即没有 Matcher 的插件和 npm 本身)
    • 修复判断表达式错误导致的插件列表为空
    • 修复使用 load_from_toml 加载插件时产生的错误
    • 修复 export 的函数名称错误
    • 修复 npm info 指令不响应的错误
    • 修复 global 设置无效的错误
  • 210417 0.4.0-alpha.1
    • 配置文件格式更换为 .yml
    • list/block/unblock 新增 globally 选项,优先级为 global > user/group > default
    • 重构代码,分离 handle 与 data
    • block/unblock 新增 --reverse 选项,可反选插件
  • 210415
    • 不再将没有 Matcher 的插件添加到插件列表。
  • 210403
    • 分离默认设置与私聊设置,默认设置的键值改为 default
  • 210402
    • 修复 nonebot 2.0.0a13 更新导致的 bug。
  • 210331
    • 添加 logo。
  • 210330
    • 修复禁用/启用颠倒的 bug。
  • 210329
    • 修复 block/unblock 指令中的 -a 参数无效的 bug,修复文档中导出部分的错误。
  • 210320
    • 新增 get_group_plugin_list 的 export 用于获取群插件列表。
  • 210317
    • 调整项目结构,将绝大多数数据处理操作移至 data,handle 只负责调用;修改 export,不再对其他插件暴露底层接口。
  • 210314
    • 修复 npm list 的 --group 参数不起作用的 bug
    • 新增 info 子命令,用于查询插件信息
  • 210313
    • 实现爬取插件商店列表
    • 新增 export 导出给其他插件
  • 210312
    • setting.json 重命名为 plugin_list.json,结构改为 plugin:{group_id:true,group_id:false}
  • 210310 0.3.0
    • 将__init__.py分离成 setting, command, nb 三个文件
  • 210310 0.2.0
    • Matcher 类型更改为 shell_command
    • 使用 setting.json 作为配置文件,基本结构为 group_id:{plugin:true,plugin:false}
  • 210307 0.1.0
    • 上架插件商店
    • 确定了通过 run_preprocessor 屏蔽 Matcher 的基本原理
    • 使用 block_list 作为全局设置(即只屏蔽 block_list 中的插件)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nonebot_plugin_manager-0.5.0.tar.gz (10.4 kB view hashes)

Uploaded Source

Built Distribution

nonebot_plugin_manager-0.5.0-py3-none-any.whl (10.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page