Difference between revisions of "Gründer Chatbot"

From WebDisplays
Jump to: navigation, search
(Trouver quelqu'un)
(Dabber)
Line 69: Line 69:
 
===Dabber===
 
===Dabber===
 
(Bon, j'avais vraiment pas d'exemple... désolé...)
 
(Bon, j'avais vraiment pas d'exemple... désolé...)
* !chatbot dab find_multi dab :dab:
+
* <code>!chatbot dab find_multi dab :dab:</code>
 
Si je dis "allons dabber sur hater vive le dab", Gründer enverra deux messages avec l'émoji dab. Voilà, c'est de la grosse merde, faites en ce que vous voulez...
 
Si je dis "allons dabber sur hater vive le dab", Gründer enverra deux messages avec l'émoji dab. Voilà, c'est de la grosse merde, faites en ce que vous voulez...
  
 
Vous remarquerez cependant qu'on ne cherche pas '''le mot''' dab, mais la présence de d suivi de a suivi de b dans '''tout le message'''. Ainsi, le pattern matchera si votre message contient 'abracadabra'. Si vous souhaitez bel et bien matcher '''le mot''' dab, alors il faudra utiliser la regexp <code>/\bdab\b/</code>. On notera la présence de '\b' avant et après dab, qui signifient "break". Un break est soit un espace, soit le début ou la fin du message. C'est donc tout à fait ce que nous voulons.
 
Vous remarquerez cependant qu'on ne cherche pas '''le mot''' dab, mais la présence de d suivi de a suivi de b dans '''tout le message'''. Ainsi, le pattern matchera si votre message contient 'abracadabra'. Si vous souhaitez bel et bien matcher '''le mot''' dab, alors il faudra utiliser la regexp <code>/\bdab\b/</code>. On notera la présence de '\b' avant et après dab, qui signifient "break". Un break est soit un espace, soit le début ou la fin du message. C'est donc tout à fait ce que nous voulons.

Revision as of 13:22, 20 October 2018

Le commande Chatbot permet de faire réagir Gründer lors de la réception d'un message. Pour détecter un message, !chatbot dispose de 3 mode de détection (whole, find_once et find_multi) ainsi que 2 mécanismes de détection : comparaison de chaîne ou expression régulière. Lorsqu'un message correspondant aux critères précédent est détecté, il peut réagir de deux manières : en envoyant un message ou en exécutant une commande. Chaque couple action/réaction possède un nom que vous lui attribuerez. Il sert notamment à supprimer le couple si besoin.

Paramètres principaux

  • Ajouter un couple action/réaction: !chatbot name mode pattern whatToSay1 [whatToSay2 ...]
  • Supprimer un couple: !chatbot delete name

mode

Ce paramètre peut prendre 3 valeurs:

  • whole: le pattern doit matcher l'entièreté du message.
  • find_once: le pattern peut se trouver n'importe où dans le message. La réaction ne sera réalisée qu'une fois, même si le pattern est trouvé à plusieurs endroits.
  • find_multi: le pattern peut se trouver n'importe où dans le message. La réaction sera réalisée une fois par occurrence du pattern.

pattern

Ce paramètre peut être soit une chaîne de caractère normale, soit une expression régulière. Si il contient un slash au début et à la fin, il sera considéré comme un expression régulière. Sinon, il sera considéré comme un chaîne de caractère simple. Exemples :

Texte Interprétation
jaaj chaîne de caractères
/jaaj chaîne de caractères
/test/ regexp
/test/i regexp avec flags

Chaine de caractères

En gros, c'est un CTRL+F dans le message. Si ce texte est trouvé, il exécutera la réaction; et sinon, rien. A noter que la recherche se fait en ignorant la casse.

Regexp

La syntaxe de la regexp (la partie entre les slashs) peut se trouver sur la doc Java : java.util.regex.Pattern Le caractère (optionnel) se trouvant après le slash fermant la regexp est un flag. Il ajoute des informations supplémentaires sur comment la regexp doit être traitée. Gründer ne supporte (pour l'instant) qu'un seul flag: i. Lorsqu'il est présent, il indique que l'expression régulière est insensible à la casse. Pour tester vos regexp, je vous recommande l'excellent site Regex101.

Les réactions

Lorsque plusieurs réactions sont précisées, Gründer choisira au hasard parmi les réactions proposées. Une réaction peut être soit un message à envoyer, soit une commande à executer; si ce paramètre commence par ! ou §, c'est une commande, et sinon c'est un message.

Le token $@

Toute les occurrences de $@ seront remplacés par une mention de l'auteur du message qui a matché avec le pattern donné.

Le token $x, x étant un chiffre

Dans le cas où pattern est une expression régulière, il est possible d'utiliser les "captures" (ou groupes) dans l'expression régulière (c'est ce qui est entre parenthèses, cf la doc java). Ainsi, si la réaction contient un $ suivi d'un chiffre, il sera remplacé par le contenu du groupe identifié par ce chiffre ($1 sera remplacé par le premier groupe, $2 par le 2ème etc...). Il existe aussi le groupe 0 ($0), qui est toujours présent, qui contient l'entièreté du match.

Échappement des tokens

Il est bien évidemment possible d'échapper le symbole $ si vous ne voulez pas qu'il soit remplacé. Mettez simplement deux $ d'affilés. Exemple: $$1 ne sera pas remplacé par $groupe1 mais par $1.

Remarque sur les commandes

Ne vous faites pas avoir par les espaces. Si vous appelez !chatbot avec le '!' (et non le '§'), les paramètres sont séparé par des espaces. Ainsi, !chatbot casse find_once test !insulter Vincent n'insultera pas Vincent mais aura une chance sur 2 de lancer la commande !insulter ou d'envoyer le message Vincent lorsque test est détecté dans un message. Pour régler ce problème, il faut bien évidemment utiliser '§' de cette manière : §chatbot passe, find_once, test, !insulter Vincent.

La vraie question est alors, comment faire si la commande que je dois appeler requiert elle aussi l'utilisation de '§' ? Marine dirait: "euuuh, nique ta mère". Mais je ne suis pas Marine et il existe une solution: échapper '§' et ',' avec un autre '§'. Démonstration : §chatbot test, find_once, test, §§ma_commande paramètre 1 §, paramètre 2.

Exemples

Répondre bonjour

  • !chatbot bonjour whole bonjour Bonjour: lorsque quelqu'un envoie "Bonjour", Gründer répondra "Bonjour"

Bon, on est d'accord, c'est nul. Il pourrait au moins pas dire tout le temps la même chose :

  • !chatbot bonjour whole bonjour Bonjour Yo Salut Heyyyy

C'est mieux, mais on pourrait aller plus loin. Ca serait bien de dire le nom de la personne à qui ont dit Bonjour :

  • §chatbot bonjour, whole, bonjour, Bonjour, Yo $@, Salut $@, Heyyyy

Mieux. Mais si ont dit salut à la place de bonjour, mon truc est niqué. Je vous propose donc :

  • §chatbot bonjour, whole, /^(Bonjour|Yo|Salut|Hey+)(\s+Olivier)?(\s+Gr[uü]nder)?$/i, Bonjour, Yo $@, Salut $@, Heyyyy

Trouver quelqu'un

  • §chatbot trouver, whole, /^(?:Olivier|Gr[uü]nder)\s+trouve\s(.+)$/i, !trouver $1

Si je dis "Olivier trouve le respect", il lancera la commande !trouver avec comme premier argument le premier groupe capturé, soit "le respect". On remarquera la présence de '?:' dans les premières parenthèses. Cela indique à Java de ne pas considérer ce qu'il y a entre parenthèses comme un groupe. Si ces caractères n'étaient pas présents, alors le premier groupe ne serait pas "le respect" mais "Olivier". On aurait aussi pu utiliser $2 au lieu de $1...

Dabber

(Bon, j'avais vraiment pas d'exemple... désolé...)

  • !chatbot dab find_multi dab :dab:

Si je dis "allons dabber sur hater vive le dab", Gründer enverra deux messages avec l'émoji dab. Voilà, c'est de la grosse merde, faites en ce que vous voulez...

Vous remarquerez cependant qu'on ne cherche pas le mot dab, mais la présence de d suivi de a suivi de b dans tout le message. Ainsi, le pattern matchera si votre message contient 'abracadabra'. Si vous souhaitez bel et bien matcher le mot dab, alors il faudra utiliser la regexp /\bdab\b/. On notera la présence de '\b' avant et après dab, qui signifient "break". Un break est soit un espace, soit le début ou la fin du message. C'est donc tout à fait ce que nous voulons.