mirror of https://github.com/Mai-with-u/MaiBot.git
parent
c3798e1a8d
commit
bc045a0c85
|
|
@ -732,6 +732,69 @@ class DreamConfig(ConfigBase):
|
|||
first_delay_seconds: int = 60
|
||||
"""程序启动后首次做梦前的延迟时间(秒),默认60秒"""
|
||||
|
||||
dream_time_ranges: list[str] = field(default_factory=lambda: [])
|
||||
"""
|
||||
做梦时间段配置列表,格式:["HH:MM-HH:MM", ...]
|
||||
如果列表为空,则表示全天允许做梦。
|
||||
如果配置了时间段,则只有在这些时间段内才会实际执行做梦流程。
|
||||
时间段外,调度器仍会按间隔检查,但不会进入做梦流程。
|
||||
|
||||
示例:
|
||||
[
|
||||
"09:00-22:00", # 白天允许做梦
|
||||
"23:00-02:00", # 跨夜时间段(23:00到次日02:00)
|
||||
]
|
||||
|
||||
支持跨夜区间,例如 "23:00-02:00" 表示从23:00到次日02:00。
|
||||
"""
|
||||
|
||||
def _now_minutes(self) -> int:
|
||||
"""返回本地时间的分钟数(0-1439)。"""
|
||||
lt = time.localtime()
|
||||
return lt.tm_hour * 60 + lt.tm_min
|
||||
|
||||
def _parse_range(self, range_str: str) -> Optional[tuple[int, int]]:
|
||||
"""解析 "HH:MM-HH:MM" 到 (start_min, end_min)。"""
|
||||
try:
|
||||
start_str, end_str = [s.strip() for s in range_str.split("-")]
|
||||
sh, sm = [int(x) for x in start_str.split(":")]
|
||||
eh, em = [int(x) for x in end_str.split(":")]
|
||||
return sh * 60 + sm, eh * 60 + em
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
def _in_range(self, now_min: int, start_min: int, end_min: int) -> bool:
|
||||
"""
|
||||
判断 now_min 是否在 [start_min, end_min] 区间内。
|
||||
支持跨夜:如果 start > end,则表示跨越午夜。
|
||||
"""
|
||||
if start_min <= end_min:
|
||||
return start_min <= now_min <= end_min
|
||||
# 跨夜:例如 23:00-02:00
|
||||
return now_min >= start_min or now_min <= end_min
|
||||
|
||||
def is_in_dream_time(self) -> bool:
|
||||
"""
|
||||
检查当前时间是否在允许做梦的时间段内。
|
||||
如果 dream_time_ranges 为空,则返回 True(全天允许)。
|
||||
"""
|
||||
if not self.dream_time_ranges:
|
||||
return True
|
||||
|
||||
now_min = self._now_minutes()
|
||||
|
||||
for time_range in self.dream_time_ranges:
|
||||
if not isinstance(time_range, str):
|
||||
continue
|
||||
parsed = self._parse_range(time_range)
|
||||
if not parsed:
|
||||
continue
|
||||
start_min, end_min = parsed
|
||||
if self._in_range(now_min, start_min, end_min):
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def __post_init__(self):
|
||||
"""验证配置值"""
|
||||
if self.interval_minutes < 1:
|
||||
|
|
|
|||
|
|
@ -535,10 +535,14 @@ async def start_dream_scheduler(
|
|||
break
|
||||
|
||||
start_ts = time.time()
|
||||
try:
|
||||
await run_dream_cycle_once()
|
||||
except Exception as e:
|
||||
logger.error(f"[dream] 单次 dream 周期执行异常: {e}")
|
||||
# 检查当前时间是否在允许做梦的时间段内
|
||||
if not global_config.dream.is_in_dream_time():
|
||||
logger.debug("[dream] 当前时间不在允许做梦的时间段内,跳过本次执行")
|
||||
else:
|
||||
try:
|
||||
await run_dream_cycle_once()
|
||||
except Exception as e:
|
||||
logger.error(f"[dream] 单次 dream 周期执行异常: {e}")
|
||||
|
||||
elapsed = time.time() - start_ts
|
||||
# 保证两次执行之间至少间隔 interval_seconds
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
[inner]
|
||||
version = "7.0.1"
|
||||
version = "7.0.2"
|
||||
|
||||
#----以下是给开发人员阅读的,如果你只是部署了麦麦,不需要阅读----
|
||||
# 如果你想要修改配置文件,请递增version的值
|
||||
|
|
@ -117,6 +117,18 @@ interval_minutes = 45 # 做梦时间间隔(分钟),默认30分钟
|
|||
max_iterations = 20 # 做梦最大轮次,默认20轮
|
||||
first_delay_seconds = 1200 # 程序启动后首次做梦前的延迟时间(秒),默认60秒
|
||||
|
||||
# 做梦时间段配置,格式:["HH:MM-HH:MM", ...]
|
||||
# 如果列表为空,则表示全天允许做梦。
|
||||
# 如果配置了时间段,则只有在这些时间段内才会实际执行做梦流程。
|
||||
# 时间段外,调度器仍会按间隔检查,但不会进入做梦流程。
|
||||
# 支持跨夜区间,例如 "23:00-02:00" 表示从23:00到次日02:00。
|
||||
# 示例:
|
||||
dream_time_ranges = [
|
||||
# "09:00-22:00", # 白天允许做梦
|
||||
"23:00-10:00", # 跨夜时间段(23:00到次日10:00)
|
||||
]
|
||||
# dream_time_ranges = []
|
||||
|
||||
[jargon]
|
||||
all_global = true # 是否开启全局黑话模式,注意,此功能关闭后,已经记录的全局黑话不会改变,需要手动删除
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue