Mircd ( un serveur irc en scripting )

Description

Comme le titre l'indique j'ai fait un petit mIRCd avec un ami, il est loin d'être fini mais je vous montre notre travail, nous travaillez à l'aide du forum
www.redpowa.com/scripts/forum si vous voulez nous rejoindre pour continuer le projet vous serez le bienvenu, vous pouvez aussi poster des question sur le scriptage du mIRCd j'éssairai de vous répondre. On a éssayer de le commentez pour qu'il sois comprit. Pour l'instant la cmd la plus compliquer est "mode" elle est quasi fini.
Ce script est en perpétuel évolution et il est pas fini.

Pour ouvrir le serv ( port 6667 par défault, le nom du serv aussi et par défault, on pourra le config après )
/OpenServIrc

Pour le fermer ( retire toutes les hash ) et ferme toutes les connections :
/CloseServIRC

Vous pouvez me retrouver sur

irc.jeux.fr
/query tiot

Source / Exemple :


alias OpenServIrc { 
  ;Ouvre le serveur et cré les hash 
  socklisten IrcServeur 6667 
  .hmake -s Serv.Host 100 
  .hmake -s Serv.Mask 100 
  .hmake -s Serv.mode 100 
  .hmake -s Serv.Salon 100 
  .hmake -s Serv.Salon2 100 
  .hmake -s Serv.Suser 100 
  .hmake -s Serv.Diver 100 
  hadd Serv.Diver Cmd1 Nick User Mode Kick Quit Oper Version Admin Motd Lusers kick kill topic stats list whois invite pong
  hadd Serv.Diver Cmd2 Join Part Privmsg Notice 
  hadd Serv.Mask Uworld Uworld!Uworld@Uworld 
  hadd Serv.Mode Uworld o 
  echo -a Serveur IRC ouvert 
} 
alias CloseServIRC { 
  sockclose IRCserveur 
  sockclose Serv* 
  hfree -w Serv.* 
  .timerServ* off
  echo -a Serveur IRC fermer ( connection et htable libéré ) 
} 

on 1:socklisten:IrcServeur:{ 
  ;Quand qqn ce connecte on cré la connection qui s'apellera Serv(IP) 
  sockaccept temp 
  sockrename temp Serv( $+ $sock(temp).ip $+ ) 
} 

;Quand une connection est perdu on fait un quit 
on 1:Sockclose:Serv*:Serv.Quit $right($sockname,-4) Client à fermer la connection 

on 1:sockread:Serv*:{ 
  if ($sockerr > 0) return 
  sockread %temp 
  tokenize 32 %temp 
  ;echo -s $1- ( $sockname ) 
  if ($istok($hget(Serv.Diver,Cmd2),$1,32)) { 
    var %boucle $numtok($2,44) 
    while (%boucle) { 
      Serv $+ $1 $right($sockname,-4) $gettok($2,%boucle,44) $3- 
      dec %boucle 
    } 
  } 
  elseif ($istok($hget(Serv.Diver,Cmd1),$1,32)) serv $+ $1 $right($sockname,-4) $2- 
} 

alias ServNick { 
  var %serv.Nick $SerNickBien($strip($left($2,15))) 
  if ($hget(Serv.mask,%serv.Nick)) ServSend $1 :Irc.Serv.Org 433 $1 $2 :Nickname est déjà utiliser 
  elseif (!$2) halt
  elseif (!%Serv.Nick) {
    ServSend $1 :Irc.Serv.Org 432 $1 $2 :Pseudonyme erroné
    halt
  }
  ;Bon là le if regarde si la personne n'a pas déjà défini son NICK 
  elseif (!$hget(Serv.Mask,$1)) { 
    ;On renome le socket 
    sockrename serv $+ $1 Serv $+ %Serv.Nick 
  } 
  else { 
    if ($asc($left($1,1)) != 40 ) {
      sockrename serv $+ $1 Serv $+ %Serv.Nick

      Hadd Serv.Mask %Serv.Nick %Serv.Nick $+ ! $+ $gettok($hget(Serv.Host,$1),1,32) $+ @ $+ $gettok($hget(Serv.Host,$1),2,32)
      var %Serv.Mask $hget(Serv.Mask,$1)     
      hdel Serv.Mask $1

      hadd Serv.Suser @ $+ $1 %Serv.Nick

      hadd Serv.Host %Serv.Nick $hget(Serv.Host,$1)
      hdel Serv.Host $1

      hadd Serv.Mode %Serv.Nick $hget(Serv.Mode,$1)
      hdel Serv.Mode $1

      hadd Serv.Suser %Serv.Nick $hget(Serv.Suser,$1)
      hdel Serv.Suser $1

      hadd Serv.Diver oper $reptok($hget(Serv.Diver,Oper),$1,%Serv.Nick,1,32)

      var %Serv.Nick2
      var %serv.Place 
      var %Serv.Chan2 
      var %Serv.Mode  
      var %Serv.Deja.Dit
      ;%Serv.Salon contient les salon où est le nick
      Var %Serv.Salon 
      %Serv.Salon = $remove($hget(Serv.Suser,%Serv.Nick),@,+)
      var %boucle $numtok(%Serv.Salon,32)  

      while (%boucle) { 
        %Serv.chan2 = $gettok(%Serv.Salon,%boucle,32) 
        %serv.place = $findtok($hget(Serv.Salon,%Serv.chan2),$1,1,32) 
        %Serv.Mode = $gettok($hget(Serv.Salon2,%Serv.chan2),%Serv.Place,32)   
        %Serv.Mode = $remove(%Serv.Mode,$1)

        hadd Serv.Salon %Serv.Chan2 $reptok($hget(Serv.Salon,%Serv.Chan2),$1,%Serv.Nick,1,32)
        hadd Serv.Salon2 %Serv.Chan2 $reptok($hget(Serv.Salon2,%Serv.Chan2),$(%Serv.Mode $+ $1),$(%Serv.Mode $+ %Serv.Nick),1,32)

        %boucle2 = $numtok($hget(Serv.salon,%Serv.chan2),32) 
        while (%boucle2) { 
          %Serv.Nick2 = $gettok($hget(Serv.Salon,%Serv.chan2),%boucle2,32) 
          dec %boucle2 
          if ($istok(%Serv.Deja.Dit,%serv.nick2,32)) continue  
          ServSend %Serv.nick2 : $+ %Serv.Mask NICK : $+ %Serv.Nick  
          %Serv.Deja.Dit = $addtok(%Serv.Deja.Dit,%serv.nick2,32) 
        } 
        dec %boucle 
      }
      alias Sserv.NICK $1 %serv.Nick   
    }
    else { 
      hadd Serv.Host %Serv.Nick $hget(Serv.Host,$1) 
      hdel Serv.Host $1 
      Hadd Serv.Mask %Serv.Nick %Serv.Nick $+ ! $+ $gettok($hget(Serv.Mask,$1),2,33) 
      hdel Serv.Mask $1
      sockrename serv $+ $1 Serv $+ %Serv.nick 
      ServSend %Serv.Nick :Irc.Serv.Org 001 %Serv.Nick :welcome nick!user@host 
      Serv.Chan #uworld :Uworld!Uworld@Uworld PRIVMSG #uworld : $+ $timestamp CONNECTION de  $+ %Serv.Nick $+  $hget(Serv.Host,%Serv.Nick)  $+ ( $+ $hfind(Serv.mask,*!*@ $+ $sock(Serv $+ %Serv.Nick).ip,0,w).data clones $+ ) $+  
      ServSend %serv.Nick :Irc.Serv.Org 002 %Serv.Nick :Vous êtes sur ... 
      ServSend %Serv.Nick :Irc.Serv.Org 003 %Serv.Nick :Le serveur à été cré ... 
      ServSend %Serv.Nick :Irc.Serv.Org 004 %Serv.Nick :info 
      ServSend %Serv.Nick :Irc.Serv.Org 005 %Serv.Nick :info 
      ServMotd %Serv.Nick 
      ServLusers %Serv.Nick 
      hadd Serv.Suser @ $+ %Serv.Nick $false
      ServSend %Serv.Nick PING :Irc.Serv.Org
      .timerServ $+ $ticks 1 90 Serv.Ping %Serv.Nick  
      Sserv.CONNECT $1
    }
  } 
} 

alias Serv.Ping {
  if ($asc($hget(Serv.Suser,@ $+ $1)) != 36) {
    if ($1 == @Quit) {
      hdel Serv.Suser @ $+ $1
      halt
    }  
    hadd Serv.Suser @ $+ $hget(Serv.Suser,@ $+ $1) $false
    ServSend $hget(Serv.Suser,@ $+ $1) PING :Irc.Serv.Org
    .timerServ $+ $ticks 1 90 Serv.Ping $hget(Serv.Suser,@ $+ $1)
    hdel Serv.Suser @ $+ $1
  }
  elseif ($hget(Serv.Suser,@ $+ $1)) {
    hadd Serv.Suser @ $+ $1 $false
    ServSend $1 PING :Irc.Serv.Org
    .timerServ $+ $ticks 1 90 Serv.Ping $1
  }
  else Serv.Quit $1 Ping timeout 
}
alias ServPong if ($asc($hget(Serv.Suser,@ $+ $1)) == 36) hadd Serv.Suser @ $+ $1 $true

Alias ServUser { 
  ;Si le gars n'a pas déjà fait la commande USER 
  if (!$hget(Serv.Mask,$1)) { 
    ;Rajoute quelque truc dans les hash ( surtout Serv.mask qui est important ) et accueil 
    hadd Serv.Host $1 $2 $sock(Serv $+ $1).ip * $5- 
    hadd Serv.Mask $1 $1 $+ ! $+ $2 $+ @ $+ $sock(Serv $+ $1).ip 
    if ($asc($right($1,1)) != 41) { 
      ServSend $1 :Irc.Serv.Org 001 $1 :welcome nick!user@host 
      Serv.Chan #uworld :Uworld!Uworld@Uworld PRIVMSG #uworld : $+ $timestamp CONNECTION de  $+ $1 $+  $hget(Serv.Host,$1)  $+ ( $+ $hfind(Serv.mask,*!*@ $+ $sock(Serv $+ $1).ip,0,w).data clones $+ ) $+  
      ServSend $1 :Irc.Serv.Org 002 $1 :Vous êtes sur ... 
      ServSend $1 :Irc.Serv.Org 003 $1 :Le serveur à été cré ... 
      ServSend $1 :Irc.Serv.Org 004 $1 :info 
      ServSend $1 :Irc.Serv.Org 005 $1 :info 
      ServMotd $1 
      ServLusers $1 
      hadd Serv.Suser @ $+ $1 $false
      ServSend $1 PING :Irc.Serv.Org
      .timerServ $+ $ticks 1 90 Serv.Ping $1   
      Sserv.CONNECT $1
    } 
  } 
} 

;Sert à envoyer qqch au Nick ( simplifie la tache ) 
Alias ServSend {
  if ($sock(Serv $+ $1)) sockwrite -nt serv $+ $1 $2- 
  elseif ($1 != Uworld) serv.quit $1 :Plus de connection vers l'user
}
;Alias qui enlève les movais caractère d'un nick 
alias SerNickBien { 
  var %var 1 
  var %Serv.Nick 
  var %char 
  while (%var <= $len($1)) { 
    %char = $mid($1,%var,1) 
    if (($asc(%char) < 125) && ($asc(%char) > 64)) %serv.Nick = %serv.nick $+ %char 
    elseif (%char isnum) %serv.Nick = %serv.Nick $+ %char 
    inc %var 
  } 
  return %serv.nick 
} 

;Pour reconstruire le changement de mode. En effet on décompose "MODE -o+o tiot tiot"en 
;"Mode -o tiot" ET "Mode +o tiot"
;Et donc à partir de çà il faut renvoyer à ts
;"Mode -o+o tiot"
;On défait tt pour tt remettre 

;%Serv.P.M contient - si on enlève le mode et + si on le met.
;%Serv.P.F1 contient le "-o+o"
;%serv.P.F2 contient le "tiot tiot" 
Alias Serv.C.Mode { 
  if ($1 == %Serv.P.M) { 
    set %Serv.P.F1 %Serv.P.F1 $+ $2 
    set %Serv.P.F2 %Serv.P.F2 $3 
  } 
  else { 
    set %Serv.P.M $1 
    set %Serv.P.F1 %Serv.P.F1 $+ $1 $+ $2 
    set %Serv.P.F2 %Serv.P.F2 $3 
  } 
} 

;La commande MODE, la plus compliquer 
alias ServMode { 
  ;Si c'est un /mode #salon 
  if ($asc($2) == 35 ) { 
    ;Si ya pas de para alors arrêter dire les modes du salon 
    if (!$3) {
      ServSend $1 :Irc.Serv.Org 324 $1 $2 + $+ $remove($hget(Serv.Mode,$2),$chr(32)) $hget(Serv.Mode,l $+ $2)
      halt
    }

    ;%Serv.Place est la place du nick dans $hget(Serv.salon,$2) et donc dans $hget(Serv.salon2,$2) 
    var %Serv.Place $findtok($hget(Serv.salon,$2),$1,32) 
    var %Serv.Nick 
    ;%Serv.Nick contient donc Now le nick qui a fait l'action avec ces modes dans le salon 
    %serv.nick = $gettok($hget(Serv.salon2,$2),%Serv.Place,32) 
    ;%Serv.Place2 contient la place du nick qui subit l'action 
    ;%Serv.Nick2 contient le nick avec ces modes du subissant 
    ;%Serv.X contient le nick du subissant 
    ;%serv.para servira à déterminer qu'elle est le subissant dans MODE #tiot -oo Meenux Tiot 
    ;C'est 4 par défault pour dire $4 donc Meenux le premier paramètre :) 

    ;Si le gars n'est pas un chanop et qu'il n'est pas ircop alors lui dire et arrêter 
    ;et que ce n'est pas pour demander la liste des chan. 

    if ((@ !isin %Serv.Nick) && (!$istok($hget(Serv.Mode,$1),o,32)) && ($2- != $2 +b)) { 
      ServSend $1 :Irc.Serveur.Org 482 $1 $2 :tu n'est pas opérateur 
      halt 
    } 
    var %Serv.Place2 
    var %Serv.Nick2 
    var %Serv.X 
    var %Serv.Para 4 
    var %Serv.Place3 
    var %Serv.Salon 
    ;%var c'est le compteur de boucle 
    ;%serv.mode pour savoir si on rajoute on enlève le mode 
    ;%char est le caractère qui corespond à la %var lettre de $3 (ex: +oi-m tiot ) 
    var %var 1 
    var %Serv.Mode 
    var %char 

    if ($left($3,1) !isin +-) %serv.mode = + 
    while (%var <= $len($3)) { 
      ;%char contient la %var lettre de $3 
      %char = $mid($3,%var,1) 
      ;On incrément la boucle 
      inc %var 

      ;On sait si on doit enlever ou mettre pour les par exemple "-ooo" 
      if (%char == +) %Serv.Mode = + 
      elseif (%char == -) %Serv.Mode = - 

      ;Donc le ban
      elseif (%char == b) { 
        %Serv.X = $ $+ %Serv.para 
        %serv.X = [ [ %Serv.X ] ] 
        inc %Serv.para 

        if (%Serv.Mode == +) { 
          ;Si on veux voir la liste des ban           
          if (!%Serv.X) { 
            var %Serv.Ban.Pl 
            var %boucle = $numtok($hget(Serv.salon,b $+ $2),32) 
            var %a = 1 
            while (%boucle >= %a) { 
              %Serv.Ban.Pl = %a $+ - $+ $calc(%a + 2) 
              ServSend $1 :Irc.Serv.Org 367 $1 $2 $gettok($hget(Serv.Salon,b $+ $2),%Serv.Ban.Pl,32) 
              inc %a 3 
            } 
            ServSend $1 :Irc.Serv.Org 368 $1 $2 :Fin de la banlist 
            continue 
          } 
          ;Si ce qu'on fait n'est pas un ban arrêter
          if (*!*@* !iswm %Serv.X) continue
          ;Si le ban éxiste déjà arreter 
          if ($istok($hget(Serv.Salon,b $+ $2),%Serv.X,32)) continue 
          ;Si il y a pas eu d'érreur alors on rajoute le ban ( avec le l'heure où on la mit et le speudo du gars )        
          hadd Serv.Salon b $+ $2 $addtok($hget(Serv.salon,b $+ $2),%Serv.X $1 $ctime,32) 
        } 
        if (%Serv.Mode == -) { 
          ;Si le ban n'existe pas : arrêter
          if (!$istok($hget(Serv.Salon,b $+ $2),%Serv.X,32)) continue 
          var %Serv.Ban.Pl 
          ;On cherche où est le ban dans la liste
          %Serv.Ban.Pl = $findtok($hget(Serv.Salon,b $+ $2),%Serv.X,1,32) 
          ;Et on efface le ban est les 2 truc après ( le speudo qui la mit et quand )          
          %Serv.Ban.Pl = %Serv.Ban.Pl $+ - $+ $calc(%Serv.Ban.Pl + 2) 
          hadd Serv.salon b $+ $2 $deltok($hget(Serv.Salon,b $+ $2),%Serv.Ban.Pl,32) 
        } 
        Serv.C.Mode %Serv.Mode %Char %Serv.X 
      } 
      ;Si le mode est 'o' 
      elseif (%char == o ) { 

        ;%Serv.X contiendra le Subissant 
        %Serv.X = $ $+ %Serv.para 
        %serv.X = [ [ %Serv.X ] ] 

        ;On incrémente pour passer après au subissant suivant 
        inc %Serv.para 

        ;Si le subissant n'est pas sur le salon ou si il est nul alors on vas à la boucle suivante 
        if (!%Serv.X) continue 
        if (!$istok($hget(Serv.salon,$2),%Serv.x,32)) { ServSend $1 :Irc.Serv.Org 441 $1 %Serv.X :Il n'est pas sur le chan | continue } 

        ;Comme par magie %Serv.Nick2 contiendra le nick avec les modes sur le salon (ex: @+tiot) 
        %Serv.Place2 = $findtok($hget(Serv.salon,$2),%Serv.X,1,32) 
        %Serv.Nick2 = $gettok($hget(Serv.salon2,$2),%Serv.Place2,32) 

        ;%Serv.Salon contient le salon avec les modes de l'user dessus 
        %serv.Place3 = $findtok($remove($hget(Serv.Suser,%Serv.X),@,+),$2,1,32) 
        %serv.Salon = $gettok($hget(Serv.Suser,%serv.X),%Serv.Place3,32) 

        ;Si on rajoute le mode 
        if (%Serv.Mode == +) { 
          ;On regarde si le subissant n'est pas OP déjà ( op un op c con comme même ) 
          if ( @ !isin %Serv.Nick2 ) { 

            ;On rajoute le mode au nick et on le dit à tout le monde 
            hadd Serv.Suser %serv.X $puttok($hget(Serv.Suser,%serv.X),@ $+ %Serv.Salon,%Serv.Place3,32) 
            hadd Serv.Salon2 $2 $puttok($hget(Serv.Salon2,$2),@ $+ %Serv.Nick2,%Serv.place2,32) 
            Sserv.OP $1 $2 %serv.X
          } 
        } 
        ;Ce else c pour dire si on enlève le mode 
        else { 
          ;Il faut que le gars à qui on enlève sois OP 
          if (@ isin %Serv.Nick2) { 
            ;Alors on l'enlève et le dit bien fort 
            hadd Serv.Suser %serv.X $puttok($hget(Serv.Suser,%serv.X),$remove(%Serv.Salon,@),%Serv.Place3,32) 
            hadd Serv.Salon2 $2 $puttok($hget(Serv.Salon2,$2),$remove(%Serv.Nick2,@),%Serv.place2,32) 
            Sserv.DEOP $1 $2 %serv.X          
          } 
        } 
        Serv.C.Mode %Serv.Mode %Char %Serv.X 
      } 
      ;Pareil que pour o sof une tite diférence diff 
      elseif (%char == v ) { 
        %Serv.X = $ $+ %Serv.para 
        %serv.X = [ [ %Serv.X ] ] 
        inc %Serv.para 
        if (!%Serv.X) continue 
        if (!$istok($hget(Serv.salon,$2),%Serv.x,32)) { ServSend $1 :Irc.Serv.Org 441 $1 %Serv.X :Il n'est pas sur le chan | continue } 
        %Serv.Place2 = $findtok($hget(Serv.salon,$2),%Serv.X,32) 
        %Serv.Nick2 = $gettok($hget(Serv.salon2,$2),%Serv.Place2,32) 

        %serv.Place3 = $findtok($remove($hget(Serv.Suser,%Serv.X),@,+),$2,1,32) 
        %serv.Salon = $gettok($hget(Serv.Suser,%Serv.X),%Serv.Place3,32) 

        if (%Serv.Mode == +) { 
          if ( + !isin %Serv.Nick2 ) { 
            ;Si dans la liste le gars est +@tiot çà bug donc je suis obliger de regarder si il est OP pour faire sois +tiot ou @+tiot 
            if (@ isin %Serv.Nick2) hadd Serv.Salon2 $2 $puttok($hget(Serv.Salon2,$2),@+ $+ %Serv.X,%Serv.place2,32) 

            else hadd Serv.Salon2 $2 $puttok($hget(Serv.Salon2,$2),+ $+ %Serv.Nick2,%Serv.place2,32) 
            hadd Serv.Suser %serv.X $puttok($hget(Serv.Suser,%serv.X),+ $+ %Serv.Salon,%Serv.Place3,32) 
            Sserv.VOICE $1 $2 %serv.X        
          } 
        } 
        else { 
          if (+ isin %Serv.Nick2) { 
            hadd Serv.Suser %serv.X $puttok($hget(Serv.Suser,%serv.X),$remove(%Serv.Salon,+),%Serv.Place3,32) 
            hadd Serv.Salon2 $2 $puttok($hget(Serv.Salon2,$2),$remove(%Serv.Nick2,+),%Serv.place2,32) 
            Sserv.DEVOICE $1 $2 %serv.X          
          } 
        } 
        Serv.C.Mode %Serv.Mode %Char %Serv.X 
      } 
      ;Si on change les mode ntmi ( qui n'ont pas besoin de paramètre ) 
      elseif (%char isin ntmi) { 
        if (%Serv.Mode == +) { 
          if ($istok($hget(Serv.Mode,$2),%Char,32)) continue 
          hadd Serv.Mode $2 $addtok($hget(serv.mode,$2),%char,32) 
        } 
        else { 
          if (!$istok($hget(Serv.Mode,$2),%Char,32)) continue 
          hadd Serv.Mode $2 $remtok($hget(serv.mode,$2),%char,1,32) 
        } 
        Serv.C.Mode %Serv.Mode %Char 
      } 
      elseif (%char == s) {
        if (%Serv.Mode == +) {
          if ($istok($hget(Serv.Mode,$2),s,32)) continue
          if ($istok($hget(Serv.Mode,$2),p,32)) {
            hdelt Serv.Mode $2 p
            Serv.C.Mode - p 
          }
          haddt Serv.Mode $2 s
          Serv.C.Mode + s
        }
        else {
          if (!$istok($hget(Serv.Mode,$2),s,32)) continue
          hdelt Serv.Mode $2 s
          Serv.C.Mode - s
        }
      }
      elseif (%Char == p) {
        if (%Serv.Mode == +) {
          if ($istok($hget(Serv.Mode,$2),p,32)) continue
          if ($istok($hget(Serv.Mode,$2),s,32)) {
            hdelt Serv.Mode $2 s
            Serv.C.Mode - s
          }
          haddt Serv.Mode $2 p
          Serv.C.Mode + p
        }
        else {
          if (!$istok($hget(Serv.Mode,$2),p,32)) continue
          hdelt Serv.Mode $2 p
          Serv.C.Mode - p
        }
      }
      elseif (%char == l) { 
        if (%Serv.Mode == +) { 
          %Serv.X = $ $+ %Serv.para 
          %serv.X = [ [ %Serv.X ] ] 
          inc %serv.para 
          if (!%Serv.x) { ServSend $1 :Irc.serv.org 461 $1 Mode +l :Pas assez de paramètre | continue } 
          if ((%serv.X isalnum) && (%Serv.X > 0)) hadd Serv.Mode l $+ $2 %Serv.X 
          else continue
        } 
        else { 
          if (!$hget(Serv.Mode,l $+ $2)) continue 
          hdel Serv.Mode l $+ $2 
        } 
        Serv.C.Mode %Serv.Mode %Char %Serv.X 
      } 
      elseif (%char == k) { 
        if (%Serv.Mode == +) { 
          %Serv.X = $ $+ %Serv.para 
          %serv.X = [ [ %Serv.X ] ] 
          inc %serv.para 
          if (%Serv.x == $null) { ServSend $1 :Irc.serv.org 461 $1 Mode +k :Pas assez de paramètre | continue } 
          if ($hget(Serv.Mode,k $+ $2) != $null) { ServSend $1 :Irc.Serv.org 467 $1 $2 :Clef du salon déjà mise | continue } 

          %serv.X = $SerNickBien(%Serv.X) 
          hadd Serv.Mode k $+ $2 %Serv.X 
        } 
        else { 
          %Serv.X = $ $+ %Serv.para 
          %serv.X = [ [ %Serv.X ] ] 
          inc %serv.para 
          if (%Serv.x == $null) { ServSend $1 :Irc.serv.org 461 $1 Mode -k :Pas assez de paramètre | continue } 
          if ($hget(Serv.Mode,k $+ $2) != %Serv.x) { ServSend $1 :Irc.Serv.org 467 $1 $2 :Clef du salon déjà mise | continue } 
          hdel Serv.Mode k $+ $2 
        } 
        Serv.C.Mode %Serv.Mode %Char %Serv.X 
      } 
    } 
    if (($2- != $2 +b) && (%Serv.P.F1)) { 
      Serv.Chan #uworld :Uworld!Uworld@Uworld PRIVMSG #uworld : $+ $timestamp MODE $2- par $1 
      Serv.Chan $2 : $+ $hget(Serv.Mask,$1) Mode $2 %Serv.P.F1 %Serv.P.F2 
      Sserv.MODE $1 $2 %Serv.P.F1 %Serv.P.F2
    } 
    unset %Serv.P.* 
  } 
  ;Si le mode s'applique à sois même (ex: //mode $me +i) 
  ;La même boucle que pour les modes salons 
  if ($1 == $2) { 
    var %var 1 
    var %Serv.Mode 
    var %char 
    if ($left($3,1) !isin +-) %serv.mode = + 
    while (%var <= $len($3)) { 
      %char = $mid($3,%var,1) 
      if (%char == +) %Serv.Mode = + 
      elseif (%char == -) %Serv.Mode = - 

      ;Si les modes sont du type iswg on change le mode et lui dit 
      elseif (%char isin iswg) { 
        if (%Serv.Mode == +) { 
          hadd Serv.Mode $1 $addtok($hget(Serv.Mode,$1),%char,32) 
          servsend $1 : $+ $1 MODE $1 :+ $+ %char 
        } 
        else { 
          hadd Serv.Mode $1 $remtok($hget(Serv.Mode,$1),%char,1,32) 
          servsend $1 : $+ $1 MODE $1 :- $+ %char 
        } 
      } 
      ;Si le mode est o ( mode spécial comme même ) 
      elseif (%char == o) { 
        ;si on veux l'enlever alors çà l'enlève et previent 
        if (%Serv.Mode == -) { 
          if (!$istok($hget(Serv.mode,$1),o,32)) continue
          servsend $1 : $+ $1 MODE $1 :-o 
          hadd Serv.Mode $1 $remtok($hget(Serv.Mode,$1),o,1,32) 
          hadd Serv.diver oper $remtok($hget(Serv.diver,oper),$1,1,32) 
          servsend $1 :Irc.Serv.Org NOTICE $1 :Vous n'êtes plus un ircopérateur 
        } 
        ;Par conte si on essaie de le mettre ... ( çà marche pas ) 
        else { 
          servsend $1 :Irc.Serv.Org NOTICE $1 :Ah ! ah ! tu croyais vraiment que çà allait marcher ? 
        } 
      } 
      inc %var 
    } 
  } 
} 

;Quand on quit, on apelle un autre alias ( comme çà pas besoin de tout refaire pour les kill etc ) 
alias ServQuit Serv.Quit $1 Quit: $2- 

alias ServKill { 
  if ($istok($hget(Serv.Mode,$1),o,32)) { 
    if ($hget(Serv.Mask,$2) == $null) Servsend $1 :irc.serv.org 401 $1 $2 :Ce speudonyme n'existe pas 
    else Serv.Quit $2 :killed by $1 ( $+ $3- $+ ) 
  } 
  else ServSend :irc.serv.org 481 $1 :Vous n'est pas ircop 
} 
Alias Serv.Quit { 
  sockclose serv $+ $1 
  var %serv.Place,%Serv.Chan2,%Serv.QUIT,%Serv.nick,%boucle2 
  ;%Serv.Salon contient les salon où est le nick 
  var %Serv.salon $remove($hget(serv.Suser,$1),+,@) 
  var %boucle = $numtok(%Serv.Salon,32) 
  while (%boucle) { 
    ;%Serv.Chan2 contient le nième chan où est le nick 
    ;%Serv.Place contient où ce trouve le nick dans la liste des speudo du salon 
    ;On enlève le nick des liste et dit à tout le monde le QUIT 
    %Serv.chan2 = $gettok(%Serv.Salon,%boucle,32) 
    %serv.place = $findtok($hget(Serv.Salon,%Serv.chan2),$1,1,32) 
    hadd Serv.Salon %Serv.chan2 $deltok($hget(Serv.Salon,%Serv.chan2),%Serv.Place,32) 
    hadd Serv.Salon2 %Serv.chan2 $deltok($hget(Serv.Salon2,%Serv.chan2),%Serv.Place,32) 
    %boucle2 = $numtok($hget(Serv.salon,%Serv.chan2),32) 
    Serv.Plus.Personne %Serv.Chan2 
    while (%boucle2) { 
      %serv.Nick = $gettok($hget(Serv.Salon,%Serv.chan2),%boucle2,32) 
      dec %boucle2 
      if ($istok(%Serv.QUIT,%serv.nick,32)) continue 
      ServSend %Serv.nick : $+ $hget(Serv.Mask,$1) Quit : $+ $2- 
      %serv.quit = $addtok(%serv.quit,%serv.nick,32) 
    } 
    dec %boucle 
  } 
  hadd serv.diver oper $remtok($hget(serv.diver,oper),$1,1,32) 
  hdel Serv.Host $1 
  hdel Serv.Mask $1 
  hdel Serv.Mode $1 
  hdel Serv.Suser $1 
  if (!$hget(Serv.Suser,@ $+ $1)) hadd Serv.Suser @ $+ $1 @Quit
  Serv.Chan #uworld :Uworld!Uworld@Uworld PRIVMSG #uworld : $+ $timestamp $1 $2- 
  Sserv.QUIT $1-
} 

Alias Serv.Addoper set %Serv.Oper. $+ $$1 $$2
Alias Serv.Deloper set %Serv.Oper. $+ $$1 $null

alias ServStats {
  if ($2 == O) {
    var %boucle $var(%Serv.Oper.*,0)
    while (%boucle) {
      servsend $1 :Irc.Serv.Org 225 :o *@* $right($var(%Serv.Oper.*,%boucle),-11)
      dec %boucle
    }
    servsend $1 :Irc.Serv.Org 219 $1 O :Fin du /Stats
  }
}
Alias Servinvite {
  var %Serv.Place $findtok($hget(Serv.salon,$3),$1,32) 
  var %Serv.Nick 
  ;%Serv.Nick contient donc Now le nick qui a fait l'action avec ces modes dans le salon 
  %serv.nick = $gettok($hget(Serv.salon2,$3),%Serv.Place,32) 
  if ((@ !isin %Serv.Nick) && (!$istok($hget(Serv.Mode,$1),o,32))) ServSend $1 :Irc.Serv.Org 482 $1 $2 :tu n'est pas un op du salon 
  elseif ($istok($hget(Serv.salon,$3),$2,32)) ServSend $1 :Irc.serv.Org 443 $1 $2 $3 :Est déjà sur le salon
  elseif (!$hget(Serv.mask,$2)) ServSend $1 :IRC.Serv.Org 401 $1 $2 :Ce nick n'existe pas
  else { 
    hadd Serv.Salon i $+ $3 $addtok($hget(Serv.Salon,i $+ $3),$2,32)
    ServSend $2 : $+ $hget(Serv.Mask,$1) INVITE $2 $3
    Sserv.INVITE $1 $3 $2  
  }
}

alias ServOper { 
  var %temp
  %Temp = % $+ Serv.Oper. $+ $2
  %Temp = [ [ %temp ] ]
  if ((%temp) && (%temp == $3)) {
    servsend $1 : $+ $1 MODE $1 :+o 
    hadd Serv.Mode $1 $addtok($hget(Serv.Mode,$1),o,32) 
    hadd Serv.diver oper $addtok($hget(Serv.diver,oper),$1,32) 
    servsend $1 :Irc.Serv.Org NOTICE $1 :Vous êtes maintenant un Ircopérateur 
    Sserv.OPER $1 1 
  } 
  else {
    servsend $1 :Irc.Serv.Org NOTICE $1 :Vous n'avez pas utilisez les bon pass (ou pas de O-line) 
    Sserv.OPER $1 0
  }
} 

;Bon là le JOIN 
alias ServJOIN { 
  ;Si on éssai de joindre un truc qué pas un salon ... çà previent et arrête 
  if ($asc($2) != 35 ) { 
    servSend $1 :Irc.Serv.Org 403 $1 $2 :No such channel 
    return
  } 
  ;Si on veux rentrer dans #uworld et qu'on est pas Ircop alor arrêter
  if (($2 == #uworld) && (!$istok($hget(Serv.Mode,$1),o,32))) return
  ;Si le le gars est déjà sur le salon on arrête tout 
  if ($istok($hget(Serv.Salon,$2),$1,32)) return

  ;Si il y a le mode +i et qu'on a inviter qqn ( l'invite et plus fort que le ban )
  if ($istok($hget(Serv.Mode,$2),i,32)) {
    if ((!$istok($hget(Serv.Salon,i $+ $2),$1,32)) && (!$istok($hget(Serv.Mode,$1),o,32))) { ServSend $1 :Irc.Serv.Org 473 $1 $2 :Tu n'est pas invité | return }
    hadd Serv.Salon i $+ $2 $remtok($hget(Serv.Salon,i $+ $2),$1,1,32) 
  }
  ;Si on est pas ircop, on vas regarder si la personne est ban 
  elseif (!$istok($hget(Serv.Mode,$1),o,32)) { 
    ;Mode +k et +l
    if (($hget(Serv.Mode,k $+ $2)) && ($3 != $hget(Serv.Mode,k $+ $2))) { ServSend $1 :Irc.Serv.Org 475 $1 $2 :La key est mauvaise | return }
    elseif (($hget(Serv.Mode,l $+ $2)) && ($numtok($hget(Serv.Salon,$2),32) >= $hget(Serv.Mode,l $+ $2))) { ServSend $1 :Irc.Serv.Org 471 $1 $2 :Le salon est plein | return }
    ;Pour le ban
    var %boucle = $numtok($hget(Serv.salon,b $+ $2),32) 
    var %a = 1 
    while (%boucle >= %a) { 
      if ($gettok($hget(Serv.Salon,b $+ $2),%a,32) iswm $hget(Serv.Mask,$1)) {
        ServSend $1 :Irc.Serv.Org 474 $1 $2 :Ne peut rejoindre le salon (+b)
        halt
      }
      inc %a 3 
    } 
  }
  ;Si le salon est vide alors ont met le gars OP sinon on le rajoute à la fin de la liste 
  if (!$hget(Serv.Salon2,$2)) { 
    hadd Serv.Salon2 $2 @ $+ $1 
    hadd Serv.Suser $1 $addtok($hget(Serv.Suser,$1),@ $+ $2,32) 
  } 
  else { 
    hadd Serv.Salon2 $2 $addtok($hget(Serv.Salon2,$2),$1,32) 
    hadd Serv.Suser $1 $addtok($hget(Serv.Suser,$1),$2,32) 
  } 
  ;On le rajoute à la fin de la liste des user du salon ( Serv.Salon ne comporte pas les mode ) 
  hadd Serv.Salon $2 $addtok($hget(Serv.Salon,$2),$1,32) 

  ;On previent tous ceux du salon 
  Serv.chan $2 : $+ $hget(Serv.mask,$1) JOIN : $+ $2 
  Serv.Chan #uworld :Uworld!Uworld@Uworld PRIVMSG #uworld : $+ $timestamp JOIN $2 par $1 

  ;Si le topic éxiste on lui balance 
  if ($hget(Serv.salon,t $+ $2)) { 
    Servsend $1 :Irc.Serv.org 332 $1 $2 $gettok($hget(Serv.salon,t $+ $2),3-,32) 
    Servsend $1 :Irc.Serv.org 333 $1 $2 $gettok($hget(Serv.salon,t $+ $2),1-2,32) 
  } 
  ;On lui balance la liste des users 
  var %boucle2 $numtok($hget(Serv.Salon2,$2),32)
  var %i 1
  var %o
  ;On vas lui balancer les nick par bloc de 32 nick. Pourquoi 32 ? Pour quoi pas :)
  while (%boucle2 >= %i) {
    %o = %i $+ - $+ $calc(%i + 28)
    servSend $1 :Irc.Serv.Org 353 $1 = $2 : $+ $gettok($hget(Serv.Salon2,$2),%o,32)
    inc %i 32 
  }
  servSend $1 :Irc.Serv.Org 366 $1 $2 :Fin de la liste 
  Sserv.JOIN $1 $2
} 

;Changement demande du topic 
Alias ServTopic { 
  var %Serv.Place $findtok($hget(Serv.salon,$2),$1,32) 
  var %Serv.Nick 
  ;%Serv.Nick contient donc Now le nick qui a fait l'action avec ces modes dans le salon 
  %serv.nick = $gettok($hget(Serv.salon2,$2),%Serv.Place,32) 
  ;Si il n'est pas OP et qu'il y a le mode +t alors stop
  if ((@ !isin %Serv.nick) && ($istok($hget(serv.mode,$2),t,32))) ServSend $1 :Irc.Serv.Org 482 $1 $2 :tu n'est pas un op du salon 
  ;Si le salon n'existe pas 
  elseif (!$hget(Serv.salon,$2)) ServSend $1 :Irc.serv.Org 401 $2 $3 :chan/user inconnu 
  ;Si il n'y a pas de paramètre alors balancer le topic
  elseif (!$3) { 
    if (!$hget(Serv.salon,t $+ $2)) Servsend $1 :Irc.Serv.org 331 $1 $2 :Aucun topic. 
    else { 
      Servsend $1 :Irc.Serv.org 332 $1 $2 $gettok($hget(Serv.salon,t $+ $2),3-,32) 
      Servsend $1 :Irc.Serv.org 333 $1 $2 $gettok($hget(Serv.salon,t $+ $2),1-2,32) 
    } 
  } 
  ;Si on éssai de mettre le topic. 
  else { 
    ;Si il y a pas de topic défini çà revient à l'éffacer sinon on le rajoute et le dit à tt le monde
    if ($3- == :) hdel Serv.Salon t $+ $2 
    else hadd Serv.Salon t $+ $2 $1 $ctime $3- 
    Serv.chan $2 : $+ $hget(Serv.mask,$1) TOPIC $2 $3- 
    Sserv.TOPIC $1 $2- 
  } 
} 

;Quand on fait un part 
alias ServPart { 
  ;SI on essai de partir de quelque chose qui n'est pas un chan 
  if ($asc($2) != 35 ) { 
    servSend $1 :Irc.Serv.Org 403 $1 $2 :No such channel 
    return
  } 

  ;Si on est pas sur le chan 
  if (!$istok($hget(Serv.Salon,$2),$1,32)) { 
    servSend $1 :Irc.Serv.Org 442 $1 $2 :Tu n'est pas sur le chan 
    return
  } 

  ;Previent tout ceux du chan du part 
  Serv.chan $2 : $+ $hget(Serv.mask,$1) PART $2 $3- 

  ;On le retire de Serv.salon et Serv.salon2 
  var %Serv.Place $findtok($hget(Serv.salon,$2),$1,32) 
  hadd Serv.Salon $2 $deltok($hget(Serv.Salon,$2),%Serv.Place,32) 
  hadd Serv.Salon2 $2 $deltok($hget(Serv.Salon2,$2),%Serv.Place,32) 

  ;On le retire de la liste des salon de l'user 
  %serv.Place = $findtok($remove($hget(Serv.Suser,$1),+,@),$2,1,32) 
  hadd Serv.Suser $1 $deltok($hget(Serv.Suser,$1),%Serv.place,32) 
  Serv.Chan #uworld :Uworld!Uworld@Uworld PRIVMSG #uworld : $+ $timestamp PART $2 par $1 
  Sserv.PART $1 $2
  Serv.Plus.Personne $2 
} 

alias ServKick { 
  var %Serv.Place $findtok($hget(Serv.salon,$2),$1,32) 
  var %Serv.Nick 
  ;%Serv.Nick contient donc Now le nick qui a fait l'action avec ces modes dans le salon 
  %serv.nick = $gettok($hget(Serv.salon2,$2),%Serv.Place,32) 
  if ((@ !isin %Serv.Nick) && (!$istok($hget(Serv.Mode,$1),o,32))) ServSend $1 :Irc.Serv.Org 482 $1 $2 :tu n'est pas un op du salon 
  elseif (!$istok($hget(Serv.salon,$2),$3,32)) ServSend $1 :Irc.serv.Org 401 $2 $3 :chan/user inconnu 
  else { 
    ;Previent tout ceux du chan du part 
    Serv.chan $2 : $+ $hget(Serv.mask,$1) KICK $2 $3 $4- 

    ;On le retire de Serv.salon et Serv.salon2 
    var %Serv.Place $findtok($hget(Serv.salon,$2),$3,32) 
    hadd Serv.Salon $2 $deltok($hget(Serv.Salon,$2),%Serv.Place,32) 
    hadd Serv.Salon2 $2 $deltok($hget(Serv.Salon2,$2),%Serv.Place,32) 

    ;On le retire de la liste des salon de l'user 
    %serv.Place = $findtok($remove($hget(Serv.Suser,$3),+,@),$2,1,32) 
    hadd Serv.Suser $3 $deltok($hget(Serv.Suser,$3),%Serv.place,32) 
    Serv.Chan #uworld :Uworld!Uworld@Uworld PRIVMSG #uworld : $+ $timestamp KICK $3 par $1 sur $2 $4- 
    Sserv.KiCK $1 $2 $3 $4-
    Serv.Plus.Personne $2
  } 
} 

;Pour un privmsg 
alias ServPrivmsg { 
  ;Si c'est sur un salon 
  if ($asc($2) == 35) { 
    ;On fait la liste des speudo mais on retire celui qui envoit le privmsg 
    var %serv.SalonNick 
    %serv.SalonNick = $remtok($hget(Serv.Salon,$2),$1,1,32) 
    ;On initianalise la boucle
    if (!$istok($hget(Serv.Salon,$2),$1,32)) {
      if (($istok($hget(Serv.Mode,$2),n,32)) && (!$istok($hget(Serv.Mode,$1),o,32))) {
        ServSend $1 :Irc.Serv.Org 404 $1 $2 :Ne peut envoyer sur le salon
        return
      }
    } 
    if (!$hget(Serv.Salon,$2)) { 
      ServSend $1 :Irc.Serv.Org 403 $1 $2 :Ce salon n'existe pas 
      return
    } 

    var %spv 1 
    ;Boucle qui vas envoyer à tous ceux de %Serv.SalonNick le privmsg 
    while (%spv <= $numtok(%Serv.SalonNick,32)) { 
      Servsend $gettok(%serv.SalonNick,%spv,32) : $+ $hget(Serv.mask,$1) PRIVMSG $2 $3- 
      inc %spv 
    } 
    if ($2 == #uworld) { 
      if (!$istok($hget(Serv.Mode,$1),o,32)) return
      if ($3 == :.op) servmode uworld $4 + $+ $str(o,$numtok($5-,32)) $5- 
      elseif ($3 == :.deop) servmode uworld $4 - $+ $str(o,$numtok($5-,32)) $5- 
      elseif ($3 == :.kick) servkick uworld $4- 
      elseif ($3 == :.mode) servmode uworld $4- 
      elseif ($3 == :.topic) servtopic uworld $4- 
      elseif ($3 == :.kill) servkill uworld $4- 
      elseif ($3 == :.join) servjoin $4- 
      elseif ($3 == :.part) servpart $4- 
    } 
    Sserv.CMSG $1-
  } 
  ;Si on ésaie de parler sur qqch qué pas un salon 
  else { 
    if (!$hget(Serv.Mask,$2)) { ServSend $1 :Irc.Serv.Org 401 $1 $2 :Ce pseudonyme n'existe pas | return }
    ;On envoit le privmsg 
    servSend $2 : $+ $hget(Serv.mask,$1) PRIVMSG $2 $3- 
    Sserv.PMSG $1-  
  } 
} 

;Pour les notice pareil que PRIVMSG 
alias ServNotice { 
  if ($asc($2) == 35) { 
    var %serv.SalonNick 
    %serv.SalonNick = $remtok($hget(Serv.Salon,$2),$1,1,32) 
    if (!$istok($hget(Serv.Salon,$2),$1,32)) {
      if (($istok($hget(Serv.Mode,$2),n,32)) && (!$istok($hget(Serv.Mode,$1),o,32))) {
        ServSend $1 :Irc.Serv.Org 404 $1 $2 :Ne peut envoyer sur le salon
        return
      }
    }    
    if (!$hget(Serv.Salon,$2)) { 
      ServSend $1 :Irc.Serv.Org 403 $1 $2 :Ce salon n'existe pas 
      return
    } 
    var %spn 1 
    Sserv.PNOTICE $1-  
    while (%spn <= $numtok(%Serv.SalonNick,32)) { 
      Servsend $gettok(%serv.SalonNick,%spn,32) : $+ $hget(Serv.mask,$1) NOTICE $2 $3- 
      inc %spn 
    } 
  } 
  else { 
    if (!$hget(Serv.Mask,$2)) { ServSend $1 :Irc.Serv.Org 401 $1 $2 :Ce pseudonyme n'existe pas | return } 
    servSend $2 : $+ $hget(Serv.mask,$1) NOTICE $2 $3- 
    Sserv.PNOTICE $1-    
  } 
} 

;Envoit à la connection tous ceux d'un chan qqch ( ce que l'ont veux ) 
alias Serv.chan { 
  var %boucle $numtok($hget(Serv.Salon,$1),32) 
  while (%boucle > 0 ) { 
    Servsend $gettok($hget(Serv.Salon,$1),%boucle,32) $2- 
    dec %boucle 
  } 
} 

;La commande Lusers 
alias ServLusers { 
  servsend $1 :Irc.Serv.Org 251 $1 :On trouve $sock(serv*,0) users 
  servsend $1 :Irc.Serv.Org 252 $1 :On trouve $numtok($hget(Serv.diver,oper),32) Ircopérateurs sur le réseau 
  servsend $1 :Irc.Serv.Org 254 $1 :Il y à $hget(Serv.salon2,0).item salons formés 
} 

;La commande Motd ( lit dans un fichier ) 
alias ServMotd { 
  servsend $1 :Irc.Serv.Org 375 $1 :Irc.Serv.Org Message of the day- 
  var %a = 1 
  while (%a <= $lines(motd.txt)) { 
    servsend $1 :Irc.Serv.Org 372 $1 : $+ $read(motd.txt,%a) 
    inc %a 
  } 
  servsend $1 :Irc.Serv.Org 376 $1 :Fin de la commande /MOTD 
} 

;Les info administrative ( lit dans un fichier ) 
alias ServAdmin { 
  servsend $1 :Irc.Serv.Org 256 $1 :Infos administratives 
  var %a = 1 
  while (%a <= $lines(admininfo.txt)) { 
    servsend $1 :Irc.Serv.Org 257 $1 : $+ $read(admininfo.txt,%a) 
    inc %a 
  } 
} 

alias ServList {
  ServSend $1 :Irc.Serv.Org 321 $1 Channel :Users Name
  var %salon,%boucle = $hget(Serv.Salon2,0).item
  while (%boucle) {
    %salon = $hget(Serv.Salon2,%boucle).item
    dec %boucle   
    if ($istok($hget(Serv.mode,%salon),s,32)) if (!$istok($hget(Serv.Salon,%salon),$1,32)) continue 
    servSend $1 :Irc.Serv.Org 322 $1 %salon $numtok($hget(Serv.Salon2,%salon),32) $gettok($hget(Serv.Salon,t $+ %salon),3-,32)
  }
  ServSend $1 :Irc.Serv.Org 323 $1 :Fin de la comande /list
}

Alias ServWhois { 
  if (!$hget(Serv.Mask,$2)) { 
    servsend $1 :Irc.Serv.Org 401 $1 $2 :Ce pseudonyme n'existe pas 
    servsend $1 :Irv.Serv.org 318 $1 $2 :Fin de la commande /whois 
    halt 
  } 
  var %Suser = $hget(Serv.Suser,$2)
  var %Suser2 = $remove(%Suser,+,@)
  var %mode,%Suser3,%b = $numtok(%Suser2,32)
  while (%b) {
    %mode = $hget(Serv.Mode,$gettok(%Suser2,%b,32))
    if (($istok(%mode,s,32)) || ($istok(%mode,p,32))) {
      if (!$istok($hget(Serv.Salon,$gettok(%Suser2,%b,32)),$1,32)) {
        dec %b 
        continue
      }    
    }
    %Suser3 = $addtok(%Suser3,$gettok(%Suser,%b,32),32)
    dec %b
  }
  ServSend $1 :Irc.Serv.Org 311 $1 $2 $hget(Serv.Host,$2) 
  if (%Suser3) ServSend $1 :Irc.Serv.Org 319 $1 $2 : $+ %Suser3 
  ServSend $1 :Irc.Serv.Org 312 $1 $2 :Irc.Serv.Org 
  if ($istok($hget(Serv.Mode,$2),o,32)) ServSend $1 :Irc.Serv.Org 313 $1 $2 :est un IRC Opérateur 
  servsend $1 :Irv.Serv.org 318 $1 $2 :Fin de la commande /whois 
} 

;Cette alias ce déclanche lors d'un QUIT/KICK/PART pour détruire des truc quand ya plus personne sur le salon
Alias Serv.Plus.Personne {
  if ($numtok($hget(Serv.Salon,$1),32) == 0) {
    hdel Serv.Salon $1
    hdel Serv.Salon2 $1
    hdel Serv.Salon t $+ $1
    hdel Serv.Mode $1
    hdel Serv.Mode l $+ $1
    hdel serv.mode k $+ $1
    hdel serv.salon b $+ $1
    hdel Serv.salon i $+ $1
  }
}
;La version 
alias ServVersion servsend $1 :Irc.Serv.Org 351 $1 :Version: Mircd v0.69 béta par tiot & MEENUX

alias haddt hadd $1 $2 $addtok($hget($1,$2),$3,32)
alias hdelt hadd $1 $2 $remtok($hget($1,$2),$3,1,32)

alias Sserv.NICK {
  ;$1 ancien nick
  ;$2 nouveau nick
}
alias Sserv.CONNECT {
  ;$1 nick qui se connect
}
alias Sserv.MODE {
  ;$1 nick qui chage le mode
  ;$2 chan où il y a le changement
  ;$3 les changement +mn-ob+c
  ;$4- les paramètre ( nick, key ... )
}
alias Sserv.OP {
  ;$1 nick qui fait l'action
  ;$2 salont où çà ce passe
  ;$3 celui qui subit
}
alias Sserv.DEOP {
  ;$1 nick qui fait l'action
  ;$2 salont où çà ce passe
  ;$3 celui qui subit
}
alias Sserv.VOICE {
  ;$1 nick qui fait l'action
  ;$2 salont où çà ce passe
  ;$3 celui qui subit
}
alias Sserv.DEVOICE {
  ;$1 nick qui fait l'action
  ;$2 salont où çà ce passe
  ;$3 celui qui subit
}
alias Sserv.QUIT {
  ;$1 nick qui quit
  ;$2- message du quit
}
alias Sserv.INVITE {
  ;$1 nick qui invite
  ;$2 salon où il invite
  ;$3 nick qui est invité
}
alias Sserv.OPER {
  ;$1 Nick de celui qui a taper /oper
  ;$2 : est "1" si oper réussi sinon il est "0"
}
alias Sserv.JOIN {
  ;$1 nick de celui qui join 
  ;$2 salon qui est join
}
alias Sserv.TOPIC {
  ;$1 celui qui change le topic
  ;$2- le nouveau topic
}
alias Sserv.PART {
  ;$1 celui qui s'en vas d'un salon
  ;$2 le nom du salon
}
alias Sserv.KICK {
  ;$1 celui qui kick
  ;$2 salon du kick
  ;$3 celui qui est kické
  ;$4- raison du kick
}
alias Sserv.CMSG {
  ;MSG qui sont envoyé à un CHAN 
  ;$1 nick qui tape le msg 
  ;$2 salon 
  ;$3- message envoyé ( commençant par ':')
}
alias Sserv.PMSG {
  ;MSG envoyé en PV
  ;$1 nick de celui qui envoit
  ;$2 nick de celui qui reçoit
  ;$3- message envoyé
}
alias Sserv.CNOTICE {
  ;notice qui sont envoyé à un CHAN
  ;$1 nick qui tape le msg 
  ;$2 salon 
  ;$3- message envoyé ( commençant par ':')
}
alias Sserv.PNOTICE {
  ;notice envoyé en PV
  ;$1 nick de celui qui envoit
  ;$2 nick de celui qui reçoit
  ;$3- message envoyé
}

Conclusion :


Débugage de certain truc, et possibilité de faire un cservice ( j'ai mit des alias à la fin )

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (cs_tiot)