From df7006dc1e5b40170468d626a71095f8b60f3fbb Mon Sep 17 00:00:00 2001 From: DLmaster361 Date: Tue, 12 Aug 2025 20:30:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/setting.py | 8 +- app/core/config.py | 73 +++--- app/models/schema.py | 512 ++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 555 insertions(+), 38 deletions(-) diff --git a/app/api/setting.py b/app/api/setting.py index a38a4a4..5b59af4 100644 --- a/app/api/setting.py +++ b/app/api/setting.py @@ -35,8 +35,10 @@ async def get_scripts() -> SettingGetOut: try: data = await Config.get_setting() except Exception as e: - return SettingGetOut(code=500, status="error", message=str(e), data={}) - return SettingGetOut(data=data) + return SettingGetOut( + code=500, status="error", message=str(e), data=GlobalConfig(**{}) + ) + return SettingGetOut(data=GlobalConfig(**data)) @router.post("/update", summary="更新配置", response_model=OutBase, status_code=200) @@ -44,7 +46,7 @@ async def update_script(script: SettingUpdateIn = Body(...)) -> OutBase: """更新配置""" try: - await Config.update_setting(script.data) + await Config.update_setting(script.data.model_dump(exclude_unset=True)) except Exception as e: return OutBase(code=500, status="error", message=str(e)) return OutBase() diff --git a/app/core/config.py b/app/core/config.py index e4b7d46..9fe85d6 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -123,12 +123,6 @@ MATERIALS_MAP: Dict[str, str] = { class GlobalConfig(ConfigBase): """全局配置""" - Function_HomeImageMode = ConfigItem( - "Function", - "HomeImageMode", - "默认", - OptionsValidator(["默认", "自定义", "主题图像"]), - ) Function_HistoryRetentionTime = ConfigItem( "Function", "HistoryRetentionTime", @@ -189,9 +183,13 @@ class GlobalConfig(ConfigBase): Update_UpdateType = ConfigItem( "Update", "UpdateType", "stable", OptionsValidator(["stable", "beta"]) ) - Update_ThreadNumb = ConfigItem("Update", "ThreadNumb", 8, RangeValidator(1, 32)) + Update_Source = ConfigItem( + "Update", + "Source", + "GitHub", + OptionsValidator(["GitHub", "MirrorChyan", "AutoSite"]), + ) Update_ProxyAddress = ConfigItem("Update", "ProxyAddress", "") - Update_ProxyUrlList = ConfigItem("Update", "ProxyUrlList", []) Update_MirrorChyanCDK = ConfigItem( "Update", "MirrorChyanCDK", "", EncryptValidator() ) @@ -1023,20 +1021,22 @@ class AppConfig(GlobalConfig): async def get_setting(self) -> Dict[str, Any]: """获取全局设置""" - logger.info("获取全局设置") + logger.info("Get global settings") return await self.toDict(ignore_multi_config=True) async def update_setting(self, data: Dict[str, Dict[str, Any]]) -> None: """更新全局设置""" - logger.info(f"更新全局设置") + logger.info("Update global settings...") for group, items in data.items(): for name, value in items.items(): - logger.debug(f"更新全局设置 - {group}.{name} = {value}") + logger.debug(f"Update global settings - {group}.{name} = {value}") await self.set(group, name, value) + logger.success("Global settings updated successfully.") + def server_date(self) -> date: """ 获取当前的服务器日期 @@ -1079,17 +1079,22 @@ class AppConfig(GlobalConfig): logger.info("开始获取活动关卡信息") - response = requests.get( - "https://api.maa.plus/MaaAssistantArknights/api/stageAndTasksUpdateTime.json", - timeout=10, - proxies=self.get_proxies(), - ) - if response.status_code == 200: - remote_time_stamp = datetime.strptime( - str(response.json().get("timestamp", 20000101000000)), "%Y%m%d%H%M%S" + try: + response = requests.get( + "https://api.maa.plus/MaaAssistantArknights/api/stageAndTasksUpdateTime.json", + timeout=10, + proxies=self.get_proxies(), ) - else: - logger.warning(f"无法从MAA服务器获取活动关卡时间戳:{response.text}") + if response.status_code == 200: + remote_time_stamp = datetime.strptime( + str(response.json().get("timestamp", 20000101000000)), + "%Y%m%d%H%M%S", + ) + else: + logger.warning(f"无法从MAA服务器获取活动关卡时间戳:{response.text}") + remote_time_stamp = datetime.fromtimestamp(0) + except Exception as e: + logger.warning(f"无法从MAA服务器获取活动关卡时间戳: {e}") remote_time_stamp = datetime.fromtimestamp(0) if (Path.cwd() / "data/StageInfo/TimeStamp.txt").exists() and ( @@ -1119,17 +1124,21 @@ class AppConfig(GlobalConfig): # 需要更新关卡信息 logger.info("从远端更新关卡信息") - response = requests.get( - "https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivity.json", - timeout=10, - proxies=self.get_proxies(), - ) - - if response.status_code == 200: - stage_infos = response.json()["Official"]["sideStoryStage"] - if_get_maa_stage = True - else: - logger.warning(f"无法从MAA服务器获取活动关卡信息:{response.text}") + try: + response = requests.get( + "https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivity.json", + timeout=10, + proxies=self.get_proxies(), + ) + if response.status_code == 200: + stage_infos = response.json()["Official"]["sideStoryStage"] + if_get_maa_stage = True + else: + logger.warning(f"无法从MAA服务器获取活动关卡信息:{response.text}") + if_get_maa_stage = False + stage_infos = [] + except Exception as e: + logger.warning(f"无法从MAA服务器获取活动关卡信息: {e}") if_get_maa_stage = False stage_infos = [] diff --git a/app/models/schema.py b/app/models/schema.py index 71f9e26..e5153fa 100644 --- a/app/models/schema.py +++ b/app/models/schema.py @@ -34,8 +34,514 @@ class InfoOut(OutBase): data: Dict[str, Any] = Field(..., description="收到的服务器数据") +class GlobalConfig_Function(BaseModel): + HistoryRetentionTime: Optional[Literal[7, 15, 30, 60, 90, 180, 365, 0]] = Field( + None, description="历史记录保留时间, 0表示永久保存" + ) + IfAllowSleep: Optional[bool] = Field(None, description="允许休眠") + IfSilence: Optional[bool] = Field(None, description="静默模式") + BossKey: Optional[str] = Field(None, description="模拟器老板键") + IfAgreeBilibili: Optional[bool] = Field(None, description="同意哔哩哔哩用户协议") + IfSkipMumuSplashAds: Optional[bool] = Field( + None, description="跳过Mumu模拟器启动广告" + ) + + +class GlobalConfig_Voice(BaseModel): + Enabled: Optional[bool] = Field(None, description="语音功能是否启用") + Type: Optional[Literal["simple", "noisy"]] = Field( + None, description="语音类型, simple为简洁, noisy为聒噪" + ) + + +class GlobalConfig_Start(BaseModel): + IfSelfStart: Optional[bool] = Field(None, description="是否在系统启动时自动运行") + IfMinimizeDirectly: Optional[bool] = Field( + None, description="启动时是否直接最小化到托盘而不显示主窗口" + ) + + +class GlobalConfig_UI(BaseModel): + IfShowTray: Optional[bool] = Field(None, description="是否常态显示托盘图标") + IfToTray: Optional[bool] = Field(None, description="是否最小化到托盘") + + +class GlobalConfig_Notify(BaseModel): + SendTaskResultTime: Optional[Literal["不推送", "任何时刻", "仅失败时"]] = Field( + None, description="任务结果推送时机" + ) + IfSendStatistic: Optional[bool] = Field(None, description="是否发送统计信息") + IfSendSixStar: Optional[bool] = Field(None, description="是否发送公招六星通知") + IfPushPlyer: Optional[bool] = Field(None, description="是否推送系统通知") + IfSendMail: Optional[bool] = Field(None, description="是否发送邮件通知") + SMTPServerAddress: Optional[str] = Field(None, description="SMTP服务器地址") + AuthorizationCode: Optional[str] = Field(None, description="SMTP授权码") + FromAddress: Optional[str] = Field(None, description="邮件发送地址") + ToAddress: Optional[str] = Field(None, description="邮件接收地址") + IfServerChan: Optional[bool] = Field(None, description="是否使用ServerChan推送") + ServerChanKey: Optional[str] = Field(None, description="ServerChan推送密钥") + IfCompanyWebHookBot: Optional[bool] = Field( + None, description="是否使用企微Webhook推送" + ) + CompanyWebHookBotUrl: Optional[str] = Field(None, description="企微Webhook Bot URL") + + +class GlobalConfig_Update(BaseModel): + IfAutoUpdate: Optional[bool] = Field(None, description="是否自动更新") + UpdateType: Optional[Literal["stable", "beta"]] = Field( + None, description="更新类型, stable为稳定版, beta为测试版" + ) + Source: Optional[Literal["GitHub", "MirrorChyan", "AutoSite"]] = Field( + None, description="更新源: GitHub源, Mirror酱源, 自建源" + ) + ProxyAddress: Optional[str] = Field(None, description="网络代理地址") + MirrorChyanCDK: Optional[str] = Field(None, description="Mirror酱CDK") + + +class GlobalConfig(BaseModel): + Function: Optional[GlobalConfig_Function] = Field(None, description="功能相关配置") + Voice: Optional[GlobalConfig_Voice] = Field(None, description="语音相关配置") + Start: Optional[GlobalConfig_Start] = Field(None, description="启动相关配置") + UI: Optional[GlobalConfig_UI] = Field(None, description="界面相关配置") + Notify: Optional[GlobalConfig_Notify] = Field(None, description="通知相关配置") + Update: Optional[GlobalConfig_Update] = Field(None, description="更新相关配置") + + +# class QueueItem(ConfigBase): +# """队列项配置""" + +# def __init__(self) -> None: +# super().__init__() + +# self.Info_ScriptId = ConfigItem("Info", "ScriptId", None, UidValidator()) + + +# class TimeSet(ConfigBase): +# """时间设置配置""" + +# def __init__(self) -> None: +# super().__init__() + +# self.Info_Enabled = ConfigItem("Info", "Enabled", False, BoolValidator()) +# self.Info_Time = ConfigItem("Info", "Time", "00:00") + + +# class QueueConfig(ConfigBase): +# """队列配置""" + +# def __init__(self) -> None: +# super().__init__() + +# self.Info_Name = ConfigItem("Info", "Name", "") +# self.Info_TimeEnabled = ConfigItem( +# "Info", "TimeEnabled", False, BoolValidator() +# ) +# self.Info_StartUpEnabled = ConfigItem( +# "Info", "StartUpEnabled", False, BoolValidator() +# ) +# self.Info_AfterAccomplish = ConfigItem( +# "Info", +# "AfterAccomplish", +# "NoAction", +# OptionsValidator( +# [ +# "NoAction", +# "KillSelf", +# "Sleep", +# "Hibernate", +# "Shutdown", +# "ShutdownForce", +# ] +# ), +# ) + +# self.Data_LastProxyTime = ConfigItem( +# "Data", "LastProxyTime", "2000-01-01 00:00:00" +# ) +# self.Data_LastProxyHistory = ConfigItem( +# "Data", "LastProxyHistory", "暂无历史运行记录" +# ) + +# self.TimeSet = MultipleConfig([TimeSet]) +# self.QueueItem = MultipleConfig([QueueItem]) + + +# class MaaUserConfig(ConfigBase): +# """MAA用户配置""" + +# def __init__(self) -> None: +# super().__init__() + +# self.Info_Name = ConfigItem("Info", "Name", "新用户") +# self.Info_Id = ConfigItem("Info", "Id", "") +# self.Info_Mode = ConfigItem( +# "Info", "Mode", "简洁", OptionsValidator(["简洁", "详细"]) +# ) +# self.Info_StageMode = ConfigItem("Info", "StageMode", "固定") +# self.Info_Server = ConfigItem( +# "Info", +# "Server", +# "Official", +# OptionsValidator( +# ["Official", "Bilibili", "YoStarEN", "YoStarJP", "YoStarKR", "txwy"] +# ), +# ) +# self.Info_Status = ConfigItem("Info", "Status", True, BoolValidator()) +# self.Info_RemainedDay = ConfigItem( +# "Info", "RemainedDay", -1, RangeValidator(-1, 1024) +# ) +# self.Info_Annihilation = ConfigItem( +# "Info", +# "Annihilation", +# "Annihilation", +# OptionsValidator( +# [ +# "Close", +# "Annihilation", +# "Chernobog@Annihilation", +# "LungmenOutskirts@Annihilation", +# "LungmenDowntown@Annihilation", +# ] +# ), +# ) +# self.Info_Routine = ConfigItem("Info", "Routine", True, BoolValidator()) +# self.Info_InfrastMode = ConfigItem( +# "Info", +# "InfrastMode", +# "Normal", +# OptionsValidator(["Normal", "Rotation", "Custom"]), +# ) +# self.Info_Password = ConfigItem("Info", "Password", "", EncryptValidator()) +# self.Info_Notes = ConfigItem("Info", "Notes", "无") +# self.Info_MedicineNumb = ConfigItem( +# "Info", "MedicineNumb", 0, RangeValidator(0, 1024) +# ) +# self.Info_SeriesNumb = ConfigItem( +# "Info", +# "SeriesNumb", +# "0", +# OptionsValidator(["0", "6", "5", "4", "3", "2", "1", "-1"]), +# ) +# self.Info_Stage = ConfigItem("Info", "Stage", "-") +# self.Info_Stage_1 = ConfigItem("Info", "Stage_1", "-") +# self.Info_Stage_2 = ConfigItem("Info", "Stage_2", "-") +# self.Info_Stage_3 = ConfigItem("Info", "Stage_3", "-") +# self.Info_Stage_Remain = ConfigItem("Info", "Stage_Remain", "-") +# self.Info_IfSkland = ConfigItem("Info", "IfSkland", False, BoolValidator()) +# self.Info_SklandToken = ConfigItem("Info", "SklandToken", "") + +# self.Data_LastProxyDate = ConfigItem("Data", "LastProxyDate", "2000-01-01") +# self.Data_LastAnnihilationDate = ConfigItem( +# "Data", "LastAnnihilationDate", "2000-01-01" +# ) +# self.Data_LastSklandDate = ConfigItem("Data", "LastSklandDate", "2000-01-01") +# self.Data_ProxyTimes = ConfigItem( +# "Data", "ProxyTimes", 0, RangeValidator(0, 1024) +# ) +# self.Data_IfPassCheck = ConfigItem("Data", "IfPassCheck", True, BoolValidator()) +# self.Data_CustomInfrastPlanIndex = ConfigItem( +# "Data", "CustomInfrastPlanIndex", "0" +# ) + +# self.Task_IfWakeUp = ConfigItem("Task", "IfWakeUp", True, BoolValidator()) +# self.Task_IfRecruiting = ConfigItem( +# "Task", "IfRecruiting", True, BoolValidator() +# ) +# self.Task_IfBase = ConfigItem("Task", "IfBase", True, BoolValidator()) +# self.Task_IfCombat = ConfigItem("Task", "IfCombat", True, BoolValidator()) +# self.Task_IfMall = ConfigItem("Task", "IfMall", True, BoolValidator()) +# self.Task_IfMission = ConfigItem("Task", "IfMission", True, BoolValidator()) +# self.Task_IfAutoRoguelike = ConfigItem( +# "Task", "IfAutoRoguelike", False, BoolValidator() +# ) +# self.Task_IfReclamation = ConfigItem( +# "Task", "IfReclamation", False, BoolValidator() +# ) + +# self.Notify_Enabled = ConfigItem("Notify", "Enabled", False, BoolValidator()) +# self.Notify_IfSendStatistic = ConfigItem( +# "Notify", "IfSendStatistic", False, BoolValidator() +# ) +# self.Notify_IfSendSixStar = ConfigItem( +# "Notify", "IfSendSixStar", False, BoolValidator() +# ) +# self.Notify_IfSendMail = ConfigItem( +# "Notify", "IfSendMail", False, BoolValidator() +# ) +# self.Notify_ToAddress = ConfigItem("Notify", "ToAddress", "") +# self.Notify_IfServerChan = ConfigItem( +# "Notify", "IfServerChan", False, BoolValidator() +# ) +# self.Notify_ServerChanKey = ConfigItem("Notify", "ServerChanKey", "") +# self.Notify_IfCompanyWebHookBot = ConfigItem( +# "Notify", "IfCompanyWebHookBot", False, BoolValidator() +# ) +# self.Notify_CompanyWebHookBotUrl = ConfigItem( +# "Notify", "CompanyWebHookBotUrl", "" +# ) + +# def get_plan_info(self) -> Dict[str, Union[str, int]]: +# """获取当前的计划下信息""" + +# if self.get("Info", "StageMode") == "固定": +# return { +# "MedicineNumb": self.get("Info", "MedicineNumb"), +# "SeriesNumb": self.get("Info", "SeriesNumb"), +# "Stage": self.get("Info", "Stage"), +# "Stage_1": self.get("Info", "Stage_1"), +# "Stage_2": self.get("Info", "Stage_2"), +# "Stage_3": self.get("Info", "Stage_3"), +# "Stage_Remain": self.get("Info", "Stage_Remain"), +# } +# else: +# plan = Config.PlanConfig[uuid.UUID(self.get("Info", "StageMode"))] +# if isinstance(plan, MaaPlanConfig): +# return { +# "MedicineNumb": plan.get_current_info("MedicineNumb").getValue(), +# "SeriesNumb": plan.get_current_info("SeriesNumb").getValue(), +# "Stage": plan.get_current_info("Stage").getValue(), +# "Stage_1": plan.get_current_info("Stage_1").getValue(), +# "Stage_2": plan.get_current_info("Stage_2").getValue(), +# "Stage_3": plan.get_current_info("Stage_3").getValue(), +# "Stage_Remain": plan.get_current_info("Stage_Remain").getValue(), +# } +# else: +# raise ValueError("Invalid plan type") + + +# class MaaConfig(ConfigBase): +# """MAA配置""" + +# def __init__(self) -> None: +# super().__init__() + +# self.Info_Name = ConfigItem("Info", "Name", "") +# self.Info_Path = ConfigItem("Info", "Path", ".", FolderValidator()) + +# self.Run_TaskTransitionMethod = ConfigItem( +# "Run", +# "TaskTransitionMethod", +# "ExitEmulator", +# OptionsValidator(["NoAction", "ExitGame", "ExitEmulator"]), +# ) +# self.Run_ProxyTimesLimit = ConfigItem( +# "Run", "ProxyTimesLimit", 0, RangeValidator(0, 1024) +# ) +# self.Run_ADBSearchRange = ConfigItem( +# "Run", "ADBSearchRange", 0, RangeValidator(0, 3) +# ) +# self.Run_RunTimesLimit = ConfigItem( +# "Run", "RunTimesLimit", 3, RangeValidator(1, 1024) +# ) +# self.Run_AnnihilationTimeLimit = ConfigItem( +# "Run", "AnnihilationTimeLimit", 40, RangeValidator(1, 1024) +# ) +# self.Run_RoutineTimeLimit = ConfigItem( +# "Run", "RoutineTimeLimit", 10, RangeValidator(1, 1024) +# ) +# self.Run_AnnihilationWeeklyLimit = ConfigItem( +# "Run", "AnnihilationWeeklyLimit", True, BoolValidator() +# ) + +# self.UserData = MultipleConfig([MaaUserConfig]) + + +# class MaaPlanConfig(ConfigBase): +# """MAA计划表配置""" + +# def __init__(self) -> None: +# super().__init__() + +# self.Info_Name = ConfigItem("Info", "Name", "") +# self.Info_Mode = ConfigItem( +# "Info", "Mode", "ALL", OptionsValidator(["ALL", "Weekly"]) +# ) + +# self.config_item_dict: dict[str, Dict[str, ConfigItem]] = {} + +# for group in [ +# "ALL", +# "Monday", +# "Tuesday", +# "Wednesday", +# "Thursday", +# "Friday", +# "Saturday", +# "Sunday", +# ]: +# self.config_item_dict[group] = {} + +# self.config_item_dict[group]["MedicineNumb"] = ConfigItem( +# group, "MedicineNumb", 0, RangeValidator(0, 1024) +# ) +# self.config_item_dict[group]["SeriesNumb"] = ConfigItem( +# group, +# "SeriesNumb", +# "0", +# OptionsValidator(["0", "6", "5", "4", "3", "2", "1", "-1"]), +# ) +# self.config_item_dict[group]["Stage"] = ConfigItem(group, "Stage", "-") +# self.config_item_dict[group]["Stage_1"] = ConfigItem(group, "Stage_1", "-") +# self.config_item_dict[group]["Stage_2"] = ConfigItem(group, "Stage_2", "-") +# self.config_item_dict[group]["Stage_3"] = ConfigItem(group, "Stage_3", "-") +# self.config_item_dict[group]["Stage_Remain"] = ConfigItem( +# group, "Stage_Remain", "-" +# ) + +# for name in [ +# "MedicineNumb", +# "SeriesNumb", +# "Stage", +# "Stage_1", +# "Stage_2", +# "Stage_3", +# "Stage_Remain", +# ]: +# setattr(self, f"{group}_{name}", self.config_item_dict[group][name]) + +# def get_current_info(self, name: str) -> ConfigItem: +# """获取当前的计划表配置项""" + +# if self.get("Info", "Mode") == "ALL": + +# return self.config_item_dict["ALL"][name] + +# elif self.get("Info", "Mode") == "Weekly": + +# dt = datetime.now() +# if dt.time() < datetime.min.time().replace(hour=4): +# dt = dt - timedelta(days=1) +# today = dt.strftime("%A") + +# if today in self.config_item_dict: +# return self.config_item_dict[today][name] +# else: +# return self.config_item_dict["ALL"][name] + +# else: +# raise ValueError("The mode is invalid.") + + +# class GeneralUserConfig(ConfigBase): +# """通用子配置""" + +# def __init__(self) -> None: +# super().__init__() + +# self.Info_Name = ConfigItem("Info", "Name", "新配置") +# self.Info_Status = ConfigItem("Info", "Status", True, BoolValidator()) +# self.Info_RemainedDay = ConfigItem( +# "Info", "RemainedDay", -1, RangeValidator(-1, 1024) +# ) +# self.Info_IfScriptBeforeTask = ConfigItem( +# "Info", "IfScriptBeforeTask", False, BoolValidator() +# ) +# self.Info_ScriptBeforeTask = ConfigItem( +# "Info", "ScriptBeforeTask", "", FileValidator() +# ) +# self.Info_IfScriptAfterTask = ConfigItem( +# "Info", "IfScriptAfterTask", False, BoolValidator() +# ) +# self.Info_ScriptAfterTask = ConfigItem( +# "Info", "ScriptAfterTask", "", FileValidator() +# ) +# self.Info_Notes = ConfigItem("Info", "Notes", "无") + +# self.Data_LastProxyDate = ConfigItem("Data", "LastProxyDate", "2000-01-01") +# self.Data_ProxyTimes = ConfigItem( +# "Data", "ProxyTimes", 0, RangeValidator(0, 1024) +# ) + +# self.Notify_Enabled = ConfigItem("Notify", "Enabled", False, BoolValidator()) +# self.Notify_IfSendStatistic = ConfigItem( +# "Notify", "IfSendStatistic", False, BoolValidator() +# ) +# self.Notify_IfSendMail = ConfigItem( +# "Notify", "IfSendMail", False, BoolValidator() +# ) +# self.Notify_ToAddress = ConfigItem("Notify", "ToAddress", "") +# self.Notify_IfServerChan = ConfigItem( +# "Notify", "IfServerChan", False, BoolValidator() +# ) +# self.Notify_ServerChanKey = ConfigItem("Notify", "ServerChanKey", "") +# self.Notify_IfCompanyWebHookBot = ConfigItem( +# "Notify", "IfCompanyWebHookBot", False, BoolValidator() +# ) +# self.Notify_CompanyWebHookBotUrl = ConfigItem( +# "Notify", "CompanyWebHookBotUrl", "" +# ) + + +# class GeneralConfig(ConfigBase): +# """通用配置""" + +# def __init__(self) -> None: +# super().__init__() + +# self.Info_Name = ConfigItem("Info", "Name", "") +# self.Info_RootPath = ConfigItem("Info", "RootPath", ".", FileValidator()) + +# self.Script_ScriptPath = ConfigItem( +# "Script", "ScriptPath", ".", FileValidator() +# ) +# self.Script_Arguments = ConfigItem("Script", "Arguments", "") +# self.Script_IfTrackProcess = ConfigItem( +# "Script", "IfTrackProcess", False, BoolValidator() +# ) +# self.Script_ConfigPath = ConfigItem( +# "Script", "ConfigPath", ".", FileValidator() +# ) +# self.Script_ConfigPathMode = ConfigItem( +# "Script", "ConfigPathMode", "File", OptionsValidator(["File", "Folder"]) +# ) +# self.Script_UpdateConfigMode = ConfigItem( +# "Script", +# "UpdateConfigMode", +# "Never", +# OptionsValidator(["Never", "Success", "Failure", "Always"]), +# ) +# self.Script_LogPath = ConfigItem("Script", "LogPath", ".", FileValidator()) +# self.Script_LogPathFormat = ConfigItem("Script", "LogPathFormat", "%Y-%m-%d") +# self.Script_LogTimeStart = ConfigItem( +# "Script", "LogTimeStart", 1, RangeValidator(1, 1024) +# ) +# self.Script_LogTimeEnd = ConfigItem( +# "Script", "LogTimeEnd", 1, RangeValidator(1, 1024) +# ) +# self.Script_LogTimeFormat = ConfigItem( +# "Script", "LogTimeFormat", "%Y-%m-%d %H:%M:%S" +# ) +# self.Script_SuccessLog = ConfigItem("Script", "SuccessLog", "") +# self.Script_ErrorLog = ConfigItem("Script", "ErrorLog", "") + +# self.Game_Enabled = ConfigItem("Game", "Enabled", False, BoolValidator()) +# self.Game_Style = ConfigItem( +# "Game", "Style", "Emulator", OptionsValidator(["Emulator", "Client"]) +# ) +# self.Game_Path = ConfigItem("Game", "Path", ".", FileValidator()) +# self.Game_Arguments = ConfigItem("Game", "Arguments", "") +# self.Game_WaitTime = ConfigItem("Game", "WaitTime", 0, RangeValidator(0, 1024)) +# self.Game_IfForceClose = ConfigItem( +# "Game", "IfForceClose", False, BoolValidator() +# ) + +# self.Run_ProxyTimesLimit = ConfigItem( +# "Run", "ProxyTimesLimit", 0, RangeValidator(0, 1024) +# ) +# self.Run_RunTimesLimit = ConfigItem( +# "Run", "RunTimesLimit", 3, RangeValidator(1, 1024) +# ) +# self.Run_RunTimeLimit = ConfigItem( +# "Run", "RunTimeLimit", 10, RangeValidator(1, 1024) +# ) + +# self.UserData = MultipleConfig([GeneralUserConfig]) + + class ScriptCreateIn(BaseModel): - type: Literal["MAA", "General"] + type: Literal["MAA", "General"] = Field( + ..., description="脚本类型: MAA脚本, 通用脚本" + ) class ScriptCreateOut(OutBase): @@ -211,8 +717,8 @@ class TaskMessage(BaseModel): class SettingGetOut(OutBase): - data: Dict[str, Dict[str, Any]] = Field(..., description="全局设置数据") + data: GlobalConfig = Field(..., description="全局设置数据") class SettingUpdateIn(BaseModel): - data: Dict[str, Dict[str, Any]] = Field(..., description="全局设置更新数据") + data: GlobalConfig = Field(..., description="全局设置需要更新的数据")