from .get_scene_object import get_scene_object from .set_scene_object_collision_rules import set_scene_object_collision_rules from ..rendering.collision_rules import resolve_collision_rules, sanitize_collision_rules, set_then_action_in_rules def append_action_to_trigger(slug, object_id, after_id, raw_action): """"+ Ajouter une action" — extrait de routes/triggers/triggers.py:: trigger_append_action pour être l'UNIQUE chemin d'écriture, partagé par la route HTTP ET par l'agent IA (voir ai/tools.py) : ni l'un ni l'autre n'écrit `_collision_rules` directement, tous deux passent par ici. `after_id` : dialogue.id (feuille "dialogue") ou id (toute autre feuille) — INSÈRE `raw_action` juste après cette feuille, où qu'elle soit dans la chaîne (pas seulement en bout réel — voir set_then_action_in_rules, demande explicite : "pouvoir ajouter n'importe quelle action à n'importe quel niveau du schéma") : une suite déjà présente passe DERRIÈRE la nouvelle action, jamais écrasée. Renvoie False si l'objet, `after_id`, ou `raw_action` sont invalides.""" obj = get_scene_object(slug, object_id) if obj is None: return False rules = resolve_collision_rules(obj) if not set_then_action_in_rules(rules, after_id, raw_action): return False sanitized = sanitize_collision_rules(rules) set_scene_object_collision_rules(slug, object_id, sanitized) return True