OpenBotsDocs
03 Dashboard06 Flows

Déclencheurs

Tous les événements qui peuvent démarrer un flow, avec leurs réglages et leurs variables.

🚀 Déclencheurs

Un déclencheur décrit ce qui démarre le flow. Les réglages de chaque déclencheur sont optionnels : laisse un champ vide pour ne pas restreindre.

Sauf mention contraire, les messages et actions des bots sont ignorés, et les variables de base — Discord ({account_age_days}, {role_count}…) et OpenBots ({user}, {server}, {date}…) — sont disponibles.


👥 Membres

Arrivée d'un membre

Un membre rejoint le serveur. Filtres : âge du compte, avatar par défaut, pseudo (mots ou expression régulière), taille du serveur, heures calmes, écran d'accueil accepté ou module Vérification passé, code d'invitation utilisé, anti-raid actif, retour d'un ancien membre. Variables : {invite_code} (code d'invitation utilisé), {is_returning} (oui/non).

Départ d'un membre

Un membre quitte (ou est expulsé de) le serveur. Filtres : rôle qu'il avait, ancienneté sur le serveur, booster ou non, avatar.

Pseudo modifié

Le pseudo d'un membre sur le serveur change (par lui-même, un modérateur ou un flow). Filtre : pseudo défini/modifié, ou effacé ; rôle du membre. Variables : {old_nick}, {new_nick}, {nick_cleared} (oui/non). Quand le membre n'avait pas de pseudo (ou l'efface), la variable contient son nom d'utilisateur Discord (par exemple tom.bigot), pas son nom affiché.

Rôle ajouté / Rôle retiré

Un membre reçoit ou perd un rôle, peu importe comment. Filtre : le rôle précis (vide = n'importe lequel). Variables : {role_name}, {role_id}, {role_mention} (le rôle concerné) et {changed_roles} (tous les rôles ajoutés ou retirés en même temps, séparés par une virgule). Le flow se lance une seule fois par changement : si plusieurs rôles arrivent d'un coup, {role_name} est le plus haut placé (ou celui de ton filtre) et {changed_roles} les liste tous.

Début de boost / Fin de boost

Un membre commence ou arrête de booster le serveur. Filtre : rôle requis.

Membre banni

Un utilisateur est banni. Filtre : la raison contient un mot. Variable : {ban_reason}. Le banni n'est plus membre : {user}, {mention} et {user_id} viennent de son compte.

Membre débanni

Un utilisateur est débanni.

Membre exclu temporairement

Une exclusion (timeout) est posée, prolongée ou levée avant l'échéance. Filtres : posée / levée, durée minimale, rôle du membre. Variables : {timeout_minutes}, {timeout_until} (date de fin, affichée dans le fuseau de chaque lecteur), {timeout_ended} (oui/non).

[!NOTE] Discord n'envoie aucun événement quand une exclusion expire d'elle-même. « Levée » signifie retirée à la main.


💬 Messages

Message envoyé

Un message est posté, avec des filtres sur sa nature : pièce jointe, lien, mention, réponse, longueur minimale/maximale, contient au moins un mot / aucun de ces mots, rôle de l'auteur, salon. Variables : {arg} (le texte), {message_id}, {message_link}, {attachment_count}, {link_count}, {mention_count}. Les actions sur un message (supprimer, épingler, réagir) visent directement ce message.

Message avec un mot-clé

Un message contient un mot ou une phrase. Modes : contient, identique, commence par, se termine par. Variable : {arg}.

Message supprimé / Message modifié

Un message est supprimé ou modifié. Filtres : salon, rôle de l'auteur. Variable : {arg} (le texte supprimé, ou le nouveau texte).

[!NOTE] Le bot ne connaît que les messages postés depuis son dernier démarrage : c'est ce qui lui permet de savoir qui a écrit quoi (Discord ne donne ni l'auteur ni le texte d'un message supprimé). Dès qu'un serveur a un flow de ce type, le bot garde en mémoire vive — jamais sur disque — l'auteur et le texte de ses 5 000 derniers messages (tous salons confondus, les plus anciens sortent d'abord). Un message plus ancien, ou posté avant un redémarrage, ne lance rien plutôt que de lancer le flow avec un auteur inventé. Si son auteur a quitté le serveur, le flow ne se lance pas non plus. Une simple mise à jour d'aperçu de lien n'est pas une modification.

Règle AutoMod déclenchée

Une règle AutoMod de Discord vient de s'appliquer : message bloqué, alerte envoyée au staff ou exclusion temporaire. Les règles se créent dans Discord (Paramètres du serveur → AutoMod) ; ce déclencheur te laisse réagir : journaliser dans le salon du staff, prévenir le membre en privé, compter les infractions avec la mémoire puis sanctionner au bout de N…

Filtres : nom de la règle (contient un mot), action appliquée (message bloqué / alerte / exclusion), type de règle (mots interdits, liste prédéfinie, spam, trop de mentions, profil).

Le membre du flow est l'auteur du message visé, le salon celui où il a écrit. Variables :

  • {automod_rule} : le nom de la règle ; {automod_rule_id} : son identifiant ;
  • {automod_action} et {automod_trigger} : ce que Discord a fait, et le type de règle ;
  • {automod_keyword} : le mot qui a déclenché la règle ; {automod_content} : l'extrait concerné ;
  • {arg} : le texte du message visé ; {message_id} : son identifiant (vide quand le message a été bloqué, puisqu'il n'a jamais été publié).

Les @everyone, @here et mentions de rôle contenus dans ces textes sont neutralisés : le bot peut les reposter sans notifier personne.

À savoir : Discord n'envoie cet événement qu'à un bot qui a la permission Gérer le serveur. Sans elle, le déclencheur ne se produit jamais.


⭐ Réactions et interactions

Réaction ajoutée / Réaction retirée

Quelqu'un ajoute ou retire une réaction. Filtres : emoji, salon, rôle. Typique du rôle par réaction : ajouter donne le rôle, retirer le reprend. Variables : {emoji}, {message_id}, {message_link}. Le message réagi est le message du déclencheur : « Épingler un message », « Supprimer un message », etc. le visent sans réglage.

Bouton cliqué

Un bouton est cliqué. Renseigne le même identifiant que celui posé sur le bouton (dans « Envoyer un message » avec un bouton, ou dans un panel). Filtre : rôle requis. C'est le point de départ d'un formulaire : place « Afficher un formulaire » juste après.

Commande slash

Une vraie commande Discord /nom lance le flow. Tu choisis son nom (sans le / : test pour /test), sa description (celle que Discord affiche dans la liste des commandes) et ses paramètres.

Les paramètres : autant que tu veux, jusqu'à 25 (la limite de Discord). Clique sur Ajouter un paramètre et renseigne, pour chacun :

  • le nom (pseudo, age… : minuscules, sans espace ; les accents et les espaces sont convertis) ;
  • le type : texte, nombre entier, nombre décimal, oui / non, membre, salon, rôle ou fichier joint ;
  • obligatoire ou facultatif (case à cocher) : dans Discord, la personne doit remplir un paramètre obligatoire pour envoyer la commande ; elle peut laisser un facultatif vide ;
  • une description (elle s'affiche sous le champ dans Discord) ;
  • des choix imposés, si tu veux (texte ou nombre) : Facile, Moyen, Difficile, ou Petit=1, Grand=10 pour des nombres. Discord propose alors une liste au lieu d'un champ libre.

Discord place toujours les paramètres obligatoires avant les facultatifs : OpenBots les réordonne pour toi.

Des valeurs piochées : l'autocomplétion

Au lieu d'un champ libre, un paramètre peut proposer des valeurs : dès que la personne tape quelques lettres, Discord affiche jusqu'à 25 suggestions prises à la source que tu as choisie. Dans chaque paramètre, le menu Valeurs proposées offre :

SourceCe qui est proposé
Saisie librerien : la personne écrit ce qu'elle veut
Choix imposés25 choix au plus, écrits dans le paramètre (Facile, Moyen, Difficile) : la personne doit en prendre un
Liste écrite iciune liste de ton choix, 200 éléments au plus, un par ligne
Variable du serveurla valeur d'une variable du serveur, une valeur par ligne : tu la modifies quand tu veux, au même endroit
Mémoire du serveurla valeur d'une clé de la mémoire (une valeur par ligne) : un flow peut la faire évoluer (ajouter un jeu, retirer une carte…)
Liste du serveurles éléments d'une liste créée dans l'onglet Listes (les objets d'un jeu, des cartes…) : tous les champs de l'élément choisi arrivent dans le flow
Membres ayant un rôleles membres qui ont le rôle choisi (les bots sont exclus)
Salons du serveurtous les salons, ou seulement les textuels, vocaux, catégories ou forums, éventuellement ceux d'une catégorie précise
Rôles du serveurles rôles (sans @everyone ni les rôles réservés aux intégrations)

Les suggestions se filtrent en tapant : celles qui commencent par ce qui est tapé viennent d'abord, puis celles qui le contiennent ; les accents et les majuscules ne comptent pas. Une liste plus longue que 25 éléments reste donc pleinement utilisable.

Ce que tu reçois dans le flow :

SourceVariables
Liste écrite ici, variable, mémoire{jeu} : l'élément choisi, écrit comme dans ta liste
Liste du serveur{objet} et {objet_name} : le nom de l'élément ; {objet_attaque}, {objet_prix}… : un champ de l'élément choisi, une variable par champ de la liste (vides si rien n'est choisi)
Membres d'un rôle{membre} : la mention ; {membre_id} : l'identifiant ; {membre_name} : le nom affiché
Salons, rôlespareil : {salon}, {salon_id}, {salon_name}

Sécurité, à savoir : Discord n'oblige pas la personne à choisir une suggestion, elle peut taper n'importe quoi. OpenBots revérifie donc toujours la valeur au moment d'exécuter la commande, sur les données du moment : un membre doit encore avoir le rôle, un salon doit exister avec le bon type, un élément doit être dans la liste. Sinon la commande est refusée (« Commande refusée : … ne fait pas partie des valeurs proposées ») et le flow ne se lance pas. Pour une liste du serveur, l'élément doit exister (un élément inconnu n'aurait pas de champs). Pour les listes de texte, la case obliger à choisir dans la liste (cochée par défaut) peut être décochée : les suggestions restent, mais une valeur libre est acceptée.

Les suggestions ne sont pas montrées aux membres qui n'ont pas le droit d'utiliser la commande (rôle requis). Elles sont mises en cache quelques secondes : un membre qui vient de recevoir le rôle peut mettre un instant à apparaître dans la liste, mais il est reconnu tout de suite à l'exécution. Limites : 100 caractères par élément, 20 000 éléments lus au plus dans une source.

Exemple : la commande /annonce avec un paramètre obligatoire message (texte) et deux facultatifs, salon (salon) et urgent (oui / non), se lance ainsi dans Discord : /annonce message:Ce soir 21 h salon:#général urgent:Oui.

Les variables : chaque paramètre devient une variable du flow, qui porte son nom : {message}, {salon}, {urgent}.

TypeCe que contient la variable
Textece que la personne a écrit
Nombre entier, décimalle nombre
Oui / nonoui ou non
Membre, salon, rôlela mention ({cible}), et {cible_id} porte l'identifiant
Fichier jointle lien du fichier ({fichier}), et {fichier_id} son identifiant

Un paramètre facultatif non rempli donne une variable vide. Le texte tapé par la personne a ses @everyone, @here et mentions de rôle neutralisés. Les noms réservés par OpenBots (user, server, channel, date…) sont refusés : choisis-en un autre (cible plutôt que user).

Réglages :

  • Réponses visibles de tous : décoché (par défaut), ce que le flow répond à la commande n'est vu que par la personne qui l'a lancée ; coché, tout le salon le voit.
  • Rôle requis : seuls les membres qui ont ce rôle peuvent utiliser la commande ; les autres reçoivent un message qui le leur dit.
  • Si rien ne répond à la commande, Discord affiche « ✅ Commande exécutée » à la personne (rien du tout quand la commande est publique).

Publication : la commande est créée sur Discord quand tu enregistres le flow (quelques secondes), retirée quand tu le supprimes ou le désactives, et republiée au démarrage du bot. Une notification te confirme les commandes publiées ou t'explique ce qui bloque (nom déjà pris par un autre flow, paramètre mal nommé…). Chaque serveur n'a que ses commandes.

Limites de Discord : 100 commandes par serveur, nom de 32 caractères au plus, description de 100 caractères au plus, 25 choix par paramètre.

[!NOTE] Un formulaire peut être ouvert directement par une commande : place « Afficher un formulaire » en premier bloc, sans rien avant lui.

Une option d'un menu déroulant est choisie. Même principe que le bouton ; la ou les valeurs choisies peuvent être rangées dans une variable (plusieurs valeurs séparées par une virgule).

Vote sur un sondage

Quelqu'un vote sur un sondage créé par l'action « Créer un sondage ». Filtres : salon, rôle.


🔊 Vocal

Arrivée en vocal / Départ du vocal

Un membre rejoint ou quitte un salon vocal. Filtres : salon vocal, rôle.

Par défaut, passer directement d'un salon vocal à un autre ne déclenche ni l'un ni l'autre : Discord n'envoie alors qu'un seul événement. Coche « Compter aussi quand le membre change de salon » pour que ce passage compte comme un départ du salon quitté et une arrivée dans le salon rejoint. C'est ce qu'il faut pour « quand quelqu'un arrive dans le salon B » : sans la case, un membre qui venait du salon A n'était jamais vu. Le filtre « salon vocal » vise alors le salon quitté (Départ) ou rejoint (Arrivée). Couper son micro ou lancer sa caméra ne compte jamais.


🏗️ Structure du serveur

Ces déclencheurs n'ont pas de « membre » : {user} est vide. Ils proposent tous une case optionnelle « Chercher QUI a fait l'action » (voir plus bas).

Salon créé / Salon supprimé

Un salon ou une catégorie est créé ou supprimé (y compris par un flow). Filtres : type (texte, vocal, scène, forum, catégorie) et catégorie. Variables : {channel_name}, {channel_id}, {channel_type}, {category_name}. Pour « Salon supprimé », {channel} désigne le salon système du serveur : le salon supprimé n'existe plus, ses informations sont dans les variables.

Rôle créé / Rôle supprimé

Un rôle est créé ou supprimé. Les rôles gérés automatiquement (bot ajouté, boost, intégration) sont ignorés, sauf case cochée. Variables : {role_name}, {role_id}, {role_color} (#rrggbb, vide si sans couleur), {role_mention} (vide pour un rôle supprimé).

Fil créé

Un fil de discussion est ouvert, ou un post est publié dans un forum. Le membre du flow est le créateur du fil, et un message envoyé sans salon précisé arrive dans le nouveau fil. Filtres : fils de salons ou posts de forum, salon parent. Variables : {thread_name}, {thread_id}, {thread_type} (public, privé, annonces), {parent_name}, {is_forum_post}, {thread_locked}.

Fil archivé

Un fil passe à archivé (à la main, par un flow, ou après inactivité). Le désarchivage ne déclenche rien. Mêmes variables et filtres que « Fil créé ».

[!WARNING] Sans salon précisé, le message part dans le salon parent, jamais dans le fil : écrire dans un fil archivé le désarchiverait aussitôt.

🔎 « Chercher QUI a fait l'action »

Case désactivée par défaut sur : membre banni / débanni, exclusion, salon créé / supprimé, rôle créé / supprimé. Cochée, le bot lit le journal d'audit et fournit {actor} (nom), {actor_id}, {actor_mention} et {actor_is_bot} (oui/non).

  • Nécessite la permission « Voir les logs du serveur ». Sans elle, l'auteur reste vide et le flow tourne quand même.
  • Si l'auteur est introuvable, les variables sont vides.
  • Limité à quelques lectures par minute et par serveur pour ne pas saturer Discord (un raid de suppressions ne fera pas remonter tous les auteurs).

🧩 Modèle réutilisable

Appelé par un autre flow

Ce déclencheur ne réagit à aucun événement : il fait de ton flow un modèle, qui ne s'exécute que lorsqu'un autre flow l'appelle avec le bloc Exécuter un autre flow. Pratique pour ne pas recopier dix fois la même suite de blocs (par exemple « Journaliser une sanction »). Aucun réglage.

[!NOTE] Un modèle désactivé n'est plus appelable. Pense à l'enregistrer et à le laisser actif.


⏰ Temps et extérieur

Répétition programmée

Le flow se déclenche à intervalle régulier, ou chaque jour à une heure précise.

  • Toutes les N minutes : le premier passage sert seulement à démarrer le décompte. Le contrôle a lieu chaque minute : « toutes les 1 minute » se déclenche donc bien chaque minute, et un intervalle plus long est respecté à la minute près.
  • Chaque jour à HH:MM (accepte aussi 9h30) : choisis un fuseau horaire (ex. Europe/Paris) et, si tu veux, les jours de la semaine.

Aucun membre n'est associé à ce déclencheur. Le décompte « toutes les N minutes » est perdu si le bot redémarre.

Webhook entrant

Un service extérieur appelle l'adresse secrète de ton flow : ton stream Twitch démarre, un commit arrive sur GitHub, un formulaire de ton site est rempli… et le flow se lance. C'est l'inverse du bloc « Appeler une URL externe » (là, c'est ton flow qui appelle l'extérieur).

L'adresse apparaît dans le bloc dès que tu enregistres le flow (avant, l'éditeur te le rappelle). Elle a la forme https://ton-panel/openbots/hook/… et contient un secret que le serveur génère lui-même. Boutons Copier et Régénérer : régénérer invalide l'ancienne adresse dès l'enregistrement suivant.

L'appel : une requête POST avec un objet JSON en corps.

curl -X POST -H "Content-Type: application/json" \
  -d '{"titre": "Stream lancé !", "viewers": 42}' \
  https://ton-panel/openbots/hook/TON_SECRET

Chaque clé du JSON devient une variable : {webhook_titre}, {webhook_viewers}… (la clé est passée en minuscules, tout ce qui n'est pas une lettre ou un chiffre devient _). {webhook_body} contient le JSON complet. Le champ facultatif Clés attendues ne change rien à l'exécution : il sert seulement à l'éditeur, pour qu'il reconnaisse ces variables au lieu de les afficher comme « inconnues ».

Aucun membre n'est associé à ce déclencheur ({user} reste vide). Choisis un salon de contexte pour que les blocs qui en ont besoin sachent où écrire ; à défaut, le salon système du serveur est utilisé.

Réponses de l'adresse : 200 (le flow est lancé en arrière-plan, l'appelant n'attend pas sa fin), 404 (adresse inconnue ou flow désactivé), 400 (corps illisible ou pas un objet JSON), 413 (corps trop gros), 429 (trop d'appels), 503 (bot injoignable).

Limites (elles protègent aussi les autres serveurs hébergés par le même bot) :

  • corps de 16 Ko au plus ; 20 variables au plus, valeurs de 2 000 caractères ;
  • 30 appels par minute par flow, 300 par serveur ; 20 flows lancés par ce moyen en même temps sur un serveur ;
  • 10 webhooks au plus par serveur.

Sécurité :

  • Garde l'adresse secrète : quiconque la connaît peut déclencher le flow. Si elle fuit, régénère-la.
  • Les valeurs reçues viennent d'un tiers : les @everyone, @here et mentions de rôle qu'elles contiennent sont neutralisés.
  • Ne branche pas d'action sensible (bannir, supprimer…) sur un webhook sans ajouter de condition de ton côté : le contenu de l'appel n'est pas vérifié.
  • Copier un flow crée de nouvelles adresses : l'original garde la sienne.

On this page