IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Notions intermédiaires en mIRC scripting


précédentsommairesuivant

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 :

 
Sélectionnez
/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é :

 
Sélectionnez
/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

 
Sélectionnez
/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 :

 
Sélectionnez
/salut /say Salut $$1 ! Bienvenue sur #Developpez.com !

On peut aussi mettre le canal comme paramètre :

 
Sélectionnez
/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 :

 
Sélectionnez
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
$chan : Canal du déclenchement

PART

part d'un canal

#

$nick : Pseudo déclencheur
$chan : Canal du déclenchement

TEXT

parle

Toutes les fenêtres

$nick : Pseudo déclencheur
$chan : Canal du déclenchement

QUIT

quitte IRC

ne nécessite pas le paramètre fenêtre

$nick : Pseudo déclencheur
$1- : Message de quit

OP

se fait opper (+o)

#

$nick : Pseudo de la personne qui a oppé
$chan : Canal du déclenchement
$opnick : Pseudo de la personne oppée

DEOP

se fait déopper (-o)

#

$nick : Pseudo de la personne qui a déoppé
$chan : Canal du déclenchement
$opnick : Pseudo de la personne déoppée

VOICE

se fait voicer (+v)

#

$nick : Pseudo de la personne qui a voicé
$chan : Canal du déclenchement
$vnick : Pseudo de la personne voicée

DEVOICE

se fait dévoicer (-v)

#

$nick : Pseudo de la personne qui a dévoicé
$chan : Canal du déclenchement
$vnick : Pseudo de la personne dévoicée

NICK

change de pseudo

ne nécessite pas le paramètre fenêtre

$nick : Ancien pseudo
$newnick : Nouveau pseudo

BAN

se fait bannir (+b)

#

$nick : Pseudo de la personne qui a banni
$chan : Canal du déclenchement
$bnick : Pseudo de la personne bannie
$banmask : Le masque banni (pseudo!ident@host)

UNBAN

se fait débannir (-b)

#

$nick : Pseudo de la personne qui a débanni
$chan : Canal du déclenchement
$bnick : Pseudo de la personne débannie (si le banmask contient un pseudo)

KICK

se fait kicker

#

$nick : Pseudo de la personne qui a kické
$chan : Canal du déclenchement
$knick : Pseudo de la personne kickée

ACTION

prononce un /me

Toutes les fenêtres

$nick : Pseudo déclencheur
$chan : Canal du déclenchement

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 :

 
Sélectionnez
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 :

 
Sélectionnez
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 :

 
Sélectionnez
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 :

 
Sélectionnez
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 :

 
Sélectionnez
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 :

 
Sélectionnez
#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 :

 
Sélectionnez
/enable #Nom_du_groupe

Pour le désactiver :

 
Sélectionnez
/disable #Nom_du_groupe

Adaptons à notre cas ! Voilà le code :

 
Sélectionnez
#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 !

Image non disponible

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.

 
Sélectionnez
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 :

 
Sélectionnez
.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 :

 
Sélectionnez
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) :

 
Sélectionnez
Auto-greeting
.Activer:/enable #greetings
.-
.Désactiver:/disable #greetings

.- permet d'ajouter un séparateur entre les champs, pratique !
Aperçu :

Image non disponible

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 :

 
Sélectionnez
$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é :

 
Sélectionnez
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 :

Image non disponible

II-D. Variables

Une variable s'écrit de la façon suivante :

 
Sélectionnez
%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) :

 
Sélectionnez
/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 :

 
Sélectionnez
/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 :

 
Sélectionnez
/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 :

 
Sélectionnez
/var %nom_de_la_variable = valeur

II-D-3. Opérations sur les variables

La fonction $var
 
Sélectionnez
$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 :

 
Sélectionnez
%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 :

 
Sélectionnez
/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 :

 
Sélectionnez
/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 (^)…

 
Sélectionnez
%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()

 
Sélectionnez
//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 :

 
Sélectionnez
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 :

 
Sélectionnez
<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 :

 
Sélectionnez
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 :

 
Sélectionnez
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 :

 
Sélectionnez
/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.

 
Sélectionnez
/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.


précédentsommairesuivant

Copyright © 2006 Soufiane Hassou. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.