zhenxun_bot/utils/manager/plugins2settings_manager.py

97 lines
3.0 KiB
Python
Raw Normal View History

2021-10-03 14:24:07 +08:00
from typing import List, Optional, Union, Tuple
from .data_class import StaticData
from pathlib import Path
from ruamel.yaml import YAML
yaml = YAML(typ="safe")
class Plugins2settingsManager(StaticData):
"""
插件命令阻塞 管理器
"""
def __init__(self, file: Path):
self.file = file
super().__init__(None)
def add_plugin_settings(
self,
plugin: str,
cmd: Optional[List[str]] = None,
default_status: Optional[bool] = True,
level: Optional[int] = 5,
limit_superuser: Optional[bool] = False,
plugin_type: Tuple[Union[str, int]] = ("normal",),
data_dict: Optional[dict] = None,
):
"""
添加一个插件设置
:param plugin: 插件模块名称
:param cmd: 命令 命令别名
:param default_status: 默认开关状态
:param level: 功能权限等级
:param limit_superuser: 功能状态是否限制超级用户
:param plugin_type: 插件类型
:param data_dict: 封装好的字典数据
"""
if data_dict:
level = data_dict.get("level") if data_dict.get("level") is not None else 5
default_status = (
data_dict.get("default_status")
if data_dict.get("default_status") is not None
else True
)
limit_superuser = (
data_dict.get("limit_superuser")
if data_dict.get("limit_superuser") is not None
else False
)
cmd = data_dict.get("cmd") if data_dict.get("cmd") is not None else []
self._data[plugin] = {
"level": level if level is not None else 5,
"default_status": default_status if default_status is not None else True,
"limit_superuser": limit_superuser
if limit_superuser is not None
else False,
"cmd": cmd,
2021-11-04 16:11:50 +08:00
"plugin_type": list(
plugin_type if plugin_type is not None else ("normal",)
),
2021-10-03 14:24:07 +08:00
}
def get_plugin_data(self, module: str) -> dict:
"""
通过模块名获取数据
:param module: 模块名称
"""
if self._data.get(module) is not None:
return self._data.get(module)
return {}
def get_plugin_module(
self, cmd: str, is_all: bool = False
) -> Union[str, List[str]]:
"""
根据 cmd 获取功能 module
:param cmd: 命令
:param is_all: 获取全部包含cmd的模块
"""
keys = []
for key in self._data.keys():
if cmd in self._data[key]["cmd"]:
if is_all:
keys.append(key)
else:
return key
return keys
def reload(self):
"""
重载本地数据
"""
if self.file.exists():
with open(self.file, "r", encoding="utf8") as f:
self._data: dict = yaml.load(f)
2021-11-04 16:11:50 +08:00
self._data = self._data["PluginSettings"]