feat(maizone): 新增按时段禁用自动说说功能

将原有的活动黑名单机制替换为更灵活的按小时禁用功能。

现在可以配置一个时间段(例如凌晨2点到6点),在此期间插件将不会根据日程活动自动发送说说,以避免在休息时间造成打扰。
原有的 `activity_blacklist` 配置项已被移除。
This commit is contained in:
tt-P607
2025-08-30 19:49:14 +08:00
committed by Windpicker-owo
parent 2a5513b546
commit cb999daed2
2 changed files with 18 additions and 6 deletions

View File

@@ -73,7 +73,8 @@ class MaiZoneRefactoredPlugin(BasePlugin):
"enable_schedule": ConfigField(type=bool, default=False, description="是否启用定时发送"), "enable_schedule": ConfigField(type=bool, default=False, description="是否启用定时发送"),
"random_interval_min_minutes": ConfigField(type=int, default=5, description="随机间隔分钟数下限"), "random_interval_min_minutes": ConfigField(type=int, default=5, description="随机间隔分钟数下限"),
"random_interval_max_minutes": ConfigField(type=int, default=15, description="随机间隔分钟数上限"), "random_interval_max_minutes": ConfigField(type=int, default=15, description="随机间隔分钟数上限"),
"activity_blacklist": ConfigField(type=list, default=["睡觉", "睡眠", "梦乡"], description="不会触发自动说说的活动黑名单"), "forbidden_hours_start": ConfigField(type=int, default=2, description="禁止发送的开始小时(24小时制)"),
"forbidden_hours_end": ConfigField(type=int, default=6, description="禁止发送的结束小时(24小时制)"),
}, },
"cookie": { "cookie": {
"http_fallback_host": ConfigField(type=str, default="172.20.130.55", description="备用Cookie获取服务的主机地址"), "http_fallback_host": ConfigField(type=str, default="172.20.130.55", description="备用Cookie获取服务的主机地址"),

View File

@@ -76,11 +76,22 @@ class SchedulerService:
logger.info(f"当前检测到的日程活动: {current_activity}") logger.info(f"当前检测到的日程活动: {current_activity}")
if current_activity: if current_activity:
# 3. 检查活动是否在黑名单中 # 3. 检查当前时间是否在禁止发送的时间段内
activity_blacklist = self.get_config("schedule.activity_blacklist", ["睡觉", "睡眠"]) now = datetime.datetime.now()
if any(keyword in current_activity for keyword in activity_blacklist): forbidden_start = self.get_config("schedule.forbidden_hours_start", 2)
logger.info(f"活动 '{current_activity}' 包含黑名单关键字,本次跳过。") forbidden_end = self.get_config("schedule.forbidden_hours_end", 6)
self.last_processed_activity = current_activity # 更新状态以防活动切换后立即触发
is_forbidden_time = False
if forbidden_start < forbidden_end:
# 例如2点到6点
is_forbidden_time = forbidden_start <= now.hour < forbidden_end
else:
# 例如23点到第二天7点
is_forbidden_time = now.hour >= forbidden_start or now.hour < forbidden_end
if is_forbidden_time:
logger.info(f"当前时间 {now.hour}点 处于禁止发送时段 ({forbidden_start}-{forbidden_end}),本次跳过。")
self.last_processed_activity = current_activity
# 4. 检查活动是否是新的活动 # 4. 检查活动是否是新的活动
elif current_activity != self.last_processed_activity: elif current_activity != self.last_processed_activity: