diff options
Diffstat (limited to 'ATRI/configs')
| -rw-r--r-- | ATRI/configs/__init__.py | 1 | ||||
| -rw-r--r-- | ATRI/configs/config.py | 53 | ||||
| -rw-r--r-- | ATRI/configs/default_config.yml | 32 | ||||
| -rw-r--r-- | ATRI/configs/models.py | 60 | 
4 files changed, 146 insertions, 0 deletions
| diff --git a/ATRI/configs/__init__.py b/ATRI/configs/__init__.py new file mode 100644 index 0000000..3558f42 --- /dev/null +++ b/ATRI/configs/__init__.py @@ -0,0 +1 @@ +from .config import Config
\ No newline at end of file diff --git a/ATRI/configs/config.py b/ATRI/configs/config.py new file mode 100644 index 0000000..57a94e9 --- /dev/null +++ b/ATRI/configs/config.py @@ -0,0 +1,53 @@ +import yaml +from pathlib import Path + +from ATRI.log import log + +from .models import ( +    BotConfig, +    ConfigModel, +    WithGoCQHTTP, +    RuntimeConfig +) + + +_DEFAULT_CONFIG_PATH = Path(".") / "ATRI" / "configs" / "default_config.yml" + + +class Config: +    def __init__(self, config_path: Path): +        if not config_path.is_file(): +            try: +                log.warning("未检测到 config.yml, 已于当前目录生成, 请参照文档进行填写并重新启动") +                log.warning("文档地址: https://atri.imki.moe/install/configuration-bot/") +                with open(config_path, "w", encoding="utf-8") as w: +                    w.write(_DEFAULT_CONFIG_PATH.read_text("utf-8")) +                exit(0) +            except Exception as err: +                log.error(f"写入文件 config.yml 失败, 请确认是否给足权限: {err}") +                exit(-1) + +        self.config_path = config_path +        with open(self.config_path, "r", encoding="utf-8") as f: +            self.config = yaml.safe_load(f) + +    def parse(self) -> ConfigModel: +        return ConfigModel.parse_obj(self.config) +     +    def get_runtime_conf(self) -> dict: +        bot_conf = BotConfig.parse_obj(self.config["BotConfig"]) +        gocq_conf = WithGoCQHTTP.parse_obj(self.config["WithGoCQHTTP"]) + +        return RuntimeConfig( +            host=bot_conf.host, +            port=bot_conf.port, +            debug=bot_conf.debug, +            superusers=bot_conf.superusers, +            nickname=bot_conf.nickname, +            command_start=bot_conf.command_start, +            command_sep=bot_conf.command_sep, +            session_expire_timeout=bot_conf.session_expire_timeout, +            gocq_accoutns=gocq_conf.accounts, +            gocq_download_domain=gocq_conf.download_version, +            gocq_version=gocq_conf.download_version +        ).dict() diff --git a/ATRI/configs/default_config.yml b/ATRI/configs/default_config.yml new file mode 100644 index 0000000..fbc6720 --- /dev/null +++ b/ATRI/configs/default_config.yml @@ -0,0 +1,32 @@ +# 设置参考文档: https://atri.imki.moe/install/configuration-bot/ +ConfigVersion: "1.0.0" + +BotConfig: +  host: "127.0.0.1" +  port: 20000 +  debug: false +  superusers: {"1234567890"} +  nickname: {"ATRI", "Atri", "atri", "亚托莉", "アトリ"} +  command_start: {"", "/"} +  command_sep: {"."} +  session_expire_timeout: 60 +  access_token: "" +  proxy: "" +  request_timeout: 5 + +WithGoCQHTTP: +  enabled: false +  accounts: +    - uin: 1234567890 +      password: "" +      protocol: 5 +   +  download_domain: "github.com" +  download_version: "v1.0.0-rc1" + +SauceNAO: +  key: "" + +Setu: +  reverse_proxy: true +  reverse_proxy_domain: "i.pixiv.re" diff --git a/ATRI/configs/models.py b/ATRI/configs/models.py new file mode 100644 index 0000000..8043f8a --- /dev/null +++ b/ATRI/configs/models.py @@ -0,0 +1,60 @@ +from typing import List +from pydantic import BaseModel + + +class BotConfig(BaseModel): +    host: str +    port: int +    debug: bool +    superusers: set +    nickname: set +    command_start: set +    command_sep: set +    session_expire_timeout: int +    access_token: str +    proxy: str +    request_timeout: int + + +class GoCQHTTPAccountList(BaseModel): +    uin: int +    password: str +    protocol: int + + +class WithGoCQHTTP(BaseModel): +    enabled: bool +    accounts: List[GoCQHTTPAccountList] +    download_domain: str +    download_version: str + + +class SauceNAO(BaseModel): +    key: str + + +class Setu(BaseModel): +    reverse_proxy: bool +    reverse_proxy_domain: str + + +class ConfigModel(BaseModel): +    ConfigVersion: str +    BotConfig: BotConfig +    WithGoCQHTTP: WithGoCQHTTP +    SauceNAO: SauceNAO +    Setu: Setu + + +class RuntimeConfig(BaseModel): +    host: str +    port: int +    debug: bool +    superusers: set +    nickname: set +    command_start: set +    command_sep: set +    session_expire_timeout: int +    gocq_accoutns: list +    gocq_download_domain: str +    gocq_version: str | 
