Gründer Scripting

From WebDisplays
Revision as of 23:14, 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

!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 <code>!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
75ms 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

TODO

!math

TODO

!random

TODO

!repeat

TODO