Skip to main content

Nonebot Plugin Manager base on import hook

Project description

logo

Nonebot Plugin Manager

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

License Python Version NoneBot Version Pypi Version

安装

从 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

使用

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

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

    • -i, --ignore 可选参数,显示已忽略的插件
    • -s, --store 可选参数,查看插件商店列表(仅超级用户可用)
    • -gl, --global 可选参数,管理全局设置(仅超级用户可用)
    • -g group_id, --group group_id 可选参数,管理指定群设置(仅超级用户可用)
    • -u user_id, --user user_id 可选参数,管理指定用户设置(仅超级用户可用)
    • -d, --default 可选参数,管理默认设置(仅超级用户可用)
  • npm block 插件名... 屏蔽当前会话插件 (仅群管及超级用户可用)

    • -a, --all 可选参数,全选插件
    • -r, --reverse 可选参数,反选插件
    • -gl, --global 可选参数,管理全局设置(仅超级用户可用)
    • -g group_id, --group group_id 可选参数,管理指定群设置(仅超级用户可用)
    • -u user_id, --user user_id 可选参数,管理指定用户设置(仅超级用户可用)
    • -d, --default 可选参数,管理默认设置(仅超级用户可用)
  • npm unblock 插件名... 启用当前会话插件 (仅群管及超级用户可用)

    • -a, --all 可选参数,全选插件
    • -r, --reverse 可选参数,反选插件
    • -gl, --global 可选参数,管理全局设置(仅超级用户可用)
    • -g group_id, --group group_id 可选参数,管理指定群设置(仅超级用户可用)
    • -u user_id, --user user_id 可选参数,管理指定用户设置(仅超级用户可用)
    • -d, --default 可选参数,管理默认设置(仅超级用户可用)
  • npm info 插件名 查询插件信息 (仅超级用户可用)

以下功能尚未实现

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

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

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

导出

from nonebot import require

export = require("nonebot_plugin_manager")

# 启用/禁用插件
export.block_plugin(
    plugins: Iterable[str],
    type: Optional[str] = None,
    user_id: Optional[int] = None,
    group_id: Optional[int] = None,
    show_ignore: bool = False,
) -> Dict[str, Optional[bool]]
export.unblock_plugin(
    plugins: Iterable[str],
    type: Optional[str] = None,
    user_id: Optional[int] = None,
    group_id: Optional[int] = None,
) -> Dict[str, Optional[bool]]

# 获取指定会话插件列表
export.get_plugin_list(
    type: Optional[str] = None,
    user_id: Optional[int] = None,
    group_id: Optional[int] = None,
) -> Dict[str, bool]

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 以外的机器人行为(如 APSchedule )
    解决方法: 暂无
  • 任何人都可以屏蔽/启用插件
  • 如果加载了内置插件将会导致错误
    解决方法: 问低调佬

Changelog

  • 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.4.0a4.tar.gz (9.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nonebot_plugin_manager-0.4.0a4-py3-none-any.whl (9.8 kB view details)

Uploaded Python 3

File details

Details for the file nonebot_plugin_manager-0.4.0a4.tar.gz.

File metadata

  • Download URL: nonebot_plugin_manager-0.4.0a4.tar.gz
  • Upload date:
  • Size: 9.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.5 CPython/3.9.2 Windows/10

File hashes

Hashes for nonebot_plugin_manager-0.4.0a4.tar.gz
Algorithm Hash digest
SHA256 d9b0b8e4f729a9ef57d0a5ce8628ade10ae01b433f898df68d91f43789a287d6
MD5 7db716785e94e74330a5a098fd281d0b
BLAKE2b-256 0a0efeef2ac92ebbec50d3aebf5943ca61cb442808f31079eadd7b612560f6e1

See more details on using hashes here.

File details

Details for the file nonebot_plugin_manager-0.4.0a4-py3-none-any.whl.

File metadata

File hashes

Hashes for nonebot_plugin_manager-0.4.0a4-py3-none-any.whl
Algorithm Hash digest
SHA256 90f415cf98a6e4a219c83607a8a20e40bc94f18a91a6ebf9d2f570253013b396
MD5 c76ab85b51eb5d2c24ecbfa2068a2dc0
BLAKE2b-256 6c5cd15647ca46fc86e4f763813ec14e73ebdbdb85180e434d68434e08574ac3

See more details on using hashes here.

Supported by

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