Gründer Scripting

From WebDisplays
Revision as of 15:03, 20 October 2018 by Montoyo (talk | contribs) (Les commandes)
Jump to: navigation, search

Pour pouvoir réaliser plus de trucs avec !chatbot, j'ai ajouté quelques commandes dont la syntaxe est hyper chiante, alors accrochez vous.

Principes de bases

Tout d'abord, il y a deux principes de base qui sont valides pour toute commande : le premier concerne l'accumulation de commande, et le deuxième porte sur les arguments.

Accumulation de commandes

Dans cet article seront décrite plusieurs commandes qui, après avoir fait quelque chose, lanceront une autre commande. Cette autre commande doit être passée en argument à la première commande. Prenons l'exemple de la commande !in qui exécute la dite autre commande après un temps donné :

  • §in 5s, !am db_ah

Cette commande jouera le fameux "AH !" de Denis 5 secondes après qu'elle ait été envoyée. On utilise ici le § parce-que le 2ème argument de !in est la commande à lancer après le temps donné. Mais cela n'est pas nécessaire; en effet : la commande !in ne s’attend à rien d'autre que le temps et la commande ! Par conséquent, on peut très bien utiliser '!' à la place de '§' puisque tout ce qui est après le temps sera concaténé. Donc,

  • !in 5s !am db_ah

aura le même effet, et est plus simple à lire. En revanche, cela n'est plus valide pour une commande telle que !script, qui exécute tour à tour les commande qui lui sont passées en argument :

  • §script !am db_ah, !am r_issou

Ceci exécutera !am db_ah puis !am r_issou. Ici, évidemment, on est obligé d'utiliser §, sans quoi !script ne saura pas faire la séparation entre les commandes à lancer.

  • !script !am db_ah !am r_issou (invalide)

Aura pour effet :

  1. De lancer !am sans argument (causera une erreur)
  2. D'écrire dans le chat 'db_ah'
  3. De re-lancer !am sans argument (causera à nouveau une erreur)
  4. D'écrire dans le chat 'r_issou'

Les tokens $x, x étant un chiffre

Vous vous souvenez de la commande !chatbot qui remplaçait $0, $1, etc... par les groupes capturés par l'expression régulière ? Ce système de "remplaçage" ne lui est pas propre. D'autres commande se servent de ce mécanisme pour faire passer des valeurs quelconques aux commandes qu'elles exécutent. Prenons !random :

  • !random 1 6 Le résultat est $0

Cette commande génère un nombre entier entre 1 (inclus) et 6 (exclu), puis appelle la commande donnée. Ici, il ne s'agît pas d'une commande mais d'un message dans le chat, peu importe : le résultat est que $0 sera remplacé par le résultat de la commande !random.

Mais que se passe-t-il lorsque l'on accumule plusieurs commandes qui ont "une valeur de retour" ?

  • !random 1 6 !random 1 6 Le premier nombre est $0 et le deuxième $0 (invalide)

Les deux nombre seront toujours les mêmes. Que se passe-t-il ?

  1. La première commande est exécutée. Elle choisi un nombre au hasard, notons la x.
  2. Dans la commande qu'elle se doit d'exécuter, elle remplace tous les $0 par x. Ainsi, la commande sera !random 1 6 Le premier nombre est x et le deuxième x
  3. La deuxième commande est exécutée. Elle choisi le nombre y.
  4. Dans la commande qu'elle se doit d'exécuter (juste envoyer un message), elle remplace tous les $0 par y. Problème : il n'y a pas d’occurrence de $0. Donc, rien ne sera changé, et 'Le premier nombre est x et le deuxième x' sera envoyé dans le chat.

Pour y remédier, il faut échapper le second $0 :

  • !random 1 6 !random 1 6 Le premier nombre est $0 et le deuxième $$0

Là, ça marche. Détaillons tout de même ce qui se passe :

  1. La première commande est exécutée. Elle choisi un nombre au hasard x.
  2. Dans la commande qu'elle se doit d'exécuter, elle remplace tous les $0 par x sauf ceux qui sont échappés. Ainsi, la commande sera !random 1 6 Le premier nombre est x et le deuxième $0
  3. La deuxième commande est exécutée. Elle choisi le nombre y.
  4. Dans la commande qu'elle se doit d'exécuter (le message), elle remplace tous les $0 par y. On aura donc 'Le premier nombre est x et le deuxième y' comme on s'y attendait.


Les commandes

!chatbot

Permet d’exécuter une commande lorsqu'un pattern est détecté dans le message. Cette commande est complexe et est décrite plus en détail [Gründer Chatbot|ici].

!if

Syntaxe :

  • !if cond !commande à exécuter

Exécutera la commande passée en argument, à moins que 'cond' ne soit 0, false, ou vide.

!ifelse

Syntaxe :

  • §ifelse cond, !commande si vrai, !commande si faux

Si 'cond' est 0, false, ou est vide, alors !commande si faux sera exécuté. Sinon, !commande si vrai sera lancé.

!ifnot

Syntaxe :

  • !ifnot cond !commande à exécuter

Exécutera la commande passée en argument uniquement si 'cond' est soit 0, false, ou est vide.

!in

Syntaxe :

  • !in temps(ms|s|m|h) !commande à exécuter

Exécutera la commande passée en argument après que le temps indiqué soit écoulé. Le temps doit être un nombre entier suivi d'une unité accolée. Exemples :

Texte Interprétation
758ms 758 millisecondes
3s 3 secondes
12m 12 minutes
2h 2 heures
13 s INVALIDE: l'espace ne doit pas être présent
7.0s INVALIDE: même si la partie fractionnelle est nulle, 7.0 n'est pas considéré comme un nombre entier.

!macro

Syntaxe :

  1. !macro add nom !commande à executer
  2. !macro exec nom param0 param1 param2 etc...
  3. !macro delete nom

La syntaxe 1 permet d'ajouter une macro nommée "nom". Lorsqu'elle est appelée, $0 sera remplacé par le premier paramètre, $1 par le deuxième, etc...

La syntaxe 2 permet d'appeler une macro nommée "nom".

La syntaxe 3 permet de supprimer la macron "nom".

Remarque : Les macro sont sauvegardées (et donc persistantes au redémarrage de Gründer).

!math

Syntaxe :

  • !math a opérateur b !commande à exécuter

Fait un calcul, et appel la commande à exécuter en plaçant le résultat du calcul dans $0. Voici les opérateurs supportés :

Opérateur Opération
+ Additionne a et b
- Soustrait b à a
* Multiplie a et b
/ Divise a par b
 % Calcule le reste de la division de a par b
^ Calcule a puissance b

Remarque : un i peut être accolé à l'opérateur pour caster le résultat en un entier. Par exemple :

  • !math 1 / 2 retournera 0.5
  • !math 1 /i 2 retournera 0

!random

Syntaxe :

  • !random min max !commande à exécuter

Cette commande génère un nombre entier compris entre min (inclus) et max (exclu), et place le résultat dans $0.

!repeat

Syntaxe :

  • !repeat n !commande à exécuter

Cette commande répète n fois la commande. Elle place le numéro de l'itération (de 0 à n-1) dans $0.

Remarque : Si la commande est un texte à envoyer dans le chat, n est limité à 6, pour éviter spam. Faites toujours très attention avec cette commande, puisqu'elle pourrait bien faire crasher le bot...