2021-11-08 01:02:35 +08:00
|
|
|
from . import _current_plugin
|
2021-03-31 20:38:00 +08:00
|
|
|
|
|
|
|
|
|
|
|
class Export(dict):
|
|
|
|
"""
|
2022-01-12 18:16:05 +08:00
|
|
|
插件导出内容以使得其他插件可以获得。
|
2021-03-31 20:38:00 +08:00
|
|
|
|
|
|
|
:示例:
|
|
|
|
|
|
|
|
.. code-block:: 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):
|
2021-11-22 23:21:26 +08:00
|
|
|
super().__setitem__(key, Export(value) if isinstance(value, dict) else value)
|
2021-03-31 20:38:00 +08:00
|
|
|
|
|
|
|
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:
|
|
|
|
"""
|
2022-01-12 18:16:05 +08:00
|
|
|
获取插件的导出内容对象
|
2021-03-31 20:38:00 +08:00
|
|
|
|
|
|
|
:返回:
|
|
|
|
|
|
|
|
- ``Export``
|
|
|
|
"""
|
2021-11-08 01:02:35 +08:00
|
|
|
plugin = _current_plugin.get()
|
|
|
|
if not plugin:
|
|
|
|
raise RuntimeError("Export outside of the plugin!")
|
|
|
|
return plugin.export
|