zhenxun_bot/utils/static_data/group_manager.py
2021-09-05 02:21:38 +08:00

197 lines
6.2 KiB
Python
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 configs.config import DEFAULT_GROUP_LEVEL
from typing import Optional, List
from pathlib import Path
from .data_class import StaticData
class GroupManager(StaticData):
"""
群权限 | 功能 | 聊天时间 管理器
"""
def __init__(self, file: Path):
super().__init__(file)
if not self.data:
self.data = {"super": {"close_plugins": {}, "white_group_list": []}, "group_manager": {}}
def block_plugin(
self, plugin_cmd: str, group_id: Optional[str] = None, block_type: str = "all"
):
"""
说明:
锁定插件
参数:
:param plugin_cmd: 功能模块名
:param group_id: 群组None时为超级用户禁用
:param block_type: 限制类型
"""
self._set_plugin_status(plugin_cmd, "block", group_id, block_type)
def unblock_plugin(self, plugin_cmd: str, group_id: Optional[str] = None):
"""
说明:
解锁插件
参数:
:param plugin_cmd: 功能模块名
:param group_id: 群组
"""
self._set_plugin_status(plugin_cmd, "unblock", group_id)
def set_group_level(self, group_id: str, level: int):
"""
说明:
设置群权限
参数:
:param group_id: 群组
:param level: 权限等级
"""
if not self.data["group_manager"].get(group_id):
self._init_group(group_id)
self.data["group_manager"][group_id]["level"] = level
self.save()
def get_plugin_status(
self, plugin_cmd: str, group_id: Optional[str] = None, block_type: str = "all"
) -> bool:
"""
说明:
获取插件状态
参数:
:param plugin_cmd: 功能模块名
:param group_id: 群组
:param block_type: 限制类型
"""
if group_id:
if not self.data["group_manager"].get(group_id):
self._init_group(group_id)
return True
if plugin_cmd in self.data["group_manager"][group_id]["close_plugins"]:
return False
return True
else:
if plugin_cmd in self.data["super"]["close_plugins"]:
if (
self.data["super"]["close_plugins"][plugin_cmd] == "all"
and block_type == "all"
):
return False
else:
return (
not self.data["super"]["close_plugins"][plugin_cmd]
== block_type
)
return True
def get_plugin_block_type(self, plugin_cmd: str) -> str:
"""
说明:
获取功能限制类型
参数:
:param plugin_cmd: 模块名称
"""
if plugin_cmd in self.data["super"]["close_plugins"]:
return self.data["super"]["close_plugins"][plugin_cmd]
return ""
def get_group_level(self, group_id: str) -> int:
"""
说明:
获取群等级
参数:
:param group_id: 群号
"""
if not self.data["group_manager"].get(group_id):
self._init_group(group_id)
return self.data["group_manager"][group_id]["level"]
def check_group_is_white(self, group_id: int) -> bool:
"""
说明:
检测群聊是否在白名单
参数:
:param group_id: 群号
"""
return group_id in self.data['super']['white_group_list']
def add_group_white_list(self, group_id: int):
"""
说明:
将群聊加入白名单
参数:
:param group_id: 群号
"""
if group_id not in self.data['super']['white_group_list']:
self.data['super']['white_group_list'].append(group_id)
def delete_group_white_list(self, group_id: int):
"""
说明:
将群聊从白名单中删除
参数:
:param group_id: 群号
"""
if group_id in self.data['super']['white_group_list']:
self.data['super']['white_group_list'].remove(group_id)
def get_group_white_list(self) -> List[str]:
"""
说明:
获取所有群白名单
"""
return self.data['super']['white_group_list']
def _set_plugin_status(
self,
plugin_cmd: str,
status: str,
group_id: Optional[str],
block_type: str = "all",
):
"""
说明:
设置功能开关状态
参数:
:param plugin_cmd: 功能模块名
:param status: 功能状态
:param group_id: 群组
:param block_type: 限制类型
"""
if group_id:
if not self.data["group_manager"].get(group_id):
self._init_group(group_id)
if status == "block":
if (
plugin_cmd
not in self.data["group_manager"][group_id]["close_plugins"]
):
self.data["group_manager"][group_id]["close_plugins"].append(
plugin_cmd
)
else:
if plugin_cmd in self.data["group_manager"][group_id]["close_plugins"]:
self.data["group_manager"][group_id]["close_plugins"].remove(
plugin_cmd
)
else:
if status == "block":
if (
plugin_cmd not in self.data["super"]["close_plugins"]
or block_type != self.data["super"]["close_plugins"][plugin_cmd]
):
self.data["super"]["close_plugins"][plugin_cmd] = block_type
else:
if plugin_cmd in self.data["super"]["close_plugins"]:
del self.data["super"]["close_plugins"][plugin_cmd]
self.save()
def _init_group(self, group_id: str):
"""
说明:
初始化群数据
参数:
:param group_id: 群号
"""
self.data["group_manager"][group_id] = {"level": DEFAULT_GROUP_LEVEL, "close_plugins": []}