feat(maizone): 新增按时段禁用自动说说功能
将原有的活动黑名单机制替换为更灵活的按小时禁用功能。 现在可以配置一个时间段(例如凌晨2点到6点),在此期间插件将不会根据日程活动自动发送说说,以避免在休息时间造成打扰。 原有的 `activity_blacklist` 配置项已被移除。
This commit is contained in:
@@ -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获取服务的主机地址"),
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user