2022-01-22 15:23:07 +08:00
|
|
|
|
"""本模块为 NoneBot 插件开发提供便携的定义函数。
|
|
|
|
|
|
|
|
|
|
## 快捷导入
|
|
|
|
|
|
|
|
|
|
为方便使用,本模块从子模块导入了部分内容,以下内容可以直接通过本模块导入:
|
|
|
|
|
|
|
|
|
|
- `on` => {ref}``on` <nonebot.plugin.on.on>`
|
|
|
|
|
- `on_metaevent` => {ref}``on_metaevent` <nonebot.plugin.on.on_metaevent>`
|
|
|
|
|
- `on_message` => {ref}``on_message` <nonebot.plugin.on.on_message>`
|
|
|
|
|
- `on_notice` => {ref}``on_notice` <nonebot.plugin.on.on_notice>`
|
|
|
|
|
- `on_request` => {ref}``on_request` <nonebot.plugin.on.on_request>`
|
|
|
|
|
- `on_startswith` => {ref}``on_startswith` <nonebot.plugin.on.on_startswith>`
|
|
|
|
|
- `on_endswith` => {ref}``on_endswith` <nonebot.plugin.on.on_endswith>`
|
2022-02-15 08:20:29 +08:00
|
|
|
|
- `on_fullmatch` => {ref}``on_fullmatch` <nonebot.plugin.on.on_fullmatch>`
|
2022-01-22 15:23:07 +08:00
|
|
|
|
- `on_keyword` => {ref}``on_keyword` <nonebot.plugin.on.on_keyword>`
|
|
|
|
|
- `on_command` => {ref}``on_command` <nonebot.plugin.on.on_command>`
|
|
|
|
|
- `on_shell_command` => {ref}``on_shell_command` <nonebot.plugin.on.on_shell_command>`
|
|
|
|
|
- `on_regex` => {ref}``on_regex` <nonebot.plugin.on.on_regex>`
|
|
|
|
|
- `CommandGroup` => {ref}``CommandGroup` <nonebot.plugin.on.CommandGroup>`
|
|
|
|
|
- `Matchergroup` => {ref}``MatcherGroup` <nonebot.plugin.on.MatcherGroup>`
|
|
|
|
|
- `load_plugin` => {ref}``load_plugin` <nonebot.plugin.load.load_plugin>`
|
|
|
|
|
- `load_plugins` => {ref}``load_plugins` <nonebot.plugin.load.load_plugins>`
|
|
|
|
|
- `load_all_plugins` => {ref}``load_all_plugins` <nonebot.plugin.load.load_all_plugins>`
|
|
|
|
|
- `load_from_json` => {ref}``load_from_json` <nonebot.plugin.load.load_from_json>`
|
|
|
|
|
- `load_from_toml` => {ref}``load_from_toml` <nonebot.plugin.load.load_from_toml>`
|
|
|
|
|
- `load_builtin_plugin` => {ref}``load_builtin_plugin` <nonebot.plugin.load.load_builtin_plugin>`
|
|
|
|
|
- `load_builtin_plugins` => {ref}``load_builtin_plugins` <nonebot.plugin.load.load_builtin_plugins>`
|
|
|
|
|
- `get_plugin` => {ref}``get_plugin` <nonebot.plugin.plugin.get_plugin>`
|
|
|
|
|
- `get_loaded_plugins` => {ref}``get_loaded_plugins` <nonebot.plugin.plugin.get_loaded_plugins>`
|
|
|
|
|
- `export` => {ref}``export` <nonebot.plugin.export.export>`
|
|
|
|
|
- `require` => {ref}``require` <nonebot.plugin.load.require>`
|
2020-10-18 15:04:45 +08:00
|
|
|
|
|
2022-01-22 15:23:07 +08:00
|
|
|
|
FrontMatter:
|
|
|
|
|
sidebar_position: 0
|
|
|
|
|
description: nonebot.plugin 模块
|
2020-10-18 15:04:45 +08:00
|
|
|
|
"""
|
2020-06-30 10:13:58 +08:00
|
|
|
|
|
2022-05-26 16:35:47 +08:00
|
|
|
|
from itertools import chain
|
|
|
|
|
from types import ModuleType
|
2021-11-08 01:02:35 +08:00
|
|
|
|
from contextvars import ContextVar
|
2022-05-26 16:35:47 +08:00
|
|
|
|
from typing import Set, Dict, List, Optional
|
2021-09-18 16:11:03 +08:00
|
|
|
|
|
2022-05-26 16:35:47 +08:00
|
|
|
|
_plugins: Dict[str, "Plugin"] = {}
|
2021-11-11 17:33:30 +08:00
|
|
|
|
_managers: List["PluginManager"] = []
|
2021-11-22 23:21:26 +08:00
|
|
|
|
_current_plugin: ContextVar[Optional["Plugin"]] = ContextVar(
|
|
|
|
|
"_current_plugin", default=None
|
|
|
|
|
)
|
2020-06-30 10:13:58 +08:00
|
|
|
|
|
2022-05-26 16:35:47 +08:00
|
|
|
|
|
|
|
|
|
def _module_name_to_plugin_name(module_name: str) -> str:
|
|
|
|
|
return module_name.rsplit(".", 1)[-1]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _new_plugin(
|
|
|
|
|
module_name: str, module: ModuleType, manager: "PluginManager"
|
|
|
|
|
) -> "Plugin":
|
|
|
|
|
plugin_name = _module_name_to_plugin_name(module_name)
|
|
|
|
|
if plugin_name in _plugins:
|
|
|
|
|
raise RuntimeError("Plugin already exists! Check your plugin name.")
|
|
|
|
|
plugin = Plugin(plugin_name, module, module_name, manager)
|
|
|
|
|
_plugins[plugin_name] = plugin
|
|
|
|
|
return plugin
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _revert_plugin(plugin: "Plugin") -> None:
|
|
|
|
|
if plugin.name not in _plugins:
|
|
|
|
|
raise RuntimeError("Plugin not found!")
|
|
|
|
|
del _plugins[plugin.name]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_plugin(name: str) -> Optional["Plugin"]:
|
|
|
|
|
"""获取已经导入的某个插件。
|
|
|
|
|
|
|
|
|
|
如果为 `load_plugins` 文件夹导入的插件,则为文件(夹)名。
|
|
|
|
|
|
|
|
|
|
参数:
|
|
|
|
|
name: 插件名,即 {ref}`nonebot.plugin.plugin.Plugin.name`。
|
|
|
|
|
"""
|
|
|
|
|
return _plugins.get(name)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_plugin_by_module_name(module_name: str) -> Optional["Plugin"]:
|
|
|
|
|
"""通过模块名获取已经导入的某个插件。
|
|
|
|
|
|
|
|
|
|
如果提供的模块名为某个插件的子模块,同样会返回该插件。
|
|
|
|
|
|
|
|
|
|
参数:
|
|
|
|
|
module_name: 模块名,即 {ref}`nonebot.plugin.plugin.Plugin.module_name`。
|
|
|
|
|
"""
|
|
|
|
|
splits = module_name.split(".")
|
|
|
|
|
loaded = {plugin.module_name: plugin for plugin in _plugins.values()}
|
|
|
|
|
while splits:
|
|
|
|
|
name = ".".join(splits)
|
|
|
|
|
if name in loaded:
|
|
|
|
|
return loaded[name]
|
|
|
|
|
splits.pop()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_loaded_plugins() -> Set["Plugin"]:
|
|
|
|
|
"""获取当前已导入的所有插件。"""
|
|
|
|
|
return set(_plugins.values())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_available_plugin_names() -> Set[str]:
|
|
|
|
|
"""获取当前所有可用的插件名(包含尚未加载的插件)。"""
|
|
|
|
|
return {*chain.from_iterable(manager.available_plugins for manager in _managers)}
|
|
|
|
|
|
|
|
|
|
|
2021-11-11 17:33:30 +08:00
|
|
|
|
from .on import on as on
|
|
|
|
|
from .manager import PluginManager
|
2021-11-08 01:02:35 +08:00
|
|
|
|
from .export import Export as Export
|
2021-09-18 16:11:03 +08:00
|
|
|
|
from .export import export as export
|
2021-11-11 17:33:30 +08:00
|
|
|
|
from .load import require as require
|
|
|
|
|
from .on import on_regex as on_regex
|
2021-11-08 01:02:35 +08:00
|
|
|
|
from .plugin import Plugin as Plugin
|
2021-11-11 17:33:30 +08:00
|
|
|
|
from .on import on_notice as on_notice
|
|
|
|
|
from .on import on_command as on_command
|
|
|
|
|
from .on import on_keyword as on_keyword
|
|
|
|
|
from .on import on_message as on_message
|
|
|
|
|
from .on import on_request as on_request
|
|
|
|
|
from .on import on_endswith as on_endswith
|
|
|
|
|
from .load import load_plugin as load_plugin
|
|
|
|
|
from .on import CommandGroup as CommandGroup
|
|
|
|
|
from .on import MatcherGroup as MatcherGroup
|
2022-02-15 08:27:42 +08:00
|
|
|
|
from .on import on_fullmatch as on_fullmatch
|
2021-11-11 17:33:30 +08:00
|
|
|
|
from .on import on_metaevent as on_metaevent
|
|
|
|
|
from .load import load_plugins as load_plugins
|
|
|
|
|
from .on import on_startswith as on_startswith
|
|
|
|
|
from .load import load_from_json as load_from_json
|
|
|
|
|
from .load import load_from_toml as load_from_toml
|
|
|
|
|
from .on import on_shell_command as on_shell_command
|
|
|
|
|
from .load import load_all_plugins as load_all_plugins
|
2022-01-10 22:52:10 +08:00
|
|
|
|
from .load import load_builtin_plugin as load_builtin_plugin
|
2021-11-11 17:33:30 +08:00
|
|
|
|
from .load import load_builtin_plugins as load_builtin_plugins
|