mirror of
https://github.com/nonebot/nonebot2.git
synced 2024-12-18 09:25:46 +08:00
58 lines
1.5 KiB
Python
58 lines
1.5 KiB
Python
"""本模块定义了插件导出的内容对象。
|
|
|
|
在新版插件系统中,推荐优先使用直接 import 所需要的插件内容。
|
|
|
|
FrontMatter:
|
|
sidebar_position: 4
|
|
description: nonebot.plugin.export 模块
|
|
"""
|
|
|
|
from . import _current_plugin
|
|
|
|
|
|
class Export(dict):
|
|
"""插件导出内容以使得其他插件可以获得。
|
|
|
|
用法:
|
|
```python
|
|
nonebot.export().default = "bar"
|
|
|
|
@nonebot.export()
|
|
def some_function():
|
|
pass
|
|
|
|
# this doesn't work before python 3.9
|
|
# use
|
|
# export = nonebot.export(); @export.sub
|
|
# instead
|
|
# See also PEP-614: https://www.python.org/dev/peps/pep-0614/
|
|
@nonebot.export().sub
|
|
def something_else():
|
|
pass
|
|
```
|
|
"""
|
|
|
|
def __call__(self, func, **kwargs):
|
|
self[func.__name__] = func
|
|
self.update(kwargs)
|
|
return func
|
|
|
|
def __setitem__(self, key, value):
|
|
super().__setitem__(key, Export(value) if isinstance(value, dict) else value)
|
|
|
|
def __setattr__(self, name, value):
|
|
self[name] = Export(value) if isinstance(value, dict) else value
|
|
|
|
def __getattr__(self, name):
|
|
if name not in self:
|
|
self[name] = Export()
|
|
return self[name]
|
|
|
|
|
|
def export() -> Export:
|
|
"""获取当前插件的导出内容对象"""
|
|
plugin = _current_plugin.get()
|
|
if not plugin:
|
|
raise RuntimeError("Export outside of the plugin!")
|
|
return plugin.export
|