ayaka.config

管理插件配置,读写ayaka_setting.json文件

 1'''
 2    管理插件配置,读写ayaka_setting.json文件
 3'''
 4
 5import json
 6from pathlib import Path
 7from pydantic import BaseModel, ValidationError, validator
 8from typing import List, Literal
 9from loguru import logger
10
11total_settings: dict = {}
12setting_filepath = Path("ayaka_setting.json")
13if not setting_filepath.exists():
14    with setting_filepath.open("w+", encoding="utf8") as f:
15        f.write("{}")
16
17with setting_filepath.open("r", encoding="utf8") as f:
18    total_settings = json.load(f)
19
20
21class AyakaPluginConfig(BaseModel):
22    @classmethod
23    def setup_app_name(cls, app_name):
24        cls.app_name = app_name
25
26    def __init__(self):
27        try:
28            super().__init__(**total_settings.get(self.app_name, {}))
29        except ValidationError as e:
30            logger.error(
31                f"导入配置失败,请检查 ayaka_setting.json 中,{self.app_name}的配置是否正确")
32            raise e
33        self.force_update()
34
35    def __setattr__(self, name, value):
36        super().__setattr__(name, value)
37        self.force_update()
38
39    def force_update(self):
40        total_settings[self.app_name] = self.dict()
41        with setting_filepath.open("w+", encoding="utf8") as f:
42            json.dump(total_settings, f, ensure_ascii=0, indent=4)
43
44
45def create_ayaka_plugin_config_base(app_name):
46    class _AyakaPluginConfig(AyakaPluginConfig):
47        pass
48    _AyakaPluginConfig.setup_app_name(app_name)
49    return _AyakaPluginConfig
50
51
52INIT_STATE = "init"
53AYAKA_VERSION = "0.4.5"
54
55
56BaseConfig = create_ayaka_plugin_config_base("__root__")
57
58
59class Config(BaseConfig):
60    version: str = AYAKA_VERSION
61    # 命令抬头
62    prefix: str = "#"
63    # 参数分割符
64    separate: str = " "
65    # 是否排除go-cqhttp缓存的过期消息
66    exclude_old_msg: bool = True
67    # 是否使用playwright
68    use_playwright: bool = True
69    # ayaka插件的所有者
70    owners: List[int] = []
71    # ayaka插件的管理者
72    admins: List[int] = []
73    # 切换bot类型
74    bot_type: Literal["nonebot", "ayakabot"] = "nonebot"
75    # 是否处于调试模式
76    debug: bool = False
77
78    @validator('separate')
79    def name_must_contain_space(cls, v):
80        if not v:
81            logger.warning("ayaka的分割符被设置为空字符串,这会使得ayaka无法正确分割参数")
82        return v
83
84
85ayaka_root_config = Config()
86ayaka_root_config.version = AYAKA_VERSION
class AyakaPluginConfig(pydantic.main.BaseModel):
22class AyakaPluginConfig(BaseModel):
23    @classmethod
24    def setup_app_name(cls, app_name):
25        cls.app_name = app_name
26
27    def __init__(self):
28        try:
29            super().__init__(**total_settings.get(self.app_name, {}))
30        except ValidationError as e:
31            logger.error(
32                f"导入配置失败,请检查 ayaka_setting.json 中,{self.app_name}的配置是否正确")
33            raise e
34        self.force_update()
35
36    def __setattr__(self, name, value):
37        super().__setattr__(name, value)
38        self.force_update()
39
40    def force_update(self):
41        total_settings[self.app_name] = self.dict()
42        with setting_filepath.open("w+", encoding="utf8") as f:
43            json.dump(total_settings, f, ensure_ascii=0, indent=4)
AyakaPluginConfig()
27    def __init__(self):
28        try:
29            super().__init__(**total_settings.get(self.app_name, {}))
30        except ValidationError as e:
31            logger.error(
32                f"导入配置失败,请检查 ayaka_setting.json 中,{self.app_name}的配置是否正确")
33            raise e
34        self.force_update()

Create a new model by parsing and validating input data from keyword arguments.

Raises ValidationError if the input data cannot be parsed to form a valid model.

@classmethod
def setup_app_name(cls, app_name):
23    @classmethod
24    def setup_app_name(cls, app_name):
25        cls.app_name = app_name
def force_update(self):
40    def force_update(self):
41        total_settings[self.app_name] = self.dict()
42        with setting_filepath.open("w+", encoding="utf8") as f:
43            json.dump(total_settings, f, ensure_ascii=0, indent=4)
Inherited Members
pydantic.main.BaseModel
dict
json
parse_obj
parse_raw
parse_file
from_orm
construct
copy
schema
schema_json
validate
update_forward_refs
def create_ayaka_plugin_config_base(app_name):
46def create_ayaka_plugin_config_base(app_name):
47    class _AyakaPluginConfig(AyakaPluginConfig):
48        pass
49    _AyakaPluginConfig.setup_app_name(app_name)
50    return _AyakaPluginConfig
60class Config(BaseConfig):
61    version: str = AYAKA_VERSION
62    # 命令抬头
63    prefix: str = "#"
64    # 参数分割符
65    separate: str = " "
66    # 是否排除go-cqhttp缓存的过期消息
67    exclude_old_msg: bool = True
68    # 是否使用playwright
69    use_playwright: bool = True
70    # ayaka插件的所有者
71    owners: List[int] = []
72    # ayaka插件的管理者
73    admins: List[int] = []
74    # 切换bot类型
75    bot_type: Literal["nonebot", "ayakabot"] = "nonebot"
76    # 是否处于调试模式
77    debug: bool = False
78
79    @validator('separate')
80    def name_must_contain_space(cls, v):
81        if not v:
82            logger.warning("ayaka的分割符被设置为空字符串,这会使得ayaka无法正确分割参数")
83        return v
@validator('separate')
def name_must_contain_space(cls, v):
79    @validator('separate')
80    def name_must_contain_space(cls, v):
81        if not v:
82            logger.warning("ayaka的分割符被设置为空字符串,这会使得ayaka无法正确分割参数")
83        return v
Inherited Members
AyakaPluginConfig
AyakaPluginConfig
setup_app_name
force_update
pydantic.main.BaseModel
dict
json
parse_obj
parse_raw
parse_file
from_orm
construct
copy
schema
schema_json
validate
update_forward_refs