II. Premiers pas▲
On va traiter le même exemple et tout en l'améliorant on abordera les différentes notions. J'ai choisi comme exemple l'autogreetings, en gros, on va concevoir un script qui salue toute personne entrant dans un canal.
II-A. Aliases▲
Un alias est un raccourci d'une ou plusieurs lignes de code.
Exemple d'un alias sur une seule ligne :
/salut /say salut toi ! Bienvenue sur #Developpez.com
/say affiche le message passé dans la fenêtre active.
Il est préférable d'utiliser /msg qui permet de définir la fenêtre où afficher le message. ($chan, $active, #chan…)
Pour un alias sur plusieurs lignes, il est préférable d'utiliser les accolades (au lieu de pipes) pour plus de clarté :
/salut {
/say salut toi!
/say Bienvenue sur #Developpez.com
}
Pour l'instant, nous n'avons fait qu'un alias qui nous permet d'afficher manuellement la phrase de salutations générale.
Maintenant, nous allons essayer de personnaliser la phrase pour un pseudo donné ! Rien de plus simple, on prend trois pseudos : AjJi, mavina et swoog
/salut1 /msg #Developpez.com Salut AjJi ! Bienvenue sur #Developpez.com !
/salut2 /msg #Developpez.com Salut mavina ! Bienvenue sur #Developpez.com !
/salut3 /msg #Developpez.com Salut swoog ! Bienvenue sur #Developpez.com !
/salut1 pour saluer AjJi, /salut2 pour mavina et /salut3 pour swoog et on laisse /salut pour le reste.
Et si Jack rentre dans le canal, on fait comment ?
Une solution serait de le saluer comme les autres, avec un « salut toi! », sauf que nous, on veut un « salut Jack! ».
C'est simple, il suffit d'utiliser un alias paramétré, un alias qui prend des arguments.
Notre alias devient ainsi :
/salut /say Salut $$1 ! Bienvenue sur #Developpez.com !
On peut aussi mettre le canal comme paramètre :
/salut /say Salut $$1 ! Bienvenue sur $$2 !
L'utilisation du $$ à la place de $ est obligatoire dans notre cas (voir la différence entre $1 et $$1).
II-B. Remotes▲
Comme ça a été dit plus haut, les remotes est la notion la plus importante du mIRC scripting, au point que tout peut être défini dans les remotes (Aliases, popups…).
II-B-1. Gestion des évènements▲
Évènements déclenchés par une personne▲
Les remotes offrent de grandes possibilités, entre autres, celle de la gestion des évènements. Un évènement peut être une personne qui rentre dans un canal (JOIN), qui change de pseudo (NICK) ou même qui prononce une phrase (TEXT).
Il faut noter qu'il existe d'autres types d'évènements (du côté serveur en l'occurrence) que nous n'allons pas traiter dans ce cours.
Pour intercepter l'évènement, ainsi exécuter votre script, on utilise la syntaxe suivante :
ON Niveau:évènement:Fenetre:Bloc de commandes
- Niveau est le niveau de l'utilisateur concerné par cette action, on y reviendra plus tard.
- évènement est l'évènement (ou l'action) qui vient de se produire.
- Fenêtre correspond à l'endroit où l'évènement s'est produit (canal(#), privé(?), fenêtre dcc chat(=)…).
- Bloc de commandes est la suite des instructions à exécuter en cas de déclenchement de l'évènement.
Après le déclenchement d'un évènement, mIRC positionne un certain nombre de paramètres selon le type de l'évènement, voici la liste des évènements les plus utilisés :
Évènement |
Se déclenche lorsque une personne |
Fenêtres possibles |
Paramètres positionnés |
---|---|---|---|
JOIN |
joint un canal |
# |
$nick : Pseudo déclencheur |
PART |
part d'un canal |
# |
$nick : Pseudo déclencheur |
TEXT |
parle |
Toutes les fenêtres |
$nick : Pseudo déclencheur |
QUIT |
quitte IRC |
ne nécessite pas le paramètre fenêtre |
$nick : Pseudo déclencheur |
OP |
se fait opper (+o) |
# |
$nick : Pseudo de la personne qui a oppé |
DEOP |
se fait déopper (-o) |
# |
$nick : Pseudo de la personne qui a déoppé |
VOICE |
se fait voicer (+v) |
# |
$nick : Pseudo de la personne qui a voicé |
DEVOICE |
se fait dévoicer (-v) |
# |
$nick : Pseudo de la personne qui a dévoicé |
NICK |
change de pseudo |
ne nécessite pas le paramètre fenêtre |
$nick : Ancien pseudo |
BAN |
se fait bannir (+b) |
# |
$nick : Pseudo de la personne qui a banni |
UNBAN |
se fait débannir (-b) |
# |
$nick : Pseudo de la personne qui a débanni |
KICK |
se fait kicker |
# |
$nick : Pseudo de la personne qui a kické |
ACTION |
prononce un /me |
Toutes les fenêtres |
$nick : Pseudo déclencheur |
INPUT |
se déclenche lorsque vous écrivez un message. |
Toutes les fenêtres |
$1, $2, $1-… |
Revenons à nos moutons, je rappelle que notre but est de concevoir l'autogreetings, donc l'évènement qui nous intéresse dans ce cas est le JOIN :
ON *:JOIN:#:/msg $chan Salut $nick ! Bienvenue sur $chan !
Évènements spéciaux▲
L'évènement START qui se déclenche lors de l'ouverture de mIRC, cela peut être utile pour l'affichage d'un message de bienvenue sur mIRC.
Exemple :
ON *:START:{
/echo Bienvenue sur mon mIRC
}
L'évènement CONNECT qui se déclenche lors de la connexion à un serveur IRC, efficace pour gérer ses propres autojoins (joindre automatiquement certains canaux lors de la connexion).
Exemple :
ON *:CONNECT:{
/join #developpez.com
/join #informatique
/join #mIRC
}
Il en existe beaucoup du même type, mais on va se limiter à ces deux évènements.
II-B-2. Instructions de contrôle▲
Comme tout autre langage, mIRC scripting dispose de ses propres structures de contrôle, if (associée à elsif et else) et while (qu'on verra plus tard).
Syntaxe de l'instruction if :
if (Exp1) { Premier bloc de commandes }
elseif (Exp2) { Deuxième bloc de commandes }
else { Troisième bloc de commandes }
On traduit par :
« Si Exp1 est vrai alors on exécute le premier bloc de commandes sinon si Exp2 est vrai alors on exécute le deuxième bloc de commandes, sinon on exécute le troisième. »
L'expression booléenne peut contenir des opérateurs (v1 opérateur v2) :
Opérateur |
Signification |
---|---|
== |
égal à |
=== |
égal à (sensible à la casse) |
!= |
différent de |
< |
inférieur à |
> |
supérieur à |
<= |
inférieur ou égal à |
>= |
supérieur ou égal à |
// |
v2 est multiple de v1 |
\\ |
v2 n'est pas multiple de v1 |
&& |
ET logique |
|| |
OU logique |
& |
comparaison bit à bit |
isin |
v1 est dans v2 |
iswm |
v1 correspond à v2 |
isnum |
v1 est un nombre dans v2 (v2 étant un intervalle optionnel) |
isletter |
v1 est une lettre dans v2 (optionnel) |
ison |
pseudo v1 est dans canal v2 |
isop |
pseudo v1 est op dans canal v2 |
isvoice |
pseudo v1 est voice dans canal v2 |
Pour notre programme, on va éviter de nous autosaluer quand on rentre dans un canal, puisque dans ce cas nous sommes la personne qui a déclenché l'évènement, pour cela, on doit comparer le pseudo de la personne qui vient d'entrer avec le nôtre.
Sachant que mIRC met notre pseudo courant dans la variable $me et que $nick est le pseudo de la personne déclencheuse de l'évènement, on fait :
ON *:JOIN:#:{
if ( $nick != $me ) {
/msg $chan Salut $nick ! Bienvenue sur $chan !
}
}
II-B-3. Les groupes▲
Le fait de définir un groupe est de rendre une portion du code activable/désactivable sur demande ! Simple non ? Syntaxe de définition d'un groupe :
#Nom_du_groupe état_défaut
votre code ici qui peut tenir sur plusieurs lignes
#Nom_du_groupe end
état_défaut est l'état par défaut du groupe il peut être soit on soit off.
Pour activer le groupe :
/enable #Nom_du_groupe
Pour le désactiver :
/disable #Nom_du_groupe
Adaptons à notre cas ! Voilà le code :
#greetings off
if ( $nick != $me ) {
/msg $chan Salut $nick ! Bienvenue sur $chan !
}
}
#greetings end
Dès maintenant, vous pouvez activer/désactiver l'autogreetings quand vous voulez avec des simples /enable #greetings et /disable #greetings.
II-C. Popups▲
II-C-1. Popups statiques▲
Comme dit dans la définition au-dessus, les popups sont les menus contextuels sous mIRC, sur chaque « type » de fenêtre on accède à un menu différent.
On distingue cinq fenêtres :
- la fenêtre status (Status) ;
- les fenêtres canaux (Channel) ;
- les fenêtres privées (dcc chat inclus) (Query) ;
- la fenêtre des listes des pseudos (à droite du canal) (Nicklist) ;
- la fenêtre « principale » (Menubar).
Pour modifier ces menus, script editor (alt+r) > onglet popups > menu view et hop !
Avant de continuer, j'aimerais attirer votre attention sur un aspect de variables qu'on n'a toujours pas abordé, je profite de l'occasion pour prendre comme exemple une portion du code que vous voyez sur l'image.
Join
.#mIRC:/join #mirc
.#irchelp:/join #irchelp
.join ?:/join #$$?="Enter a channel to join:"
Cette syntaxe est un peu nouvelle, je l'admets, mais oublions le « . » et « : » pour l'instant et regardons de plus prêt cette ligne :
.join ?:/join #$$?="Enter a channel to join:"
Ce code permet tout simplement de joindre le canal de votre choix, et ce, dans une boîte de dialogue avec un champ texte pour écrire le nom du canal.
Pas la peine de mettre le # vu qu'il déjà mentionné. Notez que si vous mettez le # ça ne posera pas de problème.
Si vous ne voulez pas mettre un # automatiquement, il suffit de l'enlever de l'expression.
Ce genre de variables vous sera très utile surtout pour la conception des popups.
Pour définir un champ dans un menu :
Nom_du_champ:commande
Sans oublier qu'il faut ajouter un certain nombre de points au début de la ligne, selon le menu dans lequel est situé le champ.
Pour un champ qui est dans le menu principal, pas de points, pour un champ dans un sous-menu un point, pour un sous sous-menu deux points, ainsi de suite. Comme exemple, on va essayer d'intégrer la possibilité d'activer/désactiver notre autogreeting depuis le menu principal de mIRC. Dans view -> menubar, on ajoute cela à la fin du code (vous pouvez supprimer le code, faites comme vous voulez) :
Auto-greeting
.Activer:/enable #greetings
.-
.Désactiver:/disable #greetings
.- permet d'ajouter un séparateur entre les champs, pratique !
Aperçu :
II-C-2. Popups dynamiques▲
Vous avez surement remarqué qu'on pouvait appuyer sur désactiver (ou activer) même si le groupe est déjà désactivé (ou activé).
L'utilisation des popups dynamiques va nous permettre d'activer/désactiver l'appui sur un champ quand on veut.
On va tester si le groupe est activé, si oui, on désactive l'appui sur « Activer », sinon on désactive l'appui sur « Désactiver ».
La fonction $group(#nom_du_group) vaut on si le groupe est activé et bien sûr off s'il est désactivé.
Pour cela, on utilisera la fonction $iif :
$iif(expression,valeur si vrai,valeur si faux)
Pour activer/désactiver les champs, on aura besoin de la fonction $style(N) qui définit le style du champ.
- N = 1 champ coché.
- N = 2 Appui sur le champ désactivé.
- N = 3 les deux.
Voici le code modifié :
Auto-greeting ( $group(#greetings) )
.$iif($group(#greetings) == on,$style(3)) Activer:/enable #greetings
.-
.$iif($group(#greetings) == off,$style(3)) Désactiver:/disable #greetings
Ce qui donne :
II-D. Variables▲
Une variable s'écrit de la façon suivante :
%Nom_de_la_variable
La valeur d'une variable peut être utilisée dans tous vos scripts (Variable globale) comme elle peut n'être exploitable que dans un seul script (Variable locale).
II-D-1. Variables globales▲
Une variable globale peut être utilisée dans tous vos scripts et ne sera pas supprimée tant que vous ne l'aurez pas fait.
Pour définir une variable globale (en l'occurrence, lui affecter une valeur) :
/set [-snzueN] %nom_de_la_variable valeur
Expliquons les options.
- -uN: efface la variable après N secondes.
- -z: décrémente la variable jusqu'à ce qu'elle soit à 0 puis l'efface.
- -s: affiche un message lors de l'affection.
- -n: traite la valeur comme un texte normal.
- -e : efface la variable lorsque mIRC est fermé.
Pour effacer une variable, il suffit de faire un :
/unset -s %nom_de_la_variable
Il est possible d'utiliser des caractères génériques dans votre unset, (*) remplace zéro, un ou plusieurs caractères, tandis que (?) remplace un caractère quelconque.
Pour effacer toutes les variables définies :
/unsetall
Bien sûr, les variables définies sont consultables dans l'onglet « variables » du ScriptEditor.
II-D-2. Variables locales▲
Une variable locale est une variable qui ne peut être utilisée que dans le script dans lequel elle a été définie, donc elle s'efface automatiquement après la fin du script en question.
Pour définir une variable locale :
/var %nom_de_la_variable = valeur
II-D-3. Opérations sur les variables▲
La fonction $var▲
$var(%nom_de_la_variable,N)
Retourne le nom de la Nième variable correspondant à notre « requête » en cherchant dans les variables locales ET globales.
Exemple
Supposons que nous ayons défini les variables suivantes :
%a 22
%b dvp
%c 2006
? AjJi
%cx oui.
$var(%a,1) retourne %a
$var(%c,1) retourne %c
$var(%c,2) ne retourne rien
alors que $var(%c*,2) retourne ? et $var(%c*,3) retourne %cx
En effet, %c* correspond à %c ? %cx ce qui explique le retour du $var.
si N=0, cela retourne le nombre de variables correspondantes, $var(%c*,0) retourne 3.
Incrémenter, décrémenter▲
Pour incrémenter une variable avec une certaine valeur :
/inc [-cszeuN] %Nom_de_la_variable valeur
- -uN: incrémente la variable par la valeur une seule fois et l'efface après N secondes.
- -z: incrémente la variable par la valeur une seule fois et la décrémente jusqu'à ce qu'elle soit à 0 puis l'efface.
- -c: incrémente la variable par la valeur puis l'incrémente par 1 une fois par seconde.
- -s: affiche un message lors de l'incrémentation.
- -e : incrémente la variable par la valeur une seule fois et l'efface lors de la fermeture de mIRC.
Pour décrémenter une variable avec une certaine valeur :
/dec [-cszeuN] %Nom_de_la_variable valeur
- -uN: décrémente la variable par la valeur une seule fois et l'efface après N secondes.
- -z: décrémente la variable par la valeur une seule fois et la décrémente jusqu'à ce qu'elle soit à 0 puis l'efface.
- -c: décrémente la variable par la valeur puis l'incrémente par 1 une fois par seconde.
- -s: affiche un message lors de la décrémentation.
- -e : décrémente la variable par la valeur une seule fois et l'efface lors de la fermeture de mIRC.
Opérations arithmétiques▲
Sachez que vous pouvez faire autant d'opérations sur les variables que vous voulez, affectation (=), addition (+), soustraction (-), multiplication (*), division (/), reste de division (%), puissance (^)…
%nombre = 1
%a = %nombre + 3
%b = %a / 5
%c = %b ^ $1
Pour faire des calculs un peu plus compliqués mieux vaut utiliser la fonction $calc()
//echo -a $calc(6.11 * ((%a / 10) - %nombre) ^ %c
II-E. Niveaux d'accès▲
Les niveaux d'accès d'un utilisateur sont en relation avec les évènements.
Rappelez-vous la syntaxe pour l'interception d'un évènement :
ON Niveau:évènement:Fenetre:Bloc de commandes
Un utilisateur ne pourra déclencher un évènement que s'il a le niveau requis pour.
Les niveaux des utilisateurs sont définis dans l'onglet « Users » de la façon suivante :
<niveau1,niveau2,....>:<adresse de l'usager>
Le premier niveau est un niveau général, et les autres sont des niveaux spécifiques, en d'autres mots, un utilisateur fera réagir tous les évènements qui nécessitent un niveau inférieur ou égal à son niveau général et égal à ses niveaux spécifiques.
Exemple :
3,5,11:AjJi!mirc@user.dvp.com
L'utilisateur aura accès aux évènements dont le niveau est soit 2, 3, 5, 11 (1 étant le niveau par défaut pour tous les utilisateurs et donc les évènements de niveau 1 seront accessibles à tous les utilisateurs). Il existe un autre type de niveaux à part les niveaux numériques, les niveaux nommés.
Exemple :
5,friend:*!*@*.dvp.com
(Pour les (*), référez-vous au chapitre sur les caractères génériques).
Pour obliger mIRC à traiter le premier niveau comme un niveau spécifique, il suffit d'ajouter un signe = avant la liste des niveaux.
Vous pouvez ajouter ces accès manuellement comme vous pouvez les ajouter via des commandes, il y en a plusieurs, parmi elles :
/guser [-a] niveaux pseudo [type] [info]
Donne les accès mentionnés à l'utilisateur, si l'option -a est spécifié, l'utilisateur sera créé dans la liste s'il n'existe pas.
/ruser [niveaux] pseudo|addresse [type]
Si les niveaux ne sont pas mentionnés, la commande supprime l'utilisateur, sinon elle supprime les niveaux mentionnés de la liste des niveaux de l'utilisateur, si tous les niveaux sont supprimés l'utilisateur le sera aussi.
Bravo ! Vous venez de finir la partie la plus importante du scripting IRC.
Toutes les bases ne sont pas mentionnées ci-dessus bien sûr, mais une très grande partie y est !
Vous n'êtes pas obligé de lire les chapitres suivants successivement, bonne lecture.