trioskosmos's picture
Upload folder using huggingface_hub
2113a6a verified
"""Trigger detection patterns.
Triggers determine WHEN an ability activates:
- ON_PLAY: When member enters the stage
- ON_LIVE_START: When a live begins
- ON_LIVE_SUCCESS: When a live succeeds
- ACTIVATED: Manual activation
- CONSTANT: Always active
- etc.
Patterns are organized in tiers:
- Tier 1 (priority 10-19): Icon filenames (most reliable)
- Tier 2 (priority 20-29): Specific phrases
- Tier 3 (priority 30-39): Generic kanji keywords
"""
from .base import Pattern, PatternPhase
TRIGGER_PATTERNS = [
# ==========================================================================
# TIER 1: Icon-based triggers (highest priority)
# ==========================================================================
Pattern(
name="on_play_icon",
phase=PatternPhase.TRIGGER,
regex=r"toujyou",
priority=10,
output_type="TriggerType.ON_PLAY",
),
Pattern(
name="on_live_start_icon",
phase=PatternPhase.TRIGGER,
regex=r"live_start",
priority=10,
output_type="TriggerType.ON_LIVE_START",
),
Pattern(
name="on_live_success_icon",
phase=PatternPhase.TRIGGER,
regex=r"live_success",
priority=10,
# Skip if "この能力は...のみ発動する" (activation restriction, not trigger)
excludes=["この能力は"],
output_type="TriggerType.ON_LIVE_SUCCESS",
),
Pattern(
name="activated_icon",
phase=PatternPhase.TRIGGER,
regex=r"kidou",
priority=10,
output_type="TriggerType.ACTIVATED",
),
Pattern(
name="constant_icon",
phase=PatternPhase.TRIGGER,
regex=r"jyouji",
priority=10,
output_type="TriggerType.CONSTANT",
),
Pattern(
name="on_leaves_icon",
phase=PatternPhase.TRIGGER,
regex=r"jidou",
priority=10,
output_type="TriggerType.ON_LEAVES",
),
Pattern(
name="live_end_icon",
phase=PatternPhase.TRIGGER,
regex=r"live_end",
priority=10,
output_type="TriggerType.TURN_END",
),
# ==========================================================================
# TIER 2: Specific phrase triggers
# ==========================================================================
Pattern(
name="on_reveal_cheer",
phase=PatternPhase.TRIGGER,
regex=r"エールにより公開|エールで公開",
priority=20,
output_type="TriggerType.ON_REVEAL",
),
Pattern(
name="constant_yell_reveal",
phase=PatternPhase.TRIGGER,
keywords=["エールで出た"],
priority=20,
output_type="TriggerType.CONSTANT",
),
# ==========================================================================
# TIER 3: Kanji keyword triggers
# ==========================================================================
Pattern(
name="on_play_kanji",
phase=PatternPhase.TRIGGER,
regex=r"登場",
priority=30,
# Filter: Not when describing "has [Play] ability" etc
look_ahead_excludes=["能力", "スキル", "を持つ", "を持たない", "がない"],
output_type="TriggerType.ON_PLAY",
),
Pattern(
name="on_live_start_kanji",
phase=PatternPhase.TRIGGER,
regex=r"ライブ開始|ライブの開始",
priority=30,
look_ahead_excludes=["能力", "スキル", "を持つ"],
output_type="TriggerType.ON_LIVE_START",
),
Pattern(
name="on_live_success_kanji",
phase=PatternPhase.TRIGGER,
regex=r"ライブ成功",
priority=30,
look_ahead_excludes=["能力", "スキル", "を持つ"],
output_type="TriggerType.ON_LIVE_SUCCESS",
),
Pattern(
name="activated_kanji",
phase=PatternPhase.TRIGGER,
keywords=["起動"],
priority=30,
look_ahead_excludes=["能力", "スキル", "を持つ"],
output_type="TriggerType.ACTIVATED",
),
Pattern(
name="constant_kanji",
phase=PatternPhase.TRIGGER,
keywords=["常時"],
priority=30,
look_ahead_excludes=["能力", "スキル", "を持つ"],
output_type="TriggerType.CONSTANT",
),
Pattern(
name="on_leaves_kanji",
phase=PatternPhase.TRIGGER,
keywords=["自動"],
priority=30,
look_ahead_excludes=["能力", "スキル", "を持つ"],
output_type="TriggerType.ON_LEAVES",
),
Pattern(
name="turn_start",
phase=PatternPhase.TRIGGER,
keywords=["ターン開始"],
priority=30,
output_type="TriggerType.TURN_START",
),
Pattern(
name="turn_end_kanji",
phase=PatternPhase.TRIGGER,
regex=r"ターン終了|ライブ終了",
priority=30,
look_ahead_excludes=["まで"], # "Until end of turn" is duration, not trigger
output_type="TriggerType.TURN_END",
),
]