Skip to content

Commit 66bbd7d

Browse files
committed
feat: Add trigger count management to LoreParser and reset functionality in LorePlugin
1 parent 8e36805 commit 66bbd7d

File tree

3 files changed

+18
-5
lines changed

3 files changed

+18
-5
lines changed

core/parser.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class LoreParser:
4141
"_random_handler",
4242
"_logic_handler",
4343
"_save_handler",
44+
"trigger_count",
4445
)
4546

4647
def __init__(self, lorebook: dict[str, Any], scan_depth: int = 1):
@@ -120,6 +121,9 @@ def __init__(self, lorebook: dict[str, Any], scan_depth: int = 1):
120121
self._logic_handler = LogicHandler(self)
121122
self._save_handler = SaveHandler(self)
122123

124+
# 初始化触发器计数器
125+
self.trigger_count: dict[str, int] = {}
126+
123127
def __str__(self) -> str:
124128
"""返回解析器的字符串表示"""
125129
return f"LoreParser(variables={self._vars},triggers={self._triggers},authors_notes={self._notes})"
@@ -370,6 +374,10 @@ def _process_trigger(
370374

371375
return not trigger.block if can_trigger else True
372376

377+
def reset_trigger_count(self) -> None:
378+
"""重置所有触发器的计数器"""
379+
self.trigger_count.clear()
380+
373381
def process_chat(self) -> LoreResult:
374382
"""处理聊天消息,应用所有适用的触发器和注释
375383
@@ -381,7 +389,6 @@ def process_chat(self) -> LoreResult:
381389
"""
382390
result = LoreResult()
383391
triged_lis: set[str] = set()
384-
trigger_count: dict[str, int] = {}
385392
# 更新真实世界的空闲时间
386393
self._real_idle["before"] = self._real_idle["after"]
387394
self._real_idle["after"] = datetime.now()
@@ -390,7 +397,7 @@ def process_chat(self) -> LoreResult:
390397
for trigger in self._triggers:
391398
# 检查触发次数限制
392399
if trigger.max_trig != -1:
393-
current_count = trigger_count.get(trigger.name, 0)
400+
current_count = self.trigger_count.get(trigger.name, 0)
394401
if current_count >= trigger.max_trig:
395402
continue # 跳过已达到最大触发次数的触发器
396403

@@ -404,7 +411,9 @@ def process_chat(self) -> LoreResult:
404411
# 处理当前触发器
405412
if self._can_trigger(trigger, self.messages):
406413
# 增加触发次数计数
407-
trigger_count[trigger.name] = trigger_count.get(trigger.name, 0) + 1
414+
self.trigger_count[trigger.name] = (
415+
self.trigger_count.get(trigger.name, 0) + 1
416+
)
408417

409418
# 处理触发器, 如果返回 False,则停止处理下一个触发器
410419
if not self._process_trigger(

main.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from .core.parser import LoreParser # type: ignore
1616

1717

18-
@register("astrbot_plugin_lorebook_lite", "Raven95676", "lorebook插件", "0.1.7")
18+
@register("astrbot_plugin_lorebook_lite", "Raven95676", "lorebook插件", "0.1.8")
1919
class LorePlugin(Star):
2020
"""Lorebook插件,用于根据预设规则处理聊天内容并修改LLM请求"""
2121

@@ -227,6 +227,10 @@ async def on_llm_res(self, event: AstrMessageEvent, response: LLMResponse):
227227
msg_clean = " ".join(msg.split())
228228
self.lore_sessions[session_key].messages.append(msg_clean)
229229

230+
# 重置触发器计数器
231+
if session_key in self.lore_sessions:
232+
self.lore_sessions[session_key].reset_trigger_count()
233+
230234
# 清除结果缓存并还原人格
231235
self._clear_session_results(session_key)
232236
await self._restore_persona(umo)

metadata.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: astrbot-plugin-lorebook-lite
22
desc: Astrbot 轻量世界书插件
33
help:
4-
version: v0.1.7
4+
version: v0.1.8
55
author: Raven95676
66
repo: https://github.com/Raven95676/astrbot_plugin_lorebook_lite

0 commit comments

Comments
 (0)