Construire

Expressions

Insérer des données, calculer et mettre en forme avec {{ … }}.

La plupart des champs texte, nombre, interrupteur et sélecteurs de salon/rôle/utilisateur acceptent des expressions écrites entre {{ … }}. Tout ce qui est hors des accolades reste du texte :

Bienvenue {{ events.<id>.member.displayName }} ! Tu es le membre numéro {{ format_number(server.memberCount) }}.
Niveau {{ floor(actions.<id>.value / 100) }}, compte créé {{ discord_time(events.<id>.member.createdAt, 'relative') }}

Lire des données

Une expression lit les données de l'exécution en cours par un chemin :

  • events.<id>.<champ> — donnée portée par l'Event qui a déclenché l'exécution (qui a cliqué, ce qui a été saisi...).
  • actions.<id>.<champ> — donnée produite par une Action déjà exécutée (un message qu'elle vient d'envoyer, un salon qu'elle vient de créer...).
  • conditions.<id>.result — si une Condition est passée.
  • server.<champ> — le serveur où le Blueprint tourne (nom, nombre de membres, langue...), lisible partout.
  • temp.<nom> — une Variable temporaire ; une Variable du serveur ou d'un membre se lit par la sortie du node qui l'a lue ou écrite, voir Variables.

Tu ne tapes jamais les ids : tape {{ dans un champ et l'éditeur propose les données disponibles, avec leur type, puis les fonctions ; le bouton Insérer une valeur à côté du champ ouvre le même choix avec une recherche, rangé par node (le plus proche d'abord) avec un exemple de chaque valeur, et dans ses onglets les Variables temporaires et les fonctions. Un chemin s'affiche en puce, avec le nom du node et du champ. Seuls les nodes qui s'exécutent réellement avant celui en cours d'édition sont proposés, en suivant les vraies connexions du Blueprint. La référence des nodes liste les champs que chaque node écrit.

Une puce prend la couleur d'avertissement quand sa valeur peut être vide : un node qui ne s'exécute pas sur tous les chemins, ou un champ que Discord n'envoie pas toujours. Double-clique dessus pour ajouter une valeur de secours, utilisée quand la valeur est vide, ou clique sur Donner une valeur de secours, qui l'entoure de default(…).

Sous un champ qui contient une expression, l'aperçu montre ce qu'elle donne sur des valeurs d'exemple, et les exemples utilisés. Si vide la recalcule avec vides les valeurs qui peuvent l'être, pour vérifier la valeur de secours.

Valeurs et opérateurs

  • Du texte entre guillemets, 'bonjour' ou "bonjour" ; des nombres, 42 ou 3.5 ; true, false, null ; des listes, ['a', 'b'].
  • Calculs : + - * / %, avec des parenthèses. Ils ne marchent que sur des nombres : pour coller du texte, écris-le hors des accolades (Niveau {{ niveau }}), pas avec +.
  • Comparaisons : == != < <= > >=, et and, or, not pour les combiner.

Fonctions

Les fonctions transforment une valeur : upper(…), round(…), join(…)... Les deux plus utiles :

  • default(valeur, secours) donne le secours quand la valeur est vide : {{ default(events.<id>.member.voiceChannel.name, 'pas en vocal') }}.
  • if(condition, alors, sinon) choisit une valeur : {{ if(actions.<id>.value >= 3, 'Dernier avertissement', 'Avertissement') }}.

La référence des fonctions les liste toutes, avec un exemple chacune. Leurs noms sont en anglais quelle que soit la langue du serveur : un Blueprint marche partout.

Types

Chaque valeur a un type : texte, nombre, vrai/faux, date, liste, fiche (un membre, un salon...) ou vide.

  • Les calculs veulent des nombres : un texte qui contient un nombre, comme une option saisie par un membre, se convertit avec number(…), et une valeur vide avec default(…, 0).
  • == ne convertit jamais : '5' == 5 est faux.
  • Dans un texte, toute valeur s'affiche en texte : nombres et dates dans la langue du serveur, listes séparées par des virgules, une valeur vide par rien. Une fiche entière (un membre, un salon) ne s'affiche pas : choisis l'un de ses champs.
  • Pour afficher une date, préfère discord_time(…) : Discord l'affiche dans le fuseau et la langue de chaque lecteur. format_date(…) l'écrit en UTC.

Mentions

Une mention écrite dans le texte notifie, même quand son id vient d'une expression : <@{{ events.<id>.member.id }}> pingue le membre, <@&{{ … }}> le rôle. Une mention qui apparaît à l'intérieur d'une valeur insérée ne notifie jamais : répéter le message d'un membre ne peut faire pinguer personne par le bot. @everyone et @here ne notifient que si tu les écris et actives Autoriser @everyone et @here sur l'Action.

Erreurs

L'éditeur vérifie chaque expression avant de tester ou de déployer : une faute dans un chemin, une fonction inconnue, un champ nombre qui recevrait du texte... Le problème est souligné dans le champ et expliqué dessous. Quand la correction ne peut pas changer ce que tu voulais dire (remplacer a || b par default(a, b), convertir un texte avec number(…)), un bouton l'applique.

Certains problèmes n'arrivent qu'à l'exécution, comme une division par zéro ou une date illisible. L'Action prend alors son port échec : error.code dit ce qui s'est passé, error.message le dit dans la langue du serveur. Voir Erreurs.

Pour écrire {{ tel quel dans un message, mets une barre oblique inverse devant : \{{.