diff --git a/src/plugins/chat/config.py b/src/plugins/chat/config.py index 7aed9eee..b4b37aed 100644 --- a/src/plugins/chat/config.py +++ b/src/plugins/chat/config.py @@ -96,6 +96,13 @@ class BotConfig: memory_ban_words: list = field( default_factory=lambda: ["表情包", "图片", "回复", "聊天记录"] ) # 添加新的配置项默认值 + + # 夜间模式配置项 + night_mode_enable: bool = True # 是否启用夜间模式 + night_mode_start_hour: int = 0 # 夜间模式开始小时 + night_mode_end_hour: int = 7 # 夜间模式结束小时 + night_mode_willing_factor: float = 0.3 # 夜间模式意愿衰减因子 + night_mode_probability_factor: float = 0.2 # 夜间模式概率衰减因子 @staticmethod def get_config_dir() -> str: @@ -325,6 +332,15 @@ class BotConfig: others_config = parent["others"] config.enable_advance_output = others_config.get("enable_advance_output", config.enable_advance_output) config.enable_kuuki_read = others_config.get("enable_kuuki_read", config.enable_kuuki_read) + + # 在版本 >= 0.0.6 时才处理夜间模式配置项 + if config.INNER_VERSION in SpecifierSet(">=0.0.6") and "night_mode" in others_config: + night_config = others_config["night_mode"] + config.night_mode_enable = night_config.get("enable", config.night_mode_enable) + config.night_mode_start_hour = night_config.get("start_hour", config.night_mode_start_hour) + config.night_mode_end_hour = night_config.get("end_hour", config.night_mode_end_hour) + config.night_mode_willing_factor = night_config.get("willing_factor", config.night_mode_willing_factor) + config.night_mode_probability_factor = night_config.get("probability_factor", config.night_mode_probability_factor) # 版本表达式:>=1.0.0,<2.0.0 # 允许字段:func: method, support: str, notice: str, necessary: bool diff --git a/src/plugins/chat/willing_manager.py b/src/plugins/chat/willing_manager.py index 116ee3f8..2a5de42e 100644 --- a/src/plugins/chat/willing_manager.py +++ b/src/plugins/chat/willing_manager.py @@ -1,6 +1,7 @@ import asyncio from loguru import logger from .config import global_config +from datetime import datetime # 用于获取当前时间 class WillingManager: @@ -85,6 +86,25 @@ class WillingManager: if group_id in config.talk_frequency_down_groups: reply_probability = reply_probability / down_frequency_rate + # 【夜间模式】根据配置的时间段大幅降低回复意愿 + if global_config.night_mode_enable: + current_hour = datetime.now().hour + start_hour = global_config.night_mode_start_hour + end_hour = global_config.night_mode_end_hour + + # 处理跨午夜的情况 + is_night_time = False + if start_hour < end_hour: # 例如:0点到7点 + is_night_time = start_hour <= current_hour < end_hour + else: # 例如:22点到8点(跨午夜) + is_night_time = current_hour >= start_hour or current_hour < end_hour + + if is_night_time: + logger.debug(f"夜间模式生效({current_hour}时)") + # 双重抑制:既降低当前意愿又减少回复概率 + current_willing *= global_config.night_mode_willing_factor # 意愿衰减 + reply_probability *= global_config.night_mode_probability_factor # 概率衰减 + reply_probability = min(reply_probability, 1) self.group_reply_willing[group_id] = min(current_willing, 3.0) diff --git a/template/bot_config_template.toml b/template/bot_config_template.toml index 126fc501..98e8e06b 100644 --- a/template/bot_config_template.toml +++ b/template/bot_config_template.toml @@ -101,6 +101,15 @@ word_replace_rate=0.006 # 整词替换概率 enable_advance_output = true # 是否启用高级输出 enable_kuuki_read = true # 是否启用读空气功能 +[others.night_mode] # 夜间模式配置 +enable = true # 是否启用夜间模式 +start_hour = 0 # 夜间模式开始时间(小时,0-23) +end_hour = 7 # 夜间模式结束时间(小时,0-23) +willing_factor = 0.3 # 意愿衰减因子(0-1之间,越小抑制越强) +probability_factor = 0.2 # 概率衰减因子(0-1之间,越小抑制越强) +# 注:如需设置跨午夜的时间段(如22点到次日8点), +# 请设置 start_hour = 22, end_hour = 8 + [groups] talk_allowed = [ 123,