Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MIRCD ( UN SERVEUR IRC EN SCRIPTING )


Information sur la source

Catégorie :AddOns Niveau : Expert Date de création : 28/03/2003 Date de mise à jour : 27/05/2003 21:49:30 Vu / téléchargé: 8 577 / 269

Note :
7,5 / 10 - par 6 personnes
7,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (44)
Ajouter un commentaire et/ou une note

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

  • 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é
  • }
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 )
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de tiot le 28/03/2003 23:04:06

Ah oui j'oubliait de dire, il est pas fini, les cmd indisponible sont
/list
/whois

et d'autre, sinon vous pouvez JOIN, PART, QUIT, MODE, PRIVMSG, NOTICE, KILL, KICK

Pour définir NICK PASS d'un ircop
/set %nickoper NICK
/set %passoper PASS

Puis pour se oper
/oper nick pass

Ne permet pas de gline juste de kill ... sinon pas d'autre super pouvoir. Menfin étant propriètaire du script et avec un peu d'astuce vous pouvez tout faire

signaler à un administrateur
Commentaire de KaRiLLe le 29/03/2003 03:11:44

Parfois je me demande s'il y a des gens qui connaissent l'existence d'un logiciel compresseur nommé Winzip =[

signaler à un administrateur
Commentaire de tiot le 29/03/2003 15:09:16

Cela permet de montrer un code sans être obliger de rien donwloader, et il y a juste à faire un petit c/c et c dans le scritp. De plus moi j'utilise winrar ...

signaler à un administrateur
Commentaire de Tommlkj le 29/03/2003 20:22:51

jcompren rien du tt...

signaler à un administrateur
Commentaire de tiot le 29/03/2003 22:31:21

Bon c simple.
Tu c/c le code dans ton mIRC ( remote )
puis tu tape
/OpenServIrc

ton pc sera alors un serv irc, on peut s'y connecter par
/server -m TonIP

Et alors on peut chater dessus etc ...

j'espère que çà à éclairer ta lanterne.

signaler à un administrateur
Commentaire de nitro120 le 30/03/2003 17:43:00

karille a un peu raison : tu pourrais mettre les 2

signaler à un administrateur
Commentaire de tiot le 30/03/2003 23:15:41

Voila c fait zête content ?

signaler à un administrateur
Commentaire de dj328i le 31/03/2003 06:42:57

vous etes jamais content de ce vous avez ! c'est fou lol :P
ok il n'est pas terminer mais c deja pas mal temps qu'a moi !
une grande majoriter d'entre vous n'aurais jamais pue faire ca !

de mon coter jai rajouter un assistant configuration et mon espece de g-line qui permet de bannir du serveur . j'attend l'update pour le whois  :) ( je sais po comment ) . j'ai aussi remarquer que quand qu'on fesait un /msg sur un nick qui n'existait ca ne marquait po d'erreur :) ca cetait juste pour info ! allez cia ! c'est du bon boulot continuez

signaler à un administrateur
Commentaire de tiot le 31/03/2003 14:40:03

Voila avant d'envoyer un privmsg/notice il regarde si çà existe. Si tu script des trucs dessus tu peut me les envoyés que je les mettes dedans :)

Pour le gline faut que je le fasse ... à savoir que
$hfind(Serv.mask,*!*@ip,0,w)

te retourne le nombre de personne ayant le mask spécifié ( après tu boucle et çà gline tt le monde )

signaler à un administrateur
Commentaire de NitriX le 31/03/2003 19:14:44

sa marche mais j'arrive po  me oper pourtant je IRCop?

signaler à un administrateur
Commentaire de bejita le 02/04/2003 20:38:44

Whouuuu tiot c super ce truc franchement continuez comme sa jai trop hate que la remote soi fini =) frenchement !

signaler à un administrateur
Commentaire de tiot le 03/04/2003 22:00:34

Bon si vous aimez notez moi :)

Bon des nouveauté des nouveauté :

-Gestion des ban, du topic, du mode +nt
-nouveaux system pour ircop :
   ( que l'admin ( où est lancé l'add on ))
   -mettre un ircop /Serv.Addoper nick pass
   -enlever un ircop /Serv.Deloper nick
   pour tous les user
   -voir liste des ircop /stats O

-Enfin un /whois et une /list

-Intégration d'un uworld. Quand vous êtes ircop /join #uworld
Il vous indiquera les JOIN/PART/QUIT/CONNECT/KICK et access à plusieurs cmde ( pas très utile pour l'instant détaillé plus tard (.op/.deop/.kick/.kill))

Sinon quelque corection de petit truc ( pas des bug mais des oublies ). Les ircop peuve se OP sur un salon etc
  

signaler à un administrateur
Commentaire de disca le 05/04/2003 13:03:33

bon script mais le probleme de irc est que sans protect trop facile a faire planté acause que tu serve dun client comme serveur :)

mais lidé est bonne mais dejas vus trop souvent !

signaler à un administrateur
Commentaire de lemec le 05/04/2003 17:31:43

Wech tiot , c bien , c cool , c pa bo , mais c bien , @+
( je c un vieux commentaire  MéééééhEUUUUU

signaler à un administrateur
Commentaire de tiot le 05/04/2003 21:27:05

Pour repondre à disca ... je sais pas si c facile de le faire planter ... il y a pas encore de protection mais çà vas venir. Normalement dans le serveur il y devrait pas avoir de grosse faille ... mais si ta renseignement pour augmenter sécu écrit moi :)

signaler à un administrateur
Commentaire de NitriX le 11/04/2003 12:51:20

C'est super cool ton machin!!!

signaler à un administrateur
Commentaire de NitriX le 12/04/2003 12:12:58

heu...g encore un pb mainetnant le pb c'est que quand kekun entre et
y a personne il est op mais y a po le @ devant le pseudo ...

signaler à un administrateur
Commentaire de tiot le 26/04/2003 20:46:47

Normalement ce problème ne doit pas éxister. Si il existe c qu'il a pas aimer le changement de nick ( mais c débuger ). Donc now çà devrait plus le faire. D'ailleur j'ai remit à jour le Zip et la source

signaler à un administrateur
Commentaire de cladle007 le 30/04/2003 14:38:03

Pas mal tiot! G hate que cette sourece soit finie :) Sa evitera de payer un shell mé a mon avis elle fera une belle affaire ;) @+

signaler à un administrateur
Commentaire de SipiX le 01/05/2003 13:59:40

c'est terrible, franchement bravo !!
J'attend avec impatience que cette source soit fini :)

signaler à un administrateur
Commentaire de cladle007 le 03/05/2003 15:35:55

heu tiot? c'est normal que l'evenement on connect ne marche pas avec ton serveur?

signaler à un administrateur
Commentaire de tiot le 03/05/2003 17:38:43

Chez moi il marche :
On 1:connect:{
...
}
Par défault $server retourne Irc.Serv.Org ( çà pourrait être changé après ).

signaler à un administrateur
Commentaire de PsYZiK le 17/06/2003 18:51:39

dis moi tiot ton script est util en quoi ?

signaler à un administrateur
Commentaire de AquaEpsi le 03/07/2003 02:44:10

tiot... je te tire mon chapeau !! c du grand art !! ;-)
sinon g kelkes kestions :
1.Peut-on changer le l'adresse du serveur ? je veux parler de mettre une adresse genre irc.server.com à la place de notre ip, afin de s'y connecter...
2.Peut-on changer l'host de kelk'un (façon vhost) ?
3.feras tu un system d'enregistrement (de chans et de nick...) de facon à ce que les users puissent conserver leurs chans et nicks (et leurs modes...) même apres la fermeture/réouverture du serveur ?
4.pourrais tu mettre un fichier .txt avec ttes les commandes que l'on peut faire stp ?
Bon voilà :) et encore merci pour cette source

signaler à un administrateur
Commentaire de GFACTION le 17/07/2003 18:58:43

"Pas mal tiot! G hate que cette sourece soit finie :) Sa evitera de payer un shell mé a mon avis elle fera une belle affaire ;) @+"

Tu connais le mIRC Script Server ? Pas besoin de shell non plus :)

signaler à un administrateur
Commentaire de sangoku64 le 18/07/2003 00:04:56

AquaEpsi pour ta premième question:Oui on avoir autre choses que sont ip. http://www.dyndns.org/services/dyndns/add.html va sur ce site.

signaler à un administrateur
Commentaire de sangoku64 le 18/07/2003 14:26:44

J'ai fait un tutorail sur "Comment avoir un nom de domaine pour son serveur" dans le forum de tiot.

Voila le lien:  "http://www.redpowa.com/scripts/forum/viewtopic.php?p=85&sid=07a41e79117bd76ec664501b9ba79d90#85"

signaler à un administrateur
Commentaire de Remi3d le 20/08/2003 23:51:05

Comment on fait pour aller sur le serveur quand on a mis openservirc(ya le message de confirmation) ? si il fo faire /serveur -m monip
on me dit " impossible d'etablir la connexion". merci de me repondre o plus vite ++

signaler à un administrateur
Commentaire de TdC le 24/08/2003 12:54:58

mort de riiiiirrrrrrreeeeeeeeeeeeeeeeeeee !!! ^^" ! j'en pleure de rire MWAHAHAH /server -m monip , monIP c'est ton adresse IP ( exemple 196.325.458.20 )

signaler à un administrateur
Commentaire de TdC le 24/08/2003 12:57:22

[12:49] *** Impossible de se connecter (Dépassement du temps imparti à la connexion)

ça par contre....

signaler à un administrateur
Commentaire de tiot le 13/09/2003 01:30:14

ça fait super longtemps que je n'ai pas remit le nez dedans et je trouves maintenant que c super mal codé. En tous cas ceux qui veulent faire un serveur irc ne doivent pas utiliser mon mIRCd (bugé, lent etc) mais un vrai ircd (ircu, dream forge, unrealircd). J'ai fait ce script par défi, il manque pas mal de chose. Pour ceux qui veulent rajouter une option ils ont qu'a coder ;)

Amusez vous bien

signaler à un administrateur
Commentaire de Titani0n le 27/10/2003 02:04:39

tiot bravo =) c'est ... super ton code,
j'lais pas encore utiliser mais jvais y venir :)
continu comme sa !
bien joué //clindoeil

signaler à un administrateur
Commentaire de master16 le 01/11/2003 01:37:37

commen ke je fait pour me mettre ircop

signaler à un administrateur
Commentaire de Lonsdale^ le 24/12/2003 05:03:51

Salut
put1 tiot ta source elle own man t'es le meilleur
je suis en retard d'1 plombe mais bon...
oui juste comment etre ircop?
et comment pouvoir mettre 1 nom de domaine irc.blahblah.org
enfin voila (je suis 1 vrai noob dans ce qui es de scripting donc je suis p-e vite content mais la frenchement j'en reviens pas des demain j'essaye de te query :o
lol allez @+

signaler à un administrateur
Commentaire de Remi3d le 04/01/2004 12:23:07

Hum dsl de repondre aussi tard mais tCd j'avais pas mis "monIP" mais mon propre IP seulement je sias pas si afficher son IP sur le web soit une tres bonne idée... Meme si je suis un vrai noob je suis pas con alors garde tes remarques pour toi...
+++

signaler à un administrateur
Commentaire de cedricpcboss le 19/02/2004 23:16:44

Fonctionne-t-il qu'en local ?
J'ai pas eu le courage de lire toutes la sources pour le savoir lol

signaler à un administrateur
Commentaire de nonoboss le 01/04/2004 21:58:50

heu...
Je sais pas comment je me op en etant ircop
SCP DITES LE MOI !!!

signaler à un administrateur
Commentaire de Raziell le 17/04/2004 01:12:53

Pourait'on me donner la liste de toute les commandes possible a effectuer, car j'ai de rave souci : je n'arrive pas a me métre ircop  ( avec /set ) . et pour #uworld non plus j'ai pas comrpis , donc si  quelqu'un pouvai m'expliquer ou nous expliquer ( car je pense que beaucoup sont dans mon cas ) ce serai vraiment sympa de sa par.

signaler à un administrateur
Commentaire de Dimmu Borgir le 24/01/2005 19:00:09

heu moi j'ai ouver le serveur irc: /OpenServIrc et j'ai essayer de me connecter: /server -m monip et sa marche pa kelkun c pourkoi?
merci d'avance

signaler à un administrateur
Commentaire de yeloww le 23/03/2005 14:08:49

ouais pas mal tiot. nonoboss pour ta question
"heu...
Je sais pas comment je me op en etant ircop
SCP DITES LE MOI !!! "
tape /mode #LeSalon +o ton nick
bon ++ (tiot je me demande ci tu te rapel de moi sur le salon ou le bot D2`R2[barman] a spammez lol)

signaler à un administrateur
Commentaire de DiSRupTOr le 14/08/2005 03:07:10

excellent, quelques petits problèmes sinon c'est bien codé

signaler à un administrateur
Commentaire de Pontiac6000 le 28/04/2006 04:01:52

J'ai essayé ce script mais LOL je me connecte dessus tres bien, mais calice dés que je suis dedans je peut apas a metton .. aller sur un chan .. c komme si il se passait rien comme si je laggait a l'infini ! mais jai essayer sur plusiquers version de mirc pi ca marche toujours pas . meme je suis en local TOUTE !!!

Aides moiiii!!!!!!

pi té le meilleur c une fiarge de bonne idée!!!

signaler à un administrateur
Commentaire de Pontiac6000 le 28/04/2006 04:05:51

aussi jaimerais savoir si je peut le faire runner en linux pour une meilleure stabilité

signaler à un administrateur
Commentaire de tiot le 08/06/2006 01:28:07

Bon pour répondre à tout le monde:
"Fonctionne-t-il qu'en local ?": non
"#uworld non plus j'ai pas comrpis": bah vas dessus et tu comprendras
"heu moi j'ai ouver le serveur irc: /OpenServIrc et j'ai essayer de me connecter: /server -m monip et sa marche pa kelkun c pourkoi? merci d'avance" : essaye plutôt /server -m 127.0.0.1
"excellent, quelques petits problèmes sinon c'est bien codé": non c'est codé comme un porc c'est du gros bricolage qui bug de partout.

Pour tous les "ça ne marche pas" le script a été fait sur une vieille version de mIRC et je pense que les bugs de mon script + les problèmes de version de mIRC doivent donner des résultats surprenant. Je déconseille presque d'utiliser ce code... mais bon j'ai passé du temps à coder ça et ça peut toujours intéresser des gens donc je le laisse ici :)

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,764 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.