ayaka.group
群组
1'''群组''' 2from typing import List, Dict, TYPE_CHECKING 3from pathlib import Path 4from .storage import AyakaPath 5from .config import ayaka_root_config 6from .constant import app_list, group_list 7from .cache import AyakaCacheCtrl 8 9if TYPE_CHECKING: 10 from .ayaka import AyakaApp 11 12 13def get_group(bot_id: int, group_id: int): 14 '''获取对应的AyakaGroup对象,自动增加''' 15 for group in group_list: 16 if group.bot_id == bot_id and group.group_id == group_id: 17 break 18 else: 19 group = AyakaGroup(bot_id, group_id) 20 return group 21 22 23class AyakaGroup: 24 def __repr__(self) -> str: 25 return f"AyakaGroup({self.bot_id}, {self.group_id}, {self.apps})" 26 27 def forbid_init(self): 28 names = [ 29 "data", "groups", 30 self.bot_id, 31 self.group_id 32 ] 33 names = [str(name) for name in names] 34 path = Path(*names) 35 self.store_forbid = AyakaPath(path).json("forbid", []) 36 37 def forbid_load(self): 38 return self.store_forbid.load() 39 40 def forbid_save(self, data): 41 return self.store_forbid.save(data) 42 43 def __init__(self, bot_id: int, group_id: int) -> None: 44 self.bot_id = bot_id 45 self.group_id = group_id 46 self.running_app: "AyakaApp" = None 47 48 # 读取forbit列表 49 self.forbid_init() 50 forbid_names = self.forbid_load() 51 52 # 添加app,并分配独立数据空间 53 self.apps: List["AyakaApp"] = [] 54 self.cache_dict: Dict[str, AyakaCacheCtrl] = {} 55 for app in app_list: 56 if app.name not in forbid_names: 57 self.apps.append(app) 58 self.cache_dict[app.name] = AyakaCacheCtrl() 59 60 group_list.append(self) 61 62 if ayaka_root_config.debug: 63 print(self) 64 65 @property 66 def running_app_name(self): 67 if self.running_app: 68 return self.running_app.name 69 return "" 70 71 def get_app(self, name: str): 72 '''根据app名获取该group所启用的app,不存在则返回None''' 73 for app in self.apps: 74 if app.name == name: 75 return app 76 77 def permit_app(self, name: str): 78 '''启用指定app''' 79 if self.get_app(name): 80 return True 81 82 for app in app_list: 83 if app.name == name: 84 self.apps.append(app) 85 # 从forbit列表移除 86 app_names: list = self.forbid_load() 87 if name in app_names: 88 app_names.remove(name) 89 self.forbid_save(app_names) 90 return True 91 92 def forbid_app(self, name: str): 93 '''禁用指定app''' 94 if name == "ayaka_master": 95 return 96 97 app = self.get_app(name) 98 if not app: 99 return 100 101 # 禁用正在运行的应用 102 if self.running_app_name == name: 103 self.running_app = None 104 105 # 移除 106 self.apps.remove(app) 107 108 # 添加到forbit列表 109 app_names: list = self.forbid_load() 110 if name not in app_names: 111 app_names.append(name) 112 self.forbid_save(app_names) 113 return True
def
get_group(bot_id: int, group_id: int):
14def get_group(bot_id: int, group_id: int): 15 '''获取对应的AyakaGroup对象,自动增加''' 16 for group in group_list: 17 if group.bot_id == bot_id and group.group_id == group_id: 18 break 19 else: 20 group = AyakaGroup(bot_id, group_id) 21 return group
获取对应的AyakaGroup对象,自动增加
class
AyakaGroup:
24class AyakaGroup: 25 def __repr__(self) -> str: 26 return f"AyakaGroup({self.bot_id}, {self.group_id}, {self.apps})" 27 28 def forbid_init(self): 29 names = [ 30 "data", "groups", 31 self.bot_id, 32 self.group_id 33 ] 34 names = [str(name) for name in names] 35 path = Path(*names) 36 self.store_forbid = AyakaPath(path).json("forbid", []) 37 38 def forbid_load(self): 39 return self.store_forbid.load() 40 41 def forbid_save(self, data): 42 return self.store_forbid.save(data) 43 44 def __init__(self, bot_id: int, group_id: int) -> None: 45 self.bot_id = bot_id 46 self.group_id = group_id 47 self.running_app: "AyakaApp" = None 48 49 # 读取forbit列表 50 self.forbid_init() 51 forbid_names = self.forbid_load() 52 53 # 添加app,并分配独立数据空间 54 self.apps: List["AyakaApp"] = [] 55 self.cache_dict: Dict[str, AyakaCacheCtrl] = {} 56 for app in app_list: 57 if app.name not in forbid_names: 58 self.apps.append(app) 59 self.cache_dict[app.name] = AyakaCacheCtrl() 60 61 group_list.append(self) 62 63 if ayaka_root_config.debug: 64 print(self) 65 66 @property 67 def running_app_name(self): 68 if self.running_app: 69 return self.running_app.name 70 return "" 71 72 def get_app(self, name: str): 73 '''根据app名获取该group所启用的app,不存在则返回None''' 74 for app in self.apps: 75 if app.name == name: 76 return app 77 78 def permit_app(self, name: str): 79 '''启用指定app''' 80 if self.get_app(name): 81 return True 82 83 for app in app_list: 84 if app.name == name: 85 self.apps.append(app) 86 # 从forbit列表移除 87 app_names: list = self.forbid_load() 88 if name in app_names: 89 app_names.remove(name) 90 self.forbid_save(app_names) 91 return True 92 93 def forbid_app(self, name: str): 94 '''禁用指定app''' 95 if name == "ayaka_master": 96 return 97 98 app = self.get_app(name) 99 if not app: 100 return 101 102 # 禁用正在运行的应用 103 if self.running_app_name == name: 104 self.running_app = None 105 106 # 移除 107 self.apps.remove(app) 108 109 # 添加到forbit列表 110 app_names: list = self.forbid_load() 111 if name not in app_names: 112 app_names.append(name) 113 self.forbid_save(app_names) 114 return True
AyakaGroup(bot_id: int, group_id: int)
44 def __init__(self, bot_id: int, group_id: int) -> None: 45 self.bot_id = bot_id 46 self.group_id = group_id 47 self.running_app: "AyakaApp" = None 48 49 # 读取forbit列表 50 self.forbid_init() 51 forbid_names = self.forbid_load() 52 53 # 添加app,并分配独立数据空间 54 self.apps: List["AyakaApp"] = [] 55 self.cache_dict: Dict[str, AyakaCacheCtrl] = {} 56 for app in app_list: 57 if app.name not in forbid_names: 58 self.apps.append(app) 59 self.cache_dict[app.name] = AyakaCacheCtrl() 60 61 group_list.append(self) 62 63 if ayaka_root_config.debug: 64 print(self)
def
get_app(self, name: str):
72 def get_app(self, name: str): 73 '''根据app名获取该group所启用的app,不存在则返回None''' 74 for app in self.apps: 75 if app.name == name: 76 return app
根据app名获取该group所启用的app,不存在则返回None
def
permit_app(self, name: str):
78 def permit_app(self, name: str): 79 '''启用指定app''' 80 if self.get_app(name): 81 return True 82 83 for app in app_list: 84 if app.name == name: 85 self.apps.append(app) 86 # 从forbit列表移除 87 app_names: list = self.forbid_load() 88 if name in app_names: 89 app_names.remove(name) 90 self.forbid_save(app_names) 91 return True
启用指定app
def
forbid_app(self, name: str):
93 def forbid_app(self, name: str): 94 '''禁用指定app''' 95 if name == "ayaka_master": 96 return 97 98 app = self.get_app(name) 99 if not app: 100 return 101 102 # 禁用正在运行的应用 103 if self.running_app_name == name: 104 self.running_app = None 105 106 # 移除 107 self.apps.remove(app) 108 109 # 添加到forbit列表 110 app_names: list = self.forbid_load() 111 if name not in app_names: 112 app_names.append(name) 113 self.forbid_save(app_names) 114 return True
禁用指定app