Difference between revisions of "Gründer Scripting"

From WebDisplays
Jump to: navigation, search
Line 12: Line 12:
 
* <code>§script !am db_ah, !am r_issou</code>
 
* <code>§script !am db_ah, !am r_issou</code>
 
Ceci exécutera <code>!am db_ah</code> puis <code>!am r_issou</code>. Ici, évidemment, on est obligé d'utiliser §, sans quoi !script ne saura pas faire la séparation entre les commandes à lancer.
 
Ceci exécutera <code>!am db_ah</code> puis <code>!am r_issou</code>. Ici, évidemment, on est obligé d'utiliser §, sans quoi !script ne saura pas faire la séparation entre les commandes à lancer.
* <code>!script !am db_ah !am r_issou</code>
+
* <code>!script !am db_ah !am r_issou</code> ''(<span style="color:red;">invalide</span>)''
 
Aura pour effet :
 
Aura pour effet :
 
# De lancer <code>!am</code> sans argument (causera une erreur)
 
# De lancer <code>!am</code> sans argument (causera une erreur)
Line 25: Line 25:
  
 
Mais que se passe-t-il lorsque l'on accumule plusieurs commandes qui ont "une valeur de retour" ?
 
Mais que se passe-t-il lorsque l'on accumule plusieurs commandes qui ont "une valeur de retour" ?
* <code>!random 1 6 !random 1 6 Le premier nombre est $0 et le deuxième $0</code>
+
* <code>!random 1 6 !random 1 6 Le premier nombre est $0 et le deuxième $0</code> ''(<span style="color:red;">invalide</span>)''
 
Les deux nombre seront toujours les mêmes. Que se passe-t-il ?
 
Les deux nombre seront toujours les mêmes. Que se passe-t-il ?
 
# La première commande est exécutée. Elle choisi un nombre au hasard, notons la x.
 
# La première commande est exécutée. Elle choisi un nombre au hasard, notons la x.

Revision as of 22:55, 20 October 2018

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

!in

TODO