Cours de scripting mIRC n°4 : les dialogs
Introduction : quelques notions
Les dialogs permettent de donner un côté plus interactif à vos scripts. Ce sont tout simplement des boîtes de dialogue qui comme leur
nom l'indique permettent d'établir un dialogue entre l'Homme et la machine, plus précisément entre le t'Chatteur et le script mIRC. Tout
bon script comporte des dialogs.
Voici un exemple de dialog, celui-ci est un lecteur Mp3 :
Dans ce cours, nous verrons des exemples de dialog plus simples bien évidemment.
La partie intermédiaire et la partie experte ont été mixées pour alléger la longueur du cours, cette fois-ci, particulièrement grande.
En effet, les dialogs ne sont pas une mince affaire. Nous vous encourageons à bien étudier ce cours et à
vous en servir pour créer vos propres dialogs par la suite. Bon courage !
NB : les exemples qui suivent marchent à 100% avec la dernière version de mIRC : la 6.03, toute version postérieure risque
d'entraîner des incompatibilités.
Débutant
Le squelette
Dans un premier temps, il est utile de voir comment créer le squelette d'un dialog. C'est pourquoi nous
aborderons quelques notions de base utiles pour vos premiers dialogs.
Voici l'exemple de squelette de dialog à copier/coller dans un remote vide :
alias Répondeur dialog -m Répondeur Répondeur
dialog Répondeur {
title Répondeur
size -1 -1 200 60
option dbu
box "",1,5 0 190 47
check "Répondeur activé",2,10 7 60 10
text "Phrase du répondeur :",3,10 22 80 10
edit "",4,10 32 180 10,autohs
button "Fermer",5,80 49 40 10,flat,ok
}
Pour ouvrir le dialog, tapez /Répondeur.
Pour déclarer un dialog, il suffit de taper "dialog" suivi du nom du dialog, ici "Répondeur".
Ensuite, il est bon de préciser le titre du dialog. Le titre apparaîtra en haut du
dialog. Il faut taper "title" suivi du titre, ici le titre est "Répondeur".
Il faut aussi préciser le positionnement et la taille du dialog. Ainsi, ce qui suit après "title" mérite d'être explicité.
Les deux premiers nombres sont la position (en pixels) du coin supérieur gauche du dialog. Le premier nombre
est le nombre de pixels le séparant de la bordure gauche de l'écran. Le deuxième nombre est le nombre de pixels le séparant de la bordure
haute de l'écran. Le troisième nombre correspond à la longueur (en pixels) du dialog et le quatrième correspond
à la hauteur (ou largeur) du dialog. Ici, on remarque que les deux premiers nombres sont mis à "-1". Ceci signifie
que le dialog est centré. Il vous est conseillé de toujours mettre ces deux nombres à "-1" pour plus de facilité.
"option dbu" permet d'avoir le même rapport de taille entre l'écran et le dialog. C'est une option à mettre tout
le temps aussi.
Ensuite, nous allons voir 5 types d'options qu'il est possible de rajouter sur un dialog :
_box : comme son nom l'indique, il s'agit d'une boîte qui sert de cadre au dialog.
Vous pouvez y inclure un titre entre les "" (ici, il n'y en a pas). Le nombre "1" qui suit est le numéro d'identification de l'option. Les 4 nombres
suivants sont des nombres de positionnement : les deux premiers positionnent l'option vis à vis du bord du dialog.
Les deux derniers précisent la taille de l'option.
_check : il s'agit d'une case à cochée ou non. Vous pouvez y inclure un titre, ici c'est "Répondeur activé". Le nombre
suivant est le numéro d'identification de l'option. Il s'agit du numéro "2". On remarque que les numéros d'identification se suivent (la plupart
du temps) et qu'ils ne se répètent pas. En effet, ils servent à identifier l'option, très utile pour associer les options à des commandes comme
nous le verrons plus tard. Les nombres suivants sont ceux de positionnement.
_text : sert à inclure du texte dans le dialog, toujours entre "". Ici le numéro d'identification est "3".
_edit : il s'agit d'une case dans laquelle on pourra rentrer du texte. Notamment le texte de la phrase du répondeur.
On remarque, après les nombres de positionnement, le mot autohs. C'est une option de l'option edit,
elle permet de ne pas limiter la taille du texte rentré dans la boîte d'édition à la taille même de celle-ci. Vous pouvez essayer de rentrer
du texte en retirant cette option pour mieux comprendre à quoi elle sert.
_button : il s'agit simplement d'un bouton contenant le texte "Fermer". L'option flat permet
d'applatir le bouton. Encore une fois, essayez sans cette option pour voir la différence. L'option ok considère le bouton
comme un bouton de type "ok". Si vous cliquez dessus, il fermera le dialog.
Intermédiaire/Expert
La partie interne
Dans cette partie, nous verrons comment lier les options du dialog à des commandes spécifiques.
Il est évident qu'il faudra retenir si la case "Répondeur activé" a été cochée ou pas ainsi que le texte se trouvant dans la boîte d'édition.
Voici le texte à copier/coller à la suite du précédent :
;Partie 1
on *:dialog:répondeur:sclick:2:{
if $did(2).state == 1 { set %Répondeur.Activé Oui }
else { set %Répondeur.Activé Non }
}
;Partie 2
on *:dialog:répondeur:edit:4:{
set %Répondeur.Phrase $did(4)
}
;Partie 3
on *:dialog:répondeur:init:*:{
if %Répondeur.Activé == Oui { did -c répondeur 2 }
if %Répondeur.Phrase { did -a répondeur 4 %Répondeur.Phrase }
}
La première partie se rapporte à l'activation ou non du répondeur. Dans la première ligne, on a :
_ le on pour détecter l'évèvement.
_le * pour spécifier le niveau, on laissera toujours cette option à "*" de manière générale (comme pour les on *:text:*:#:{ ... } par exemple).
_le mot dialog qui spécifie qu'on veut détecter les évènements sur un dialog.
_répondeur est le nom du dialog en question
_sclick spécifie qu'on veut détecter les click de souris en particulier
_2 est le numéro d'identification de l'option qu'on veut détecter. Ici le "2" correspond à la ligne "check "Répondeur activé",2,10 7 60 10"
qu'on a vu plus haut.
Ensuite, grâce à $did(2).state, on vérifie l'état de l'option 2. Si la case est cochée, on nous retourne "1", sinon "0". Ainsi, on met la variable
%Répondeur.Activé à "Oui" si c'est 1, à "Non" si c'est autre chose ("0" en général).
La variable %Répondeur.Activé nous permet de garder en mémoire si on veut que le répondeur soit actif ou non.
La deuxième partie détecte quand quelque chose est tapé dans la boîte d'édition de numéro d'identification "4" et le stock dans la variable
%Répondeur.Phrase.
Pour détecter les changements dans les boîtes d'édition, il faut préciser le mot clef edit
dans on *:dialog:nom du dialog:edit:numéro d'idenfitication:{ ... }
Dans la troisième et dernière partie, on initialise le dialog. On vérifie d'abord si la variable
%Répondeur.Activé vaut "Oui". Si c'est le cas, on coche la case 2 via la commande
/did -c répondeur 2. Puis, deuxième condition de l'initialisation à vérifier : la variable
%Répondeur.Phrase ne doit pas être nulle. Si c'est le cas, on l'affiche dans la boîte d'édition
(de numéro d'identification 2) via la commande /did -a répondeur 2 %Répondeur.Phrase.
Il faut préciser le mot clef init dans on *:dialog:nom du dialog:init:numéro d'idenfitication:{ ... }
pour montrer que l'on s'occupe des commandes à exécuter à l'ouverture du dialog du nom de "répondeur".
La partie externe
Nous entrons dans une partie relativement facile, le plus dur a été fait. Il s'agit d'afficher le message du répondeur enregistrer dans la
variable %Répondeur.Phrase à chaque ouverture de message privé mais uniquement si la variable
%Répondeur.Activé a pour valeur "Oui" et si la variable %Répondeur.Phrase
n'est pas nulle. Cela donne :
on *:open:?:{
if %Répondeur.Activé == Oui && %Répondeur.Phrase {
msg $nick Répondeur : $eval(%Répondeur.Phrase,2)
}
}
Le $eval(%Répondeur.Phrase,2) permet d'évaluer 2 fois le texte dans la variable
%Répondeur.Phrase. Ainsi vous pouvez mettre $nick dans la phrase de réponse,
elle sera automatiquement évaluée et remplacée par le pseudo de la personne arrivant en privé.
Solution de l'exercice du cours n°3 : difficulté débutant
Rappel de l'énoncé :
A l'aide du cours de niveau débutant, modifiez le script pour écrire avec des décorations autour de votre écriture.
Par exemple, on voudra voir ceci :
<NiCk2> @Bonjour @
Une solution :
on *:input:#:{
if $left($1-,1) != / {
msg $chan 12@ 4,8 $+ $1- $+ 12,0 @
halt def
}
}
Vous pouvez faire vos propres arrangements pour obtenir l'écriture qui vous plaît. Le $+ sert à éliminer les espaces entre deux mots en scripting mIRC.
Exercice du cours n°4 : difficulté expert
Le niveau est expert car nous n'avons pas vu les fichiers .ini : modifier ce qui a été fait dans ce cours et, à l'aide d'un fichier .ini et d'un fichier .txt, éviter toute utilisation de
variables globales (c'est à dire des variables %Répondeur.Activé et %Répondeur.Phrase).
Conclusion
Les dialogs sont assez difficiles à cerner, surtout pour les novices, mais une fois maîtrisés,
ils permettent à vos scripts de s'affirmer.
En effet, l'exemple du lecteur Mp3 (voir photo plus haut), entièrement réalisé en scripting mIRC, montre qu'il n'y a pas de limites quant
à l'utilisation de dialogs.
En attendant le prochain cours, bon courage à tous et à toutes pour vos dialogs.