feat: 通用调度适配

This commit is contained in:
DLmaster361
2025-08-11 22:40:42 +08:00
parent 91209ad9e2
commit 09371f0a5c
8 changed files with 1124 additions and 21 deletions

View File

@@ -24,7 +24,7 @@ __author__ = "DLmaster361 <DLmaster_361@163.com>"
__license__ = "GPL-3.0 license"
from .broadcast import Broadcast
from .config import Config, MaaConfig, GeneralConfig, MaaUserConfig
from .config import Config, MaaConfig, GeneralConfig, MaaUserConfig, GeneralUserConfig
from .timer import MainTimer
from .task_manager import TaskManager
@@ -36,4 +36,5 @@ __all__ = [
"MainTimer",
"TaskManager",
"MaaUserConfig",
"GeneralUserConfig",
]

View File

@@ -22,7 +22,6 @@
import re
import shutil
import asyncio
import requests
import truststore
import calendar
@@ -133,7 +132,7 @@ class TimeSet(ConfigBase):
super().__init__()
self.Info_Enabled = ConfigItem("Info", "Enabled", False, BoolValidator())
self.Info_Time = ConfigItem("Info", "Set", "00:00")
self.Info_Time = ConfigItem("Info", "Time", "00:00")
class QueueConfig(ConfigBase):

View File

@@ -118,8 +118,8 @@ class _TaskManager:
if isinstance(Config.ScriptConfig[task_id], MaaConfig):
task_item = MaaManager(mode, task_id, actual_id, websocket)
# elif isinstance(Config.ScriptConfig[task_id], GeneralConfig):
# task_item = GeneralManager(mode, task_id, actual_id, websocket)
elif isinstance(Config.ScriptConfig[task_id], GeneralConfig):
task_item = GeneralManager(mode, task_id, actual_id, websocket)
else:
logger.error(
f"不支持的脚本类型:{Config.ScriptConfig[task_id].__class__.__name__}"
@@ -197,8 +197,8 @@ class _TaskManager:
if isinstance(Config.ScriptConfig[script_id], MaaConfig):
task_item = MaaManager(mode, script_id, None, websocket)
# elif isinstance(Config.ScriptConfig[task_id], GeneralConfig):
# task_item = GeneralManager(mode, task_id, actual_id, websocket)
elif isinstance(Config.ScriptConfig[task_id], GeneralConfig):
task_item = GeneralManager(mode, task_id, actual_id, websocket)
else:
logger.error(
f"不支持的脚本类型:{Config.ScriptConfig[script_id].__class__.__name__}"

View File

@@ -183,12 +183,9 @@ class MaaManager:
self.cur_user_data = self.user_config[uuid.UUID(user["user_id"])]
if self.script_config.get(
"Run", "ProxyTimesLimit"
) == 0 or self.cur_user_data.get(
"Data", "ProxyTimes"
) < self.script_config.get(
"Run", "ProxyTimesLimit"
if (self.script_config.get("Run", "ProxyTimesLimit") == 0) or (
self.cur_user_data.get("Data", "ProxyTimes")
< self.script_config.get("Run", "ProxyTimesLimit")
):
user["status"] = "运行"
await self.websocket.send_json(
@@ -848,6 +845,7 @@ class MaaManager:
self.log_start_time = datetime.now()
# 监测MAA运行状态
self.log_check_mode = "设置脚本"
await self.maa_log_monitor.start(self.maa_log_path, self.log_start_time)
self.wait_event.clear()
await self.wait_event.wait()
@@ -893,7 +891,7 @@ class MaaManager:
)
self.user_list[self.index]["status"] = "完成"
logger.success(
f"用户 {self.user_list[self.index]['name']} 的自动代理任务已完成"
f"用户 {self.user_list[self.index]['user_id']} 的自动代理任务已完成"
)
Notify.push_plyer(
"成功完成一个自动代理任务!",
@@ -904,7 +902,7 @@ class MaaManager:
else:
# 录入代理失败的用户
logger.error(
f"用户 {self.user_list[self.index]['name']} 的自动代理任务未完成"
f"用户 {self.user_list[self.index]['user_id']} 的自动代理任务未完成"
)
self.user_list[self.index]["status"] = "异常"
@@ -930,6 +928,7 @@ class MaaManager:
self.user_list[self.index]["status"] = "异常"
async def final_task(self, task: asyncio.Task):
"""结束时的收尾工作"""
logger.info("MAA 主任务已结束,开始执行后续操作")
@@ -1005,7 +1004,7 @@ class MaaManager:
title = (
f"{self.current_date} | {self.script_config.get("Info", "Name")}{self.mode}任务报告"
if self.script_config.get("Info", "Name") != ""
else f"{self.current_date} | {self.mode[:4]}任务报告"
else f"{self.current_date} | {self.mode}任务报告"
)
result = {
"title": f"{self.mode}任务报告",
@@ -1028,9 +1027,11 @@ class MaaManager:
f"已完成数:{result["completed_count"]},未完成数:{result["uncompleted_count"]}\n\n"
)
if len(result["failed_user"]) > 0:
result_text += f"{self.mode[2:4]}未成功的用户:\n{"\n".join(result["failed_user"])}\n"
result_text += (
f"{self.mode}未成功的用户:\n{"\n".join(result["failed_user"])}\n"
)
if len(result["waiting_user"]) > 0:
result_text += f"\n未开始{self.mode[2:4]}的用户:\n{"\n".join(result["waiting_user"])}\n"
result_text += f"\n未开始{self.mode}的用户:\n{"\n".join(result["waiting_user"])}\n"
# 推送代理结果通知
Notify.push_plyer(
@@ -1040,6 +1041,7 @@ class MaaManager:
10,
)
await self.push_notification("代理结果", title, result)
elif self.mode == "设置脚本":
(
Path.cwd()

View File

@@ -25,6 +25,7 @@ __license__ = "GPL-3.0 license"
from .skland import skland_sign_in
from .general import GeneralManager
from .MAA import MaaManager
__all__ = ["skland_sign_in", "MaaManager"]
__all__ = ["skland_sign_in", "GeneralManager", "MaaManager"]

1071
app/task/general.py Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -9,6 +9,33 @@ from .logger import get_logger
logger = get_logger("日志监控器")
TIME_FIELDS = {
"%Y": "year",
"%m": "month",
"%d": "day",
"%H": "hour",
"%M": "minute",
"%S": "second",
"%f": "microsecond",
}
"""时间字段映射表"""
def strptime(date_string: str, format: str, default_date: datetime) -> datetime:
"""根据指定格式解析日期字符串"""
date = datetime.strptime(date_string, format)
# 构建参数字典
datetime_kwargs = {}
for format_code, field_name in TIME_FIELDS.items():
if format_code in format:
datetime_kwargs[field_name] = getattr(date, field_name)
else:
datetime_kwargs[field_name] = getattr(default_date, field_name)
return datetime(**datetime_kwargs)
class LogMonitor:
def __init__(
@@ -54,13 +81,14 @@ class LogMonitor:
async for line in f:
if not if_log_start:
try:
entry_time = datetime.strptime(
entry_time = strptime(
line[
self.time_stamp_range[
0
] : self.time_stamp_range[1]
],
self.time_format,
self.last_callback_time,
)
if entry_time > self.log_start_time:
if_log_start = True

View File

@@ -26,7 +26,7 @@ __license__ = "GPL-3.0 license"
from .logger import get_logger
from .ImageUtils import ImageUtils
from .LogMonitor import LogMonitor
from .LogMonitor import LogMonitor, strptime
from .ProcessManager import ProcessManager
from .security import dpapi_encrypt, dpapi_decrypt
@@ -37,4 +37,5 @@ __all__ = [
"ProcessManager",
"dpapi_encrypt",
"dpapi_decrypt",
"strptime",
]