mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 14:22:55 +08:00
155 lines
4.5 KiB
Python
155 lines
4.5 KiB
Python
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.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,
|
||
}
|