Pour illustrer par un exemple, un cas utile va vous être proposé: il s'agit de débannir une personne d'un canal en tapant /uban <nick> sur le canal. Vous pourrez l'inclure dans votre futur script, je vous en donne la permission!

L'originalité de cette nouvelle fonction est qu'elle travaille exactement à l'inverse de l'instruction /ban: en effet, l'auteur de mirc propose une instruction pour bannir une personne par son nick, mais ne propose rien pour la débannir de la même manière. Le moyen classique consiste à double-cliquer dans la fenêtre du canal pour obtenir la liste des bannis, ensuite à sélectionner le userhost de la personne, et enfin à cliquer le bouton "Unban".

Cet exemple est didactique, car il utilise à la fois les aliases à paramètres, les variables, les groupes et les raws.

Avant toute chose il est fondamental de comprendre le scénario de cette instruction.

  • La première chose à faire est d'obtenir le userhost de la personne à partir de son nick. Cela se fait grâce à l'instruction /who <nick>.


  • La seconde chose a faire est de stocker ce userhost dans une variable, puis de lister tous les bannis du canal. La commande pour obtenir la liste des bannis d'un canal est /mode #canal +b sans paramètres supplémentaires.


  • Ensuite, chaque userhost banni listé est comparé au contenu de la variable. Cette comparaison utilise l'opérateur iswm, qui vérifie si une chaîne de caractère contenant des jokers * correspond à une autre chaîne. Lorsque le banmask correspondant au userhost à débannir est trouvé, on enlève le ban.

    Tout d'abord, allez dans la section alias, et tapez:
    uban {
      if ( $$1 == $null ) return
      .enable #unban1 | set %chan # | unset %lban | who $1
    }
    
    On voit déjà qu'il y a deux variables: %chan pour le nom du canal, et %lban qui contiendra le userhost de la personne.

    On voit ensuite qu'on va activer un groupe appelé #unban1. De plus, l'alias ne fait rien si jamais on n'entre pas de paramètre à /uban. L'instruction effective que provoque l'appel de cet alias est un /who <nick>.

    Dans la section remote, voici ce qu'il faut rentrer:
    #unban1 off
    raw 352:*: set %lban $6 $+ ! $+ * $+ $3 $+ @ $+ $4 | halt
    raw 315:*: .disable #unban1 | .enable #unban2 | mode %chan +b | halt
    #unban1 end
    
    #unban2 off
    raw 367:*: {  if ( $3 iswm %lban ) { mode %chan -b $3 }
      halt
    }
    raw 368:*: .disable #unban2 | halt
    #unban2 end
    
    L'ensemble de ces instructions sont suffisantes pour émuler le /uban. Maintenant analysons:

    La seule requête au serveur que fait /uban est un /who <nick>. Si on reprend l'exemple précédent du serveur respublica.mine.nu, un /who rototo va donner cette réponse (Averell est mon nick):

    :respublica.mine.nu 352 Averell #teuf toto localhost respublica.mine.nu rototo H@ :0 C'est mon nom
    :respublica.mine.nu 315 Averell rototo :End of /WHO list.
    
    Sous mirc, la réponse est reformattée pour fournir:

    #teuf rototo H@ toto@localhost :0 C'est mon nom
    rototo End of /WHO list.
    
    Le numéro de code d'un /who est donc 352, tandis que le numéro de code d'un End of /WHO List est 315.

    Le userhost de la personne à débannir s'obtient en construisant une chaîne de caractères de la forme: <nick>!<user>@<host>, par la concaténation des paramètres $6, $3 et $4 dans cet ordre. Il est stocké dans la variable %lban.

    A noter que le paramètre $1 est en réalité le troisième paramètre envoyé par le serveur, les deux premiers étant successivement le nom du serveur et le code du message. Je rappelle que le paramètre $1 est toujours votre nick.

    Le halt écrit après a pour but d'empêcher mirc de renvoyer un écho du /who dans la fenêtre status.

    Lorsque l'événement End of /WHO List a lieu (raw 315) on désactive le groupe #unban1 et on active le groupe #unban2 qui est chargé d'intercepter d'autres événements de serveur. De plus, on envoie au serveur la requête /mode #chan +b.

    Voyons a quoi ressemble la réponse du serveur à une telle requête:
    :respublica.mine.nu 367 Averell #teuf *!*toto@localhost Averell- 959471490
    :respublica.mine.nu 368 Averell #teuf :End of channel ban list
    
    Cela signifie qu'il n'y a que rototo qui est banni, mais il peut éventuellement y en avoir d'autres, cela dépend généralement de l'humeur et de l'agressivité des opérateurs. On voit de plus que le code d'un userhost banni est 367, et que le code de End of channel ban list est 368.

    L'événement 367 est intercepté par la 1ere ligne de #unban2 dont le but est de vérifier si un banmask de la liste des bannis (paramètre $3) correspond au userhost de la personne à débannir (rototo). Si c'est le cas, on fait un /mode %chan -b $3 ce qui a pour effet de retirer le banmask de rototo.

    Enfin le raw 368 a pour effet de désactiver le groupe #unban2. L'instruction est terminée.

    Précédent: Les raws   Suivant: la liste des adresses internes   Début de page   Sommaire