zhenxun_bot/utils/manager/plugins_manager.py
2021-11-23 21:44:59 +08:00

156 lines
4.6 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from typing import Optional
from pathlib import Path
from .data_class import StaticData
from . import group_manager
class PluginsManager(StaticData):
"""
插件 管理器
"""
def __init__(self, file: Path):
super().__init__(file)
if not self._data:
self._data = {}
def add_plugin_data(
self,
module: str,
plugin_name: str,
*,
status: Optional[bool] = True,
error: Optional[bool] = False,
block_type: Optional[str] = None,
author: Optional[str] = None,
version: Optional[int] = None,
):
"""
添加插件数据
:param module: 模块名称
:param plugin_name: 插件名称
:param status: 插件开关状态
:param error: 加载状态
:param block_type: 限制类型
:param author: 作者
:param version: 版本
"""
self._data[module] = {
"plugin_name": plugin_name,
"status": status,
"error": error,
"block_type": block_type,
"author": author,
"version": version,
}
def block_plugin(
self, module: str, group_id: Optional[int] = None, block_type: str = "all"
):
"""
说明:
锁定插件
参数:
:param module: 功能模块名
:param group_id: 群组None时为超级用户禁用
:param block_type: 限制类型
"""
self._set_plugin_status(module, "block", group_id, block_type)
def unblock_plugin(self, module: str, group_id: Optional[int] = None):
"""
说明:
解锁插件
参数:
:param module: 功能模块名
:param group_id: 群组
"""
self._set_plugin_status(module, "unblock", group_id)
def get_plugin_status(
self, module: str, block_type: str = "all"
) -> bool:
"""
说明:
获取插件状态
参数:
:param module: 功能模块名
:param block_type: 限制类型
"""
if module in self._data.keys():
if self._data[module]["block_type"] == "all" and block_type == "all":
return False
else:
return not self._data[module]["block_type"] == block_type
return True
def get_plugin_block_type(self, module: str) -> str:
"""
说明:
获取功能限制类型
参数:
:param module: 模块名称
"""
if module in self._data.keys():
return self._data[module]["block_type"]
return ""
def get_plugin_error_status(self, module: str) -> bool:
"""
插件是否成功加载
:param module: 模块名称
"""
if module not in self._data.keys():
self.init_plugin(module)
return self._data[module]["error"]
def _set_plugin_status(
self,
module: str,
status: str,
group_id: Optional[str],
block_type: str = "all",
):
"""
说明:
设置功能开关状态
参数:
:param module: 功能模块名
:param status: 功能状态
:param group_id: 群组
:param block_type: 限制类型
"""
group_id = str(group_id) if group_id else group_id
if module:
if group_id:
if status == "block":
group_manager.block_plugin(f"{module}:super", int(group_id))
else:
group_manager.unblock_plugin(f"{module}:super", int(group_id))
else:
if module not in self._data.keys():
self.init_plugin(module)
if status == "block":
self._data[module]["status"] = False
self._data[module]["block_type"] = block_type
else:
if module in self._data.keys():
self._data[module]["status"] = True
self._data[module]["block_type"] = None
self.save()
def init_plugin(self, module: str):
"""
初始化插件数据
:param module: 模块名称
"""
if module not in self._data.keys():
self._data[module] = {
"plugin_name": module,
"status": True,
"error": False,
"block_type": None,
"author": None,
"version": None,
}