feat(trigger_word_toggle): refactor trigger word filtering logic, fixes #718 and fixes #285

- Simplify and consolidate the logic for processing trigger words and groups
- Remove redundant code paths and improve maintainability
- Ensure consistent behavior between list and string trigger data inputs
- Preserve existing functionality for strength adjustment and group mode
This commit is contained in:
Will Miao
2025-12-09 14:16:56 +08:00
parent 74bfd397aa
commit a3a00bbeed
3 changed files with 153 additions and 108 deletions

View File

@@ -24,3 +24,61 @@ def test_group_mode_preserves_parenthesized_groups():
)
assert filtered == original_message
def test_duplicate_words_keep_individual_active_states():
node = TriggerWordToggle()
trigger_data = [
{'text': 'A', 'active': True, 'strength': None, 'highlighted': False},
{'text': 'A', 'active': False, 'strength': None, 'highlighted': False},
]
filtered, = node.process_trigger_words(
id="node",
group_mode=False,
default_active=True,
allow_strength_adjustment=False,
orinalMessage="A, A",
toggle_trigger_words=trigger_data,
)
assert filtered == "A"
def test_duplicate_words_preserve_strength_per_instance():
node = TriggerWordToggle()
trigger_data = [
{'text': '(A:0.50)', 'active': False, 'strength': 0.50, 'highlighted': False},
{'text': 'A', 'active': True, 'strength': 1.2, 'highlighted': False},
{'text': '(A:0.75)', 'active': True, 'strength': 0.75, 'highlighted': False},
]
filtered, = node.process_trigger_words(
id="node",
group_mode=False,
default_active=True,
allow_strength_adjustment=True,
orinalMessage="A, A, A",
toggle_trigger_words=trigger_data,
)
assert filtered == "(A:1.20), (A:0.75)"
def test_duplicate_groups_respect_active_state():
node = TriggerWordToggle()
trigger_data = [
{'text': 'A, B', 'active': False, 'strength': None, 'highlighted': False},
{'text': 'A, B', 'active': True, 'strength': None, 'highlighted': False},
]
filtered, = node.process_trigger_words(
id="node",
group_mode=True,
default_active=True,
allow_strength_adjustment=False,
orinalMessage="A, B,, A, B",
toggle_trigger_words=trigger_data,
)
assert filtered == "A, B"