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 forbid_init(self):
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", [])
def forbid_load(self):
38    def forbid_load(self):
39        return self.store_forbid.load()
def forbid_save(self, data):
41    def forbid_save(self, data):
42        return self.store_forbid.save(data)
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