84 lines
3.2 KiB
Python
84 lines
3.2 KiB
Python
from cores.qqbot.global_object import GlobalObject
|
||
from typing import Union
|
||
import os
|
||
import json
|
||
|
||
def load_config(namespace: str) -> Union[dict, bool]:
|
||
'''
|
||
从配置文件中加载配置。
|
||
namespace: str, 配置的唯一识别符,也就是配置文件的名字。
|
||
返回值: 当配置文件存在时,返回 namespace 对应配置文件的内容dict,否则返回 False。
|
||
'''
|
||
path = f"data/config/{namespace}.json"
|
||
if not os.path.exists(path):
|
||
return False
|
||
with open(path, "r", encoding="utf-8-sig") as f:
|
||
ret = {}
|
||
data = json.load(f)
|
||
for k in data:
|
||
ret[k] = data[k]["value"]
|
||
return ret
|
||
|
||
|
||
def put_config(namespace: str, name: str, key: str, value, description: str):
|
||
'''
|
||
将配置项写入以namespace为名字的配置文件,如果key不存在于目标配置文件中。当前 value 仅支持 str, int, float, bool, list 类型(暂不支持 dict)。
|
||
namespace: str, 配置的唯一识别符,也就是配置文件的名字。
|
||
name: str, 配置项的显示名字。
|
||
key: str, 配置项的键。
|
||
value: str, int, float, bool, list, 配置项的值。
|
||
description: str, 配置项的描述。
|
||
注意:只有当 namespace 为插件名(info 函数中的 name)时,该配置才会显示到可视化面板上。
|
||
注意:value一定要是该配置项对应类型的值,否则类型判断会乱。
|
||
'''
|
||
if namespace == "":
|
||
raise ValueError("namespace 不能为空。")
|
||
if namespace.startswith("internal_"):
|
||
raise ValueError("namespace 不能以 internal_ 开头。")
|
||
if not isinstance(key, str):
|
||
raise ValueError("key 只支持 str 类型。")
|
||
if not isinstance(value, (str, int, float, bool, list)):
|
||
raise ValueError("value 只支持 str, int, float, bool, list 类型。")
|
||
path = f"data/config/{namespace}.json"
|
||
if not os.path.exists(path):
|
||
with open(path, "w", encoding="utf-8-sig") as f:
|
||
f.write("{}")
|
||
with open(path, "r", encoding="utf-8-sig") as f:
|
||
d = json.load(f)
|
||
assert(isinstance(d, dict))
|
||
if key not in d:
|
||
d[key] = {
|
||
"config_type": "item",
|
||
"name": name,
|
||
"description": description,
|
||
"path": key,
|
||
"value": value,
|
||
"val_type": type(value).__name__
|
||
}
|
||
with open(path, "w", encoding="utf-8-sig") as f:
|
||
json.dump(d, f, indent=2, ensure_ascii=False)
|
||
f.flush()
|
||
|
||
def update_config(namespace: str, key: str, value):
|
||
'''
|
||
更新配置文件中的配置项。
|
||
namespace: str, 配置的唯一识别符,也就是配置文件的名字。
|
||
key: str, 配置项的键。
|
||
value: str, int, float, bool, list, 配置项的值。
|
||
'''
|
||
path = f"data/config/{namespace}.json"
|
||
if not os.path.exists(path):
|
||
raise FileNotFoundError(f"配置文件 {namespace}.json 不存在。")
|
||
with open(path, "r", encoding="utf-8-sig") as f:
|
||
d = json.load(f)
|
||
assert(isinstance(d, dict))
|
||
if key not in d:
|
||
raise KeyError(f"配置项 {key} 不存在。")
|
||
d[key]["value"] = value
|
||
with open(path, "w", encoding="utf-8-sig") as f:
|
||
json.dump(d, f, indent=2, ensure_ascii=False)
|
||
f.flush()
|
||
|
||
|
||
|
||
|