Skip to content

Commit 60e983c

Browse files
feat(chat): implement boredom cooldown mechanism
Add last_boredom_trigger_time tracking to adjust boredom threshold dynamically between 25 and 50 based on recent trigger history. Prevents frequent boredom state transitions by increasing threshold when boredom was recently triggered. Set timestamp when boredom processing begins.
1 parent 79bfab1 commit 60e983c

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

src/plugins/nonebot_plugin_chat/core/main_session.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ def __init__(self, last_activate_time: datetime, lang_str: str = "zh_hans") -> N
8787
self.state = StateEnum.ACTIVATE
8888
self.status_manager = StatusManager()
8989
self.state_until = None
90+
self.last_boredom_trigger_time = None
9091
# 记录当前正在执行的动作,用于后续更新状态
9192
self._current_action_start_time: Optional[datetime] = None
9293
self._current_action_sleep_plan_end: Optional[datetime] = None
@@ -99,12 +100,17 @@ async def process_timer(self) -> None:
99100

100101
case StateEnum.ACTIVATE:
101102
self.boredom += 1
102-
if self.boredom >= 25 and self.status_manager.set_mood(MoodEnum.BORED)[0]:
103+
if self.last_boredom_trigger_time and datetime.now() - self.last_boredom_trigger_time:
104+
threshold = 50
105+
else:
106+
threshold = 25
107+
if self.boredom >= threshold:
103108
self.state = StateEnum.BORED
104109
self.boredom = 0.0
105110

106111
case StateEnum.BORED:
107112
asyncio.create_task(self.process_boredom())
113+
108114

109115
if self.state_until is not None and datetime.now() > self.state_until:
110116
# 如果当前是 SLEEPING 状态且是正常结束(没有被 wake_up 提前处理),更新状态
@@ -235,6 +241,7 @@ async def process_boredom(self) -> None:
235241
if self.boredom_processor_lock.locked():
236242
return
237243
async with self.boredom_processor_lock:
244+
self.last_boredom_trigger_time = datetime.now()
238245
fetcher = await MessageFetcher.create(
239246
[
240247
generate_message(await self.generate_system_prompt(), "system"),

0 commit comments

Comments
 (0)