Vos identifiants
Bienvenue
Voir tous les scripts
Pour mirc 6.1 et moins
Pour mirc 6.2
Pour mirc 6.3
Pour mirc 7.1
Top 10
Vous aimez ou détestez
Soumettre un script
Foire aux questions
Forum de discussion



Les bases du Scripting
Le virus "irc.worm.gen"
Le mIRC D'Or
Snippets
ScreenShots
Le Défi du moment
Tag-moi-ça
Le Pire de l'IRC
L'IRC pour les nuls
Configurer UnrealIRCD
Configurer votre box
Attention à l'arnaque!
Usenet et les News
Arrêter de fumer
Un peu d'orthographe
Unreal/Anope Admin
mIRC Script Server
Proxy Web Chat
Magneto for Unreal
Super Poupées
Tour de cartes
L'Equipe
Partenariat
Administration

CodesWall: Déposer et coloriser des codes sources
Web Of Trust
www.chat.exolia.net (Francophone)
fantasya.org (Francophone)
hiersay (francophone)
JhdScript

                                            

Utilisation des timers

Article soumis par Averell le 28/11/02

Je viens de m'apercevoir que j'ai omis un aspect important qui est géré par la programmation mirc: il s'agit des timers.

Un timer permet d'effectuer une opération indéfiniment avec un intervalle de temps régulier, ou d'effectuer une opération "un peu plus tard", s'il s'avère que l'opération peut ne pas avoir le résultat escompté au moment ou on l'invoque.

Syntaxe de la fonction

La syntaxe d'un timer est somme toute simple:


/timer<Nom du timer> [- options] <Répétitions> <Intervalle de temps> /commande

  • Le nom du timer ne doit pas contenir d'espaces ni certains caractères interdits (je ne sais même pas lesquels) mais on peut utiliser les mêmes caractères que ceux qui décrivent un nick (Exemple: |-^HaX0R^-| , mais la lettre A peut tout aussi bien faire l'affaire!). Le nom doit être collé au mot "timer".
  • Les options, je n'en connais qu'une (mais il y en a plusieurs autres): c'est l'option -o qui permet de rendre le timer indépendant du fait que vous êtes connecté ou non à un serveur irc. En effet, par défaut le timer s'arrête lorsque vous vous déconnectez.
  • Répétitions est un nombre entier positif, mais pouvant être nul, qui constitue le nombre de fois que l'on veut répéter la /commande. Lorsque le nombre est nul, la commande est répétée indéfiniment.
  • L'intervalle de temps est un nombre entier positif (non nul), qui constitue le délai du timer exprimé en secondes.
  • /commande est la commande à exécuter par le timer. Ce peut être une commande irc simple, ou un alias que vous aurez défini.
  • Un exemple simpliste de l'utilisation des timers

    Voici un exemple assez simple: il s'agit d'un timer d'away, typiquement affectionné par le lamer désireux de faire savoir à tout le monde, et le plus souvent possible, qu'il est parti aux cabinets.

    /timercaca 0 120 /ame est away (parti aux cabinets) mais je prends vos messages en PV

    Cette simple petite ligne écrit un message toutes les 2 minutes sur tous les canaux que vous fréquentez sur l'heure.

    Pour arrêter le massacre, il suffit de taper /timercaca off .

    Lister et stopper les timers

    Le simple fait de taper /timer ou /timer? vous affiche la liste de tous les timers actifs. Enfin, pour arrêter tous les timers, taper /timer? off.

    Domaine d'utilisation des timers

    On peut tirer parti des timers de différentes manières: à vous de voir! Un exemple un peu plus intelligent que le précédent est l'utilisation d'un timer pour retarder une opération ou un test: par exemple, vous pouvez envoyer une commande au serveur, et effectuer un traitement en fonction de la réponse. Sachant que la réponse d'un serveur n'est jamais instantanée, vous pouvez prévoir un délai de 2 secondes entre le moment ou la commande est envoyée et le moment ou cette commande est traitée. Ceci n'est pas conseillé: il existe toujours un moyen de s'en tirer proprement avec un raw de serveur; en effet, suivant le lag, le temps de réponse du serveur peut dépasser celui que vous avez prévu.

    Autre cas: on peut détecter assez facilement les floodeurs à l'aide d'un timer. Chaque fois qu'une personne prononce des mots sur votre canal, il suffit d'incrémenter une variable (associée au nick), puis d'appeler un processus par timer (dont le nom est associé au nick aussi) remettant à zéro la variable au bout de 3 secondes. Si la variable dépasse une valeur critique, mettons 6, cela signifie qu'il a balancé au moins 6 lignes sur le canal en moins de 3 secondes.

    Un exemple bien plus compliqué: la détection de Net splits

    Voici un exemple un peu plus compliqué, mais utile celui-là, qui consiste à détecter les Net splits et à les afficher proprement:

    (Rappel: un Net split survient quand deux serveurs linkés se déconnectent: cela se traduit alors par une rafale de messages de déconnexion qui ont, comme paramètres, les noms des 2 serveurs qui délinkent.)


    alias netsplit {
      %M = $chan(0) | set %j 1
      while ( %j <= %M ) {
       %chan = $chan(%j)
       set %temp % $+ netsplit $+ %chan | set %temp [ [ %temp ] ]

       if ( %temp != $null ) {
        echo 2 %chan $chr(91) $+ $time $+ $chr(93) *** Netsplit - %temp -  $+ $gettok(%temp,0,32) personne(s) ( $+ %serveurs $+ ) }
        inc %j
        }
       unset %netsplit*
    }

    on ^*:quit:gerequit $nick $address $1-

    alias gerequit {
      if ($gettok($3,0,46) > 1 && $gettok($4,0,46) > 1) {
       set %serveurs $3 // $4
       %M = $comchan($1,0) | set %j 1
       while ( %j <= %M ) {
        %chan = $comchan($1,%j)
        set %temp % $+ netsplit $+ %chan | set %temp [ [ %temp ] ]
        set % $+ netsplit $+ %chan %temp $1
        inc %j
        }
       .timersplit 1 3 /netsplit
       halt
       }
      %M = $comchan($1,0) | set %j 1

      while ( %j <= %M ) {
      %chan = $comchan($1,%j)
      echo 2 %chan $chr(91) $+ $time $+ $chr(93) *** Déconnexion: $1 ( $+ $2 $+ ) $iif($3 != $null,( $+ $3- $+ ))
      inc %j
      }
    halt
    }


    J'utilise personnellement ce bout de script chez moi. Il a l'avantage d'une part d'écrire les messages de quit en français, avec l'heure devant:

    [21:35:39] *** Déconnexion: ssxdzdxzs (hhhh@80.67.129.8) (Quit)

    D'autre part, lorsqu'il y a plusieurs personnes qui quittent avec un message de type (titi.toto.org tutu.tete.com) et avec un délai n'excédant pas 3 secondes entre chaque déconnexion, vous voyez apparaître la liste des personnes qui sont parties dans le split, sans qu'il y aie une inondation de quit messages:

    [21:55:47] *** Netsplit - ewxghjfna X MrBrawn Nob elteis DJP-Work Gold[AW] _cronos_ paul|DOUR WaZa Guig-PLaG ksprTaf EvilPola Teuf - 14 personne(s) (Paris.Fr.Eu.Undernet.org // irc.magneto.org)


    Réagir à cet article (4 commentaires)

    Titre de l'article Date d'édition Auteur Comm
    Creer son propre robot 20/08/02 Inconnu 12
    Commandes de base de l'irc - ou l'IRC pour les Nuls 2 03/10/02 Averell 1
    Utilisation des timers 28/11/02 Averell 4
    Le manuel du neuneu 14/3/05 Averell 15
    Les boucles While 20/5/05 Remi34 0
    Configurer sa box 24/11/07 Averell 1


    Retour à la page des tutoriaux