Advertisement
NaZaRa

G-IRCd fr

Dec 20th, 2012
381
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
mIRC 231.85 KB | None | 0 0
  1. on 1:start: {
  2.   if (!$isdir(System)) {
  3.     mkdir System
  4.   }
  5.   echo -s 4Type /start, to start the server
  6.   echo -s Please visit http://www.g-neration.com/G-IRCD/
  7.   echo -s You can configure the server by editing g-ircd.conf, and by modifying rehash.g
  8.   if ($readini(System\G-IRCD.dat,GlobalVars,firststart) != no) {
  9.     writeini -n System\G-IRCD.dat GlobalVars creationtime $asctime
  10.     writeini -n System\G-IRCD.dat GlobalVars firststart no
  11.   }
  12. }
  13.  
  14. alias cleanup {
  15.   var %i 1
  16.   set %systemdir $mircdir $+ System\
  17.   set %nbdfiles $calc($findfile(%systemdir ,*,0,0,) - 1)
  18.   log Cleaning up the database...
  19.   while (%i <= %nbdfiles) {
  20.     set %tmpfile $findfile(%systemdir ,*,%i,0,)
  21.     if (($nopath(%tmpfile) != G-IRCD.dat) && (%tmpfile)) {
  22.       log Removing %tmpfile
  23.       .remove $shortfn(%tmpfile)
  24.     }
  25.     inc %i
  26.   }
  27. }
  28.  
  29. alias sw {
  30.   set %lastsw sw $1-
  31.   echo @sw 12 $+ %lastsw
  32.   sockwrite -tn $1 $2-
  33. }
  34. alias log { write log.txt $1- | echo @G-IRCD $1- }
  35. alias randsock { return gircd $+ $rand(a,z) $+ $rand(A,Z) $+ $rand(a,z) $+ $rand(A,Z) $+ $rand(A,Z) $+ $rand(1000,9999) $+ $rand(10,99) $+ $rand(a,z) }
  36. alias randping { return $rand(10,99) $+ $rand(A,Z) $+ $rand(0,9) $+ $rand(A,Z) $+ $rand(A,Z) $+ $rand(A,Z) $+ $rand(0,9) }
  37.  
  38. alias start {
  39.   ;Démarrage du serveur
  40.  
  41.   window -e @G-IRCD
  42.   ;window -e @sr
  43.   cleanup
  44.   log Removing temporary variables...
  45.   unset %*
  46.   log Reading configuration for rehash...
  47.   rehash
  48.   rh
  49.   addmap %me 0 %me %me.info
  50.   ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> CHANGER ICI <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  51.   log Server ready to listen to the Internet...
  52.   var %i 1
  53.   ;Boucle servant à mettre en écoute les ports
  54.   while (%i <= $gettok(%ports,0,300)) {
  55.     set %tport $gettok(%ports,%i,300)
  56.     socklisten gircd $+ %i %tport
  57.     log 14Listening port : %tport
  58.     inc %i
  59.   }
  60.   log 4Server started !
  61.   writeini -n System\G-IRCD.dat GlobalVars online $asctime
  62. }
  63.  
  64. alias usergiven {
  65.   ;Alias servant à vérifier si l'user donné (sous forme de sockname) a déjà donné sa commande USER.
  66.   if ($1) {
  67.     inc %usergiventimes_ [ $+ [ $1 ] ]
  68.     if (%usergiventimes_ [ $+ [ $1 ] ] >= 10) {
  69.       .timerusergiven $+ $1 off
  70.       halt
  71.     }
  72.     .timerusergiven $+ $1 off
  73.     if (%usergiven_ [ $+ [ $1 ] ] == on) {
  74.       if (!$isco($socknick($sockname))) {
  75.         sw $1 : $+ %me NOTICE %nick_of_sockname_ [ $+ [ $1 ] ] :*** If you are having problems connecting due to ping timeouts, please type /quote pong %ping_ [ $+ [ $1 ] ] or /raw pong %ping_ [ $+ [ $1 ] ] now.
  76.         sw $1 : $+ %me NOTICE %nick_of_sockname_ [ $+ [ $1 ] ] :*** %me running version G-IRCD1.1
  77.         sw $1 PING : $+ %ping_ [ $+ [ $1 ] ]
  78.         .timerping $+ $1 1 %pingfreq /pingverif $1
  79.         set %usergiven_ [ $+ [ $1 ] ] off
  80.         hello $1
  81.       }
  82.       else {
  83.         sw $1 ERROR :Closing Link: Nickname is already in use. Please change.
  84.         sockclose2 $1
  85.         .timerkill $+ $1 -m 1 200 /sockclose $1
  86.       }
  87.     }
  88.     else {
  89.       ;Sinon, on refait appel à cette même fonction dans une seconde, pour voir s'il ne l'a toujours pas donné, et ainsi de suite.
  90.       .timerusergiven $+ $1 1 1 /usergiven $1
  91.     }
  92.   }
  93. }
  94.  
  95. on *:socklisten:gircd*: {
  96.   ;On créé un nom aléatoire de socket
  97.   set %randsock $randsock
  98.   ;On l'accepte en lui donnant le nom aléatoire
  99.   sockaccept %randsock
  100.   ;On détermine l'ip du client venant de se connecter
  101.   set %ip_ [ $+ [ %randsock ] ] $sock(%randsock).ip
  102.  
  103.   ;Vérification du nombre de sessions pour l'ip
  104.   if (%sessions_ [ $+ [ %ip_ [ $+ [ %randsock ] ] ] ] >= %slimit) {
  105.     log 7Killed %ip_ [ $+ [ %randsock ] ] : Session limit exceeded
  106.     sw %randsock ERROR :Closing Link: Session limit exceeded
  107.     sockclose2 %randsock
  108.     .timerkill $+ %randsock -m 1 200 /sockclose %randsock
  109.   }
  110.   else {
  111.     inc %nbdconnects
  112.     set %port_ [ $+ [ %randsock ] ] $sock($sockname).port
  113.     inc %sessions_ [ $+ [ %ip_ [ $+ [ %randsock ] ] ] ]
  114.     sw %randsock : $+ %me NOTICE AUTH :*** Looking up your hostname...
  115.     set %dnssock %randsock
  116.     ;dns %ip_ [ $+ [ %randsock ] ]
  117.     if ($dllcall(G-IRCD.dll,dllcallreturn,GDNS,%ip_ [ $+ [ %randsock ] ] %randsock)) { }
  118.     sw %randsock : $+ %me NOTICE AUTH :*** Checking ident...
  119.   }
  120. }
  121.  
  122. alias dllcallreturn { }
  123.  
  124. on *:sockclose:gircd*: {
  125.   log 4Déconnexion : $socknick($sockname) ( $+ $fullhost($sockname) $+ )
  126.   set %quitchans %chans_ [ $+ [ $sockname ] ]
  127.   set %qfullhost $fullhost($sockname)
  128.   set %qnick $socknick($sockname)
  129.   set %qserv %server_ [ $+ [ $socknick($sockname) ] ]
  130.   set %quitraison_ [ $+ [ $sockname ] ] Quit: Connection reset by peer
  131.   sendmultiserver : $+ %qnick QUIT : $+ %quitraison_ [ $+ [ $sockname ] ]
  132.   sockclose2 $sockname
  133.   gquit $sockname Connection reset by peer
  134. }
  135.  
  136. alias sockclose2 {
  137.   if ($1) {
  138.  
  139.     if (%server_ [ $+ [ $socknick($1) ] ] == %me) {
  140.     ;Envoyer la notice à tous les IRCops locaux
  141.     set %ilf $ircoplistfile
  142.     if (!$exists(%ilf)) {
  143.       goto sockcloseend
  144.     }
  145.     var %file $gopen(%ilf)
  146.     while ($fread(%file)) {
  147.       set %r $gettok($ifmatch,1,32)
  148.       if (o isin %umodes_ [ $+ [ %r ] ]) {
  149.         if (%server_ [ $+ [ %r ] ] == %me) {
  150.           if (c isincs %snomask_ [ $+ [ %r ] ]) {
  151.             if ($socknick($1)) {
  152.               sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %lonick :*** Notice -- client exiting: $socknick($1) ( $+ $gettok($fullhost($1),2-,$asc(!)) $+ ) $chr(91) $+  %quitraison_ [ $+ [ $1 ] ] $+ $chr(93)
  153.               ;*** Notice -- Client exiting: G-FACTION[GTASA] (G-FACTION@127.0.0.2) [Quit: ]
  154.             }
  155.           }
  156.         }
  157.       }
  158.     }
  159.     .fclose %file
  160.     :sockcloseend
  161.     ;Fin
  162.     }
  163.    
  164.     whowas.add.private $1
  165.     tmpshun.del $socknick($1)
  166.     set %sockclosenick $socknick($1)
  167.     dec %sessions_ [ $+ [ $sock($1).ip ] ]
  168.     unset %connectiontime_ [ $+ [ $1 ] ]
  169.     unset %chans_ [ $+ [ $1 ] ]
  170.     unset %reginserver_ [ $+ [ $1 ] ]
  171.     unset %realname_ [ $+ [ $socknick($1) ] ]
  172.     unset %nick_ [ $+ [ $socknick($1) ] ]
  173.     if (%ircop_ [ $+ [ $socknick($1) ] ]) {
  174.       delircoplist  %nick_of_sockname_ [ $+ [ $1 ] ]
  175.     }
  176.     unset %ircop_ [ $+ [ $socknick($1) ] ]
  177.     unset %nick_ [ $+ [ $socknick($1) ] ]
  178.     unset %snomask_ [ $+ [ $socknick($1) ] ]
  179.     unset %umodes_ [ $+ [ $socknick($1) ] ]
  180.     unset %identd_ [ $+ [ $socknick($1) ] ]
  181.     unset %server_ [ $+ [ $socknick($1) ] ]
  182.     unset %ping_ [ $+ [ $1 ] ]
  183.     unset %usergiven_ [ $+ [ $1 ] ]
  184.     unset %port_ [ $+ [ $1 ] ]
  185.     unset %vraiehost_ [ $+ [ $1 ] ]
  186.     unset %sockname_ [ $+ [ $socknick($1) ] ]
  187.     unset %nick_of_sockname_ [ $+ [ $1 ] ]
  188.     unset %host_ [ $+ [ $1 ] ]
  189.     unset %ip_ [ $+ [ $1 ] ]
  190.     unset %nick_of_sockname_ [ $+ [ $1 ] ]
  191.     delservnick %sockclosenick
  192.   }
  193. }
  194.  
  195. alias pingverif {
  196.   if ($1) {
  197.     .timerping $+ $1 off
  198.     if (%pongdonne_ [ $+ [ $1 ] ]) {
  199.       set %pongdonne_ [ $+ [ $1 ] ] $false
  200.       set %ping_ [ $+ [ $1 ] ] $randping
  201.       sw $1 PING : $+ %ping_ [ $+ [ $1 ] ]
  202.       .timerping $+ $1 1 %pingfreq /pingverif $1
  203.     }
  204.     else {
  205.       set %quitchans %chans_ [ $+ [ $1 ] ]
  206.       set %qfullhost $fullhost($1)
  207.       set %qnick $socknick($1)
  208.       set %gserv %server_ [ $+ [ $socknick($1) ] ]
  209.       ;sw $1 ERROR :Closing Link: Ping timeout
  210.       set %quitraison_ [ $+ [ $1 ] ] Quit: Ping Timeout
  211.       sendmultiserver : $+ %qnick QUIT : $+ %quitraison_ [ $+ [ $1 ] ]
  212.       sockclose2 $1
  213.       gquit $1 Ping Timeout
  214.       ;.timerkill $+ $1 -m 1 200 /sockclose $1
  215.     }
  216.   }
  217. }
  218. alias applymodesonrequest {
  219.   if ($2) {
  220.     unset %endmodes
  221.     set %tnick $socknick($1)
  222.     set %tmodes $2
  223.     ;Chargement des possibles flags de l'users
  224.     set %tflags %oline. [ $+ [ %ircop_ [ $+ [ %tnick ] ] ] ] [ $+ [ .flags ] ]
  225.    
  226.     ;Analyse des modes qu'envoit le client...
  227.     ;On regroupe les modes par signe (grâce à $positivemodes et $negativemodes)
  228.     set %tmodes.pos $positivemodes(%tmodes)
  229.     set %tmodes.neg $negativemodes(%tmodes)
  230.     var %i 1
  231.     set %len $len(%tmodes)
  232.     unset %tumodes
  233.     set %tumodes %umodes_ [ $+ [ %tnick ] ]
  234.     while (%i <= %len) {
  235.       set %tlettre $mid(%tmodes,%i,1)
  236.       if (%tlettre isincs %tmodes.pos) {
  237.         set %signe $chr(43)
  238.       }
  239.       elseif (%tlettre isincs %tmodes.neg) {
  240.         set %signe $chr(45)
  241.       }
  242.       if ((%tlettre != $chr(43)) && (%tlettre != $chr(45))) {
  243.         if (%signe == $chr(43)) {
  244.           if (!$3) {
  245.             if (%tlettre isincs %tumodes) {
  246.               sw $1 : $+ %me 525 %tnick :You already have this umode ( $+ %tlettre $+ )
  247.               goto endwhileumode
  248.             }
  249.           }
  250.         }
  251.         if (%signe == $chr(45)) {
  252.           if (!$3) {
  253.             if (%tlettre !isincs %tumodes) {
  254.               sw $1 : $+ %me 526 %tnick :You don't have this umode ( $+ %tlettre $+ )
  255.               goto endwhileumode
  256.             }
  257.           }
  258.         }
  259.       }
  260.       ;Commençons par nous occuper des modes que tout le monde peut se foutre
  261.       if ((%tlettre === s) || (%tlettre === i) || (%tlettre === w) || (%tlettre === R) || (%tlettre === V)) {
  262.         if (%tlettre !== s) {
  263.           set %endmodes %endmodes $+ %signe $+ %tlettre
  264.           umodesrv %signe %tnick %tlettre
  265.         }
  266.         if (%tlettre === s) {
  267.           if ($3) {
  268.             set %tsnomask $3
  269.             set %tsnomask.pos $positivemodes(%tsnomask)
  270.             set %tsnomask.neg $negativemodes(%tsnomask)
  271.             ;<- :irc.G-SERVER.net 008 G-FACTION :Server notice mask (+cfvGqs)
  272.             var %o 1
  273.             set %len2 $len(%tsnomask)
  274.             while (%o <= %len2) {
  275.               set %ttsnomask $mid(%tsnomask,%o,1)
  276.               if (%ttsnomask isincs %tsnomask.pos) {
  277.                 set %signe2 $chr(43)
  278.               }
  279.               elseif (%ttsnomask isincs %tsnomask.neg) {
  280.                 set %signe2 $chr(45)
  281.               }
  282.               set %tttsnomask %snomask_ [ $+ [ %tnick ] ]
  283.               ;sw $1 : $+ %me 999 %tnick :tttsnomask: %tttsnomask && ttsnomask: %ttsnomask
  284.               if ((%ttsnomask != $chr(43)) && (%ttsnomask != $chr(45))) {
  285.                 if (%signe2 == $chr(43)) {
  286.                   if (%ttsnomask isincs %tttsnomask) {
  287.                     sw $1 : $+ %me 527 %tnick :You already have this snomask ( $+ %ttsnomask $+ )
  288.                     goto endwhilesnomask
  289.                   }
  290.                 }
  291.                 elseif (%signe2 == $chr(45)) {
  292.                   if (%ttsnomask !isincs %tttsnomask) {
  293.                     sw $1 : $+ %me 528 %tnick :You don't have this snomask ( $+ %ttsnomask $+ )
  294.                     goto endwhilesnomask
  295.                   }
  296.                 }
  297.               }
  298.               if ((%ttsnomask === k) || (%ttsnomask === s)) {
  299.                 ;<- :irc.G-SERVER.net 008 G-FACTION :Server notice mask (+cfvGqs)
  300.                 ;sw $1 : $+ %me 999 %tnick :haha1
  301.                 snomasksrv %signe2 %tnick %ttsnomask
  302.                 sw $1 : $+ %me 008 %tnick :Server notice mask ( $+ $chr(43) $+ %snomask_ [ $+ [ %tnick ] ] $+ )
  303.               }
  304.               elseif ((%ttsnomask === c) || (%ttsnomask === j) || (%ttsnomask === n) || (%ttsnomask === q) || (%ttsnomask === v) || (%ttsnomask === G) || (%ttsnomask === F) || (%ttsnomask === o)) {
  305.                 if (%ttsnomask !== F) {
  306.                   if (o isin %tumodes) {
  307.                     snomasksrv %signe2 %tnick %ttsnomask
  308.                     sw  $1 : $+ %me 008 %tnick :Server notice mask ( $+ $chr(43) $+ %snomask_ [ $+ [ %tnick ] ] $+ )
  309.                   }
  310.                   else {
  311.                     sw $1 : $+ %me 523 %tnick :Permission Denied - You do not have the correct IRC Operator privileges for this snomask
  312.                   }
  313.                 }
  314.                 else {
  315.                   if (o isincs %tumodes) {
  316.                     snomasksrv %signe2 %tnick %ttsnomask
  317.                     sw  $1 : $+ %me 008 %tnick :Server notice mask ( $+ $chr(43) $+ %snomask_ [ $+ [ %tnick ] ] $+ )
  318.                   }
  319.                   else {
  320.                     sw $1 : $+ %me 523 %tnick :Permission Denied - You do not have the correct IRC Operator privileges for this snomask
  321.                   }
  322.                 }
  323.               }
  324.               else {
  325.                 if ((%ttsnomask != $chr(43)) && (%ttsnomask != $chr(45))) {
  326.                   sw $1 : $+ %me 524 %tnick : $+ %ttsnomask : Unknown Snomask
  327.                 }
  328.               }
  329.               :endwhilesnomask
  330.               inc %o
  331.             }
  332.           }
  333.           if (%signe == $chr(43)) {
  334.             if (s !isincs %tumodes) {
  335.               set %endmodes %endmodes $+ %signe $+ %tlettre
  336.               umodesrv %signe %tnick %tlettre
  337.             }
  338.           }
  339.           if (%signe == $chr(45)) {
  340.             if (s isincs %tumodes) {
  341.               set %endmodes %endmodes $+ %signe $+ %tlettre
  342.               umodesrv %signe %tnick %tlettre
  343.             }
  344.           }
  345.         }
  346.       }
  347.       elseif (%tlettre === x) {
  348.         if (%signe == $chr(43)) {
  349.           set %host_ [ $+ [ $1 ] ] %host.bak_ [ $+ [ $1 ] ]
  350.         }
  351.         elseif (%signe == $chr(45)) {
  352.           set %host_ [ $+ [ $1 ] ] %vraiehost_ [ $+ [ $1 ] ]
  353.         }
  354.         set %endmodes %endmodes $+ %signe $+ %tlettre
  355.         umodesrv %signe %tnick %tlettre
  356.       }
  357.       elseif (%tlettre === B) {
  358.         set %endmodes %endmodes $+ %signe $+ %tlettre
  359.         umodesrv %signe %tnick %tlettre
  360.         botmotd $1
  361.       }
  362.       ;Puis, on s'occupe des modes qui vont demander de se référer à la o:line de l'utilisateur.
  363.       elseif ((%tlettre === p) || (%tlettre === H) || (%tlettre === W) || (%tlettre === N) || (%tlettre === o) || (%tlettre === O) || (%tlettre === A) || (%tlettre === C) || (%tlettre === a) || (%tlettre === g)) {
  364.         if (o isin %tumodes) {
  365.           if (%tlettre === N) {
  366.             if (N isincs %tflags) {
  367.               set %endmodes %endmodes $+ %signe $+ %tlettre
  368.               umodesrv %signe %tnick %tlettre
  369.             }
  370.             else {
  371.               sw $1 : $+ %me 522 :Permission Denied - You do not have the correct IRC Operator privileges for this umode
  372.             }
  373.           }
  374.           elseif (%tlettre === o) {
  375.             if (O isincs %tflags) {
  376.               set %endmodes %endmodes $+ %signe $+ %tlettre
  377.               umodesrv %signe %tnick %tlettre
  378.             }
  379.             else {
  380.               sw $1 : $+ %me 522 :Permission Denied - You do not have the correct IRC Operator privileges for this umode
  381.             }
  382.           }
  383.           elseif (%tlettre === O) {
  384.             if (o isincs %tflags) {
  385.               set %endmodes %endmodes $+ %signe $+ %tlettre
  386.               umodesrv %signe %tnick %tlettre
  387.             }
  388.             else {
  389.               sw $1 : $+ %me 522 :Permission Denied - You do not have the correct IRC Operator privileges for this umode
  390.             }
  391.           }
  392.           elseif (%tlettre === A) {
  393.             if (A isincs %tflags) {
  394.               set %endmodes %endmodes $+ %signe $+ %tlettre
  395.               umodesrv %signe %tnick %tlettre
  396.             }
  397.             else {
  398.               sw $1 : $+ %me 522 :Permission Denied - You do not have the correct IRC Operator privileges for this umode
  399.             }
  400.           }
  401.           elseif (%tlettre === C) {
  402.             if (C isincs %tflags) {
  403.               set %endmodes %endmodes $+ %signe $+ %tlettre
  404.               umodesrv %signe %tnick %tlettre
  405.             }
  406.             else {
  407.               sw $1 : $+ %me 522 :Permission Denied - You do not have the correct IRC Operator privileges for this umode
  408.             }
  409.           }
  410.           elseif (%tlettre === a) {
  411.             if (a isincs %tflags) {
  412.               set %endmodes %endmodes $+ %signe $+ %tlettre
  413.               umodesrv %signe %tnick %tlettre
  414.             }
  415.             else {
  416.               sw $1 : $+ %me 522 :Permission Denied - You do not have the correct IRC Operator privileges for this umode
  417.             }
  418.           }
  419.           elseif (%tlettre === g) {
  420.             if (g isincs %tflags) {
  421.               set %endmodes %endmodes $+ %signe $+ %tlettre
  422.               umodesrv %signe %tnick %tlettre
  423.             }
  424.             else {
  425.               sw $1 : $+ %me 522 :Permission Denied - You do not have the correct IRC Operator privileges for this umode
  426.             }
  427.           }
  428.         }
  429.         else {
  430.           ;Note : +raw.txt
  431.           sw $1 : $+ %me 522 :Permission Denied - You do not have the correct IRC Operator privileges for this umode
  432.         }
  433.       }
  434.       elseif (%tlettre === h) {
  435.         if (h isincs %tflags) {
  436.           set %endmodes %endmodes $+ %signe $+ %tlettre
  437.           umodesrv %signe %tnick %tlettre
  438.         }
  439.         else {
  440.           sw $1 : $+ %me 522 :Permission Denied - You do not have the correct IRC Operator privileges for this umode
  441.         }
  442.       }
  443.      
  444.      
  445.       /*Memo :
  446.       Faire //mode $me -o
  447.       Revient à faire : -oOhaANW
  448.       Ca n'enleve naturellement pas ceux-ci : +wgsx
  449.       */
  450.      
  451.       else {
  452.         if ((%tlettre != $chr(45)) && (%tlettre != $chr(43))) {
  453.           sw $1 : $+ %me 501 %tnick : $+ %tlettre : Unknown MODE flag
  454.         }
  455.       }
  456.       :endwhileumode
  457.       inc %i
  458.     }
  459.     if (%endmodes) {
  460.       sw $1 : $+ %tnick MODE %tnick : $+ $reconvmodes(%endmodes)
  461.       sendmultiserver : $+ %tnick MODE %tnick : $+ $reconvmodes(%endmodes)
  462.     }
  463.   }
  464. }
  465.  
  466. alias applyumodesoline {
  467.   set %tnick $socknick($1)
  468.   unset %ttumodes
  469.   set %tumodes %oline. [ $+ [ %ircop_ [ $+ [ %tnick ] ] ] ] [ $+ [ .flags ] ]
  470.   if (o isincs %tumodes) {
  471.     set %ttumodes %ttumodes $+ O
  472.   }
  473.   if (O isincs %tumodes) {
  474.     set %ttumodes %ttumodes $+ o
  475.   }
  476.   set %ttumodes %ttumodes $+ $replacecs(%tumodes,a,a,A,A,N,N,C,C,g,g,h,h,w,w,R,,D,,n,,K,,G,,k,,b,,B,,t,,z,,Z,,v,,H,,W,,r,)
  477.   umodesrv $chr(43) %tnick %ttumodes
  478.   sw $1 : $+ %tnick MODE %tnick : $+ $chr(43) $+ %ttumodes
  479. }
  480.  
  481. alias gopen {
  482.   ;made by G-FACTION
  483.   var %handle $+(FILE::,$rand($calc($ticks/4*2/5),$ticks))
  484.   .fopen %handle $1
  485.   if ($fopen(%handle).err) { .fclose %handle | return 0 }
  486.   else { return %handle }
  487. }
  488.  
  489. alias botmotd {
  490.   if ($1) {
  491.     if ($exists(%botmotdfile)) {
  492.       set %botmotdnick $socknick($1)
  493.       sw $1 : $+ %me NOTICE %botmotdnick :- %me Bot Message Of The Day -
  494.       var %file $gopen(%botmotdfile)
  495.       while ($fread(%file)) {
  496.         sw $1 : $+ %me NOTICE %botmotdnick :- $+ $ifmatch
  497.       }
  498.       .fclose %file
  499.       sw $1: $+ %me NOTICE %botmotdnick :End of /BOTMOTD command.
  500.     }
  501.     else {
  502.       sw $1 : $+ %me NOTICE %botmotdnick :BOTMOTD File not found
  503.     }
  504.   }
  505.   .fclose %file
  506. }
  507.  
  508. alias umodesrv {
  509.   if ($2) {
  510.     if ($1 == $chr(43)) {
  511.       set %tumodes $removecs(%umodes_ [ $+ [ $2 ] ],$3)
  512.       set %umodes_ [ $+ [ $2 ] ] %tumodes $+ $3
  513.     }
  514.     elseif ($1 == $chr(45)) {
  515.       set %umodes_ [ $+ [ $2 ] ] $removecs(%umodes_ [ $+ [ $2 ] ],$3)
  516.     }
  517.   }
  518. }
  519.  
  520. alias snomasksrv {
  521.   ;signe nick snomask
  522.   if ($2) {
  523.     if ($1 == $chr(43)) {
  524.       set %tsnomask2 $removecs(%snomask_ [ $+ [ $2 ] ],$3)
  525.       set %snomask_ [ $+ [ $2 ] ] %tsnomask2 $+ $3
  526.     }
  527.     elseif ($1 == $chr(45)) {
  528.       set %snomask_ [ $+ [ $2 ] ] $removecs(%snomask_ [ $+ [ $2 ] ],$3)
  529.     }
  530.   }
  531. }
  532.  
  533. alias positivemodes {
  534.   unset %positivemodes
  535.   if (($left($1,1) != $chr(45)) && ($left($1,1) != $chr(43))) {
  536.     set %tmodes + $+ $1-
  537.   }
  538.   else { set %tmodes $1- }
  539.   set %tmodes - $+ %tmodes
  540.   if ($1) {
  541.     var %i 1
  542.     set %len $len($1-)
  543.     set %tokenmodes $gettok(%tmodes,0,43)
  544.     while ($calc(%i + 1) <= %tokenmodes) {
  545.       set %positivemodes %positivemodes $+ $deltok($gettok(%tmodes,$calc(%i + 1),43),2-,45)
  546.       inc %i
  547.     }
  548.   }
  549.   return %positivemodes
  550. }
  551.  
  552. alias negativemodes {
  553.   unset %negativemodes
  554.   if (($left($1,1) != $chr(45)) && ($left($1,1) != $chr(43))) {
  555.     set %tmodes + $+ $1-
  556.   }
  557.   else { set %tmodes $1- }
  558.   set %tmodes + $+ %tmodes
  559.   if ($1) {
  560.     var %i 1
  561.     set %len $len($1-)
  562.     set %tokenmodes $gettok(%tmodes,0,45)
  563.     while ($calc(%i + 1) <= %tokenmodes) {
  564.       set %negativemodes %negativemodes $+ $deltok($gettok(%tmodes,$calc(%i + 1),45),2-,43)
  565.       inc %i
  566.     }
  567.   }
  568.   return %negativemodes
  569. }
  570.  
  571. alias isatleast {
  572.   ;$isatleast(mode,nick,chan)
  573.   ;            1     2    3
  574.   ;Exemple : $isatleast(h,G-FACTION,#scripts) va retourner $true si je suis op, halfop, ou owner :p
  575.   if ($3) {
  576.     set %chanfile $chanfile($3)
  577.     if (!$exists(%chanfile)) {
  578.       goto isatleastend
  579.     }
  580.     var %file $gopen(%chanfile)
  581.     while ($fread(%file)) {
  582.       set %r $ifmatch
  583.       if (($left(%r,1) == $chr(64)) || ($left(%r,1) == $chr(37)) || ($left(%r,1) == $chr(43)) || ($left(%r,1) == $chr(38)) || ($left(%r,1) == $chr(126))) {
  584.         set %is $left(%r,1)
  585.         set %tnick $right(%r,$calc($len(%r) - 1))
  586.       }
  587.       else {
  588.         set %is rien
  589.         set %tnick %r
  590.       }
  591.       if (%tnick == $2) {
  592.         set %iss %is
  593.       }
  594.     }
  595.     .fclose %file
  596.     :isatleastend
  597.     if ($1 === o) {
  598.       if ((%iss == $chr(64)) || (%iss == $chr(126)) || (%iss == $chr(38))) {
  599.         set %isatleast yes
  600.       }
  601.       else {
  602.         set %isatleast no
  603.       }
  604.     }
  605.     elseif ($1 == h) {
  606.       if ((%iss == $chr(64)) || (%iss == $chr(126)) || (%iss == $chr(37)) || (%iss == $chr(38))) {
  607.         set %isatleast yes
  608.       }
  609.       else {
  610.         set %isatleast no
  611.       }
  612.     }
  613.     elseif ($1 == v) {
  614.       if ((%iss == $chr(64)) || (%iss == $chr(126)) || (%iss == $chr(37)) || (%iss == $chr(43)) || (%iss == $chr(38))) {
  615.         set %isatleast yes
  616.       }
  617.       else {
  618.         set %isatleast no
  619.       }
  620.     }
  621.     elseif ($1 == q) {
  622.       if (%iss == $chr(126)) {
  623.         set %isatleast yes
  624.       }
  625.       else {
  626.         set %isatleast no
  627.       }
  628.     }
  629.     elseif ($1 == a) {
  630.       if ((%iss == $chr(38)) |- (%iss == $chr(126))) {
  631.         set %isatleast yes
  632.       }
  633.       else {
  634.         set %isatleast no
  635.       }
  636.     }
  637.     if (%isatleast == yes) {
  638.       return $true
  639.     }
  640.     else {
  641.       return $false
  642.     }
  643.   }
  644. }
  645.  
  646. alias strongerthan {
  647.   ;$strongerthan(a,q) = $false (a pas plus fort que q)
  648.   if ($2) {
  649.     if ($1 == q) {
  650.       return $true
  651.     }
  652.     elseif ($1 == a) {
  653.       if ($2 == q) {
  654.         return $false
  655.       }
  656.       else {
  657.         return $true
  658.       }
  659.     }
  660.     elseif ($1 == o) {
  661.       if (($2 == a) || ($2 == q)) {
  662.         return $false
  663.       }
  664.       else {
  665.         return $true
  666.       }
  667.     }
  668.     elseif ($1 == h) {
  669.       if (($2 == o) || ($2 == a) || ($2 == q)) {
  670.         return $false
  671.       }
  672.       else {
  673.         return $true
  674.       }
  675.     }
  676.     elseif ($1 == v) {
  677.       if (($2 == h) || ($2 == o) || ($2 == a) || ($2 == q)) {
  678.         return $false
  679.       }
  680.       else {
  681.         return $true
  682.       }
  683.     }
  684.     elseif ($1 == NULL) {
  685.       if ($2 == NULL) {
  686.         return $true
  687.       }
  688.       else {
  689.         return $false
  690.       }
  691.     }
  692.   }
  693. }
  694.  
  695. alias nfochanfile {
  696.   if ($1) {
  697.     return $mircdir $+ System\ $+ $1 $+ .nfo
  698.   }
  699. }
  700.  
  701. alias chmodestxsrv {
  702.   ;chmodesrv +- Chan Mode
  703.   if ($3) {
  704.     if ($1 == $chr(43)) {
  705.       set %m $replacecs($3,N,1,S,3,C,4,T,5)
  706.       writeini -n $nfochanfile($2) STXM %m on
  707.     }
  708.     elseif ($1 == $chr(45)) {
  709.       set %m $replacecs($3,N,1,S,3,C,4,T,5)
  710.       writeini -n $nfochanfile($2) STXM %m off
  711.     }
  712.   }
  713. }
  714.  
  715. alias chmodedynsrv {
  716.   ;chmodedynsrv +- #chan k lepass
  717.   ;              1    2  3    4
  718.   echo -a 10chmodedynsrv $1-
  719.   if ($3) {
  720.     if ($1 == $chr(43)) {
  721.       set %m $replacecs($3,L,2)
  722.       writeini -n $nfochanfile($2) DYNM %m on
  723.       writeini -n $nfochanfile($2) DYNM %m $+ .arg $4
  724.     }
  725.     elseif ($1 == $chr(45)) {
  726.       set %m $replacecs($3,L,2)
  727.       writeini -n $nfochanfile($2) DYNM %m off
  728.     }
  729.   }
  730. }
  731.  
  732. alias sendchannel {
  733.   ;sendchannel #chan Le message... ^^
  734.   if ($2) {
  735.     var %o 0
  736.     if (!$exists($chanfile($1))) {
  737.       goto sendchannelend
  738.     }
  739.     var %file $gopen($chanfile($1))
  740.     while ($fread(%file)) {
  741.       inc %o
  742.       set %r $ifmatch
  743.       if (($left(%r,1) == $chr(64)) || ($left(%r,1) == $chr(37)) || ($left(%r,1) == $chr(43)) || ($left(%r,1) == $chr(38)) || ($left(%r,1) == $chr(126))) {
  744.         set %tempnick $right(%r,$calc($len(%r) - 1))
  745.       }
  746.       else {
  747.         set %tempnick %r
  748.       }
  749.       if (($sock(%sockname_ [ $+ [ %tempnick ] ])) && (%server_ [ $+ [ %tempnick ] ] == %me)) {
  750.         ;echo -a 7sw %sockname_ [ $+ [ %tempnick ] ] $2-
  751.         sw %sockname_ [ $+ [ %tempnick ] ] $2-
  752.       }
  753.       else {
  754.         if (!$sock($+(gserv.,$passerelle(%server_ [ $+ [ %tempnick ] ])))) {
  755.           ;Ghost repéré...
  756.           echo @sr 3Ghost repéré, ligne %o de $chanfile($1) supprimée ( $+ $read($chanfile($1),%o) $+ )
  757.           write -dl $+ %o $chanfile($1)
  758.         }
  759.       }
  760.     }
  761.     .fclose %file
  762.     :sendchannelend
  763.   }
  764. }
  765.  
  766. alias chmodestatussrv {
  767.   ;chmodestatussrv +- Chan Mode Personne
  768.   ;                 1   2    3     4
  769.   echo @sr 13Entering chmodestatussrv function
  770.   echo @sr 131: $1 2: $2 3: $3 4: $4
  771.   if ($4) {
  772.     unset %laligne
  773.     var %i 0
  774.     var %file $gopen($chanfile($2))
  775.     while ($fread(%file)) {
  776.       inc %i
  777.       set %r $ifmatch
  778.       ;echo -a 2 $+ %r
  779.       if (($left(%r,1) == $chr(64)) || ($left(%r,1) == $chr(37)) || ($left(%r,1) == $chr(43)) || ($left(%r,1) == $chr(38)) || ($left(%r,1) == $chr(126))) {
  780.         set %tempnick $right(%r,$calc($len(%r) - 1))
  781.       }
  782.       else {
  783.         set %tempnick %r
  784.       }
  785.       if (%tempnick == $4) {
  786.         ;echo -a 4Personne repérée...
  787.         set %laligne %i
  788.         echo @sr 13Laligne: %laligne
  789.         echo @sr 13Personne: %tempnick
  790.       }
  791.     }
  792.     .fclose %file
  793.     if (%laligne) {
  794.       echo @sr 13chmodestatussrv : delete line : %laligne in $chanfile($2)
  795.       write -dl $+ %laligne $chanfile($2)
  796.     }
  797.     if ($1 == $chr(43)) {
  798.       set %tempstsm $readini($nfochanfile($2),STSM,$4)
  799.       set %tempstsm $removecs(%tempstsm,$3)
  800.       set %tempstsm %tempstsm $+ $3
  801.       writeini -n $nfochanfile($2) STSM $4 %tempstsm
  802.       echo @sr 13write $chanfile($2) $replace($strongermode(%tempstsm),v,$chr(43),h,$chr(37),o,$chr(64),q,$chr(126),a,$chr(38)) $+ $4
  803.       write $chanfile($2) $replace($strongermode(%tempstsm),v,$chr(43),h,$chr(37),o,$chr(64),q,$chr(126),a,$chr(38)) $+ $4
  804.     }
  805.     elseif ($1 == $chr(45)) {
  806.       set %tempstsm $readini($nfochanfile($2),STSM,$4)
  807.       set %tempstsm $removecs(%tempstsm,$3)
  808.       if (!%tempstsm) { set %tempstsm z }
  809.       writeini -n $nfochanfile($2) STSM $4 %tempstsm
  810.       set %tstrongermode $strongermode(%tempstsm)
  811.       if (%tstrongermode != NULL) {
  812.         echo @sr 13write $chanfile($2) $replace(%tstrongermode,v,$chr(43),h,$chr(37),o,$chr(64),q,$chr(126),a,$chr(38),z,) $+ $4
  813.         write $chanfile($2) $replace(%tstrongermode,v,$chr(43),h,$chr(37),o,$chr(64),q,$chr(126),a,$chr(38),z,) $+ $4
  814.       }
  815.       else {
  816.         echo @sr 13write $chanfile($2) $4
  817.         write $chanfile($2) $4
  818.       }
  819.     }
  820.   }
  821. }
  822.  
  823. alias strongermode {
  824.   ;Alias définissant le plus fort mode de ceux proposés, sans l'ordre 'qaohv'
  825.   if ($1) {
  826.     unset %sm
  827.     if ((v isincs $1) && (h !isincs $1) && (o !isincs $1) && (a !isincs $1) && (q !isincs $1)) {
  828.       set %sm v
  829.     }
  830.     elseif ((h isincs $1) && (o !isincs $1) && (a !isincs $1) && (q !isincs $1)) {
  831.       set %sm h
  832.     }
  833.     elseif ((o isincs $1) && (a !isincs $1) && (q !isincs $1)) {
  834.       set %sm o
  835.     }
  836.     elseif ((a isincs $1) && (q !isincs $1)) {
  837.       set %sm a
  838.     }
  839.     elseif (q isincs $1) {
  840.       set %sm q
  841.     }
  842.     else {
  843.       set %sm NULL
  844.     }
  845.     return %sm
  846.   }
  847. }
  848.  
  849. alias reconvmodes {
  850.   if ($1) {
  851.     var %i 1
  852.     unset %endstr
  853.     unset %derniersigne
  854.     while (%i <= $len($1)) {
  855.       set %rmode $mid($1,%i,1)
  856.       if ((%rmode == $chr(43)) || (%rmode == $chr(45))) {
  857.         if (%rmode != %derniersigne) {
  858.           set %derniersigne %rmode
  859.           set %endstr %endstr $+ %rmode
  860.         }
  861.         goto finwhile
  862.       }
  863.       else {
  864.         set %endstr %endstr $+ %rmode
  865.       }
  866.       :finwhile
  867.       inc %i
  868.     }
  869.     return %endstr
  870.   }
  871. }
  872.  
  873. alias chbanlist {
  874.   ;chbanlist %chsigne %chchan $quelargument(%i,%chmodes) %chnick $ctime extension(bl par exemple)
  875.   ;chbanlist     +   #G-FACTION        *lol*!*@*        G-FACTION 1108716436       bl
  876.   ;              1        2                3                 4         5            6
  877.   echo -a 13 $+ $1-
  878.   if ($6) {
  879.     echo -a haha
  880.     unset %laligne
  881.     set %banfile $mirc $+ System\ $+ $2 $+ $chr(46) $+ $6
  882.     echo -a 3 $+ %banfile
  883.     if (!$exists(%banfile)) {
  884.       echo -a mwahaa
  885.       goto chbanlistend
  886.     }
  887.     echo -a 4KJHBZRF
  888.     var %i 0
  889.     if (($3 == $chr(42)) || ($3 == $chr(33)) || ($3 == $chr(64))) {
  890.     echo -a !!!1
  891.       set %bmask *!*@*
  892.     }
  893.     elseif (($chr(64) !isin $3) && ($chr(33) !isin $3) && ($chr(42) !isin $3)) {
  894.     echo -a !!!2
  895.       set %bmask $3 $+ !*@*
  896.       echo -a %bmask :)
  897.     }
  898.     elseif (($chr(64) !isin $3) && ($chr(33) !isin $3)) {
  899.       echo -a !!!5
  900.       set %bmask $3 $+ !*@*
  901.     }
  902.     else {
  903.     echo -a !!!4
  904.       set %bmask $3
  905.     }
  906.     var %file $gopen(%banfile)
  907.     while ($fread(%file)) {
  908.       inc %i
  909.       ;set %r $read(%banfile,n,%i)
  910.       set %r $ifmatch
  911.       echo -a $gettok(%r,1,32) == %bmask
  912.       if ($gettok(%r,1,32) == %bmask) {
  913.         set %laligne %i
  914.       }
  915.     }
  916.     .fclose %file
  917.     :chbanlistend
  918.     if (%laligne) {
  919.       if ($1 == $chr(43)) {
  920.         goto chbanlistend2
  921.       }
  922.       else {
  923.         write -dl $+ %laligne %banfile
  924.       }
  925.     }
  926.     if ($1 == $chr(43)) {
  927.       if (%bmask != ERROR) {
  928.         write %banfile %bmask $4 $5
  929.         ;<- :G-FACTION!~G-FACTION@EpiK-5A393E5B.fbx.proxad.net MODE #g-faction +b pa!*@*
  930.         echo -a sendchannel $2 : $+ $fullhost(%sockname_ [ $+ [ $4 ] ]) MODE $2 $1 $+ $iif($6 == bl,b,e) %bmask
  931.         sendchannel $2 : $+ $fullhost(%sockname_ [ $+ [ $4 ] ]) MODE $2 $1 $+ $iif($6 == bl,b,e) %bmask
  932.       }
  933.       else {
  934.         if ($6 == bl) {
  935.           set %mot ban
  936.         }
  937.         elseif ($6 == el) {
  938.           set %mot exception
  939.         }
  940.         sw %sockname_ [ $+ [ $4 ] ] : $+ %me 531 $4 :Invalid %mot mask ( $+ $3 $+ )
  941.         halt
  942.       }
  943.     }
  944.     else {
  945.       if (%laligne) {
  946.         sendchannel $2 : $+ $fullhost(%sockname_ [ $+ [ $4 ] ]) MODE $2 $1 $+ $iif($6 == bl,b,e) %bmask
  947.       }
  948.     }
  949.     :chbanlistend2
  950.   }
  951.   else { echo -a 4!!!!!!!!!!!!!!!!!!!!!!!!!!! }
  952. }
  953.  
  954. alias banfile {
  955.   if ($1) {
  956.     return $mircdir $+ System\ $+ $1 $+ .bl
  957.   }
  958. }
  959.  
  960. alias exceptfile {
  961.   if ($1) {
  962.     return $mircdir $+ System\ $+ $1 $+ .el
  963.   }
  964. }
  965.  
  966. alias zline.add {
  967.   ;zline.add host $ctime timetoexpire host_zlineur raison
  968.   ;           1      2         3           4         5
  969.   if ($5) {
  970.     write $linesfile Z $1-
  971.   }
  972. }
  973.  
  974. alias zline.del {
  975.   if ($1) {
  976.     var %i 0
  977.     set %zfile $linesfile
  978.     if (!$exists(%zfile)) {
  979.       halt
  980.     }
  981.     unset %zline
  982.     unset %r
  983.     var %file $gopen(%zfile)
  984.     while ($fread(%file)) {
  985.       inc %i
  986.       set %r $ifmatch
  987.       if ($gettok(%r,1,32) == Z) {
  988.         if ($gettok(%r,2,32) == $1) {
  989.           write -dl $+ %i %zfile
  990.           break
  991.         }
  992.       }
  993.       inc %i
  994.     }
  995.     .fclose %file
  996.   }
  997. }
  998.  
  999. alias zline.infos {
  1000.   if ($1) {
  1001.     set %zfile $linesfile
  1002.     if (!$exists(%zfile)) {
  1003.       goto zlineinfosend
  1004.     }
  1005.     unset %zline
  1006.     unset %zinfos
  1007.     var %file $gopen(%zfile)
  1008.     while ($fread(%file)) {
  1009.       set %r $ifmatch
  1010.       if ($gettok(%r,1,32) == Z) {
  1011.         if ($gettok(%r,2,32) == $1) {
  1012.           set %zinfos $gettok(%r,3-,32)
  1013.         }
  1014.       }
  1015.     }
  1016.     .fclose %file
  1017.     if (%zinfos) {
  1018.       return %zinfos
  1019.     }
  1020.   }
  1021.   :zlineinfosend
  1022. }
  1023.  
  1024. alias quelargument {
  1025.   ;$quelargument(numero,modes)
  1026.   ;                1      2
  1027.   ;+oooo Nick1 Nick2 Nick3 Nick4
  1028.   ;On veut savoir quel est l'argument du 3ème 'o' par exemple. Ici : Nick3
  1029.   var %i 1
  1030.   set %qlen $len($2)
  1031.   unset %args
  1032.   unset %quelargument
  1033.   while (%i <= %qlen) {
  1034.     set %qmode $mid($2,%i,1)
  1035.     if (%qmode isincs aqhovbeklL) {
  1036.       ;Si le mode doit comporter un argument
  1037.       ;On incrémente la variable qui compte le nombre d'args
  1038.       inc %args
  1039.     }
  1040.     if (%i == $1) {
  1041.       set %quelargument $gettok($2,$calc(%args + 1),32)
  1042.     }
  1043.     inc %i
  1044.   }
  1045.   return %quelargument
  1046. }
  1047.  
  1048. alias sendbanlist {
  1049.   ;sendbanlist sockname chan
  1050.   ;               1       2
  1051.   if ($2) {
  1052.     set %blnick $socknick($1)
  1053.     set %banfile $banfile($2)
  1054.     if (!$exists(%banfile)) {
  1055.       goto sendbanlistend
  1056.     }
  1057.     var %file $gopen(%banfile)
  1058.     while ($fread(%file)) {
  1059.       set %r $ifmatch
  1060.       sw $1 : $+ %me 367 %blnick $2 $gettok(%r,1-3,32)
  1061.     }
  1062.     .fclose %file
  1063.     :sendbanlistend
  1064.     sw $1 : $+ %me 368 %blnick $2 :End of Channel Ban List
  1065.   }
  1066. }
  1067.  
  1068. alias sendexceptlist {
  1069.   ;sendbanlist sockname chan
  1070.   ;               1       2
  1071.   if ($2) {
  1072.     set %exnick $socknick($1)
  1073.     set %exceptfile $exceptfile($2)
  1074.     if (!$exists(%exceptfile)) {
  1075.       goto sendexceptlistend
  1076.     }
  1077.     set %file $gopen(%exceptfile)
  1078.     while ($fread(%file)) {
  1079.       set %r $ifmatch
  1080.       sw $1 : $+ %me 348 %exnick $2 $gettok(%r,1-3,32)
  1081.     }
  1082.     .fclose %file
  1083.     :sendexceptlistend
  1084.     sw $1 : $+ %me 349 %exnick $2 :End of Channel Exception List
  1085.   }
  1086. }
  1087.  
  1088. alias banalreadyexists {
  1089.   if ($3) {
  1090.     set %banfile $mircdir $+ System\ $+ $1 $+ . $+ $3
  1091.     set %bae $false
  1092.     if (!$exists(%banfile)) {
  1093.       goto banalreadyexistsend
  1094.     }
  1095.     set %file $gopen(%banfile)
  1096.     while ($fread(%file)) {
  1097.       set %read $ifmatch
  1098.       if ($gettok(%read,1,32) == $2) {
  1099.         set %bae $true
  1100.       }
  1101.     }
  1102.     .fclose %file
  1103.     :banalreadyexistsend
  1104.     return %bae
  1105.   }
  1106. }
  1107.  
  1108. alias applychmodesonrequest {
  1109.   ;applychmodesonrequest Sockname Chan Modes-
  1110.   ;
  1111.   ;                       1       2    3-
  1112.   if ($3) {
  1113.     ;$sockname $+ $chr(96) $+ %me $2-
  1114.     set %tsock $gettok($1,1,96)
  1115.     set %samode $false
  1116.     if ($gettok($1,2,96)) {
  1117.       set %chnick $ifmatch
  1118.       set %samode $true
  1119.     }
  1120.     else {
  1121.       set %chnick $socknick(%tsock)
  1122.     }
  1123.     set %chchan $2
  1124.     set %chmodes $3-
  1125.     set %chmodes.pos $positivemodes($gettok(%chmodes,1,32))
  1126.     set %chmodes.neg $negativemodes($gettok(%chmodes,1,32))
  1127.     var %i 1
  1128.     unset %endchmodes
  1129.     unset %endstatusmodes
  1130.     unset %enddynmodes
  1131.     unset %chargs
  1132.     set %chlen $len($3)
  1133.     set %operoverride $false
  1134.     if (%ircop_ [ $+ [ %chnick ] ]) {
  1135.       set %tflags %oline. [ $+ [ %ircop_ [ $+ [ %chnick ] ] ] ] [ $+ [ .flags ] ]
  1136.       if (v isincs %tflags) {
  1137.         set %operoverride $true
  1138.       }
  1139.     }
  1140.     while (%i <= %chlen) {
  1141.       set %chlettre $mid(%chmodes,%i,1)
  1142.       set %chlettre2 $replacecs($mid(%chmodes,%i,1),N,1,L,2,S,3,C,4,T,5)
  1143.       if ((%chlettre == $chr(43)) || (%chlettre == $chr(45))) {
  1144.         ;Alors il s'agit d'un + ou -
  1145.         goto endofchlettrewhile
  1146.       }
  1147.       if (%chlettre isincs %chmodes.pos) {
  1148.         set %chsigne $chr(43)
  1149.       }
  1150.       elseif (%chlettre isincs %chmodes.neg) {
  1151.         set %chsigne $chr(45)
  1152.       }
  1153.       ;Regroupons par type de mode
  1154.       if (%chlettre isincs icmnprstACMKNOQRSVT) {
  1155.         ;Ce sont des static modes
  1156.         ;Regroupons par ordre de privileges requis
  1157.         if (%chsigne == $chr(43)) {
  1158.           if ($readini($nfochanfile(%chchan),STXM,%chlettre2) == on) {
  1159.             goto endofchlettrewhile
  1160.           }
  1161.         }
  1162.         elseif (%chsigne == $chr(45)) {
  1163.           if ($readini($nfochanfile(%chchan),STXM,%chlettre2) != on) {
  1164.             goto endofchlettrewhile
  1165.           }
  1166.         }
  1167.         if (%chlettre isincs imnt) {
  1168.           ;Ce sont les modes où il faut au moins être halfop pour pouvoir les mettre
  1169.           if (($isatleast(h,%chnick,%chchan)) || (%operoverride) || (%samode)) {
  1170.             set %endchmodes %endchmodes $+ %chsigne $+ %chlettre
  1171.             chmodestxsrv %chsigne %chchan %chlettre
  1172.           }
  1173.           else {
  1174.             sw %tsock : $+ %me 482 %chnick %chchan :You're not channel operator
  1175.           }
  1176.         }
  1177.         elseif (%chlettre isincs scpoCMKNQRSVT) {
  1178.           ;Modes où il faut être au moins op
  1179.           if (($isatleast(o,%chnick,%chchan)) || (%operoverride) || (%samode)) {
  1180.             if (%chsigne == $chr(43)) {
  1181.               if (%chlettre === s) {
  1182.                 if (p isincs $chmodes(%chchan)) {
  1183.                   chmodestxsrv $chr(45) %chchan p
  1184.                   set %endchmodes %endchmodes $+ $chr(45) $+ p
  1185.                 }
  1186.               }
  1187.               elseif (%chlettre === p) {
  1188.                 if (s isincs $chmodes(%chchan)) {
  1189.                   chmodestxsrv $chr(45) %chchan s
  1190.                   set %endchmodes %endchmodes $+ $chr(45) $+ s
  1191.                 }
  1192.               }
  1193.             }
  1194.             set %endchmodes %endchmodes $+ %chsigne $+ %chlettre
  1195.             chmodestxsrv %chsigne %chchan %chlettre
  1196.           }
  1197.           else {
  1198.             sw %tsock : $+ %me 482 %chnick %chchan :You're not channel operator
  1199.           }
  1200.         }
  1201.         elseif (%chlettre === O) {
  1202.           ;Mode uniquement appliquable par les IRCops
  1203.           if ((o isin %umodes_ [ $+ [ %chnick ] ]) || (%samode)) {
  1204.             set %endchmodes %endchmodes $+ %chsigne $+ %chlettre
  1205.             chmodestxsrv %chsigne %chchan %chlettre
  1206.           }
  1207.           else {
  1208.             sw %tsock : $+ %me 529 %chnick %chchan :Opers Only mode (+O) can only be set by IRC Operators.
  1209.           }
  1210.         }
  1211.         elseif (%chlettre === A) {
  1212.           if ((a isin %umodes_ [ $+ [ %chnick ] ]) || (N isincs %umodes_ [ $+ [ %chnick ] ]) || (%samode)) {
  1213.             set %endchmodes %endchmodes $+ %chsigne $+ %chlettre
  1214.             chmodestxsrv %chsigne %chchan %chlettre
  1215.           }
  1216.           else {
  1217.             sw %tsock : $+ %me 530 %chnick %chchan :Admins Only mode (+A) can only be set by Administrators.
  1218.           }
  1219.         }
  1220.       }
  1221.       elseif (%chlettre isincs vhoaq) {
  1222.         ;Ce sont des status modes
  1223.         if ($quelargument(%i,%chmodes)) {
  1224.           if (%chsigne == $chr(43)) {
  1225.             if (%chlettre isincs $readini($nfochanfile(%chchan),STSM,$quelargument(%i,%chmodes))) {
  1226.               goto endofchlettrewhile
  1227.             }
  1228.           }
  1229.           elseif (%chsigne == $chr(45)) {
  1230.             if (%chlettre !isincs $readini($nfochanfile(%chchan),STSM,$quelargument(%i,%chmodes))) {
  1231.               goto endofchlettrewhile
  1232.             }
  1233.           }
  1234.           write haha.txt juste avant le $eval($ison,0)
  1235.           if (($ison(%chnick,%chchan)) || (%samode)) {
  1236.           write haha.txt juste avant le $eval($ison,0) 2
  1237.           if (!$ison($quelargument(%i,%chmodes),%chchan)) {
  1238.           write haha.txt dans le ison 2 !
  1239.             ;<- :besancon3.fr.epiknet.org 401 G-FACTION mdr :No such nick/channel
  1240.             if (!%samode) {
  1241.               sw %tsock : $+ %me 401 %chnick $quelargument(%i,%chmodes) :No such nick/channel
  1242.             }
  1243.             goto hahaha
  1244.           }
  1245.           }
  1246.           else {
  1247.             ;<- :besancon3.fr.epiknet.org 482 G-FACTION #lol :You're not channel operator
  1248.             if (!%samode) {
  1249.               sw %tsock : $+ %me 482 %chnick %chchan  :You're not channel operator
  1250.             }
  1251.             goto hahaha
  1252.           }
  1253.           else {
  1254.           }
  1255.           if (%chlettre === v) {
  1256.             if (($isatleast(h,%chnick,%chchan)) || (%operoverride) || (%samode)) {
  1257.               set %endstatusmodes %endstatusmodes $+ %chsigne $+ %chlettre
  1258.               chmodestatussrv %chsigne %chchan %chlettre $quelargument(%i,%chmodes)
  1259.               set %chargs %chargs $quelargument(%i,%chmodes)
  1260.             }
  1261.             else {
  1262.               sw %tsock : $+ %me 482 %chnick %chchan :You're not channel operator
  1263.             }
  1264.           }
  1265.           elseif (%chlettre === h) {
  1266.             if (($isatleast(o,%chnick,%chchan)) || (%operoverride) || (%samode)) {
  1267.               set %endstatusmodes %endstatusmodes $+ %chsigne $+ %chlettre
  1268.               chmodestatussrv %chsigne %chchan %chlettre $quelargument(%i,%chmodes)
  1269.               set %chargs %chargs $quelargument(%i,%chmodes)
  1270.             }
  1271.             else {
  1272.               sw %tsock : $+ %me 482 %chnick %chchan :You're not channel operator
  1273.             }
  1274.           }
  1275.           elseif (%chlettre === o) {
  1276.             if (($isatleast(o,%chnick,%chchan)) || (%operoverride) || (%samode)) {
  1277.               set %endstatusmodes %endstatusmodes $+ %chsigne $+ %chlettre
  1278.               chmodestatussrv %chsigne %chchan %chlettre $quelargument(%i,%chmodes)
  1279.               set %chargs %chargs $quelargument(%i,%chmodes)
  1280.             }
  1281.             else {
  1282.               sw %tsock : $+ %me 482 %chnick %chchan :You're not channel operator
  1283.             }
  1284.           }
  1285.           elseif ((%chlettre === a) || (%chlettre === q)) {
  1286.             if (($isatleast(q,%chnick,%chchan)) || (%operoverride) || (%samode)) {
  1287.               set %endstatusmodes %endstatusmodes $+ %chsigne $+ %chlettre
  1288.               chmodestatussrv %chsigne %chchan %chlettre $quelargument(%i,%chmodes)
  1289.               set %chargs %chargs $quelargument(%i,%chmodes)
  1290.             }
  1291.             else {
  1292.               sw %tsock : $+ %me 482 %chnick %chchan :You're not channel operator
  1293.             }
  1294.           }
  1295.           :hahaha
  1296.         }
  1297.       }
  1298.       elseif (%chlettre isincs beklL) {
  1299.         ;Alors ce sont des dynamic modes
  1300.         if (%chlettre === e) {
  1301.           set %format el
  1302.         }
  1303.         elseif (%chlettre === b) {
  1304.           set %format bl
  1305.         }
  1306.         if (%chlettre !isincs eb) {
  1307.           if (%chsigne == $chr(43)) {
  1308.             if ($readini($nfochanfile(%chchan),DYNM,%chlettre2) == on) {
  1309.               if ($readini($nfochanfile(%chchan),DYNM,%chlettre2 $+ .arg) == $quelargument(%i,%chmodes)) {
  1310.                 goto endofchlettrewhile
  1311.               }
  1312.             }
  1313.           }
  1314.           elseif (%chsigne == $chr(45)) {
  1315.             if ($readini($nfochanfile(%chchan),DYNM,%chlettre2) != on) {
  1316.               goto endofchlettrewhile
  1317.             }
  1318.           }
  1319.         }
  1320.         if ((%chlettre === b) || (%chlettre === e)) {
  1321.           ;Le fichier de banlist d'un canal est #canal.bl
  1322.           ;Le format dans le fichier : Mask Banner ctime
  1323.           if (!$len($quelargument(%i,%chmodes))) {
  1324.             if (%chlettre === b) {
  1325.               sendbanlist %tsock %chchan
  1326.               goto endofchlettrewhile
  1327.             }
  1328.             elseif (%chlettre === e) {
  1329.               sendexceptlist %tsock %chchan
  1330.               goto endofchlettrewhile
  1331.             }
  1332.           }
  1333.           if (($isatleast(h,%chnick,%chchan)) || (%operoverride) || (%samode)) {
  1334.             if ($len($quelargument(%i,%chmodes))) {
  1335.               ;set %enddynmodes %enddynmodes $+ %chsigne $+ %chlettre
  1336.               chbanlist %chsigne %chchan $quelargument(%i,%chmodes) %chnick $ctime %format
  1337.               ;set %chargs %chargs $quelargument(%i,%chmodes)
  1338.             }
  1339.           }
  1340.           else {
  1341.             sw %tsock : $+ %me 482 %chnick %chchan :You're not channel operator
  1342.           }
  1343.         }
  1344.         elseif ((%chlettre === k) || (%chlettre === l) || (%chlettre === L)) {
  1345.           if (%chsigne == $chr(43)) {
  1346.             if (!$quelargument(%i,%chmodes)) {
  1347.               goto endofchlettrewhile
  1348.             }
  1349.           }
  1350.           if (%chsigne == $chr(43)) {
  1351.             if (%chlettre === L) {
  1352.               if (l isincs $chmodes(%chchan)) {
  1353.                 ;974 G-FACTION L :+l must be set
  1354.                 if (!$correctchanname($quelargument(%i,%chmodes))) {
  1355.                   ;403 G-FACTION l :No such channel
  1356.                   sw $1 : $+ %me 403 %chnick $quelargument(%i,%chmodes) :No such channel
  1357.                   goto endofchlettrewhile
  1358.                 }
  1359.               }
  1360.               else {
  1361.                 sw $1 : $+ %me 974 %chnick L :+l must be set
  1362.                 goto endofchlettrewhile
  1363.               }
  1364.             }
  1365.           }
  1366.           if (%chlettre === k) {
  1367.             if (($isatleast(h,%chnick,%chchan)) || (%operoverride) || (%samode)) {
  1368.               set %enddynmodes %enddynmodes $+ %chsigne $+ %chlettre
  1369.               chmodedynsrv %chsigne %chchan %chlettre $quelargument(%i,%chmodes)
  1370.               set %chargs %chargs $quelargument(%i,%chmodes)
  1371.             }
  1372.             else {
  1373.               sw %tsock : $+ %me 482 %chnick %chchan :You're not channel operator
  1374.             }
  1375.           }
  1376.           elseif (%chlettre === l) {
  1377.             if (($isatleast(o,%chnick,%chchan)) || (%operoverride) || (%samode)) {
  1378.               set %enddynmodes %enddynmodes $+ %chsigne $+ %chlettre
  1379.               chmodedynsrv %chsigne %chchan %chlettre $quelargument(%i,%chmodes)
  1380.               set %chargs %chargs $quelargument(%i,%chmodes)
  1381.             }
  1382.             else {
  1383.               sw %tsock : $+ %me 482 %chnick %chchan :You're not channel operator
  1384.             }
  1385.           }
  1386.           elseif (%chlettre === L) {
  1387.             if (($isatleast(q,%chnick,%chchan)) || (%operoverride) || (%samode)) {
  1388.               set %enddynmodes %enddynmodes $+ %chsigne $+ %chlettre
  1389.               chmodedynsrv %chsigne %chchan %chlettre $quelargument(%i,%chmodes)
  1390.               set %chargs %chargs $quelargument(%i,%chmodes)
  1391.             }
  1392.             else {
  1393.               sw %tsock : $+ %me 482 %chnick %chchan :You're not channel operator
  1394.             }
  1395.           }
  1396.         }
  1397.       }
  1398.       else {
  1399.         ;<- :besancon.fr.epiknet.org 472 G-FACTION ^ :is unknown mode char to me
  1400.         sw %tsock : $+ %me 472 %chnick %chlettre :is unknown mode char to me
  1401.       }
  1402.       :endofchlettrewhile
  1403.       inc %i
  1404.     }
  1405.     if (%endchmodes) {
  1406.       ;<- :irc.G-SERVER.net MODE #G-FACTION +i
  1407.       if (!%samode) {
  1408.         sendchannel %chchan : $+ $fullhost(%sockname_ [ $+ [ %chnick ] ]) MODE %chchan $reconvmodes(%endchmodes)
  1409.         sendmultiserver : $+ %chnick MODE %chchan $reconvmodes(%endchmodes)
  1410.       }
  1411.       else {
  1412.         sendchannel %chchan : $+ %me MODE %chchan $reconvmodes(%endchmodes)
  1413.         sendmultiserver : $+ %me MODE %chchan $reconvmodes(%endchmodes)
  1414.       }
  1415.     }
  1416.     if (%endstatusmodes) {
  1417.       if (!%samode) {
  1418.         sendchannel %chchan : $+ $fullhost(%sockname_ [ $+ [ %chnick ] ]) MODE %chchan $reconvmodes(%endstatusmodes) %chargs
  1419.         sendmultiserver : $+ %chnick MODE %chchan $reconvmodes(%endstatusmodes) %chargs
  1420.       }
  1421.       else {
  1422.         sendchannel %chchan : $+ %me MODE %chchan $reconvmodes(%endstatusmodes) %chargs
  1423.         sendmultiserver : $+ %me MODE %chchan $reconvmodes(%endstatusmodes) %chargs
  1424.       }
  1425.     }
  1426.     if (%enddynmodes) {
  1427.       if (!%samode) {
  1428.        echo -a fonction modes
  1429.         echo -a sendchannel %chchan : $+ $fullhost(%sockname_ [ $+ [ %chnick ] ]) MODE %chchan $reconvmodes(%enddynmodes) %chargs
  1430.         sendchannel %chchan : $+ $fullhost(%sockname_ [ $+ [ %chnick ] ]) MODE %chchan $reconvmodes(%enddynmodes) %chargs
  1431.         sendmultiserver : $+ %chnick MODE %chchan $reconvmodes(%enddynmodes) %chargs
  1432.       }
  1433.       else {
  1434.         sendchannel %chchan : $+ %me MODE %chchan $reconvmodes(%enddynmodes) %chargs
  1435.         sendmultiserver : $+ %me MODE %chchan $reconvmodes(%enddynmodes) %chargs
  1436.       }
  1437.     }
  1438.   }
  1439. }
  1440.  
  1441. alias verifyshunlines {
  1442.   if ($1) {
  1443.     var %lol $gettok($vraiefullhost($1),2,33)
  1444.     set %vffile $linesfile
  1445.     if (!$exists(%vffile)) {
  1446.       goto tend
  1447.     }
  1448.     var %file $gopen(%vffile)
  1449.     while ($fread(%file)) {
  1450.       set %r $ifmatch
  1451.       if ($gettok(%r,1,32) == s) {
  1452.         if ($gettok(%r,2,32) iswm %lol) {
  1453.           return $true
  1454.         }
  1455.       }
  1456.     }
  1457.     .fclose %file
  1458.     :tend
  1459.     return $false
  1460.   }
  1461. }
  1462.    
  1463.  
  1464. on *:sockread:gircd*: {
  1465.   sockread %sr
  1466.   echo @sr $sockname : %nick_of_sockname_ [ $+ [ $sockname ] ] :4 %sr
  1467.   tokenize 32 %sr
  1468.  
  1469.   if ($isreginserver($sockname)) {
  1470.     ;Les commandes diverses lorsqu'on a déjà passé la phase auth.
  1471.     if (($verifyshunlines($sockname)) || ($shunned($socknick($sockname)))) {
  1472.       if ($1 == PONG) {
  1473.         if ($2) {
  1474.           set %tpong $remove($2,$chr(58))
  1475.           if (%tpong == %ping_ [ $+ [ $sockname ] ]) {
  1476.             set %pongdonne_ [ $+ [ $sockname ] ] $true
  1477.           }
  1478.         }
  1479.         else {
  1480.           ;<- :besancon.fr.epiknet.org 409 G-FACTION :No origin specified
  1481.           sw $sockname : $+ %me 409 $socknick($sockname) :No origin specified
  1482.         }
  1483.       }
  1484.       elseif ($1 == ADMIN) {
  1485.         goto admin
  1486.       }
  1487.       goto toutefin
  1488.     }
  1489.     if ($1 == VERSION) {
  1490.       version $sockname
  1491.     }
  1492.     elseif ($1 == LUSERS) {
  1493.       lusers $sockname
  1494.     }
  1495.     elseif ($1 == MOTD) {
  1496.       motd $sockname
  1497.     }
  1498.     elseif ($1 == G) {
  1499.       if ($1 === G) {
  1500.         sw $sockname : $+ %me 999 $socknick($sockname) :<G-FACTION> bouh :þ ! Y te plait mon ircd ? :]
  1501.       }
  1502.       else {
  1503.         sw $sockname : $+ %me 371 $socknick($sockname) :Nan, pas /g, /G !!
  1504.       }
  1505.     }
  1506.     elseif ($1 == BOTMOTD) {
  1507.       botmotd $sockname
  1508.     }
  1509.     elseif ($1 == MODE) {
  1510.       unset %destnick
  1511.       set %tnick $socknick($sockname)
  1512.       /*
  1513.       MODE   Nick   +modes (+snomasks)
  1514.       MODE #channel +modes
  1515.       MODE #channel +modes Nick
  1516.       1       2       3    4
  1517.       Ne pas se baser sur le nombre de tokens pour savoir de quel type de MODE il s'agit
  1518.       Il peut en y avoir plus genre avec "+lLk 1 #chan lemotdepasse"
  1519.       */
  1520.       if ($left($2,1) != $chr(35)) {
  1521.         /* On vérifie qu'il ne s'agit pas d'un channel, donc d'un usermode
  1522.         $chr(35) = #
  1523.         */
  1524.         ;Nick auquel on va appliquer le mode (en théorie le même nick que celui qui envoit la commande)
  1525.         set %destnick $2
  1526.         ;Si le nick ne s'applique pas le mode à lui même
  1527.         if (%destnick) {
  1528.           if ($3) {
  1529.             if (%tnick != %destnick) {
  1530.               sw $sockname : $+ %me 502 $socknick($sockname) :Can't change mode for other users
  1531.             }
  1532.             else {
  1533.               applymodesonrequest $sockname $3-
  1534.             }
  1535.           }
  1536.           else {
  1537.             sw $sockname : $+ %me 461 $socknick($sockname) MODE :Not enough parameters
  1538.           }
  1539.         }
  1540.         else {
  1541.           sw $sockname : $+ %me 461 $socknick($sockname) MODE :Not enough parameters
  1542.         }
  1543.       }
  1544.       else {
  1545.         if ($3) {
  1546.           ;Ce sont des chmodes
  1547.           ;applymodesonrequest  sockname       chan                modes
  1548.           applychmodesonrequest $sockname $2 $3-
  1549.         }
  1550.         else {
  1551.           ;:besancon.fr.epiknet.org 324 G-FACTION #legoodies +ntr
  1552.           ;:besancon.fr.epiknet.org 329 G-FACTION #legoodies 1085037574
  1553.           sw $sockname : $+ %me 324 $socknick($sockname) $2 + $+ $chmodes($2)
  1554.           sw $sockname : $+ %me 329 $socknick($sockname) $2 $creationtime($2)
  1555.         }
  1556.       }
  1557.     }
  1558.     elseif ($1 == OPER) {
  1559.       if ($3) {
  1560.         if ($operexists($2)) {
  1561.           if ($goodoperhost($2,$fullhost($sockname))) {
  1562.             if ($goodoperpass($2,$3)) {
  1563.               set %ircop_ [ $+ [ $socknick($sockname) ] ] $2
  1564.               addircoplist $socknick($sockname)
  1565.               globops $socknick($sockname) $chr(91) $+ $2 $+ $chr(93) is now an IRCop
  1566.               sw $sockname : $+ $$socknick($sockname) MODE $socknick($sockname) : $+ $chr(43) $+ %opermodes
  1567.               umodesrv $chr(43) $socknick($sockname) %opermodes
  1568.               ;+cjkqvFG
  1569.               snomasksrv $chr(43) $socknick($sockname) %opersnomask
  1570.               sw $sockname : $+ %me 008 $socknick($sockname) :Server notice mask ( $+ %snomask_ [ $+ [ $socknick($sockname) ] ] $+ )
  1571.               sw $sockname : $+ %me 381 $socknick($sockname) :You are now an IRC Operator
  1572.               applyumodesoline $sockname
  1573.             }
  1574.             else {
  1575.               sw $sockname : $+ %me 464 $socknick($sockname) :Password incorrect
  1576.               globops Failed OPER attempt by $socknick($sockname) ( $+ $fullhost($sockname) $+ ) using UID $2 [FAILEDAUTH]
  1577.             }
  1578.           }
  1579.           else {
  1580.             sw $sockname : $+ %me 491 $socknick($sockname) :No O-lines for your host
  1581.             globops Failed OPER attempt by $socknick($sockname) ( $+ $fullhost($sockname) $+ ) [unknown oper]
  1582.           }
  1583.         }
  1584.         else {
  1585.           sw $sockname : $+ %me 491 $socknick($sockname) :No O-lines for your host
  1586.           globops Failed OPER attempt by $socknick($sockname) ( $+ $fullhost($sockname) $+ ) [unknown oper]
  1587.         }
  1588.       }
  1589.       else {
  1590.         sw $sockname : $+ %me 461 $socknick($sockname) OPER :Not enough parameters
  1591.       }
  1592.     }
  1593.     elseif ($1 == WHOIS) {
  1594.       set %wtnick $socknick($sockname)
  1595.       unset %haha
  1596.       unset %tttt
  1597.       if ($chr(44) !isin $2) {
  1598.         if ($3) {
  1599.           if (%server_ [ $+ [ $remove($3,$chr(58)) ] ] == %me) {
  1600.             set %tttt $remove($3,$chr(58))
  1601.           }
  1602.           else {
  1603.             set %haha $true
  1604.             sw $+(gserv.,$passerelle(%server_ [ $+ [ $remove($3,$chr(58)) ] ])) : $+ %wtnick WHOIS $remove($3,$chr(58)) : $+ $remove($3,$chr(58))
  1605.           }
  1606.         }
  1607.         else {
  1608.           set %tttt $2
  1609.         }
  1610.       }
  1611.       if ($2) {
  1612.         set %nicks %tttt
  1613.         set %nbdnicks $gettok(%nicks,0,44)
  1614.         var %i 1
  1615.         while (%i <= %nbdnicks) {
  1616.           set %wnick $gettok(%nicks,%i,44)
  1617.           if ($isco(%wnick)) {
  1618.             sw $sockname : $+ %me 311 %tnick %wnick %identd_ [ $+ [ %wnick ] ] %host_ [ $+ [ %sockname_ [ $+ [ %wnick ] ] ] ] * : $+ %realname_ [ $+ [ %wnick ] ]
  1619.             if ($whoischanlist(%wnick,%wtnick)) {
  1620.               ;<- :la-defense.fr.epiknet.org 319 G-FACTION Fonix :#antiboulet #legoodies @#g-faction
  1621.               sw $sockname : $+ %me 319 %wtnick %wnick : $+ $ifmatch
  1622.             }
  1623.             if ((%wnick == %wtnick) || (%ircop_ [ $+ [ %wtnick ] ])) {
  1624.               sw $sockname : $+ %me 379 %wtnick %wnick :is using modes $chr(43) $+ %umodes_ [ $+ [ %wnick ] ] $iif(%snomask_ [ $+ [ %wnick ] ],$+($chr(43),$ifmatch),)
  1625.               sw $sockname : $+ %me 378 %wtnick %wnick :is connecting from *@ $+ $iif($sock(%sockname_ [ $+ [ %wnick ] ]).ip,$ifmatch,%vraiehost_ [ $+ [ %sockname_ [ $+ [ %wnick ] ] ] ]) $iif($sock(%sockname_ [ $+ [ %wnick ] ]).ip,$ifmatch,)
  1626.             }
  1627.             if ((%wnick == %wtnick) || (%ircop_ [ $+ [ %wtnick ] ])) {
  1628.               if ($sock(%sockname_ [ $+ [ %wnick ] ]).rcvd) {
  1629.                 sw $sockname : $+ %me 532 %wtnick %wnick :sent $sock(%sockname_ [ $+ [ %wnick ] ]).rcvd bytes
  1630.                 sw $sockname : $+ %me 533 %wtnick %wnick :received $sock(%sockname_ [ $+ [ %wnick ] ]).sent bytes
  1631.               }
  1632.             }
  1633.             if (r isincs %umodes_ [ $+ [ %wnick ] ]) {
  1634.               sw $sockname : $+ %me 307 %wtnick %wnick :is a registered nick
  1635.             }
  1636.             sw $sockname : $+ %me 312 %wtnick %wnick %server_ [ $+ [ %wnick ] ] : $+ $serv_sdesc(%server_ [ $+ [ %wnick ] ])
  1637.             if ($isaway(%wnick)) {
  1638.               sw $sockname : $+ %me 301 %wtnick %wnick : $+ %away_ [ $+ [ %sockname_ [ $+ [ %wnick ] ] ] ]
  1639.             }
  1640.             if ((%ircop_ [ $+ [ %wnick ] ]) || (o isin %umodes_ [ $+ [ %wnick ] ])) {
  1641.               if ((o isin %umodes_ [ $+ [ %wnick ] ])) {
  1642.                 sw $sockname : $+ %me 313 %wtnick %wnick :is an IRC operator
  1643.               }
  1644.               if (h isincs %umodes_ [ $+ [ %wnick ] ]) {
  1645.                 sw $sockname : $+ %me 310 %wtnick %wnick :is available for help
  1646.               }
  1647.               if (%oline. [ $+ [ %ircop_ [ $+ [ %wnick ] ] $+ .swhois ] ]) {
  1648.                 echo -a 9:)
  1649.                 sw $sockname : $+ %me 320 %wtnick %wnick : $+ $ifmatch
  1650.               }
  1651.               else {
  1652.                 if (%swhois_ [ $+ [ %sockname_ [ $+ [ %wnick ] ] ] ]) {
  1653.                   sw $sockname : $+ %me 320 %wtnick %wnick : $+ $ifmatch
  1654.                 }
  1655.               }
  1656.             }
  1657.           }
  1658.           else {
  1659.             ;<- :besancon.fr.epiknet.org 401 G-FACTION bidule :No such nick/channel
  1660.             sw $sockname : $+ %me 401 %wtnick %wnick :No such nick
  1661.           }
  1662.           if (W isincs %umodes_ [ $+ [ %wnick ] ]) {
  1663.             if (%wtnick != %wnick) {
  1664.               if ($sock(%sockname_ [ $+ [ %wnick ] ])) {
  1665.                 ;*** lol (G-FACTION@127.0.0.2) did a /whois on you.
  1666.                 sw %sockname_ [ $+ [ %wnick ] ] : $+ %me NOTICE %wnick :*** %wtnick ( $+ $gettok($vraiefullhost($sockname),2,33) $+ ) did a /whois on you.
  1667.               }
  1668.               else {
  1669.                 ;Cet user est situé sur un autre serveur
  1670.                 sw $+(gserv.,$passerelle(%server_ [ $+ [ %wnick ] ])) : $+ %me NOTICE %wnick :*** %wtnick ( $+ $gettok($vraiefullhost($sockname),2,33) $+ ) did a /whois on you.
  1671.               }
  1672.             }
  1673.           }
  1674.           inc %i
  1675.         }
  1676.       }
  1677.       else {
  1678.         sw $sockname : $+ %me 431 %wtnick :No nickname given
  1679.       }
  1680.       if (!%haha) {
  1681.         sw $sockname : $+ %me 318 %wtnick %wnick :End of /WHOIS list.
  1682.       }
  1683.     }
  1684.     elseif ($1 == PRIVMSG) {
  1685.       if (!$3) {
  1686.         ;<- :besancon.fr.epiknet.org 411 G-FACTION :No recipient given (NOTICE)
  1687.         sw $sockname : $+ %me 411 $socknick($sockname) :No recipient given (PRIVMSG)
  1688.         halt
  1689.       }
  1690.       set %dest $2
  1691.       set %tmess $right($3-,$calc($len($3-) - 1))
  1692.       if ($left(%dest,1) == $chr(35)) {
  1693.         ;Si le message est adressé à un chan...
  1694.         if ($left(%tmess,1) == $chr(1)) {
  1695.           ;Il envoit un ctcp au chan
  1696.           if (C isincs $chmodes(%dest)) {
  1697.             ;404 G-FACTION[GTASA] #G-FACTION :CTCPs are not permitted in this channel (#G-FACTION)
  1698.             sw $sockname : $+ %me 404 $socknick($sockname) %dest :CTCPs are not permitted in this channel ( $+ %dest $+ )
  1699.             halt
  1700.           }
  1701.         }
  1702.         privmsg %dest $socknick($sockname) %tmess
  1703.       }
  1704.       else {
  1705.         ;Si le message est adressé à un pseudo...
  1706.         if ($isco(%dest)) {
  1707.           set %tpvnick $socknick($sockname)
  1708.           set %dest_umodes %umodes_ [ $+ [ %dest ] ]
  1709.           set %nick_umodes %umodes_ [ $+ [ %tpvnick ] ]
  1710.           if (R isincs %umodes_ [ $+ [ %dest ] ]) {
  1711.             if (r !isincs %nick_umodes) {
  1712.               ;<- :besancon.fr.epiknet.org 486 testR :You must identify to a registered nick to private message G-FACTION
  1713.               sw $sockname : $+ %me 486 %tpvnick :You must identify to a registered nick to private message %dest
  1714.               halt
  1715.             }
  1716.           }
  1717.           if ($sock(%sockname_ [ $+ [ %dest ] ])) {
  1718.             sw %sockname_ [ $+ [ %dest ] ] : $+ %tpvnick PRIVMSG %dest : $+ %tmess
  1719.           }
  1720.           else {
  1721.             if ($sock($+(gserv.,%server_ [ $+ [ %dest ] ]))) {
  1722.               sw $+(gserv.,%server_ [ $+ [ %dest ] ]) : $+ %tpvnick PRIVMSG %dest : $+ %tmess
  1723.             }
  1724.             else {
  1725.               set %tsock $+(gserv.,$passerelle(%server_ [ $+ [ %dest ] ]))
  1726.               if ($sock(%tsock)) {
  1727.                 sw %tsock : $+ %tpvnick PRIVMSG %dest : $+ %tmess
  1728.               }
  1729.             }
  1730.           }
  1731.           if ($isaway(%dest)) {
  1732.             sw $sockname : $+ %me 301 %tpvnick %dest : $+ %away_ [ $+ [ %sockname_ [ $+ [ %dest ] ] ] ]
  1733.           }
  1734.         }
  1735.         else {
  1736.           sw $sockname : $+ %me 401 $socknick($sockname) %dest :No such nick/channel
  1737.         }
  1738.       }
  1739.     }
  1740.     elseif ($1 == AWAY) {
  1741.       if ($2) {
  1742.         if ($right($2-,$calc($len($2-) - 1)) != %away_ [ $+ [ $sockname ] ]) {
  1743.           set %away_ [ $+ [ $sockname ] ] $left($right($2-,$calc($len($2-) - 1)),%awaylen)
  1744.           sw $sockname : $+ %me 306 $socknick($sockname) :You have been marked as being away
  1745.         }
  1746.       }
  1747.       else {
  1748.         if (%away_ [ $+ [ $sockname ] ]) {
  1749.           unset %away_ [ $+ [ $sockname ] ]
  1750.           sw $sockname : $+ %me 305 $socknick($sockname) :You are no longer marked as being away
  1751.         }
  1752.       }
  1753.     }
  1754.     elseif ($1 == NOTICE) {
  1755.       set %nnick $socknick($sockname)
  1756.       set %ndest $2
  1757.       if (!$3) {
  1758.         sw $sockname : $+ %me 411 $socknick($sockname) :No recipient given (NOTICE)
  1759.         halt
  1760.       }
  1761.       if ($chr(35) !isin %ndest) {
  1762.         ;Il s'agit d'un envoi à un user
  1763.         set %nmess $right($3-,$calc($len($3-) - 1))
  1764.         set %ndest_umodes %umodes_ [ $+ [ %ndest ] ]
  1765.         set %nnick_umodes %umodes_ [ $+ [ %nnick ] ]
  1766.         if (V isincs %ndest_umodes) {
  1767.           set %ncmd PRIVMSG
  1768.         }
  1769.         else {
  1770.           set %ncmd NOTICE
  1771.         }
  1772.         if ($isco(%ndest)) {
  1773.           sw %sockname_ [ $+ [ %ndest ] ] : $+ $fullhost($sockname) %ncmd %ndest : $+ %nmess
  1774.         }
  1775.         else {
  1776.           sw $sockname : $+ %me 401 %nnick %ndest :No such nick/channel
  1777.         }
  1778.       }
  1779.       else {
  1780.         ;Il s'agit d'un envoi à un canal
  1781.         set %nmess $right($3-,$calc($len($3-) - 1))
  1782.         set %nd %ndest
  1783.         set %nchans $gettok(%nd,0,44)
  1784.         var %o 1
  1785.         while (%o <= %nchans) {
  1786.           set %ndest $gettok(%nd,%o,44)
  1787.           if ($gettok(%ndest,0,35) > 1) {
  1788.             ;Des modes ont été spécifiés
  1789.             set %nmodes $gettok(%ndest,1,35)
  1790.             set %nchan $chr(35) $+ $gettok(%ndest,2-,35)
  1791.           }
  1792.           else {
  1793.             set %nmodes $false
  1794.             set %nchan %ndest
  1795.           }
  1796.           if (T !isincs $chmodes(%nchan)) {
  1797.             if ($remove(%nmodes,$chr(38),$chr(126))) {
  1798.               var %i 1
  1799.               set %nlen $len(%nmodes)
  1800.               while (%i <= %nlen) {
  1801.                 set %nmode $mid(%nmodes,%i,1)
  1802.                 set %ncf $chanfile(%nchan)
  1803.                 if (!$exists(%ncf)) {
  1804.                   goto noticeend
  1805.                 }
  1806.                 var %file $gopen(%ncf)
  1807.                 while ($fread(%file)) {
  1808.                   set %r $ifmatch
  1809.                   if (($left(%r,1) == $chr(64)) || ($left(%r,1) == $chr(37)) || ($left(%r,1) == $chr(43)) || ($left(%r,1) == $chr(38)) || ($left(%r,1) == $chr(126))) {
  1810.                     if ($strongerthan($replace($left(%r,1),$chr(64),o,$chr(38),a,$chr(126),q,$chr(43),v,$chr(37),h),$replace(%nmode,$chr(64),o,$chr(38),a,$chr(126),q,$chr(43),v,$chr(37),h))) {
  1811.                       set %n $right(%r,$calc($len(%r) - 1))
  1812.                       if ($sock(%sockname_ [ $+ [ %n ] ])) {
  1813.                         sw %sockname_ [ $+ [ %n ] ] : $+ $fullhost($sockname) NOTICE %nmodes $+ %nchan : $+ %nmess
  1814.                       }
  1815.                       else {
  1816.                         if (%server_ [ $+ [ %n ] ] != %me) {
  1817.                           sendmultiserver : $+ %nnick NOTICE %nmodes $+ %nchan : $+ %nmess
  1818.                         }
  1819.                       }
  1820.                     }
  1821.                   }
  1822.                 }
  1823.                 .fclose %file
  1824.                 :noticeend
  1825.                 inc %i
  1826.               }
  1827.             }
  1828.             else {
  1829.               sendchannel %nchan : $+ $fullhost($sockname) NOTICE %nchan : $+ %nmess
  1830.               sendmultiserver : $+ %nnick NOTICE %nchan : $+ %nmess
  1831.             }
  1832.           }
  1833.           else {
  1834.             ;404 G-FACTION[GTASA] #G-FACTION :NOTICEs are not permitted in this channel (#G-FACTION)
  1835.             sw $sockname : $+ %me 404 %nnick %nchan :NOTICEs are not permitted in this channel ( $+ %nchan $+ )
  1836.           }
  1837.           inc %o
  1838.         }
  1839.       }
  1840.     }
  1841.     elseif ($1 == JOIN) {
  1842.       /*
  1843.       Yeahhhh begining /join command ! ^^
  1844.       Il faudra s'occuper des chanmodes i,L,k,s(whois),b
  1845.       Prendre en compte le MAXCHANNELS
  1846.  
  1847.       On va créer une base de données pour les canaux. #chan.nfo
  1848.       Dedans, seront stockées les données des modes statics. (ceux qui sont pas +voqa etc...)
  1849.       Puis on fera une banlist, protectlist, et exceptlist par canal (pas invites list car ça sert à rien).
  1850.       Bien entendu, si l'user joint un canal vide, il doit se retrouver en +o
  1851.       Et puis si l'option "apply +nt modes on channel creation" est activée, on l'fait :)
  1852.       */
  1853.       if ($2) {
  1854.         ;maxchannels
  1855.         set %tmpchans $whoischanlist($socknick($sockname))
  1856.         set %nbdchans $gettok(%tmpchans,0,32)
  1857.         if (!%nbdchans) { set %nbdchans 0 }
  1858.         if (%nbdchans < %maxchannels) {
  1859.           join $sockname $1-
  1860.         }
  1861.         else {
  1862.           ;<- :besancon3.fr.epiknet.org 405 G-FACTION #test33 :You have joined too many channels
  1863.           sw $sockname : $+ %me 405 $socknick($sockname) $2 :You have joined too many channels
  1864.         }
  1865.       }
  1866.       else {
  1867.         sw $sockname : $+ %me 461 $socknick($sockname) $1 :Not enough parameters
  1868.       }
  1869.     }
  1870.     elseif ($1 == NAMES) {
  1871.       if ($2) {
  1872.         sendnicklist $2 $socknick($sockname)
  1873.       }
  1874.       else {
  1875.         sw $sockname : $+ %me 366 $socknick($sockname) * :End of /NAMES list.
  1876.       }
  1877.     }
  1878.     elseif ($1 == PONG) {
  1879.       :ping
  1880.       if ($2) {
  1881.         set %tpong $remove($2,$chr(58))
  1882.         if (%tpong == %ping_ [ $+ [ $sockname ] ]) {
  1883.           set %pongdonne_ [ $+ [ $sockname ] ] $true
  1884.         }
  1885.       }
  1886.       else {
  1887.         ;<- :besancon.fr.epiknet.org 409 G-FACTION :No origin specified
  1888.         sw $sockname : $+ %me 409 $socknick($sockname) :No origin specified
  1889.       }
  1890.     }
  1891.     elseif ($1 == PART) {
  1892.       if ($2) {
  1893.         set %chans $2
  1894.         set %nbdchans $gettok(%chans,0,44)
  1895.         var %i 1
  1896.         while (%i <= %nbdchans) {
  1897.           part $sockname PART $gettok(%chans,%i,44) $3-
  1898.           inc %i
  1899.         }
  1900.       }
  1901.       else {
  1902.         sw $sockname : $+ %me 461 $socknick($sockname) $1 :Not enough parameters
  1903.       }
  1904.     }
  1905.     elseif ($1 == INVITE) {
  1906.       ;INVITE Nick #chan
  1907.       ;   1     2    3
  1908.       if ($3) {
  1909.         set %tnick $socknick($sockname)
  1910.         set %inick $2
  1911.         set %ichan $3
  1912.         unset %operoverride
  1913.         if (%ircop_ [ $+ [ %tnick ] ]) {
  1914.           set %tflags %oline. [ $+ [ %ircop_ [ $+ [ %chnick ] ] ] ] [ $+ [ .flags ] ]
  1915.           if (v isincs %tflags) {
  1916.             set %operoverride $true
  1917.           }
  1918.         }
  1919.         set %tchmodes $replacecs($chmodes(%ichan),1,N,2,L,3,S,4,C,5,T)
  1920.         if ($isco(%inick)) {
  1921.           if (($ison(%tnick,%ichan)) || (%operoverride)) {
  1922.             if (!$ison(%inick,%ichan)) {
  1923.               if ((V !isincs %tchmodes) || (%operoverride)) {
  1924.                 sw %sockname_ [ $+ [ %inick ] ] : $+ $fullhost($sockname) INVITE %inick : $+ %ichan
  1925.                 set %invited_ [ $+ [ %tchan ] ] [ $+ [ _ $+ [ %chnick ] ] ] $true
  1926.                 noticechannel %ichan @ %me %tnick invited %inick into the channel.
  1927.               }
  1928.               else {
  1929.                 sw $sockname : $+ %me 518 %tnick :Cannot invite (+V) at channel %ichan
  1930.               }
  1931.             }
  1932.             else {
  1933.               sw $sockname : $+ %me 443 %tnick %inick %ichan :is already on channel
  1934.             }
  1935.           }
  1936.           else {
  1937.             sw $sockname : $+ %me 442 %tnick %ichan :You're not on that channel
  1938.           }
  1939.         }
  1940.         else {
  1941.           sw $sockname : $+ %me 401 %tnick %inick :No such nick/channel
  1942.         }
  1943.       }
  1944.       else {
  1945.         sw $sockname : $+ %me 461 %tnick $1 :Not enough parameters
  1946.       }
  1947.     }
  1948.     elseif ($1 == KNOCK) {
  1949.       set %knocknick $socknick($sockname)
  1950.       set %knockchan $2
  1951.       if (!$3) {
  1952.         set %knockreason no reason specified
  1953.       }
  1954.       else {
  1955.         set %knockreason $3-
  1956.       }
  1957.       if ($2) {
  1958.         if (!$ison(%knocknick,%knockchan)) {
  1959.           set %knockchmodes $replacecs($chmodes(%knockchan),1,N,2,L,3,S,4,C,5,T)
  1960.           if (i isincs %knockchmodes) {
  1961.             if (K !isincs %knockchmodes) {
  1962.               sw $sockname : $+ %me NOTICE %knocknick :Knocked on %knockchan
  1963.               noticechannel %knockchan @ %me [Knock] by $fullhost($sockname) ( $+ %knockreason $+ )
  1964.             }
  1965.             else {
  1966.               sw $sockname : $+ %me 480 %knocknick :Cannot knock on %knockchan (No knocks are allowed! (+K))
  1967.             }
  1968.           }
  1969.           else {
  1970.             sw $sockname : $+ %me 480 %knocknick :Cannot knock on %knockchan (Channel is not invite only!)
  1971.           }
  1972.         }
  1973.         else {
  1974.           sw $sockname : $+ %me 480 %knocknick :Cannot knock on %knockchan (You're already there!)
  1975.         }
  1976.       }
  1977.       else {
  1978.         sw $sockname : $+ %me 461 %knocknick $1 :Not enough parameters
  1979.       }
  1980.     }
  1981.     elseif ($1 == KICK) {
  1982.       if ($3) {
  1983.         kick $2 $socknick($sockname) $3 $right($4-,$calc($len($4-) -1))
  1984.       }
  1985.       else {
  1986.         sw $sockname : $+ %me 461 $socknick($sockname) $1 :Not enough parameters
  1987.       }
  1988.     }
  1989.     elseif ($1 == WHO) {
  1990.       unset %wdest
  1991.       set %wnick $socknick($sockname)
  1992.       if ($2) {
  1993.         if ($left($2,1) == $chr(43)) {
  1994.           ;Il entre un flag
  1995.           set %wflag $mid($2,2,1)
  1996.           if (%wflag === c) {
  1997.             set %wdest $3
  1998.             goto channel
  1999.           }
  2000.           elseif (%wflag === a) {
  2001.             ;who +a, donne la liste des tous les users away du serveur
  2002.             if ($3) {
  2003.               ;La présence d'un nick après le flag annule le flag et fait comme si c'était un /who nick
  2004.               set %wdest $3
  2005.               goto nick
  2006.             }
  2007.             var %file $gopen($userslistfile)
  2008.             while ($fread(%file)) {
  2009.               set %r $ifmatch
  2010.               if ($isaway(%r)) {
  2011.                 if (i !isincs %umodes_ [ $+ [ %r ] ]) {
  2012.                   sw $sockname : $+ %me 352 %wnick $gettok(%chans_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ],1,32) %identd_ [ $+ [ %r ] ] %host_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ] %server_ [ $+ [ %r ] ] %r $whoattr(%r) :0 %realname_ [ $+ [ %r ] ]
  2013.                 }
  2014.               }
  2015.             }
  2016.             .fclose %file
  2017.           }
  2018.           elseif (%wflag === g) {
  2019.             ;who +g <string> donne la liste de tous les users ayant <string> comme RealName
  2020.             if ($3) {
  2021.               ;Procédure normale.
  2022.               set %wdest $3
  2023.               if ($chr(42) isin %wdest) {
  2024.                 ;Alors l'user utilise les wildcards, ce qui est réservé aux IRCops.
  2025.                 if (%ircop_ [ $+ [ %wnick ] ]) {
  2026.                   var %file $gopen($userslistfile)
  2027.                   while ($fread(%file)) {
  2028.                     set %r $ifmatch
  2029.                     var %wrealname %realname_ [ $+ [ %r ] ]
  2030.                     if (%wdest iswm %wrealname) {
  2031.                       sw $sockname : $+ %me 352 %wnick $gettok(%chans_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ],1,32) %identd_ [ $+ [ %r ] ] %host_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ] %server_ [ $+ [ %r ] ] %r $whoattr(%r) :0 %realname_ [ $+ [ %r ] ]
  2032.                     }
  2033.                   }
  2034.                   .fclose %file
  2035.                 }
  2036.               }
  2037.               else {
  2038.                 ;Il a entré un string normal, pas un wildcard, donc pas de restriction
  2039.                 ;Recherche en tokens
  2040.                 var %file $gopen($userslistfile)
  2041.                 while ($fread(%file)) {
  2042.                   set %r $ifmatch
  2043.                   set %wrealname %realname_ [ $+ [ %r ] ]
  2044.                   if ($istok(%wrealname,%wdest,32)) {
  2045.                     sw $sockname : $+ %me 352 %wnick $gettok(%chans_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ],1,32) %identd_ [ $+ [ %r ] ] %host_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ] %server_ [ $+ [ %r ] ] %r $whoattr(%r) :0 %realname_ [ $+ [ %r ] ]
  2046.                   }
  2047.                 }
  2048.                 .fclose %file
  2049.               }
  2050.             }
  2051.             else {
  2052.               ghelp who $sockname
  2053.             }
  2054.           }
  2055.           elseif (%wflag === h) {
  2056.             ;who +h <host>, <host> en wildcard
  2057.             if ($3) {
  2058.               set %wdest $3
  2059.               var %file $gopen($userslistfile)
  2060.               while ($fread(%file)) {
  2061.                 set %r $ifmatch
  2062.                 set %whost %host_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ]
  2063.                 if (%wdest iswm %whost) {
  2064.                   sw $sockname : $+ %me 352 %wnick $gettok(%chans_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ],1,32) %identd_ [ $+ [ %r ] ] %host_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ] %server_ [ $+ [ %r ] ] %r $whoattr(%r) :0 %realname_ [ $+ [ %r ] ]
  2065.                 }
  2066.               }
  2067.               .fclose %file
  2068.             }
  2069.             else {
  2070.               ghelp who $sockname
  2071.             }
  2072.           }
  2073.           elseif (%wflag === m) {
  2074.             ;who +m <mode>, a,A,o seulement, pour les non-ircop.
  2075.             if ($3) {
  2076.               set %wmode $left($3,1)
  2077.               ;Le $left sert à éviter que certaines peronnes entrant plusieurs modes puissent feinter (faille)
  2078.               if (%wmode isincs oOaANCghRDWnGkKbiBtzZvHWr) {
  2079.                 if (%wmode !isincs aAo) {
  2080.                   if (!%ircop_ [ $+ [ %wnick ] ]) {
  2081.                     goto wend
  2082.                   }
  2083.                 }
  2084.                 var %file $gopen($userslistfile)
  2085.                 while ($fread(%file)) {
  2086.                   set %r $ifmatch
  2087.                   set %wmodes %umodes_ [ $+ [ %r ] ]
  2088.                   if (%wmode isincs %wmodes) {
  2089.                     sw $sockname : $+ %me 352 %wnick $gettok(%chans_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ],1,32) %identd_ [ $+ [ %r ] ] %host_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ] %server_ [ $+ [ %r ] ] %r $whoattr(%r) :0 %realname_ [ $+ [ %r ] ]
  2090.                   }
  2091.                 }
  2092.                 .fclose %file
  2093.               }
  2094.             }
  2095.             else {
  2096.               ghelp who $sockname
  2097.             }
  2098.           }
  2099.           elseif (%wflag === n) {
  2100.             ;who +n <nick>, <nick> en wildcard
  2101.             if ($3) {
  2102.               set %wdest $3
  2103.               var %file $gopen($userslistfile)
  2104.               while ($fread(%file)) {
  2105.                 set %r $ifmatch
  2106.                 if (%wdest iswm %r) {
  2107.                   sw $sockname : $+ %me 352 %wnick $gettok(%chans_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ],1,32) %identd_ [ $+ [ %r ] ] %host_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ] %server_ [ $+ [ %r ] ] %r $whoattr(%r) :0 %realname_ [ $+ [ %r ] ]
  2108.                 }
  2109.               }
  2110.               .fclose %file
  2111.             }
  2112.             else {
  2113.               ghelp who $sockname
  2114.             }
  2115.           }
  2116.           elseif (%wflag === u) {
  2117.             ;who +u <username>, donne la liste des users ayant <username> comme username (identd). Wildcards.
  2118.             if ($3) {
  2119.               set %wdest $3
  2120.               var %file $gopen($userslistfile)
  2121.               while ($fread(%file)) {
  2122.                 set %r $ifmatch
  2123.                 set %wusername %identd_ [ $+ [ %r ] ]
  2124.                 if (%wdest iswm %wusername) {
  2125.                   sw $sockname : $+ %me 352 %wnick $gettok(%chans_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ],1,32) %identd_ [ $+ [ %r ] ] %host_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ] %server_ [ $+ [ %r ] ] %r $whoattr(%r) :0 %realname_ [ $+ [ %r ] ]
  2126.                 }
  2127.               }
  2128.               .fclose %file
  2129.             }
  2130.             else {
  2131.               ghelp who $sockname
  2132.             }
  2133.           }
  2134.           elseif (%wflag === M) {
  2135.             ;who +M, donne la liste de tous les users qui ont des chans communs avec soi
  2136.             if ($3) {
  2137.               set %wdest $3
  2138.               goto nick
  2139.             }
  2140.             set %wchans1 %chans_ [ $+ [ $sockname ] ]
  2141.             var %file $gopen($userslistfile)
  2142.             while ($fread(%file)) {
  2143.               set %r $ifmatch
  2144.               set %wchans2 %chans_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ]
  2145.               if ($comchans(%wchans1,%wchans2)) {
  2146.                 sw $sockname : $+ %me 352 %wnick $gettok(%chans_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ],1,32) %identd_ [ $+ [ %r ] ] %host_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ] %server_ [ $+ [ %r ] ] %r $whoattr(%r) :0 %realname_ [ $+ [ %r ] ]
  2147.               }
  2148.             }
  2149.             .fclose %file
  2150.           }
  2151.           elseif (%wflag === R) {
  2152.             ;who +R, donne la liste de tous les users du serveur, et avec leurs vraies hosts. IRCops only.
  2153.             if (%ircop_ [ $+ [ %wnick ] ]) {
  2154.               ;%vraiehost_ [ $+ [ $sockname ] ]
  2155.               var %file $gopen($userslistfile)
  2156.               while ($fread(%file)) {
  2157.                 set %r $ifmatch
  2158.                 sw $sockname : $+ %me 352 %wnick $gettok(%chans_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ],1,32) %identd_ [ $+ [ %r ] ] %vraiehost_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ] %server_ [ $+ [ %r ] ] %r $whoattr(%r) :0 %realname_ [ $+ [ %r ] ]
  2159.               }
  2160.               .fclose %file
  2161.             }
  2162.           }
  2163.           else {
  2164.             ghelp who $sockname
  2165.           }
  2166.         }
  2167.         else {
  2168.           set %wdest $2
  2169.           if ($left(%wdest,1) ==  $chr(35)) {
  2170.             ;Alors il /who #chan
  2171.             ;<- :besancon.fr.epiknet.org 352 G-FACTION #my_world LoVeFF leon.epiknet.fr besancon.fr.epiknet.org LeOn Hr :0 LeOn :þ
  2172.             :channel
  2173.             var %file $gopen($chanfile(%wdest))
  2174.             while ($fread(%file)) {
  2175.               set %r $ifmatch
  2176.               if (($left(%r,1) == $chr(64)) || ($left(%r,1) == $chr(37)) || ($left(%r,1) == $chr(43)) || ($left(%r,1) == $chr(38)) || ($left(%r,1) == $chr(126))) {
  2177.                 set %tempnick $right(%r,$calc($len(%r) - 1))
  2178.               }
  2179.               else {
  2180.                 set %tempnick %r
  2181.               }
  2182.               set %tsockname %sockname_ [ $+ [ %tempnick ] ]
  2183.               sw $sockname : $+ %me 352 %wnick %wdest %identd_ [ $+ [ %tempnick ] ] %host_ [ $+ [ %tsockname ] ] %server_ [ $+ [ %tempnick ] ] %tempnick $whoattr(%tempnick) :0 %realname_ [ $+ [ %tempnick ] ]
  2184.             }
  2185.             .fclose %file
  2186.           }
  2187.           else {
  2188.             ;Alors il /who nick
  2189.             :nick
  2190.             if ($isco(%wdest)) {
  2191.               unset %attr
  2192.               if ($isaway(%wdest)) {
  2193.                 set %attr %attr $+ G
  2194.               }
  2195.               else {
  2196.                 set %attr %attr $+ H
  2197.               }
  2198.               if (r isincs %umodes_ [ $+ [ %wdest ] ]) {
  2199.                 set %attr %attr $+ r
  2200.               }
  2201.               if (%ircop_ [ $+ [ %wdest ] ]) {
  2202.                 set %attr %attr $+ $chr(42)
  2203.               }
  2204.               sw $sockname : $+ %me 352 $socknick($sockname) $gettok(%chans_ [ $+ [ %sockname_ [ $+ [ %wdest ] ] ] ],1,32) %identd_ [ $+ [ %wdest ] ] %host_ [ $+ [ %sockname_ [ $+ [ %wdest ] ] ] ] %server_ [ $+ [ %wdest ] ] %wdest %attr :0 %realname_ [ $+ [ %wnick ] ]
  2205.             }
  2206.           }
  2207.         }
  2208.         ;<- :besancon.fr.epiknet.org 315 G-FACTION truc :End of /WHO list.
  2209.         :wend
  2210.         sw $sockname : $+ %me 315 $socknick($sockname) %wdest :End of /WHO list.
  2211.       }
  2212.       else {
  2213.         ;sw $sockname : $+ %me 316 $socknick($sockname) :You cannot /WHO the whole server
  2214.         var %file $gopen($userslistfile)
  2215.         while ($fread(%file)) {
  2216.           set %r $ifmatch
  2217.           sw $sockname : $+ %me 352 %wnick $gettok(%chans_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ],1,32) %identd_ [ $+ [ %r ] ] %host_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ] %server_ [ $+ [ %r ] ] %r $whoattr(%r) :0 %realname_ [ $+ [ %r ] ]
  2218.         }
  2219.         .fclose %file
  2220.         sw $sockname : $+ %me 315 $socknick($sockname) %wdest :End of /WHO list.
  2221.       }
  2222.     }
  2223.     elseif ($1 == USERHOST) {
  2224.       if ($2) {
  2225.         set %unick $2
  2226.         if (%unick == $socknick($sockname)) {
  2227.           set %unick $socknick($sockname)
  2228.           ;<- :besancon.fr.epiknet.org 302 G-FACTION :G-FACTION=+~_G-FACTIO@stmartindheres-1-82-225-54-143.fbx.proxad.net
  2229.           sw $sockname : $+ %me 302 %unick : $+ %unick $+ =+ $+ $vraiefullhost($sockname)
  2230.         }
  2231.         else {
  2232.           if ($isco(%unick)) {
  2233.             if (%ircop_ [ $+ [ $socknick($sockname) ] ]) {
  2234.               sw $sockname : $+ %me 302 $socknick($sockname) : $+ %unick $+ =+ $+ $vraiefullhost(%sockname_ [ $+ [ %unick ] ])
  2235.             }
  2236.             else {
  2237.               sw $sockname : $+ %me 302 $socknick($sockname) : $+ %unick $+ =+ $+ $fullhost(%sockname_ [ $+ [ %unick ] ])
  2238.             }
  2239.           }
  2240.           else {
  2241.             sw $sockname : $+ %me 302 $socknick($sockname) :
  2242.           }
  2243.         }
  2244.       }
  2245.       else {
  2246.         sw $sockname : $+ %me 461 $socknick($sockname) $1 :Not enough parameters
  2247.       }
  2248.     }
  2249.     elseif ($1 == QUIT) {
  2250.       if ($2) {
  2251.         set %qmsg $right($2-,$calc($len($2-) - 1))
  2252.       }
  2253.       else {
  2254.         unset %qmsg
  2255.       }
  2256.       set %quitchans %chans_ [ $+ [ $sockname ] ]
  2257.       set %qfullhost $fullhost($sockname)
  2258.       set %qnick $socknick($sockname)
  2259.       set %gserv %server_ [ $+ [ $socknick($sockname) ] ]
  2260.       set %quitraison_ [ $+ [ $sockname ] ] Quit: %qmsg
  2261.       sendmultiserver : $+ %qnick QUIT : $+ %quitraison_ [ $+ [ $sockname ] ]
  2262.       sockclose2 $sockname
  2263.       if ($len(%qmsg)) {
  2264.         gquit $sockname Quit: %qmsg
  2265.       }
  2266.       else {
  2267.         gquit $sockname Quit:
  2268.       }
  2269.     }
  2270.     elseif ($1 == ISON) {
  2271.       if ($2) {
  2272.         unset %endisonlist
  2273.         if ($3) {
  2274.           set %isonlist $2-
  2275.           set %isonnum $gettok(%isonlist,0,32)
  2276.           var %i 1
  2277.           while (%i <= %isonnum) {
  2278.             set %tison $gettok(%isonlist,%i,32)
  2279.             if ($isco(%tison)) {
  2280.               set %endisonlist $addtok(%endisonlist,%tison,32)
  2281.             }
  2282.             inc %i
  2283.           }
  2284.         }
  2285.         else {
  2286.           if ($isco($2)) {
  2287.             set %endisonlist $2
  2288.           }
  2289.         }
  2290.         sw $sockname : $+ %me 303 $socknick($sockname) : $+ %endisonlist
  2291.       }
  2292.       else {
  2293.         sw $sockname : $+ %me 461 $socknick($sockname) $1 :Not enough parameters
  2294.       }
  2295.     }
  2296.     elseif (($1 == HELP) || ($1 == HELPOP)) {
  2297.       ;<- :besancon.fr.epiknet.org 294 G-FACTION :Your help-request has been forwarded to Help Operators
  2298.       if ($2) {
  2299.         if ($left($2,1) == $chr(63)) {
  2300.           if ($2 == $chr(63)) {
  2301.             ghelp index $sockname
  2302.             sw $sockname : $+ %me NOTICE $socknick($sockname) :*** NOTE: As a helpop you have to prefix your text with ? to query the help system, like: /helpop ?usercmds
  2303.             halt
  2304.           }
  2305.           set %hlpstr $right($2,$calc($len($2) - 1))
  2306.           if (%hlpstr == index) {
  2307.             set %hlpstr error
  2308.           }
  2309.           ghelp %hlpstr $sockname
  2310.         }
  2311.         else {
  2312.           set %hlpstr $2
  2313.           if (%hlpstr == index) {
  2314.             set %hlpstr error
  2315.           }
  2316.           ghelp %hlpstr $sockname
  2317.         }
  2318.       }
  2319.       else {
  2320.         ghelp index $sockname
  2321.         sw $sockname : $+ %me NOTICE $socknick($sockname) :*** NOTE: As a helpop you have to prefix your text with ? to query the help system, like: /helpop ?usercmds
  2322.       }
  2323.     }
  2324.     elseif ($1 == ADMIN) {
  2325.       :admin
  2326.       admin $sockname
  2327.     }
  2328.     elseif ($1 == RULES) {
  2329.       rules $sockname
  2330.     }
  2331.     elseif ($1 == VHOST) {
  2332.       if ($3) {
  2333.         set %vlogin $2
  2334.         set %vpass $3
  2335.         if ($isvhostlogin(%vlogin)) {
  2336.           set %tvhost %vhost_ [ $+ [ %vlogin ] ]
  2337.           if ($goodvhosthost(%vlogin,$fullhost($sockname))) {
  2338.             if ($vhostlogpass(%vlogin,%vpass)) {
  2339.               umodesrv $chr(43) $socknick($sockname) x
  2340.               umodesrv $chr(43) $socknick($sockname) t
  2341.               set %host_ [ $+ [ $sockname ] ] %tvhost
  2342.               sw $sockname : $+ %me MODE $socknick($sockname) :+tx
  2343.               sw $sockname : $+ %me NOTICE $socknick($sockname) :*** Your vhost is %tvhost
  2344.               sendpeoplesnomask v [vhost] %vlogin ( $+ $vraiefullhost($sockname) $+ ) is now using vhost %tvhost
  2345.             }
  2346.             else {
  2347.               sw $sockname : $+ %me NOTICE $socknick($sockname) :*** [vhost] Login for %vlogin failed - password incorrect
  2348.               sendpeoplesnomask v [vhost] Failed login for vhost %vlogin by $vraiefullhost($sockname) - incorrect password
  2349.             }
  2350.           }
  2351.           else {
  2352.             sw $sockname : $+ %me NOTICE $socknick($sockname) :*** [vhost] Login for %vlogin failed - password incorrect
  2353.             sendpeoplesnomask v [vhost] Failed login for vhost %vlogin by $vraiefullhost($sockname) - incorrect password
  2354.           }
  2355.         }
  2356.         else {
  2357.           sw $sockname : $+ %me NOTICE $socknick($sockname) :*** [vhost] Login for %vlogin failed - password incorrect
  2358.           sendpeoplesnomask v [vhost] Failed login for vhost %vlogin by $vraiefullhost($sockname) - incorrect password
  2359.         }
  2360.       }
  2361.       else {
  2362.         sw $sockname : $+ %me 461 $socknick($sockname) $1 :Not enough parameters
  2363.       }
  2364.     }
  2365.     elseif ($1 == CREDITS) {
  2366.       credits $sockname
  2367.     }
  2368.     elseif ($1 == INFO) {
  2369.       info $sockname
  2370.     }
  2371.     elseif ($1 == SETNAME) {
  2372.       if ($2) {
  2373.         if ($len($2-) <= 50) {
  2374.           set %realname_ [ $+ [ $socknick($sockname) ] ] $2-
  2375.           sw $sockname : $+ %me NOTICE $socknick($sockname) :Your "real name" (GCOS) is now set to be $2- - you have to set it manually to undo it
  2376.         }
  2377.         else {
  2378.           sw $sockname : $+ %me NOTICE $socknick($sockname) :*** /SetName Error: "Real names" may maximum be 50 characters of length
  2379.         }
  2380.       }
  2381.       else {
  2382.         sw $sockname : $+ %me 461 $socknick($sockname) $1 :Not enough parameters
  2383.       }
  2384.     }
  2385.     elseif ($1 == WATCH) {
  2386.       if ($2) {
  2387.         set %watch.pos $positivewatch($2-)
  2388.         set %watch.neg $negativewatch($2-)
  2389.         ;delwatchedlist $sockname %watch.neg
  2390.         ;addwatchedlist $sockname %watch.pos
  2391.         var %i 1
  2392.         var %o 1
  2393.         set %tok1 $gettok(%watch.pos,0,32)
  2394.         set %tok2 $gettok(%watch.neg,0,32)
  2395.         while (%i <= %tok1) {
  2396.           set %twatch $gettok(%watch.pos,%i,32)
  2397.           addwatchedlist %sockname_ [ $+ [ %twatch ] ] $socknick($sockname)
  2398.           if ($isco(%twatch)) {
  2399.             sw $sockname : $+ %me 604 $socknick($sockname) %twatch %identd_ [ $+ [ %twatch ] ] %host_ [ $+ [ %sockname_ [ $+ [ %twatch ] ] ] ] $signon(%sockname_ [ $+ [ %twatch ] ]) :is online
  2400.           }
  2401.           else {
  2402.             sw $sockname : $+ %me 604 $socknick($sockname) %twatch * * 0 :is offline
  2403.           }
  2404.           inc %i
  2405.         }
  2406.         while (%o <= %tok2) {
  2407.           set %twatch $gettok(%watch.neg,%o,32)
  2408.           delwatchedlist %sockname_ [ $+ [ %twatch ] ] $socknick($sockname)
  2409.           if ($isco(%twatch)) {
  2410.             sw $sockname : $+ %me 602 $socknick($sockname) %twatch %identd_ [ $+ [ %twatch ] ] %host_ [ $+ [ %sockname_ [ $+ [ %twatch ] ] ] ] $signon(%sockname_ [ $+ [ %twatch ] ]) :stopped watching
  2411.           }
  2412.           else {
  2413.             sw $sockname : $+ %me 602 $socknick($sockname) %twatch * * 0 :stopped watching
  2414.           }
  2415.           inc %o
  2416.         }
  2417.       }
  2418.       else {
  2419.         sw $sockname : $+ %me 607 $socknick($sockname) :End of WATCH l
  2420.       }
  2421.     }
  2422.     elseif ($1 == TOPIC) {
  2423.       if ($2) {
  2424.         if ($3) {
  2425.           set %chnick $socknick($sockname)
  2426.           set %operoverride $false
  2427.           if (%ircop_ [ $+ [ %chnick ] ]) {
  2428.             set %tflags %oline. [ $+ [ %ircop_ [ $+ [ %chnick ] ] ] ] [ $+ [ .flags ] ]
  2429.             if (v isincs %tflags) {
  2430.               set %operoverride $true
  2431.             }
  2432.           }
  2433.           set %tchan $2
  2434.           set %tchmodes $replacecs($chmodes(%tchan),1,N,2,L,3,S,4,C,5,T)
  2435.           if (t isincs %tchmodes) {
  2436.             if (!$isatleast(h,%chnick,%tchan)) {
  2437.               if (!%operoverride) {
  2438.                 sw $sockname : $+ %me 482 %chnick %tchan :You're not channel operator
  2439.                 halt
  2440.               }
  2441.             }
  2442.           }
  2443.           set %ttopic $right($3-,$calc($len($3-) - 1))
  2444.           writeini -n $nfochanfile(%tchan) MISC topic $left(%ttopic,%topiclen)
  2445.           writeini -n $nfochanfile(%tchan) MISC ttime $ctime
  2446.           writeini -n $nfochanfile(%tchan) MISC tuser %chnick
  2447.           sendchannel %tchan : $+ $fullhost($sockname) TOPIC %tchan : $+ $left(%ttopic,%topiclen)
  2448.         }
  2449.         else {
  2450.           if ($ttopic($2)) {
  2451.             topic $2 $socknick($sockname)
  2452.           }
  2453.           else {
  2454.             sw $sockname : $+ %me 331 $socknick($sockname) $2 :No topic is set.
  2455.           }
  2456.         }
  2457.       }
  2458.       else {
  2459.         sw $sockname : $+ %me 461 $socknick($sockname) $1 :Not enough parameters
  2460.       }
  2461.     }
  2462.     elseif ($1 == LIST) {
  2463.       set %tnick $socknick($sockname)
  2464.       sw $sockname : $+ %me 321 %tnick Channel :Users Name
  2465.       if (!$exists($chanlistfile)) {
  2466.         goto listend
  2467.       }
  2468.       if ($2) {
  2469.         set %option $2
  2470.         if ($left(%option,1) == $chr(42)) {
  2471.           ;Alors il fait une recherche en wildcards
  2472.           set %clf $chanlistfile
  2473.           var %file $gopen(%clf)
  2474.           while ($fread(%file)) {
  2475.             set %tchan $ifmatch
  2476.             if (%option iswm %tchan) {
  2477.               set %tchmodes $replacecs($chmodes(%tchan),1,N,2,L,3,S,4,C,5,T)
  2478.               if ($replacecs(%tchmodes,s,0,p,0) == %tchmodes) {
  2479.                 unset %ircop
  2480.                 if (%ircop_ [ $+ [ %tnick ] ]) {
  2481.                   set %ircop $true
  2482.                 }
  2483.                 if ((s !isincs %tchmodes) || (p !isincs %tchmodes) ($ison(%tnick,%tchan)) || (%ircop)) {
  2484.                   ;<- :besancon.fr.epiknet.org 322 G-FACTION #besancon 17 :[+ntrSf] bienvenue dans la grotte de l
  2485.                   sw $sockname : $+ %me 322 %tnick %tchan $lines($chanfile(%tchan)) : $+ $iif(%tchmodes,[+ $+ $replacecs(%tchmodes,1,N,2,L,3,S,4,C,5,T) $+ $chr(93) $ttopic(%tchan),)
  2486.                 }
  2487.               }
  2488.             }
  2489.           }
  2490.           .fclose %file
  2491.         }
  2492.         elseif (($left(%option,1) == $chr(60)) || ($left(%option,1) == $chr(62))) {
  2493.           ;Alors il fait une recherche avec un nombre d'utilisateurs
  2494.           var %i 0
  2495.           set %clf $chanlistfile
  2496.           var %file $gopen(%clf)
  2497.           if ($left(%option,1) == $chr(60)) {
  2498.             ;<
  2499.             set %lsigne neg
  2500.             set %larg $gettok(%option,1,60)
  2501.           }
  2502.           elseif ($left(%option,1) == $chr(62)) {
  2503.             ;>
  2504.             set %lsigne pos
  2505.             set %larg $gettok(%option,1,62)
  2506.           }
  2507.           while ($fread(%file)) {
  2508.             inc %i
  2509.             set %tchan $ifmatch
  2510.             if (%lsigne == pos) {
  2511.               if ($lines($chanfile(%tchan)) > %larg) {
  2512.                 unset %ircop
  2513.                 if (%ircop_ [ $+ [ %tnick ] ]) {
  2514.                   set %ircop $true
  2515.                 }
  2516.                 if ((s !isincs $chmodes(%tchan)) || (p !isincs $chmodes(%tchan)) || ($ison(%tnick,%tchan)) || (%ircop)) {
  2517.                   sw $sockname : $+ %me 322 %tnick %tchan $lines($chanfile(%tchan)) : $+ $iif($chmodes(%tchan),[+ $+ $replacecs($chmodes(%tchan),1,N,2,L,3,S,4,C,5,T) $+ $chr(93) $ttopic(%tchan),)
  2518.                 }
  2519.               }
  2520.             }
  2521.             elseif (%lsigne == neg) {
  2522.               if ($lines($chanfile(%tchan)) < %larg) {
  2523.                 unset %ircop
  2524.                 if (%ircop_ [ $+ [ %tnick ] ]) {
  2525.                   set %ircop $true
  2526.                 }
  2527.                 if ((s !isincs $chmodes(%tchan)) || (p !isincs $chmodes(%tchan)) || ($ison(%tnick,%tchan)) || (%ircop)) {
  2528.                   sw $sockname : $+ %me 322 %tnick %tchan $lines($chanfile(%tchan)) : $+ $iif($chmodes(%tchan),[+ $+ $replacecs($chmodes(%tchan),1,N,2,L,3,S,4,C,5,T) $+ $chr(93) $ttopic(%tchan),)
  2529.                 }
  2530.               }
  2531.             }
  2532.           }
  2533.           .fclose %file
  2534.         }
  2535.         elseif ($left(%option,1) == $chr(33)) {
  2536.           set %larg $gettok(%option,1,33)
  2537.           set %clf $chanlistfile
  2538.           var %file $gopen(%clf)
  2539.           while ($fread(%file)) {
  2540.             set %tchan $ifmatch
  2541.             if (%larg !iswm %tchan) {
  2542.               set %tchmodes $replacecs($chmodes(%tchan),1,N,2,L,3,S,4,C,5,T)
  2543.               if ($replacecs(%tchmodes,s,0,p,0) == %tchmodes) {
  2544.                 ;<- :besancon.fr.epiknet.org 322 G-FACTION #besancon 17 :[+ntrSf] bienvenue dans la grotte de l
  2545.                 sw $sockname : $+ %me 322 %tnick %tchan $lines($chanfile(%tchan)) :[+ $+ %tchmodes $+ $chr(93) $ttopic(%tchan)
  2546.               }
  2547.             }
  2548.           }
  2549.           .fclose %file
  2550.         }
  2551.       }
  2552.       else {
  2553.         set %clf $chanlistfile
  2554.         var %file $gopen(%clf)
  2555.         while ($fread(%file)) {
  2556.           set %tchan $ifmatch
  2557.           set %tchmodes $replacecs($chmodes(%tchan),1,N,2,L,3,S,4,C,5,T)
  2558.           sw $sockname : $+ %me 322 %tnick %tchan $lines($chanfile(%tchan)) :[+ $+ %tchmodes $+ $chr(93) $ttopic(%tchan)
  2559.         }
  2560.         .fclose %file
  2561.       }
  2562.       :listend
  2563.       sw $sockname : $+ %me 323 %tnick :End of /LIST
  2564.     }
  2565.     elseif ($1 == CYCLE) {
  2566.       if ($2) {
  2567.         part $sockname PART $2 :cycling
  2568.         join $sockname JOIN $2
  2569.       }
  2570.       else {
  2571.         sw $sockname : $+ %me 461 $socknick($sockname) $1 :Not enough parameters
  2572.       }
  2573.     }
  2574.     elseif ($1 == LINKS) {
  2575.       sw $sockname : $+ %me 364 $socknick($sockname) %me %me :0 %me.info
  2576.       sw $sockname : $+ %me 365 $socknick($sockname) * :End of /LINKS list.
  2577.     }
  2578.     elseif ($1 == TIME) {
  2579.       sw $sockname : $+ %me 391 $socknick($sockname) %me : $+ $gdate
  2580.     }
  2581.     elseif ($1 == WHOWAS) {
  2582.       if ($2) {
  2583.         set %wwnick $2
  2584.         if ($exists($whowas.file)) {
  2585.           if ($whowas.exists(%wwnick)) {
  2586.             if (%ircop_ [ $+ [ $socknick($sockname) ] ]) {
  2587.               sw $sockname : $+ %me 314 $socknick($sockname) %wwnick $whowas.vraiehost(%wwnick)
  2588.             }
  2589.             else {
  2590.               sw $sockname : $+ %me 314 $socknick($sockname) %wwnick $whowas.host(%wwnick)
  2591.             }
  2592.             sw $sockname : $+ %me 312 $socknick($sockname) %wwnick $whowas.server(%wwnick)
  2593.           }
  2594.           else {
  2595.             sw $sockname : $+ %me 406 $socknick($sockname) %wwnick :There was no such nickname
  2596.           }
  2597.           sw $sockname : $+ %me 369 $socknick($sockname) %wwnick :End of WHOWAS
  2598.         }
  2599.         else {
  2600.           sw $sockname : $+ %me 406 $socknick($sockname) %wwnick :There was no such nickname
  2601.           sw $sockname : $+ %me 369 $socknick($sockname) %wwnick :End of WHOWAS
  2602.         }
  2603.       }
  2604.       else {
  2605.         sw $sockname : $+ %me 431 $socknick($sockname) :No nickname given
  2606.       }
  2607.     }
  2608.     elseif ($1 == NICK) {
  2609.       if ($2) {
  2610.         ;<- :besancon.fr.epiknet.org 431 G-FACTION :No nickname given
  2611.         set %oldnick $socknick($sockname)
  2612.         set %newnick $right($2,$calc($len($2) - 1))
  2613.         if (!$correctnickname(%newnick)) {
  2614.           sw $sockname : $+ %me 432 %oldnick $2 :Erroneous Nickname: Illegal characters - Not allowed by the G-NORM
  2615.           halt
  2616.         }
  2617.         if (!$isco(%newnick)) {
  2618.           set %operoverride $false
  2619.           if (%ircop_ [ $+ [ %oldnick ] ]) {
  2620.             set %tflags %oline. [ $+ [ %ircop_ [ $+ [ %oldnick ] ] ] ] [ $+ [ .flags ] ]
  2621.             if (v isincs %tflags) {
  2622.               set %operoverride $true
  2623.             }
  2624.           }
  2625.           if (($nnullepart(%oldnick) == $true) || (%operoverride)) {
  2626.           ;Il est libre
  2627.           remove debug.txt
  2628.           write debug.txt Il est libre !
  2629.  
  2630.           ;Envoyer une notice à toutes les personnes qui ont le snomask 'n'
  2631.           sendpeoplesnomask n *** Notice -- %oldnick ( $+ $gettok($fullhost(%sockname_ [ $+ [ %oldnick ] ]),2,33) $+ ) has changed his/her nickname to %newnick
  2632.          
  2633.           set %oldfullhost $fullhost($sockname)
  2634.           set %realname_ [ $+ [ %newnick ] ] %realname_ [ $+ [ %oldnick ] ]
  2635.           set %nick_ [ $+ [ %newnick ] ] %nick_ [ $+ [ %oldnick ] ]
  2636.           if (%ircop_ [ $+ [ %oldnick ] ]) {
  2637.             set %ircop_ [ $+ [ %newnick ] ] %ircop_ [ $+ [ %oldnick ] ]
  2638.           }
  2639.           set %snomask_ [ $+ [ %newnick ] ] %snomask_ [ $+ [ %oldnick ] ]
  2640.           set %umodes_ [ $+ [ %newnick ] ] %umodes_ [ $+ [ %oldnick ] ]
  2641.           set %identd_ [ $+ [ %newnick ] ] %identd_ [ $+ [ %oldnick ] ]
  2642.           set %server_ [ $+ [ %newnick ] ] %server_ [ $+ [ %oldnick ] ]
  2643.           set %sockname_ [ $+ [ %newnick ] ] %sockname_ [ $+ [ %oldnick ] ]
  2644.           set %nick_of_sockname_ [ $+ [ $sockname ] ] %newnick
  2645.           unset %realname_ [ $+ [ %oldnick ] ]
  2646.           unset %nick_of_sockname_ [ $+ [ %oldnick ] ]
  2647.           unset %nick_ [ $+ [ %oldnick ] ]
  2648.           unset %ircop_ [ $+ [ %oldnick ] ]
  2649.           unset %snomask_ [ $+ [ %oldnick ] ]
  2650.           unset %identd_ [ $+ [ %oldnick ] ]
  2651.           unset %server_ [ $+ [ %oldnick ] ]
  2652.           unset %sockname_ [ $+ [ %oldnick ] ]
  2653.           whowas.add.private $sockname
  2654.          
  2655.           write debug.txt Variables modifiées !
  2656.          
  2657.           ;Modifier la liste des users du serveur
  2658.          
  2659.           delservnick %oldnick
  2660.           addservnick %newnick
  2661.          
  2662.           write debug.txt Liste des users du serveur modifiée !
  2663.          
  2664.           ;Modifier la liste des IRCops
  2665.          
  2666.           if (%ircop_ [ $+ [ %newnick ] ]) {
  2667.             delircoplist %oldnick
  2668.             addircoplist %newnick
  2669.           }
  2670.          
  2671.           write debug.txt Liste des IRCops modifiée !
  2672.          
  2673.           ;Envoi à tous les users du réseau ayant des chans commun avec lui
  2674.          
  2675.           set %nchans %chans_ [ $+ [ $sockname ] ]
  2676.           unset %ghosts
  2677.           set %ulf $userslistfile
  2678.           var %file $gopen(%ulf)
  2679.           var %i 0
  2680.           while ($fread(%file)) {
  2681.             ;<- :kaline1-reveuse!~ptitchato@EpiK-18A5E41B.adsl.skynet.be NICK :kaline1-nongrague
  2682.             inc %i
  2683.             set %r $ifmatch
  2684.             echo -a r: %r
  2685.             if ($comchans(%nchans,%chans_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ])) {
  2686.               if ($sock(%sockname_ [ $+ [ %r ] ])) {
  2687.                 sw %sockname_ [ $+ [ %r ] ] : $+ %oldfullhost NICK : $+ %newnick
  2688.               }
  2689.               else {
  2690.                 set %tsock $+(gserv.,$passerelle(%server_ [ $+ [ %r ] ]))
  2691.                 if ($sock(%tsock)) {
  2692.                   sw %tsock : $+ %oldnick NICK : $+ %newnick
  2693.                 }
  2694.                 else {
  2695.                   set %ghosts $addtok(%ghosts,%i,32)
  2696.                 }
  2697.               }
  2698.             }
  2699.             else {
  2700.               echo -a passé dans le else...
  2701.               if (%r == %newnick) {
  2702.                 echo -a passé dans le oldnick...
  2703.                 sw $sockname : $+ %oldfullhost NICK : $+ %newnick
  2704.               }
  2705.             }
  2706.           }
  2707.           .fclose %file
  2708.          
  2709.           write debug.txt While d'envoi de NICK passée !
  2710.          
  2711.           var %y 1
  2712.           set %gtk $gettok(%ghosts,0,32)
  2713.           while (%y <= %gtk) {
  2714.             write -dl $+ $gettok(%ghosts,%y,32) %ulf
  2715.             inc %y
  2716.           }
  2717.          
  2718.           write debug.txt While de ghosts passée !
  2719.          
  2720.           ;Modifier son nick dans la nicklist de tous les chans où il est
  2721.          
  2722.           set %nbdchans $numtok(%nchans,32)
  2723.           if (%nbdchans) {
  2724.             var %o 1
  2725.             write debug.txt 1
  2726.             while (%o <= %nbdchans) {
  2727.               set %ntchan $gettok(%nchans,%o,32)
  2728.               write debug.txt 2 ntchan: %ntchan
  2729.               set %ncf $chanfile(%ntchan)
  2730.               if (!$exists(%ncf)) {
  2731.                 goto nickend
  2732.               }
  2733.               var %u 0
  2734.               var %file $gopen(%ncf)
  2735.               while ($fread(%file)) {
  2736.                 inc %u
  2737.                 set %r $ifmatch
  2738.                 if (($left(%r,1) == $chr(64)) || ($left(%r,1) == $chr(37)) || ($left(%r,1) == $chr(43)) || ($left(%r,1) == $chr(38)) || ($left(%r,1) == $chr(126))) {
  2739.                   set %tempnick $right(%r,$calc($len(%r) - 1))
  2740.                   if (%tempnick == %oldnick) {
  2741.                     write -dl $+ %u %ncf
  2742.                     write %ncf $left(%r,1) $+ %newnick
  2743.                   }
  2744.                 }
  2745.                 else {
  2746.                   set %tempnick %r
  2747.                   if (%tempnick == %oldnick) {
  2748.                     write -dl $+ %u %ncf
  2749.                     write %ncf %newnick
  2750.                   }
  2751.                 }
  2752.               }
  2753.               .fclose %file
  2754.               set %ntempstsm $readini($nfochanfile(%ntchan),STSM,%oldnick)
  2755.               remini $nfochanfile(%ntchan) STSM %oldnick
  2756.               writeini -n $nfochanfile(%ntchan) STSM %newnick %ntempstsm
  2757.               :nickend
  2758.               inc %o
  2759.             }
  2760.           }
  2761.           sendmultiserver : $+ %oldnick NICK : $+ %newnick
  2762.         }
  2763.         else {
  2764.           ;447 G-FACTION[GTASA] :Can not change nickname while on #G-FACTION (+N)
  2765.           sw $sockname : $+ %me 447 %oldnick :Can not change nickname while on $ifmatch (+N)
  2766.         }
  2767.       }
  2768.       else {
  2769.         ;433 G-FACTION G-FACTION[GTASA] :Nickname is already in use.
  2770.         sw $sockname : $+ %me 433 %oldnick :Nickname is already in use.
  2771.       }
  2772.     }
  2773.       else {
  2774.         sw $sockname : $+ %me 431 $socknick($sockname) :No nickname given
  2775.       }
  2776.     }
  2777.     elseif ($1 == PING) {
  2778.       if ($2) {
  2779.         sw $sockname : $+ %me PONG %me : $+ $2
  2780.       }
  2781.       else {
  2782.         sw $sockname : $+ %me 409 $socknick($sockname) :No origin specified
  2783.       }
  2784.     }
  2785.     elseif ($1 == WALLOPS) {
  2786.       set %wanick $socknick($sockname)
  2787.       if ($2) {
  2788.         if (%ircop_ [ $+ [ %wanick ] ]) {
  2789.           set %ulf $userslistfile
  2790.           var %file $gopen(%ulf)
  2791.           while ($fread(%file)) {
  2792.             set %r $ifmatch
  2793.             if (w isincs %umodes_ [ $+ [ %r ] ]) {
  2794.               if (%server_ [ $+ [ %r ] ] == %me) {
  2795.                 sw %sockname_ [ $+ [ %r ] ] : $+ $fullhost($sockname) WALLOPS $2-
  2796.               }
  2797.             }
  2798.           }
  2799.           .fclose %file
  2800.           sendmultiserver : $+ %wanick WALLOPS $2-
  2801.         }
  2802.         else {
  2803.           sw $sockname : $+ %me 481 %wanick :Permission Denied- You do not have the correct IRC operator privileges
  2804.         }
  2805.       }
  2806.       else {
  2807.         sw $sockname : $+ %me 461 %wanick $1 :Not enough parameters
  2808.       }
  2809.     }
  2810.     elseif ($1 == GLOBOPS) {
  2811.       set %glnick $socknick($sockname)
  2812.       set %glmess $right($2-,$calc($len($2-) - 1))
  2813.       if ($2) {
  2814.         if (%ircop_ [ $+ [ %glnick ] ]) {
  2815.           set %ilf $ircoplistfile
  2816.           if (!$exists(%ilf)) {
  2817.             goto globopsend
  2818.           }
  2819.           var %file $gopen(%ilf)
  2820.           while ($fread(%file)) {
  2821.             set %r $gettok($ifmatch,1,32)
  2822.             if (o isin %umodes_ [ $+ [ %r ] ]) {
  2823.               sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %glnick :*** Global -- from %glnick $+ : %glmess
  2824.             }
  2825.           }
  2826.           .fclose %file
  2827.           :globopsend
  2828.         }
  2829.         else {
  2830.           sw $sockname : $+ %me 481 %glnick :Permission Denied- You do not have the correct IRC operator privileges
  2831.         }
  2832.       }
  2833.       else {
  2834.         sw $sockname : $+ %me 461 %glnick $1 :Not enough parameters
  2835.       }
  2836.     }
  2837.     elseif ($1 == CHATOPS) {
  2838.       set %chnick $socknick($sockname)
  2839.       set %chmess $2-
  2840.       if ($2) {
  2841.         if (%ircop_ [ $+ [ %chnick ] ]) {
  2842.           set %ilf $ircoplistfile
  2843.           if (!$exists(%ilf) {
  2844.             goto chatopsend
  2845.           }
  2846.           var %file $gopen(%ilf)
  2847.           while ($fread(%file)) {
  2848.             set %r $gettok($ifmatch,1,32)
  2849.             if (o isin %umodes_ [ $+ [ %r ] ]) {
  2850.               sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %chnick :*** ChatOps -- from %chnick $+ : %chmess
  2851.             }
  2852.           }
  2853.           .fclose %ilf
  2854.           :chatopsend
  2855.         }
  2856.         else {
  2857.           sw $sockname : $+ %me 481 %chnick :Permission Denied- You do not have the correct IRC operator privileges
  2858.         }
  2859.       }
  2860.       else {
  2861.         sw $sockname : $+ %me 461 %chnick $1 :Not enough parameters
  2862.       }
  2863.     }
  2864.     elseif ($1 == LOCOPS) {
  2865.       set %lonick $socknick($sockname)
  2866.       set %lomess $right($2-,$calc($len($2-) - 1))
  2867.       if ($2) {
  2868.         if (%ircop_ [ $+ [ %lonick ] ]) {
  2869.           set %ilf $ircoplistfile
  2870.           if (!$exists(%ilf)) {
  2871.             goto locopsend
  2872.           }
  2873.           var %file $gopen(%ilf)
  2874.           while ($fread(%file)) {
  2875.             set %r $gettok($ifmatch,1,32)
  2876.             if (o isin %umodes_ [ $+ [ %r ] ]) {
  2877.               if (%server_ [ $+ [ %r ] ] == %me) {
  2878.                 sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %lonick :*** LocOps -- from %lonick $+ : %lomess
  2879.               }
  2880.             }
  2881.           }
  2882.           .fclose %file
  2883.           :locopsend
  2884.         }
  2885.         else {
  2886.           sw $sockname : $+ %me 481 %lonick :Permission Denied- You do not have the correct IRC operator privileges
  2887.         }
  2888.       }
  2889.       else {
  2890.         sw $sockname : $+ %me 461 %lonick $1 :Not enough parameters
  2891.       }
  2892.     }
  2893.     elseif ($1 == ADCHAT) {
  2894.       set %lonick $socknick($sockname)
  2895.       set %lomess $2-
  2896.       if ($2) {
  2897.         if (%ircop_ [ $+ [ %lonick ] ]) {
  2898.           set %ilf $ircoplistfile
  2899.           if (!$exists(%ilf)) {
  2900.             goto adchatend
  2901.           }
  2902.           var %file $gopen(%ilf)
  2903.           while ($fread(%file)) {
  2904.             set %r $gettok($ifmatch,1,32)
  2905.             if (A isin %umodes_ [ $+ [ %r ] ]) {
  2906.               sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %lonick :*** AdminChat -- from %lonick $+ : %lomess
  2907.             }
  2908.           }
  2909.           .fclose %file
  2910.           :adchatend
  2911.         }
  2912.         else {
  2913.           sw $sockname : $+ %me 481 %lonick :Permission Denied- You do not have the correct IRC operator privileges
  2914.         }
  2915.       }
  2916.       else {
  2917.         sw $sockname : $+ %me 461 %lonick $1 :Not enough parameters
  2918.       }
  2919.     }
  2920.     elseif ($1 == NACHAT) {
  2921.       set %lonick $socknick($sockname)
  2922.       set %lomess $2-
  2923.       if ($2) {
  2924.         if (%ircop_ [ $+ [ %lonick ] ]) {
  2925.           set %ilf $ircoplistfile
  2926.           if (!$exists(%ilf)) {
  2927.             goto nachatend
  2928.           }
  2929.           var %file $gopen(%ilf)
  2930.           while ($fread(%file)) {
  2931.             set %r $gettok($ifmatch,1,32)
  2932.             if (N isin %umodes_ [ $+ [ %r ] ]) {
  2933.               sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %lonick :*** NetAdmin.Chat -- from %lonick $+ : %lomess
  2934.             }
  2935.           }
  2936.           .fclose %file
  2937.           :nachatend
  2938.         }
  2939.         else {
  2940.           sw $sockname : $+ %me 481 %lonick :Permission Denied- You do not have the correct IRC operator privileges
  2941.         }
  2942.       }
  2943.       else {
  2944.         sw $sockname : $+ %me 461 %lonick $1 :Not enough parameters
  2945.       }
  2946.     }
  2947.     elseif ($1 == KILL) {
  2948.       set %knick $socknick($sockname)
  2949.       if ($3) {
  2950.         set %kmess $right($3-,$calc($len($3-) - 1))
  2951.         if ($isco($2)) {
  2952.           if (%ircop_ [ $+ [ %knick ] ]) {
  2953.             set %kflags %oline. [ $+ [ %ircop_ [ $+ [ %knick ] ] ] ] [ $+ [ .flags ] ]
  2954.             ;Là on met seulement du local kill puisque les links n'éxistent pas encore
  2955.             if (k isin %kflags) {
  2956.               var %a $true
  2957.               echo -a a
  2958.               if (!$sock(%sockname_ [ $+ [ $2 ] ])) {
  2959.                 if (%server_ [ $+ [ $2 ] ] != %me) {
  2960.                   var %a $false
  2961.                   sw gserv. $+ $ifmatch : $+ %knick KILL $2 : $+ %host_ [ $+ [ $sockname ] ] $+ $chr(33) $+ %knick ( $+ %kmess $+ )
  2962.                   ;:G-FACTION KILL huhut :netadmin.G-SERVER.net!G-FACTION (:p)
  2963.                 }
  2964.               }
  2965.               echo -a b
  2966.               if (%a) {
  2967.               sw %sockname_ [ $+ [ $2 ] ] : $+ $fullhost($sockname) KILL $2 : $+ %knick
  2968.               }
  2969.               echo -a c
  2970.               set %quitchans %chans_ [ $+ [ %sockname_ [ $+ [ $2 ] ] ] ]
  2971.               set %qfullhost $fullhost(%sockname_ [ $+ [ $2 ] ])
  2972.               set %qnick $socknick(%sockname_ [ $+ [ $2 ] ])
  2973.               set %qserv %server_ [ $+ [ $socknick(%sockname_ [ $+ [ $2 ] ]) ] ]
  2974.               set %truc %sockname_ [ $+ [ $2 ] ]
  2975.               set %quitraison_ [ $+ [ %truc ] ] $chr(91) $+ %me $+ $chr(93) Local kill by %knick ( $+ %kmess $+ )
  2976.               sendpeoplesnomask k *** Notice -- Received KILL message for $fullhost(%truc) from %knick Path: %me $+ ! $+ %knick ( $+ %kmess $+ )
  2977.               sendmultiserver : $+ %qnick QUIT : $+ %quitraison_ [ $+ [ %truc ] ]
  2978.               sockclose2 %truc
  2979.               gquit %truc $chr(91) $+ %me $+ $chr(93) Local kill by %knick ( $+ %kmess $+ ) %truc
  2980.             }
  2981.             else {
  2982.               sw $sockname : $+ %me 481 %knick :Permission Denied- You do not have the correct IRC operator privileges
  2983.             }
  2984.           }
  2985.           else {
  2986.             sw $sockname : $+ %me 481 %knick :Permission Denied- You do not have the correct IRC operator privileges
  2987.           }
  2988.         }
  2989.         else {
  2990.           sw $sockname : $+ %me 401 %knick $2 :No such nick/channel
  2991.         }
  2992.       }
  2993.       else {
  2994.         sw $sockname : $+ %me 461 %knick $1 :Not enough parameters
  2995.       }
  2996.     }
  2997.     elseif ($1 == KLINE) {
  2998.       set %knick $socknick($sockname)
  2999.       if ($2) {
  3000.         if (%ircop_ [ $+ [ %knick ] ]) {
  3001.           set %kflags %oline. [ $+ [ %ircop_ [ $+ [ %knick ] ] ] ] [ $+ [ .flags ] ]
  3002.           if (b isincs %kflags) {
  3003.             if ($left($2,1) != $chr(45)) {
  3004.               ;Pour adder une k:line
  3005.               ;kline <host ou nick> temps raison
  3006.               if ($chr(64) isin $2) {
  3007.                 if ($left($2,1) == $chr(43)) {
  3008.                   set %khost $right($2,$calc($len($2) - 1))
  3009.                 }
  3010.                 else {
  3011.                   set %khost $2
  3012.                 }
  3013.               }
  3014.               else {
  3015.                 if ($left($2,1) == $chr(43)) {
  3016.                   set %khost $right($2,$calc($len($2) - 1))
  3017.                 }
  3018.                 else {
  3019.                   set %khost $2
  3020.                 }
  3021.                 if ($isco($2)) {
  3022.                   set %khost *@ $+ %vraiehost_ [ $+ [ %sockname_ [ $+ [ $2 ] ] ] ]
  3023.                 }
  3024.                 else {
  3025.                   sw $sockname : $+ %me 401 %knick %khost :No such nick/channel
  3026.                   halt
  3027.                 }
  3028.               }
  3029.               set %tsecs $duration($replace($3,d,d $+ $chr(32),h,h $+ $chr(32),m,m $+ $chr(32),s,s $+ $chr(32)))
  3030.               if (!$len($kline.infos(%khost))) {
  3031.                 if ((%tsecs != 0) && (%tsecs != 0secs) && (%tsecs)) {
  3032.                   ;Bon format de durée
  3033.                   ;kline.add host $dctime timetoexpire host_klineur raison
  3034.                   ;           1      2         3            4         5
  3035.                   set %tasctime $ctime
  3036.                   set %treason $iif($len($4-),$4-,no reason)
  3037.                   kline.add %khost %tasctime %tsecs $fullhost($sockname) %treason
  3038.                   sendpeoplesnomask G *** K:Line added for %khost on $asctime(%tasctime) GMT (from $fullhost($sockname) to expire at $asctime($calc(%tasctime + %tsecs)) GMT: %treason $+ )
  3039.                 }
  3040.                 else {
  3041.                   ;Permanent k:line !
  3042.                   set %tasctime $ctime
  3043.                   set %tsecs 0
  3044.                   set %treason $iif($len($4-),$4-,no reason)
  3045.                   kline.add %khost %tasctime 0 $fullhost($sockname) %treason
  3046.                   sendpeoplesnomask G *** Permanent K:Line added for %khost on $asctime(%tasctime) GMT (from $fullhost($sockname) $+ : %treason $+ )
  3047.                 }
  3048.               }
  3049.               else {
  3050.                 halt
  3051.               }
  3052.             }
  3053.             else {
  3054.               ;Il s'agit d'un removal de k:line
  3055.               set %khost $right($2,$calc($len($2) - 1))
  3056.               if ($chr(64) isin %khost) {
  3057.                 set %khost %khost
  3058.               }
  3059.               else {
  3060.                 if ($isco(%khost)) {
  3061.                   set %khost *@ $+ %vraiehost_ [ $+ [ %sockname_ [ $+ [ %khost ] ] ] ]
  3062.                 }
  3063.                 else {
  3064.                   sw $sockname : $+ %me 401 %knick %khost :No such nick/channel
  3065.                 }
  3066.               }
  3067.               if ($kline.infos(%khost)) {
  3068.                 ;Elle existe en effet
  3069.                 set %kinfos $kline.infos(%khost)
  3070.                 set %setat $asctime($gettok(%kinfos,1,32))
  3071.                 set %kreason $gettok(%kinfos,4-,32)
  3072.                 kline.del %khost
  3073.                 globops $fullhost($sockname) removed K:Line %khost (set at %setat - reason: %kreason $+ )
  3074.               }
  3075.             }
  3076.           }
  3077.           else {
  3078.             sw $sockname : $+ %me 481 %knick :Permission Denied- You do not have the correct IRC operator privileges
  3079.           }
  3080.         }
  3081.         else {
  3082.           sw $sockname : $+ %me 481 %knick :Permission Denied- You do not have the correct IRC operator privileges
  3083.         }
  3084.       }
  3085.       else {
  3086.         if (%ircop_ [ $+ [ %knick ] ]) {
  3087.           stats K $sockname
  3088.         }
  3089.         else {
  3090.           sw $sockname : $+ %me 481 %knick :Permission Denied- You do not have the correct IRC operator privileges
  3091.         }
  3092.       }
  3093.     }
  3094.     elseif ($1 == GLINE) {
  3095.       set %gnick $socknick($sockname)
  3096.       if ($2) {
  3097.         if (%ircop_ [ $+ [ %gnick ] ]) {
  3098.           set %gflags %oline. [ $+ [ %ircop_ [ $+ [ %gnick ] ] ] ] [ $+ [ .flags ] ]
  3099.           if (t isincs %gflags) {
  3100.             if ($left($2,1) != $chr(45)) {
  3101.               ;Pour adder une g:line
  3102.               ;gline <host ou nick> temps raison
  3103.               if ($chr(64) isin $2) {
  3104.                 if ($left($2,1) == $chr(43)) {
  3105.                   set %ghost $right($2,$calc($len($2) - 1))
  3106.                 }
  3107.                 else {
  3108.                   set %ghost $2
  3109.                 }
  3110.               }
  3111.               else {
  3112.               if ($left($2,1) == $chr(43)) {
  3113.                   set %ghost $right($2,$calc($len($2) - 1))
  3114.                 }
  3115.                 else {
  3116.                   set %ghost $2
  3117.                 }
  3118.                 if ($isco(%ghost)) {
  3119.                   set %ghost *@ $+ %vraiehost_ [ $+ [ %sockname_ [ $+ [ $2 ] ] ] ]
  3120.                 }
  3121.                 else {
  3122.                   sw $sockname : $+ %me 401 %gnick %ghost :No such nick/channel
  3123.                   halt
  3124.                 }
  3125.               }
  3126.               set %tsecs $duration($replace($3,d,d $+ $chr(32),h,h $+ $chr(32),m,m $+ $chr(32),s,s $+ $chr(32)))
  3127.               if (!$len($gline.infos(%ghost))) {
  3128.                 if ((%tsecs != 0) && (%tsecs != 0secs) && (%tsecs)) {
  3129.                   ;Bon format de durée
  3130.                   ;gline.add host $ctime timetoexpire host_glineur raison
  3131.                   ;           1      2          3          4          5
  3132.                   set %tasctime $ctime
  3133.                   set %treason $iif($len($4-),$4-,no reason)
  3134.                   gline.add %ghost %tasctime %tsecs $fullhost($sockname) %treason
  3135.                   sendpeoplesnomask G *** G:Line added for %ghost on $asctime(%tasctime) GMT (from $fullhost($sockname) to expire at $asctime($calc(%tasctime + %tsecs)) GMT: %treason $+ )
  3136.                   set %quitchans %chans_ [ $+ [ %sockname_ [ $+ [ $2 ] ] ] ]
  3137.                   set %qfullhost $fullhost(%sockname_ [ $+ [ $2 ] ])
  3138.                   set %qnick $socknick(%sockname_ [ $+ [ $2 ] ])
  3139.                   set %qserv %server_ [ $+ [ $socknick(%sockname_ [ $+ [ $2 ] ]) ] ]
  3140.                   set %truc %sockname_ [ $+ [ $2 ] ]
  3141.                   set %quitraison_ [ $+ [ %truc ] ] User has been banned from %network ( $+ %treason $+ )
  3142.                   sendmultiserver : $+ %qnick QUIT : $+ %quitraison_ [ $+ [ %truc ] ]
  3143.                   sockclose2 %truc
  3144.                   gquit %truc User has been banned from %network ( $+ %treason $+ ) %truc
  3145.                 }
  3146.                 else {
  3147.                   ;Permanent g:line !
  3148.                   set %tasctime $ctime
  3149.                   set %tsecs 0
  3150.                   set %treason $iif($len($4-),$4-,no reason)
  3151.                   gline.add %ghost %tasctime %tsecs $fullhost($sockname) %treason
  3152.                   sendpeoplesnomask G *** Permanent G:Line added for %ghost on $asctime(%tasctime) GMT (from $fullhost($sockname) $+ : %treason $+ )
  3153.                   set %quitchans %chans_ [ $+ [ %sockname_ [ $+ [ $2 ] ] ] ]
  3154.                   set %qfullhost $fullhost(%sockname_ [ $+ [ $2 ] ])
  3155.                   set %qnick $socknick(%sockname_ [ $+ [ $2 ] ])
  3156.                   set %qserv %server_ [ $+ [ $socknick(%sockname_ [ $+ [ $2 ] ]) ] ]
  3157.                   set %truc %sockname_ [ $+ [ $2 ] ]
  3158.                   set %quitraison_ [ $+ [ %truc ] ] User has been permanently banned from %network ( $+ %treason $+ )
  3159.                   sendmultiserver : $+ %qnick QUIT : $+ %quitraison_ [ $+ [ %truc ] ]
  3160.                   sockclose2 %truc
  3161.                   gquit %truc User has been permanently banned from %network ( $+ %treason $+ ) %truc
  3162.                 }
  3163.               }
  3164.               else {
  3165.                 halt
  3166.               }
  3167.             }
  3168.             else {
  3169.               ;Il s'agit d'un removal de g:line
  3170.               set %ghost $right($2,$calc($len($2) - 1))
  3171.               if ($chr(64) isin %ghost) {
  3172.                 set %ghost %ghost
  3173.               }
  3174.               else {
  3175.                 if ($isco(%ghost)) {
  3176.                   set %ghost *@ $+ %vraiehost_ [ $+ [ %sockname_ [ $+ [ %ghost ] ] ] ]
  3177.                 }
  3178.                 else {
  3179.                   sw $sockname : $+ %me 401 %gnick %ghost :No such nick/channel
  3180.                 }
  3181.               }
  3182.               if ($gline.infos(%ghost)) {
  3183.                 ;Elle existe en effet
  3184.                 set %ginfos $gline.infos(%ghost)
  3185.                 set %setat $asctime($gettok(%ginfos,1,32))
  3186.                 set %greason $gettok(%ginfos,4-,32)
  3187.                 gline.del %ghost
  3188.                 globops $fullhost($sockname) removed G:Line %ghost (set at %setat - reason: %greason $+ )
  3189.               }
  3190.             }
  3191.           }
  3192.           else {
  3193.             sw $sockname : $+ %me 481 %gnick :Permission Denied- You do not have the correct IRC operator privileges
  3194.           }
  3195.         }
  3196.         else {
  3197.           sw $sockname : $+ %me 481 %gnick :Permission Denied- You do not have the correct IRC operator privileges
  3198.         }
  3199.       }
  3200.       else {
  3201.         if (%ircop_ [ $+ [ %gnick ] ]) {
  3202.           stats G $sockname
  3203.         }
  3204.         else {
  3205.           sw $sockname : $+ %me 481 %gnick :Permission Denied- You do not have the correct IRC operator privileges
  3206.         }
  3207.       }
  3208.     }
  3209.     elseif ($1 == STATS) {
  3210.       if ($2) {
  3211.         stats $2 $sockname
  3212.       }
  3213.       else {
  3214.         statshelp $sockname
  3215.       }
  3216.     }
  3217.     elseif ($1 == ZLINE) {
  3218.       set %znick $socknick($sockname)
  3219.       if ($2) {
  3220.         if (%ircop_ [ $+ [ %znick ] ]) {
  3221.           set %zflags %oline. [ $+ [ %ircop_ [ $+ [ %znick ] ] ] ] [ $+ [ .flags ] ]
  3222.           if (z isincs %zflags) {
  3223.             if ($left($2,1) != $chr(45)) {
  3224.               ;Pour adder une k:line
  3225.               ;kline <host ou nick> temps raison
  3226.               if ($chr(64) isin $2) {
  3227.                 if ($left($2,1) == $chr(43)) {
  3228.                   set %zhost $right($2,$calc($len($2) - 1))
  3229.                 }
  3230.                 else {
  3231.                   set %zhost $2
  3232.                 }
  3233.               }
  3234.               else {
  3235.                 if ($left($2,1) == $chr(43)) {
  3236.                   set %zhost $right($2,$calc($len($2) - 1))
  3237.                 }
  3238.                 else {
  3239.                   set %zhost $2
  3240.                 }
  3241.                 if ($isco($2)) {
  3242.                   set %zhost *@ $+ $sock(%sockname_ [ $+ [ $2 ] ]).ip
  3243.                 }
  3244.                 else {
  3245.                   sw $sockname : $+ %me 401 %znick %zhost :No such nick/channel
  3246.                   halt
  3247.                 }
  3248.               }
  3249.               set %tsecs $duration($replace($3,d,d $+ $chr(32),h,h $+ $chr(32),m,m $+ $chr(32),s,s $+ $chr(32)))
  3250.               if (!$len($zline.infos(%zhost))) {
  3251.                 if ((%tsecs != 0) && (%tsecs != 0secs) && (%tsecs)) {
  3252.                   ;Bon format de durée
  3253.                   ;zline.add host $dctime timetoexpire host_zlineur raison
  3254.                   ;           1      2         3            4         5
  3255.                   set %tasctime $ctime
  3256.                   set %treason $iif($len($4-),$4-,no reason)
  3257.                   zline.add %zhost %tasctime %tsecs $fullhost($sockname) %treason
  3258.                   sendpeoplesnomask G *** Z:Line added for %zhost on $asctime(%tasctime) GMT (from $fullhost($sockname) to expire at $asctime($calc(%tasctime + %tsecs)) GMT: %treason $+ )
  3259.                 }
  3260.                 else {
  3261.                   ;Permanent z:line !
  3262.                   set %tasctime $ctime
  3263.                   set %tsecs 0
  3264.                   set %treason $iif($len($4-),$4-,no reason)
  3265.                   zline.add %zhost %tasctime 0 $fullhost($sockname) %treason
  3266.                   sendpeoplesnomask G *** Permanent Z:Line added for %zhost on $asctime(%tasctime) GMT (from $fullhost($sockname) $+ : %treason $+ )
  3267.                 }
  3268.               }
  3269.               else {
  3270.                 halt
  3271.               }
  3272.             }
  3273.             else {
  3274.               ;Il s'agit d'un removal de z:line
  3275.               set %zhost $right($2,$calc($len($2) - 1))
  3276.               if ($chr(64) isin %zhost) {
  3277.                 set %zhost %zhost
  3278.               }
  3279.               else {
  3280.                 if ($isco(%zhost)) {
  3281.                   set %zhost *@ $+ %vraiehost_ [ $+ [ %sockname_ [ $+ [ %zhost ] ] ] ]
  3282.                 }
  3283.                 else {
  3284.                   sw $sockname : $+ %me 401 %znick %zhost :No such nick/channel
  3285.                   halt
  3286.                 }
  3287.               }
  3288.               if ($zline.infos(%zhost)) {
  3289.                 ;Elle existe en effet
  3290.                 set %zinfos $zline.infos(%zhost)
  3291.                 set %setat $asctime($gettok(%zinfos,1,32))
  3292.                 set %zreason $gettok(%zinfos,4-,32)
  3293.                 zline.del %zhost
  3294.                 globops $fullhost($sockname) removed Z:Line %zhost (set at %setat - reason: %zreason $+ )
  3295.               }
  3296.             }
  3297.           }
  3298.           else {
  3299.             sw $sockname : $+ %me 481 %znick :Permission Denied- You do not have the correct IRC operator privileges
  3300.           }
  3301.         }
  3302.         else {
  3303.           sw $sockname : $+ %me 481 %znick :Permission Denied- You do not have the correct IRC operator privileges
  3304.         }
  3305.       }
  3306.       else {
  3307.         if (%ircop_ [ $+ [ %znick ] ]) {
  3308.           stats z $sockname
  3309.         }
  3310.         else {
  3311.           sw $sockname : $+ %me 481 %znick :Permission Denied- You do not have the correct IRC operator privileges
  3312.         }
  3313.       }
  3314.     }
  3315.     elseif ($1 == GZLINE) {
  3316.       set %gznick $socknick($sockname)
  3317.       if ($2) {
  3318.         if (%ircop_ [ $+ [ %gznick ] ]) {
  3319.           set %gzflags %oline. [ $+ [ %ircop_ [ $+ [ %gznick ] ] ] ] [ $+ [ .flags ] ]
  3320.           if (Z isincs %gzflags) {
  3321.             if ($left($2,1) != $chr(45)) {
  3322.               ;Pour adder une gz:line
  3323.               ;gzline <host ou nick> temps raison
  3324.               if ($chr(64) isin $2) {
  3325.                 if ($left($2,1) == $chr(43)) {
  3326.                   set %gzhost $right($2,$calc($len($2) - 1))
  3327.                 }
  3328.                 else {
  3329.                   set %gzhost $2
  3330.                 }
  3331.               }
  3332.               else {
  3333.                 if ($left($2,1) == $chr(43)) {
  3334.                   set %gzhost $right($2,$calc($len($2) - 1))
  3335.                 }
  3336.                 else {
  3337.                   set %gzhost $2
  3338.                 }
  3339.                 if ($isco($2)) {
  3340.                   set %gzhost *@ $+ $sock(%sockname_ [ $+ [ $2 ] ]).ip
  3341.                 }
  3342.                 else {
  3343.                   sw $sockname : $+ %me 401 %gznick %gzhost :No such nick/channel
  3344.                   halt
  3345.                 }
  3346.               }
  3347.               set %tsecs $duration($replace($3,d,d $+ $chr(32),h,h $+ $chr(32),m,m $+ $chr(32),s,s $+ $chr(32)))
  3348.               if (!$len($gzline.infos(%gzhost))) {
  3349.                 if ((%tsecs != 0) && (%tsecs != 0secs) && (%tsecs)) {
  3350.                   ;Bon format de durée
  3351.                   ;gzline.add host $ctime timetoexpire host_gzlineur raison
  3352.                   ;           1      2          3          4          5
  3353.                   set %tasctime $ctime
  3354.                   set %treason $iif($len($4-),$4-,no reason)
  3355.                   gzline.add %gzhost %tasctime %tsecs $fullhost($sockname) %treason
  3356.                   sendpeoplesnomask G *** Global Z:Line added for %ghost on $asctime(%tasctime) GMT (from $fullhost($sockname) to expire at $asctime($calc(%tasctime + %tsecs)) GMT: %treason $+ )
  3357.                   set %quitchans %chans_ [ $+ [ %sockname_ [ $+ [ $2 ] ] ] ]
  3358.                   set %qfullhost $fullhost(%sockname_ [ $+ [ $2 ] ])
  3359.                   set %qnick $socknick(%sockname_ [ $+ [ $2 ] ])
  3360.                   set %qserv %server_ [ $+ [ $socknick(%sockname_ [ $+ [ $2 ] ]) ] ]
  3361.                   set %truc %sockname_ [ $+ [ $2 ] ]
  3362.                   set %quitraison_ [ $+ [ %truc ] ] Z:lined ( $+ %treason $+ )
  3363.                   sendmultiserver : $+ %qnick QUIT : $+ %quitraison_ [ $+ [ %truc ] ]
  3364.                   sockclose2 %truc
  3365.                   gquit %truc Z:lined ( $+ %treason $+ ) %truc
  3366.                 }
  3367.                 else {
  3368.                   ;Permanent gz:line !
  3369.                   set %tasctime $ctime
  3370.                   set %tsecs 0
  3371.                   set %treason $iif($len($4-),$4-,no reason)
  3372.                   gzline.add %gzhost %tasctime 0 $fullhost($sockname) %treason
  3373.                   sendpeoplesnomask G *** Permanent Global Z:Line added for %gzhost on $asctime(%tasctime) GMT (from $fullhost($sockname) $+ : %treason $+ )
  3374.                   set %quitchans %chans_ [ $+ [ %sockname_ [ $+ [ $2 ] ] ] ]
  3375.                   set %qfullhost $fullhost(%sockname_ [ $+ [ $2 ] ])
  3376.                   set %qnick $socknick(%sockname_ [ $+ [ $2 ] ])
  3377.                   set %qserv_ [ $+ [ $socknick(%sockname_ [ $+ [ $2 ] ]) ] ]
  3378.                   set %truc %sockname_ [ $+ [ $2 ] ]
  3379.                   set %quitraison_ [ $+ [ %truc ] ] Z:lined ( $+ %treason $+ )
  3380.                   sendmultiserver : $+ %qnick QUIT : $+ %quitraison_ [ $+ [ %truc ] ]
  3381.                   sockclose2 %truc
  3382.                   gquit %truc Z:lined ( $+ %treason $+ ) %truc
  3383.                 }
  3384.               }
  3385.               else {
  3386.                 halt
  3387.               }
  3388.             }
  3389.             else {
  3390.               ;Il s'agit d'un removal de gz:line
  3391.               set %gzhost $right($2,$calc($len($2) - 1))
  3392.               if ($chr(64) isin %gzhost) {
  3393.                 set %gzhost %gzhost
  3394.               }
  3395.               else {
  3396.                 if ($isco(%gzhost)) {
  3397.                   set %gzhost *@ $+ %vraiehost_ [ $+ [ %sockname_ [ $+ [ %gzhost ] ] ] ]
  3398.                 }
  3399.                 else {
  3400.                   sw $sockname : $+ %me 401 %gznick %gzhost :No such nick/channel
  3401.                   halt
  3402.                 }
  3403.               }
  3404.               if ($gzline.infos(%gzhost)) {
  3405.                 ;Elle existe en effet
  3406.                 set %gzinfos $gzline.infos(%gzhost)
  3407.                 set %setat $asctime($gettok(%gzinfos,1,32))
  3408.                 set %gzreason $gettok(%gzinfos,4-,32)
  3409.                 gzline.del %gzhost
  3410.                 globops $fullhost($sockname) removed Global Z:Line %gzhost (set at %setat - reason: %gzreason $+ )
  3411.               }
  3412.             }
  3413.           }
  3414.           else {
  3415.             sw $sockname : $+ %me 481 %gznick :Permission Denied- You do not have the correct IRC operator privileges
  3416.           }
  3417.         }
  3418.         else {
  3419.           sw $sockname : $+ %me 481 %gznick :Permission Denied- You do not have the correct IRC operator privileges
  3420.         }
  3421.       }
  3422.       else {
  3423.         if (%ircop_ [ $+ [ %gznick ] ]) {
  3424.           stats Z $sockname
  3425.         }
  3426.         else {
  3427.           sw $sockname : $+ %me 481 %gznick :Permission Denied- You do not have the correct IRC operator privileges
  3428.         }
  3429.       }
  3430.     }
  3431.     elseif ($1 == SETIDENT) {
  3432.       ;<- :irc.G-SERVER.net NOTICE G-FACTION :Your nick!user@host-mask is now (G-FACTION!lol@G-SERVER-5D1944FA) - To disable ident set change it manually by /setident'ing again
  3433.       ;SETIDENT <new ident>
  3434.       set %identnick $socknick($sockname)
  3435.       if (%ircop_ [ $+ [ %identnick ] ]) {
  3436.         if ($2) {
  3437.           if ($len($2-) <= 10) {
  3438.             if ($norme($2)) {
  3439.               set %identd_ [ $+ [ $socknick($sockname) ] ] $2
  3440.               sw $sockname : $+ %me NOTICE $socknick($sockname) :Your nick!user@host-mask is now $chr(40) $+ $fullhost($sockname) $+ $chr(41) - To disable ident set change it manually by /setident'ing again
  3441.             }
  3442.             else {
  3443.               sw $sockname : $+ %me NOTICE $socknick($sockname) :*** /SetIdent Error: A username may contain a-z, A-Z, 0-9, '-', '~' & '.' - Please only use them
  3444.             }
  3445.           }
  3446.           else {
  3447.             sw $sockname : $+ %me NOTICE $socknick($sockname) :*** /SetIdent Error: Usernames are limited to 10 characters.
  3448.           }
  3449.         }
  3450.         else {
  3451.           sw $sockname : $+ %me 461 $socknick($sockname) $1 :Not enough parameters
  3452.         }
  3453.       }
  3454.       else {
  3455.         sw $sockname : $+ %me 481 %identnick :Permission denied- You do not have the correct IRC operator privileges
  3456.       }
  3457.     }
  3458.     elseif ($1 == CHGNAME) {
  3459.       ;CHGNAME NICK NEWNAME
  3460.       set %identnick $socknick($sockname)
  3461.       if (%ircop_ [ $+ [ %identnick ] ]) {
  3462.         if ($2) {
  3463.         if ($isco($2)) {
  3464.           if ($3) {
  3465.             if ($len($3-) <= 50) {
  3466.               set %realname_ [ $+ [ $2 ] ] $3-
  3467.               sw $sockname : $+ %me NOTICE $socknick($sockname) : $+ $2 $+ 's "real name" (GCOS) is now set to be $3-
  3468.             }
  3469.             else {
  3470.               sw $sockname : $+ %me NOTICE $socknick($sockname) :*** /ChgName Error: "Real names" may maximum be 50 characters of length
  3471.             }
  3472.           }
  3473.           else {
  3474.             sw $sockname : $+ %me 461 $socknick($sockname) $1 :Not enough parameters
  3475.           }
  3476.         }
  3477.         else {
  3478.           sw $sockname : $+ %me 401 $socknick($sockname) $2 :No such nick/channel
  3479.         }
  3480.       }
  3481.           else {
  3482.             sw $sockname : $+ %me 461 $socknick($sockname) $1 :Not enough parameters
  3483.           }
  3484.           }
  3485.       else {
  3486.         sw $sockname : $+ %me 481 %identnick :Permission denied- You do not have the correct IRC operator privileges
  3487.       }
  3488.     }
  3489.     elseif ($1 == CHGIDENT) {
  3490.       ;CHGIDENT nick newident
  3491.       set %identnick $socknick($sockname)
  3492.       if (%ircop_ [ $+ [ %identnick ] ]) {
  3493.         if ($2) {
  3494.         if ($isco($2)) {
  3495.           if ($3) {
  3496.             if ($len($3-) <= 10) {
  3497.               if ($norme($replace($3,$chr(126),))) {
  3498.                 set %identd_ [ $+ [ $2 ] ] $3
  3499.                 sw $sockname : $+ %me NOTICE $socknick($sockname) : $+ $2 $+ 's nick!user@host-mask is now $chr(40) $+ $fullhost($sockname) $+ $chr(41)
  3500.               }
  3501.               else {
  3502.                 sw $sockname : $+ %me NOTICE $socknick($sockname) :*** /ChgIdent Error: A ident may contain a-z, A-Z, 0-9, '-', '~' & '.' - Please only use them
  3503.               }
  3504.             }
  3505.             else {
  3506.               sw $sockname : $+ %me NOTICE $socknick($sockname) :*** /SetIdent Error: Usernames are limited to 10 characters.
  3507.             }
  3508.           }
  3509.           else {
  3510.             sw $sockname : $+ %me 461 $socknick($sockname) $1 :Not enough parameters
  3511.           }
  3512.         }
  3513.         else {
  3514.           sw $sockname : $+ %me 401 $socknick($sockname) $2 :No such nick/channel
  3515.         }
  3516.       }
  3517.           else {
  3518.             sw $sockname : $+ %me 461 $socknick($sockname) $1 :Not enough parameters
  3519.           }
  3520.           }
  3521.       else {
  3522.         sw $sockname : $+ %me 481 %identnick :Permission denied- You do not have the correct IRC operator privileges
  3523.       }
  3524.     }
  3525.     elseif ($1 == SETHOST) {
  3526.       ;sethost ma-new-host.net
  3527.       set %identnick $socknick($sockname)
  3528.       if (%ircop_ [ $+ [ %identnick ] ]) {
  3529.         if ($2) {
  3530.           if ($len($2) <= 63) {
  3531.             if ($norme($2)) {
  3532.               set %host_ [ $+ [ $sockname ] ] $2
  3533.               sw $sockname : $+ %me NOTICE $socknick($sockname) :Your nick!user@host-mask is now $chr(40) $+ %host_ [ $+ [ $sockname ] ] $+ $chr(41) - To disable it type /mode %identnick -x
  3534.             }
  3535.             else {
  3536.               sw $sockname : $+ %me NOTICE $socknick($sockname) :*** /SetHost Error: A hostname may contain a-z, A-Z, 0-9, '-' & '.' - Please only use them
  3537.             }
  3538.           }
  3539.           else {
  3540.             sw $sockname : $+ %me NOTICE $socknick($sockname) :*** /SetHost Error: Hostnames are limited to 63 characters.
  3541.           }
  3542.         }
  3543.         else {
  3544.           sw $sockname : $+ %me 461 $socknick($sockname) $1 :Not enough parameters
  3545.         }
  3546.       }
  3547.       else {
  3548.         sw $sockname : $+ %me 481 %identnick :Permission denied- You do not have the correct IRC operator privileges
  3549.       }
  3550.     }
  3551.     elseif ($1 == CHGHOST) {
  3552.       ;chghost nick la-new-host.net
  3553.       set %identnick $socknick($sockname)
  3554.       if (%ircop_ [ $+ [ %identnick ] ]) {
  3555.         if ($3) {
  3556.           if ($isco($2)) {
  3557.             if ($len($3) <= 63) {
  3558.               if ($norme($3)) {
  3559.                 set %host_ [ $+ [ %sockname_ [ $+ [ $2 ] ] ] ] $3
  3560.                 sw $sockname : $+ %me NOTICE $socknick($sockname) : $+ $2 $+ 's nick!user@host-mask is now $chr(40) $+ %host_ [ $+ [ %sockname_ [ $+ [ $2 ] ] ] ] $+ $chr(41)
  3561.               }
  3562.               else {
  3563.                 sw $sockname : $+ %me NOTICE $socknick($sockname) :*** /ChgHost Error: A hostname may contain a-z, A-Z, 0-9, '-' & '.' - Please only use them
  3564.               }
  3565.             }
  3566.             else {
  3567.               sw $sockname : $+ %me NOTICE $socknick($sockname) :*** /ChgHost Error: Hostnames are limited to 63 characters.
  3568.             }
  3569.           }
  3570.           else {
  3571.             sw $sockname : $+ %me 401 $socknick($sockname) $2 :No such nick/channel
  3572.           }
  3573.         }
  3574.         else {
  3575.           sw $sockname : $+ %me 461 $socknick($sockname) $1 :Not enough parameters
  3576.         }
  3577.       }
  3578.       else {
  3579.         sw $sockname : $+ %me 481 %identnick :Permission denied- You do not have the correct IRC operator privileges
  3580.       }
  3581.     }
  3582.     elseif ($1 == SDESC) {
  3583.       ;-> irc.G-SERVER.net SDESC haha ^^
  3584.       ;<- :irc.G-SERVER.net NOTICE G-FACTION :Your "server description" is now set to be haha ^^ - you have to set it manually to undo it
  3585.       set %sdescnick $socknick($sockname)
  3586.       if (%ircop_ [ $+ [ %sdescnick ] ]) {
  3587.         if ($2) {
  3588.           set %me.info $2-
  3589.           sw $sockname : $+ %me NOTICE %sdescnick :Your "server description" is now set to be $2- - you have to set it manually to undo it
  3590.         }
  3591.         else {
  3592.           sw $sockname : $+ %me 461 %sdescnick $1 :Not enough parameters
  3593.         }
  3594.       }
  3595.       else {
  3596.         sw $sockname : $+ %me 481 %sdescnick :Permission denied- You do not have the correct IRC operator privileges
  3597.       }
  3598.     }
  3599.     elseif ($1 == DIE) {
  3600.       set %dienick $socknick($sockname)
  3601.       if (%ircop_ [ $+ [ %dienick ] ]) {
  3602.         set %dieflags %oline. [ $+ [ %ircop_ [ $+ [ %dienick ] ] ] ] [ $+ [ .flags ] ]
  3603.         if (D isincs %dieflags) {
  3604.           if ($2) {
  3605.             if ($2 == %diepass) {
  3606.               ;-> irc.G-SERVER.net DIE pass
  3607.               ;<- :irc.G-SERVER.net NOTICE G-FACTION :*** Notice -- Server Terminating by request of G-FACTION
  3608.               ;<- :irc.G-SERVER.net NOTICE G-FACTION :Server Terminating. G-FACTION
  3609.               ;<- :irc.G-SERVER.net NOTICE G-FACTION :Server Terminating.
  3610.               ;Envoyer les notices à tous les IRCops locaux
  3611.               set %ilf $userslistfile
  3612.               if (!$exists(%ilf)) {
  3613.                 goto dieend
  3614.               }
  3615.               var %file $gopen(%ilf)
  3616.               while ($fread(%file)) {
  3617.                 set %r $gettok($ifmatch,1,32)
  3618.                 if (%server_ [ $+ [ %r ] ] == %me) {
  3619.                   sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %r :*** Notice -- Server Terminating by request of %dienick
  3620.                   sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %r :Server Terminating. %dienick
  3621.                   sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %r :Server Terminating.
  3622.                 }
  3623.               }
  3624.               .fclose %file
  3625.               :dieend
  3626.               ;Fin
  3627.               crashserv
  3628.             }
  3629.             else {
  3630.               ;<- :irc.G-SERVER.net 464 G-FACTION :Password Incorrect
  3631.               sw $1 : $+ %me 464 %dienick :Password Incorrect
  3632.             }
  3633.           }
  3634.           else {
  3635.             sw $sockname : $+ %me 461 %dienick $1 :Not enough parameters
  3636.           }
  3637.         }
  3638.         else {
  3639.           sw $sockname : $+ %me 481 %dienick :Permission denied- You do not have the correct IRC operator privileges
  3640.         }
  3641.       }
  3642.       else {
  3643.         sw $sockname : $+ %me 481 %dienick :Permission denied- You do not have the correct IRC operator privileges
  3644.       }
  3645.     }
  3646.     elseif ($1 == RESTART) {
  3647.       set %dienick $socknick($sockname)
  3648.       if (%ircop_ [ $+ [ %dienick ] ]) {
  3649.         set %dieflags %oline. [ $+ [ %ircop_ [ $+ [ %dienick ] ] ] ] [ $+ [ .flags ] ]
  3650.         if (R isincs %dieflags) {
  3651.           if ($2) {
  3652.             if ($2 == %restartpass) {
  3653.               ;-> irc.G-SERVER.net RESTART pass
  3654.               ;<- :irc.G-SERVER.net NOTICE G-FACTION :*** Notice -- Server is Restarting by request of G-FACTION
  3655.               ;<- :irc.G-SERVER.net NOTICE G-FACTION :*** Notice -- Aieeeee!!!  Restarting server... No reason
  3656.               ;Envoyer les notices à tous les IRCops locaux
  3657.               set %ilf $userslistfile
  3658.               if (!$exists(%ilf)) {
  3659.                 goto restartend
  3660.               }
  3661.               var %file $gopen(%ilf)
  3662.               while ($fread(%file)) {
  3663.                 set %r $gettok($ifmatch,1,32)
  3664.                 if (%server_ [ $+ [ %r ] ] == %me) {
  3665.                   sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %r :*** Notice -- Server is Restarting by request of %dienick
  3666.                 }
  3667.                 if (o isin %umodes_ [ $+ [ %r ] ]) {
  3668.                   if (%server_ [ $+ [ %r ] ] == %me) {
  3669.                     sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %r :*** Notice -- Aieeeee!!!  Restarting server... $iif($3,$3-,No reason)
  3670.                   }
  3671.                 }
  3672.               }
  3673.               .fclose %file
  3674.               :restartend
  3675.               ;Fin
  3676.               restartserv
  3677.             }
  3678.             else {
  3679.               ;<- :irc.G-SERVER.net 464 G-FACTION :Password Incorrect
  3680.               sw $1 : $+ %me 464 %dienick :Password Incorrect
  3681.             }
  3682.           }
  3683.           else {
  3684.             sw $sockname : $+ %me 461 %dienick $1 :Not enough parameters
  3685.           }
  3686.         }
  3687.         else {
  3688.           sw $sockname : $+ %me 481 %dienick :Permission denied- You do not have the correct IRC operator privileges
  3689.         }
  3690.       }
  3691.       else {
  3692.         sw $sockname : $+ %me 481 %dienick :Permission denied- You do not have the correct IRC operator privileges
  3693.       }
  3694.     }
  3695.     elseif ($1 == REHASH) {
  3696.       ;rehash
  3697.       ;<- :irc.G-SERVER.net NOTICE G-FACTION :*** Notice -- G-FACTION is rehashing server config file
  3698.       ;<- :irc.G-SERVER.net 382 G-FACTION unrealircd.conf :Rehashing
  3699.       ;<- :irc.G-SERVER.net NOTICE G-FACTION :*** Notice -- Loading IRCd configuration ..
  3700.       ;<- :irc.G-SERVER.net NOTICE G-FACTION :*** Notice -- Configuration loaded without any problems ..
  3701.       set %rhnick $socknick($sockname)
  3702.       if (%ircop_ [ $+ [ %rhnick ] ]) {
  3703.         set %rhflags %oline. [ $+ [ %ircop_ [ $+ [ %rhnick ] ] ] ] [ $+ [ .flags ] ]
  3704.         if (r isincs %rhflags) {
  3705.           sw $sockname : $+ %me 382 %rhnick g-ircd.g :Rehashing
  3706.           ;Envoyer la notice à tous les IRCops locaux
  3707.           set %ilf $ircoplistfile
  3708.           if (!$exists(%ilf)) {
  3709.             goto rehashend
  3710.           }
  3711.           var %file $gopen(%ilf)
  3712.           while ($fread(%file)) {
  3713.             set %r $gettok($ifmatch,1,32)
  3714.             if (o isin %umodes_ [ $+ [ %r ] ]) {
  3715.               if (%server_ [ $+ [ %r ] ] == %me) {
  3716.                 sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %r :*** Notice -- %rhnick is rehashing server config file
  3717.               }
  3718.             }
  3719.           }
  3720.           .fclose %file
  3721.           :rehashend
  3722.           ;Fin
  3723.           rh %rhnick
  3724.         }
  3725.         else {
  3726.           sw $sockname : $+ %me 481 %rhnick :Permission denied- You do not have the correct IRC operator privileges
  3727.         }
  3728.       }
  3729.       else {
  3730.         sw $sockname : $+ %me 481 %rhnick :Permission denied- You do not have the correct IRC operator privileges
  3731.       }
  3732.     }
  3733.     elseif ($1 == LAG) {
  3734.       ;<- :irc.G-SERVER.net 461 G-FACTION LAG :Not enough parameters
  3735.       ;<- :irc.G-SERVER.net 402 G-FACTION hhh :No such server
  3736.       ;<- :irc.G-SERVER.net NOTICE G-FACTION :Lag reply -- irc.G-SERVER.net irc.g-server.net 1108233190
  3737.       set %lagnick $socknick($sockname)
  3738.       if (%ircop_ [ $+ [ %lagnick ] ]) {
  3739.         if ($2) {
  3740.           if ($2 == %me) {
  3741.             ;Modifier cette condition lors du passage aux links
  3742.             sw $sockname : $+ %me NOTICE %lagnick :Lag reply -- %me $2 $ctime
  3743.           }
  3744.           else {
  3745.             sw $sockname : $+ %me 402 %lagnick :No such server
  3746.           }
  3747.         }
  3748.         else {
  3749.           sw $sockname : $+ %me 461 %lagnick $1 :Not enough parameters
  3750.         }
  3751.       }
  3752.       else {
  3753.         sw $sockname : $+ %me 481 %lagnick :Permission denied- You do not have the correct IRC operator privileges
  3754.       }
  3755.     }
  3756.     elseif ($1 == SAJOIN) {
  3757.       ;join $sockname $1-
  3758.       set %joinnick $socknick($sockname)
  3759.       if (%ircop_ [ $+ [ %joinnick ] ]) {
  3760.         if ($3) {
  3761.           if ($isco($2)) {
  3762.             if ($left($3,1) == $chr(35)) {
  3763.               join %sockname_ [ $+ [ $2 ] ] JOIN $3
  3764.               sw %sockname_ [ $+ [ $2 ] ] : $+ %me NOTICE $2 :*** You were forced to join $3
  3765.               ;Envoyer la notice à tous les IRCops locaux
  3766.               set %ilf $ircoplistfile
  3767.               if (!$exists(%ilf)) {
  3768.                 goto sajoinend
  3769.               }
  3770.               var %file $gopen(%ilf)
  3771.               while ($fread(%file)) {
  3772.                 set %r $gettok($ifmatch,1,32)
  3773.                 if (o isin %umodes_ [ $+ [ %r ] ]) {
  3774.                   if (%server_ [ $+ [ %r ] ] == %me) {
  3775.                     sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %r :*** Notice -- %joinnick used SAJOIN to make $2 join $3
  3776.                   }
  3777.                 }
  3778.               }
  3779.               .fclose %file
  3780.               :sajoinend
  3781.               ;Fin
  3782.             }
  3783.             else {
  3784.               sw $sockname : $+ %me 403 %joinnick $3 :No such channel
  3785.             }
  3786.           }
  3787.           else {
  3788.             sw $sockname : $+ %me 421 %joinnick $2 :No such nick/channel
  3789.           }
  3790.         }
  3791.         else {
  3792.           sw $sockname : $+ %me 461 %joinnick $1 :Not enough parameters
  3793.         }
  3794.       }
  3795.       else {
  3796.         sw $sockname : $+ %me 481 %joinnick :Permission denied- You do not have the correct IRC operator privileges
  3797.       }
  3798.     }
  3799.     elseif ($1 == SAPART) {
  3800.       ;join $sockname $1-
  3801.       set %joinnick $socknick($sockname)
  3802.       if (%ircop_ [ $+ [ %joinnick ] ]) {
  3803.         if ($3) {
  3804.           if ($isco($2)) {
  3805.             if ($left($3,1) == $chr(35)) {
  3806.               part %sockname_ [ $+ [ $2 ] ] PART $3
  3807.               sw %sockname_ [ $+ [ $2 ] ] : $+ %me NOTICE $2 :*** You were forced to part $3
  3808.               ;Envoyer la notice à tous les IRCops locaux
  3809.               set %ilf $ircoplistfile
  3810.               if (!$exists(%ilf)) {
  3811.                 goto sapartend
  3812.               }
  3813.               var %file $gopen(%ilf)
  3814.               while ($fread(%file)) {
  3815.                 set %r $gettok($ifmatch,1,32)
  3816.                 if (o isin %umodes_ [ $+ [ %r ] ]) {
  3817.                   if (%server_ [ $+ [ %r ] ] == %me) {
  3818.                     sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %r :*** Notice -- %joinnick used SAPART to make $2 part $3
  3819.                   }
  3820.                 }
  3821.               }
  3822.               .fclose %file
  3823.               :sapartend
  3824.               ;Fin
  3825.             }
  3826.             else {
  3827.               sw $sockname : $+ %me 403 %joinnick $3 :No such channel
  3828.             }
  3829.           }
  3830.           else {
  3831.             sw $sockname : $+ %me 421 %joinnick $2 :No such nick/channel
  3832.           }
  3833.         }
  3834.         else {
  3835.           sw $sockname : $+ %me 461 %joinnick $1 :Not enough parameters
  3836.         }
  3837.       }
  3838.       else {
  3839.         sw $sockname : $+ %me 481 %joinnick :Permission denied- You do not have the correct IRC operator privileges
  3840.       }
  3841.     }
  3842.     elseif ($1 == SAMODE) {
  3843.       ;SAMODE #chan +modes-....
  3844.       ;applychmodesonrequest $sockname $2 $3-
  3845.       set %sanick $socknick($sockname)
  3846.       if (%ircop_ [ $+ [ %sanick ] ]) {
  3847.         set %saflags %oline. [ $+ [ %ircop_ [ $+ [ %sanick ] ] ] ] [ $+ [ .flags ] ]
  3848.         if (a isincs %saflags) {
  3849.           if ($3) {
  3850.             if ($chanexists($2)) {
  3851.               ;:*** Global -- from irc.G-SERVER.net: G-FACTION used SAMODE #G-FACTION (+i )
  3852.               ;Envoyer la notice à tous les IRCops locaux
  3853.               set %ilf $ircoplistfile
  3854.               if (!$exists(%ilf)) {
  3855.                 goto samodeend
  3856.               }
  3857.               var %file $gopen(%ilf)
  3858.               while ($fread(%file)) {
  3859.                 set %r $gettok($ifmatch,1,32)
  3860.                 if (o isin %umodes_ [ $+ [ %r ] ]) {
  3861.                   sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %sanick :*** Global -- from %me $+ : %sanick used SAMODE $2 ( $+ $3- $+ )
  3862.                 }
  3863.               }
  3864.               .fclose %file
  3865.               :samodeend
  3866.               ;Fin
  3867.               applychmodesonrequest $sockname $+ $chr(96) $+ %me $2-
  3868.             }
  3869.             else {
  3870.               sw $sockname : $+ %me 401 %sanick $2 :No such nick/channel
  3871.             }
  3872.           }
  3873.           else {
  3874.             sw $sockname : $+ %me 461 %sanick $1 :Not enough parameters
  3875.           }
  3876.         }
  3877.         else {
  3878.           sw $sockname : $+ %me 481 %sanick :Permission denied- You do not have the correct IRC operator privileges
  3879.         }
  3880.       }
  3881.       else {
  3882.         sw $sockname : $+ %me 481 %sanick :Permission denied- You do not have the correct IRC operator privileges
  3883.       }
  3884.     }
  3885.     elseif ($1 == SHUN) {
  3886.       set %snick $socknick($sockname)
  3887.       if ($2) {
  3888.         if (%ircop_ [ $+ [ %snick ] ]) {
  3889.             if ($left($2,1) != $chr(45)) {
  3890.               ;Pour adder un shun
  3891.               ;shun (+)<host ou nick> temps raison
  3892.               if ($chr(64) isin $2) {
  3893.                 if ($left($2,1) == $chr(43)) {
  3894.                   set %shost $right($2,$calc($len($2) - 1))
  3895.                 }
  3896.                 else {
  3897.                   set %shost $2
  3898.                 }
  3899.               }
  3900.               else {
  3901.                 if ($left($2,1) == $chr(43)) {
  3902.                   set %shost $right($2,$calc($len($2) - 1))
  3903.                 }
  3904.                 else {
  3905.                   set %shost $2
  3906.                 }
  3907.                 if ($isco(%shost)) {
  3908.                   set %shost *@ $+ %vraiehost_ [ $+ [ %sockname_ [ $+ [ $2 ] ] ] ]
  3909.                 }
  3910.                 else {
  3911.                   sw $sockname : $+ %me 401 %snick %shost :No such nick/channel
  3912.                   halt
  3913.                 }
  3914.               }
  3915.               set %tsecs $duration($replace($3,d,d $+ $chr(32),h,h $+ $chr(32),m,m $+ $chr(32),s,s $+ $chr(32)))
  3916.               if (!$len($shun.infos(%shost))) {
  3917.                 if ((%tsecs != 0) && (%tsecs != 0secs)) {
  3918.                   ;Bon format de durée
  3919.                   ;shun.add host $ctime timetoexpire host_shuner raison
  3920.                   ;           1      2          3          4          5
  3921.                   set %tasctime $ctime
  3922.                   set %treason $iif($len($4-),$4-,no reason)
  3923.                   shun.add %shost %tasctime %tsecs $fullhost($sockname) %treason
  3924.                   sendpeoplesnomask G *** Shun added for %shost on $asctime(%tasctime) GMT (from $fullhost($sockname) to expire at $asctime($calc(%tasctime + %tsecs)) GMT: %treason $+ )
  3925.                 }
  3926.                 else {
  3927.                   ;Permanent shun !
  3928.                   set %tasctime $ctime
  3929.                   set %tsecs 0
  3930.                   set %treason $iif($len($4-),$4-,no reason)
  3931.                   shun.add %shost %tasctime 0 $fullhost($sockname) %treason
  3932.                   sendpeoplesnomask G *** Permanent Shun added for %shost on $asctime(%tasctime) GMT (from $fullhost($sockname) $+ : %treason $+ )
  3933.                 }
  3934.               }
  3935.               else {
  3936.                 halt
  3937.               }
  3938.             }
  3939.             else {
  3940.               ;Il s'agit d'un removal de shun
  3941.               set %shost $right($2,$calc($len($2) - 1))
  3942.               if ($chr(64) isin %shost) {
  3943.                 set %shost %shost
  3944.               }
  3945.               else {
  3946.                 if ($isco(%ghost)) {
  3947.                   set %shost *@ $+ %vraiehost_ [ $+ [ %sockname_ [ $+ [ %shost ] ] ] ]
  3948.                 }
  3949.                 else {
  3950.                   sw $sockname : $+ %me 401 %snick %shost :No such nick/channel
  3951.                 }
  3952.               }
  3953.               if ($shun.infos(%shost)) {
  3954.                 ;Elle existe en effet
  3955.                 set %sinfos $shun.infos(%shost)
  3956.                 set %setat $asctime($gettok(%sinfos,1,32))
  3957.                 set %sreason $gettok(%sinfos,4-,32)
  3958.                 shun.del %shost
  3959.                 globops $fullhost($sockname) removed Shun %shost (set at %setat - reason: %sreason $+ )
  3960.               }
  3961.             }
  3962.         }
  3963.         else {
  3964.           sw $sockname : $+ %me 481 %snick :Permission Denied- You do not have the correct IRC operator privileges
  3965.         }
  3966.       }
  3967.       else {
  3968.         if (%ircop_ [ $+ [ %snick ] ]) {
  3969.           stats s $sockname
  3970.         }
  3971.         else {
  3972.           sw $sockname : $+ %me 481 %snick :Permission Denied- You do not have the correct IRC operator privileges
  3973.         }
  3974.       }
  3975.     }
  3976.     elseif ($1 == TEMPSHUN) {
  3977.       ;tempshun (+|-)nickname
  3978.       set %tsn $socknick($sockname)
  3979.       if (%ircop_ [ $+ [ %tsn ] ]) {
  3980.         if ($2) {
  3981.           if (($left($2,1) == $chr(43)) || ($left($2,1) == $chr(45))) {
  3982.             set %tsign $left($2,1)
  3983.             set %toshun $right($2,$calc($len($2) - 1))
  3984.           }
  3985.           else {
  3986.             set %tsign $chr(43)
  3987.             set %toshun $2
  3988.           }
  3989.           if ($isco(%toshun)) {
  3990.             if (%tsign == $chr(43)) {
  3991.               ;Ajouter %toshun à la liste des temp-shunned
  3992.               if (!$shunned(%toshun)) {
  3993.                 tmpshun.add %toshun
  3994.                 globops Temporary shun added on user %toshun ( $+ $gettok($vraiefullhost(%sockname_ [ $+ [ %toshun ] ]),2,$asc(!)) $+ ) by %tsn $chr(91) $+ $iif($3-,$3-,no reason) $+ $chr(93)
  3995.               }
  3996.               else {
  3997.                 sw $sockname : $+ %me NOTICE %tsn :User ' $+ %toshun $+ ' already shunned
  3998.               }
  3999.             }
  4000.             else {
  4001.               ;Supprimer %toshun de la liste des temp-shunned
  4002.               if ($shunned(%toshun)) {
  4003.                 tmpshun.del %toshun
  4004.                 globops Removed temporary shun on user %toshun ( $+ $gettok($vraiefullhost(%sockname_ [ $+ [ %toshun ] ]),2,$asc(!)) $+ ) by %tsn
  4005.               }
  4006.               else {
  4007.                 ;User 'g0d' is not shunned
  4008.                 sw $sockname : $+ %me NOTICE %tsn :User ' $+ %toshun $+ ' is not shunned
  4009.               }
  4010.             }
  4011.           }
  4012.           else {
  4013.             sw $sockname : $+ %me 401 %tsn %toshun :No such nick/channel
  4014.           }
  4015.         }
  4016.         else {
  4017.           sw $sockname : $+ %me 461 %tsn $1 :Not enough parameters
  4018.         }
  4019.       }
  4020.       else {
  4021.         sw $sockname : $+ %me 481 %tsn :Permission Denied- You do not have the correct IRC operator privileges
  4022.       }
  4023.     }
  4024.     elseif ($1 == CONNECT) {
  4025.       ;connect server-bloc-name [port]
  4026.       set %connectnick $socknick($sockname)
  4027.       if (%ircop_ [ $+ [ %connectnick ] ]) {
  4028.         if ($2) {
  4029.           if (!$3) {
  4030.             if (%link_ [ $+ [ $2 ] ] [ $+ [ .port ] ]) {
  4031.               ;Ce bloc existe
  4032.               if ($len(%link_ [ $+ [ $2 ] ] [ $+ [ .ip ] ]) >= 3) {
  4033.                 set %tempsockname $+(gserv.,$2)
  4034.                 sw $sockname : $+ %me NOTICE %connectnick :*** Connecting to $2 $+ $chr(91) $+ %link_ [ $+ [ $2 ] ] [ $+ [ .ip ] ] $+ ].
  4035.                 echo -a 4set %connect_ [ $+ [ %tempsockname ] ] $sockname $2 %link_ [ $+ [ $2 ] ] [ $+ [ .ip ] ]
  4036.                 set %connect_ [ $+ [ %tempsockname ] ] $sockname $2 %link_ [ $+ [ $2 ] ] [ $+ [ .ip ] ]
  4037.                 sockopen %tempsockname %link_ [ $+ [ $2 ] ] [ $+ [ .ip ] ] %link_ [ $+ [ $2 ] ] [ $+ [ .port ] ]
  4038.               }
  4039.               else {
  4040.                 sw $sockname : $+ %me NOTICE %connectnick :*** Notice -- Host %link_ [ $+ [ $2 ] ] [ $+ [ .ip ] ] unknown
  4041.               }
  4042.             }
  4043.             else {
  4044.               sw $sockname : $+ %me NOTICE %connectnick :*** Connect: Server $2 is not configured for linking
  4045.             }
  4046.           }
  4047.           else {
  4048.             if ($len(%link_ [ $+ [ $2 ] ] [ $+ [ .ip ] ]) >= 3) {
  4049.               set %tempsockname $+(gserv.,$2)
  4050.               sw $sockname : $+ %me NOTICE %connectnick :*** Connecting to $2 $+ $chr(91) $+ %link_ [ $+ [ $2 ] ] [ $+ [ .ip ] ] $+ ].
  4051.               set %connect_ [ $+ [ %tempsockname ] ] $sockname $2 %link_ [ $+ [ $2 ] ] [ $+ [ .ip ] ]
  4052.               sockopen %tempsockname %link_ [ $+ [ $2 ] ] [ $+ [ .ip ] ] $3
  4053.             }
  4054.             else {
  4055.               sw $sockname : $+ %me NOTICE %connectnick :*** Notice -- Host %link_ [ $+ [ $2 ] ] [ $+ [ .ip ] ] unknown
  4056.             }
  4057.           }
  4058.         }
  4059.         else {
  4060.           sw $sockname : $+ %me 461 %tsn $1 :Not enough parameters
  4061.         }
  4062.       }
  4063.       else {
  4064.         sw $sockname : $+ %me 481 %connectnick :Permission Denied- You do not have the correct IRC operator privileges
  4065.       }
  4066.     }
  4067.     elseif ($1 == MAP) {
  4068.       showmap $sockname
  4069.     }
  4070.     else {
  4071.       sw $sockname : $+ %me 421 $socknick($sockname) $1 :Unknown command
  4072.     }
  4073.   }
  4074.   else {
  4075.     if ($1 == NICK) {
  4076.       set %tnick $2
  4077.       if ($correctnickname(%tnick)) {
  4078.         if (!$isco(%tnick)) {
  4079.           set %sockname_ [ $+ [ %tnick ] ] $sockname
  4080.           set %nick_of_sockname_ [ $+ [ $sockname ] ] %tnick
  4081.           set %nick_ [ $+ [ %tnick ] ] $true
  4082.         }
  4083.         else {
  4084.           ;<- :besancon.fr.epiknet.org 433 * G-FACTION :Nickname is already in use.
  4085.           ;sw $sockname : $+ %me 433 * %tnick :Nickname is already in use.
  4086.           sw $sockname ERROR :Closing Link: Nickname is already in use. Please change.
  4087.           sockclose2 $sockname
  4088.           .timerkill $+ $sockname -m 1 200 /sockclose $sockname
  4089.         }
  4090.       }
  4091.       else {
  4092.         sw $sockname ERROR :Closing link: Erroneous Nickname: Illegal characters - Not allowed by the G-NORM
  4093.         sockclose2 $sockname
  4094.         .timerkill $+ $sockname -m 1 200 /sockclose $sockname
  4095.       }
  4096.     }
  4097.     elseif ($1 == USER) {
  4098.       if (%nick_of_sockname_ [ $+ [ $sockname ] ]) {
  4099.         ;USER _G-FACTION "" "127.0.0.1" :I'm g0d. g0d is IRC-Master. g0d made IRC on 8° day!
  4100.         set %tnick %nick_of_sockname_ [ $+ [ $sockname ] ]
  4101.         set %usergiven_ [ $+ [ $sockname ] ] on
  4102.         ;.timerusergiven $+ $sockname off
  4103.         set %tidentd $2
  4104.         set %trealname $5-
  4105.         set %ping_ [ $+ [ $sockname ] ] $randping
  4106.         set %trealname $right(%trealname,$calc($len(%trealname) - 1))
  4107.         set %realname_ [ $+ [ %tnick ] ] %trealname
  4108.         set %identd_ [ $+ [ %tnick ] ] %tidentd
  4109.         set %server_ [ $+ [ %tnick ] ] %me
  4110.         set %reginserver_ [ $+ [ $sockname ] ] $true
  4111.         ;if ($isco($socknick($sockname))) {
  4112.         ;  ;hello $sockname
  4113.         ;  ;usergiven $sockname
  4114.         ;}
  4115.         ;else {
  4116.         ;  sw $sockname ERROR :Closing Link: Nickname is already in use. Please change.
  4117.         ;  sockclose2 $sockname
  4118.         ;  .timerkill $+ $sockname -m 1 200 /sockclose $sockname
  4119.         ;}
  4120.       }
  4121.       else {
  4122.       }
  4123.     }
  4124.     else {
  4125.       ;:irc.g-neration.com 451 m :You have not registered
  4126.       sw $sockname : $+ %me 451 $gettok(%sr,1,32) :You have not registered
  4127.     }
  4128.   }
  4129.   :toutefin
  4130. }
  4131.  
  4132. alias nnullepart {
  4133.   ;Vérifier si la personne n'est sur aucun canal avec le mode N
  4134.   if ($1) {
  4135.     set %tmpsn %sockname_ [ $+ [ $1 ] ]
  4136.     set %tmpchans %chans_ [ $+ [ %tmpsn ] ]
  4137.     set %nbdchans $gettok(%tmpchans,0,32)
  4138.     set %nn $true
  4139.     var %i 1
  4140.     while (%i <= %nbdchans) {
  4141.       set %tmpchan $gettok(%tmpchans,%i,32)
  4142.       ;echo -a $chmodes(%tmpchan)
  4143.       if (N isincs $replacecs($chmodes(%tmpchan),1,N,2,L,3,S,4,C,5,T)) {
  4144.         set %nn %tmpchan
  4145.       }
  4146.       inc %i
  4147.     }
  4148.     return %nn
  4149.   }
  4150. }
  4151.  
  4152. alias sendpeoplesnomask {
  4153.   ;sendpeoplesnomask snomask message
  4154.   ;                     1       2
  4155.   ;Envoit le message en notice aux personnes ayant le snomask 'snomask'
  4156.   if ($2) {
  4157.     if (!$exists($userslistfile)) {
  4158.       goto sendpeoplesnomaskend
  4159.     }
  4160.     var %i 1
  4161.     var %file $gopen($userslistfile)
  4162.     set %error $false
  4163.     while ($fread(%file)) {
  4164.       set %r $ifmatch
  4165.       if ((!$sock(%sockname_ [ $+ [ %r ] ])) && (%server_ [ $+ [ %r ] ] == %me)) {
  4166.         echo @sr 12Ghost in userslistfile (sendpeoplesnomask function) nickname: $+ %r -> sockname is not available and this person is on my server...
  4167.         set %error %i
  4168.       }
  4169.       unset %tsnomask
  4170.       set %tsnomask %snomask_ [ $+ [ %r ] ]
  4171.       ;:irc.G-SERVER.net NOTICE G-FACTION :*** Notice -- R
  4172.       if (%tsnomask) {
  4173.         if ($1 isincs %tsnomask) {
  4174.           sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %r : $+ $2-
  4175.         }
  4176.       }
  4177.       inc %i
  4178.     }
  4179.     fclose %file
  4180.     if (%error) { write -dl $+ %error $userslistfile }
  4181.     :sendpeoplesnomaskend
  4182.   }
  4183. }
  4184.  
  4185. alias shunfile { return $mircdir $+ System\tshun.db }
  4186.  
  4187. alias tmpshun.add {
  4188.   if ($1) {
  4189.     if (!$exists($shunfile)) {
  4190.       goto tmpshunaddend
  4191.     }
  4192.     var %i 0
  4193.     var %file $gopen($shunfile)
  4194.     while ($fread(%file)) {
  4195.       inc %i
  4196.       set %r $ifmatch
  4197.       if (%r == $1) {
  4198.         write -dl $+ %i $shunfile
  4199.         .fclose %file
  4200.         break
  4201.       }
  4202.     }
  4203.     if ($fopen(%file)) {
  4204.       .fclose %file
  4205.     }
  4206.     :tmpshunaddend
  4207.     write $shunfile $1
  4208.   }
  4209. }
  4210.  
  4211. alias tmpshun.del {
  4212.   if ($1) {
  4213.     if (!$exists($shunfile)) {
  4214.       goto tmpshundelend
  4215.     }
  4216.     var %i 0
  4217.     var %file $gopen($shunfile)
  4218.     while ($fread(%file)) {
  4219.       inc %i
  4220.       set %r $ifmatch
  4221.       if (%r == $1) {
  4222.         write -dl $+ %i $shunfile
  4223.         .fclose %file
  4224.         break
  4225.       }
  4226.     }
  4227.     if ($fopen(%file)) {
  4228.       .fclose %file
  4229.     }
  4230.     :tmpshundelend
  4231.   }
  4232. }
  4233.  
  4234. alias shunned {
  4235.   if ($1) {
  4236.     if (!$exists($shunfile)) {
  4237.       goto shunnedend
  4238.     }
  4239.     var %i 0
  4240.     var %file $gopen($shunfile)
  4241.     while ($fread(%file)) {
  4242.       inc %i
  4243.       set %r $ifmatch
  4244.       if (%r == $1) {
  4245.         .fclose %file
  4246.         return $true
  4247.       }
  4248.     }
  4249.     .fclose %file
  4250.     :shunnedend
  4251.     return $false
  4252.   }
  4253. }
  4254.  
  4255. alias chanexists {
  4256.   ;$chanexists(#chan) = $true|$false
  4257.   if ($1) {
  4258.     ;$chanlistfile : $chanfile(#chan)
  4259.     var %i 1
  4260.     if (!$exists($chanlistfile)) {
  4261.       goto chanexistsend
  4262.     }
  4263.     var %file $gopen($chanlistfile)
  4264.     while ($fread(%file)) {
  4265.       set %r $ifmatch
  4266.       if (%r == $1) {
  4267.         .fclose %file
  4268.         return $true
  4269.       }
  4270.     }
  4271.     .fclose %file
  4272.     :chanexistsend
  4273.     return $false
  4274.   }
  4275. }
  4276.  
  4277. alias crashserv {
  4278.   sockclose *
  4279.   exit
  4280. }
  4281. alias restartserv {
  4282.   sockclose *
  4283.   start
  4284. }
  4285.  
  4286. alias norme {
  4287.   if ($1) {
  4288.     var %lettres abcdefghijklmnopqrstuvwxyz0123456789-.
  4289.     var %len $len($1)
  4290.     var %i 1
  4291.     while (%i <= %len) {
  4292.       set %tmplettre $mid($1,%i,1)
  4293.       var %o 1
  4294.       var %good $false
  4295.       while (%o <= 38) {
  4296.         if (%tmplettre == $mid(%lettres,%o,1)) {
  4297.           var %good $true
  4298.           break
  4299.         }
  4300.         inc %o
  4301.       }
  4302.       if (!%good) { return $false }
  4303.       inc %i
  4304.     }
  4305.     return $true
  4306.   }
  4307.   else { return $false }
  4308. }
  4309.      
  4310.  
  4311.  
  4312. alias statshelp {
  4313.   ;statshelp sockname
  4314.  
  4315.   ;À faire...
  4316. }
  4317.  
  4318. alias stats {
  4319.   ;stats K sockname
  4320.   if ($2) {
  4321.     if (($1 == K) || ($1 == G) || ($1 == Z)) {
  4322.       if ($1 === z) {
  4323.         set %kg Z
  4324.       }
  4325.       elseif ($1 === Z) {
  4326.         set %kg GZ
  4327.       }
  4328.       else {
  4329.         set %kg $1
  4330.       }
  4331.       set %kfile $linesfile
  4332.       if (!$exists(%kfile)) {
  4333.         goto statsend
  4334.       }
  4335.       var %file $gopen(%kfile)
  4336.       while ($fread(%file)) {
  4337.         set %r $ifmatch
  4338.         if ($gettok(%r,1,32) == %kg) {
  4339.           ;223 G-FACTION K *@127.0.0.8 326571 19031 G-FACTION!~_G-FACTIO@netadmin.g-neration.com :lol
  4340.           ;                    hosttemps restant  temps passé             host_klineur           raison
  4341.           ;K *@test.lol 1088798414 2073600 G-FACTION!_G-FACTION@G-IRCD-15873636551896422.mshome.net tg connard
  4342.           set %khost $gettok(%r,2,32)
  4343.           set %temps.max $calc($gettok(%r,3,32) + $gettok(%r,4,32))
  4344.           set %temps.today $ctime
  4345.           set %temps.restant $calc(%temps.max - %temps.today)
  4346.           set %temps.set $gettok(%r,3,32)
  4347.           set %temps.passe $calc(%temps.today - %temps.set)
  4348.           if ($gettok(%r,4,32) != 0) {
  4349.             sw $2 : $+ %me 223 $socknick($2) $upper(%kg) %khost %temps.restant %temps.passe $gettok(%r,5,32) : $+ $gettok(%r,6-,32)
  4350.           }
  4351.           else {
  4352.             sw $2 : $+ %me 223 $socknick($2) $upper(%kg) %khost 0 %temps.passe $gettok(%r,5,32) : $+ $gettok(%r,6-,32)
  4353.           }
  4354.         }
  4355.       }
  4356.       .fclose %file
  4357.       :statsend
  4358.     }
  4359.     sw $2 219 $socknick($2) g :End of /STATS report
  4360.   }
  4361. }
  4362.  
  4363. alias linesfile {
  4364.   return $mircdir $+ System\lines.db
  4365. }
  4366.  
  4367. alias kline.add {
  4368.   ;kline.add host $ctime timetoexpire host_klineur raison
  4369.   ;           1      2         3           4         5
  4370.   if ($5) {
  4371.     write $linesfile K $1-
  4372.   }
  4373. }
  4374.  
  4375. alias kline.del {
  4376.   if ($1) {
  4377.     var %i 0
  4378.     set %kfile $linesfile
  4379.     if (!$exists(%kfile)) {
  4380.       halt
  4381.     }
  4382.     unset %kline
  4383.     unset %r
  4384.     var %file $gopen(%kfile)
  4385.     while ($fread(%file)) {
  4386.       inc %i
  4387.       set %r $ifmatch
  4388.       if ($gettok(%r,1,32) == K) {
  4389.         if ($gettok(%r,2,32) == $1) {
  4390.           write -dl $+ %i %kfile
  4391.           break
  4392.         }
  4393.       }
  4394.     }
  4395.     .fclose %file
  4396.   }
  4397. }
  4398.  
  4399. alias kline.infos {
  4400.   if ($1) {
  4401.     set %kfile $linesfile
  4402.     if (!$exists(%kfile)) {
  4403.       goto klineinfosend
  4404.     }
  4405.     unset %kinfos
  4406.     var %file $gopen(%kfile)
  4407.     while ($fread(%file)) {
  4408.       set %r $ifmatch
  4409.       if ($gettok(%r,1,32) == K) {
  4410.         if ($gettok(%r,2,32) == $1) {
  4411.           set %kinfos $gettok(%r,3-,32)
  4412.         }
  4413.       }
  4414.     }
  4415.     .fclose %file
  4416.     if (%kinfos) {
  4417.       return %kinfos
  4418.     }
  4419.   }
  4420.   :klineinfosend
  4421. }
  4422.  
  4423. alias whowas.exists {
  4424.   if ($1) {
  4425.     set %wwf $whowas.file
  4426.     unset %r
  4427.     set %wwexists $false
  4428.     var %file $gopen(%wwf)
  4429.     while ($fread(%file)) {
  4430.       set %r $ifmatch
  4431.       if ($left(%r,1) == $chr(60)) {
  4432.         set %wwwnick $left($gettok(%r,1,60),$calc($len($gettok(%r,1,60)) - 1))
  4433.         if (%wwwnick == $1) {
  4434.           set %wwexists $true
  4435.         }
  4436.       }
  4437.     }
  4438.     .fclose %file
  4439.   }
  4440.   return %wwexists
  4441. }
  4442.  
  4443. alias whowas.file {
  4444.   return $mircdir $+ System\whowas.db
  4445. }
  4446.  
  4447. alias whowas.host {
  4448.   if ($1) {
  4449.     set %wwf $whowas.file
  4450.     set %watt $false
  4451.     unset %wwhost
  4452.     unset %r
  4453.     set %wwexists $false
  4454.     var %file $gopen(%wwf)
  4455.     while ($fread(%file)) {
  4456.       set %r $ifmatch
  4457.       if (!%watt) {
  4458.         if ($left(%r,1) == $chr(60)) {
  4459.           set %wwwnick $left($gettok(%r,1,60),$calc($len($gettok(%r,1,60)) - 1))
  4460.           if (%wwwnick == $1) {
  4461.             set %watt $true
  4462.           }
  4463.         }
  4464.       }
  4465.       else {
  4466.         set %wwitem $gettok(%r,1,61)
  4467.         if (%wwitem == host) {
  4468.           set %wwhost $gettok(%r,2-,61)
  4469.           set %watt $false
  4470.           break
  4471.         }
  4472.       }
  4473.     }
  4474.     .fclose %file
  4475.   }
  4476.   return %wwhost
  4477. }
  4478.  
  4479. alias whowas.vraiehost {
  4480.   if ($1) {
  4481.     set %wwf $whowas.file
  4482.     set %watt $false
  4483.     unset %wwvraiehost
  4484.     unset %r
  4485.     set %wwexists $false
  4486.     var %file $gopen(%wwf)
  4487.     while ($fread(%file)) {
  4488.       set %r $ifmatch
  4489.       if (!%watt) {
  4490.         if ($left(%r,1) == $chr(60)) {
  4491.           set %wwwnick $left($gettok(%r,1,60),$calc($len($gettok(%r,1,60)) - 1))
  4492.           if (%wwwnick == $1) {
  4493.             set %watt $true
  4494.           }
  4495.         }
  4496.       }
  4497.       else {
  4498.         set %wwitem $gettok(%r,1,61)
  4499.         if (%wwitem == vraiehost) {
  4500.           set %wwvraiehost $gettok(%r,2-,61)
  4501.           set %watt $false
  4502.           break
  4503.         }
  4504.       }
  4505.     }
  4506.     .fclose %file
  4507.   }
  4508.   return %wwvraiehost
  4509. }
  4510.  
  4511. alias whowas.server {
  4512.   if ($1) {
  4513.     set %wwf $whowas.file
  4514.     set %watt $false
  4515.     unset %wwserver
  4516.     unset %r
  4517.     set %wwexists $false
  4518.     var %file $gopen(%wwf)
  4519.     while ($fread(%file)) {
  4520.       set %r $ifmatch
  4521.       if (!%watt) {
  4522.         if ($left(%r,1) == $chr(60)) {
  4523.           set %wwwnick $left($gettok(%r,1,60),$calc($len($gettok(%r,1,60)) - 1))
  4524.           if (%wwwnick == $1) {
  4525.             set %watt $true
  4526.           }
  4527.         }
  4528.       }
  4529.       else {
  4530.         set %wwitem $gettok(%r,1,61)
  4531.         if (%wwitem == server) {
  4532.           set %wwserver $gettok(%r,2-,61)
  4533.           set %watt $false
  4534.           break
  4535.         }
  4536.       }
  4537.     }
  4538.     .fclose %file
  4539.   }
  4540.   return %wwserver
  4541. }
  4542.  
  4543. alias whowas.add.host {
  4544.   ;whowas.add.host nick host-
  4545.   ;                  $1  $2
  4546.   if ($2) {
  4547.     set %wwf $whowas.file
  4548.     write %wwf $chr(60) $+ $1 $+ $chr(62)
  4549.     write %wwf host= $+ $2-
  4550.   }
  4551. }
  4552.  
  4553. alias whowas.add.vraiehost {
  4554.   ;whowas.add.host nick host-
  4555.   ;                  $1  $2
  4556.   if ($2) {
  4557.     set %wwf $whowas.file
  4558.     write %wwf vraiehost= $+ $2-
  4559.   }
  4560. }
  4561.  
  4562. alias whowas.add.server {
  4563.   ;whowas.add.delete nick server-
  4564.   ;                   $1    $2
  4565.   if ($2) {
  4566.     set %wwf $whowas.file
  4567.     write %wwf server= $+ $2-
  4568.   }
  4569. }
  4570.  
  4571. alias whowas.add.private {
  4572.   if ($1) {
  4573.     ;whowas.del $socknick($1)
  4574.     whowas.add.host $socknick($1) $fullhost($1) * : $+ %realname_ [ $+ [ $socknick($1) ] ]
  4575.     whowas.add.vraiehost $socknick($1) $vraiefullhost($1) * : $+ %realname_ [ $+ [ $socknick($1) ] ]
  4576.     whowas.add.server $socknick($1) %me : $+ $asctime
  4577.   }
  4578. }
  4579.  
  4580. alias whowas.del {
  4581.   if ($1) {
  4582.     set %wwf $whowas.file
  4583.     set %watt $false
  4584.     var %i 0
  4585.     var %file $gopen(%wwf)
  4586.     while ($fread(%file)) {
  4587.       inc %i
  4588.       set %r $ifmatch
  4589.       if (!%watt) {
  4590.         if ($left(%r,1) == $chr(60)) {
  4591.           set %wwwnick $left($gettok(%r,1,60),$calc($len($gettok(%r,1,60)) - 1))
  4592.           if (%wwwnick == $1) {
  4593.             set %watt $true
  4594.             write -dl $+ %i %wwf
  4595.             if (%i > 1) {
  4596.               dec %i
  4597.             }
  4598.           }
  4599.         }
  4600.       }
  4601.       else {
  4602.         if ($left(%r,1) != $chr(60)) {
  4603.           write -dl $+ %i %wwf
  4604.           if (%i > 1) {
  4605.             dec %i
  4606.           }
  4607.         }
  4608.         else {
  4609.           set %watt $false
  4610.           break
  4611.         }
  4612.       }
  4613.     }
  4614.     .fclose %file
  4615.   }
  4616. }
  4617.  
  4618. alias servernotice {
  4619.   ;servernotice snomask message
  4620.   if ($2) {
  4621.     set %slines
  4622.     set %sucf $userslistfile
  4623.     var %file $gopen(%sucf)
  4624.     while ($fread(%file)) {
  4625.       set %r $ifmatch
  4626.       set %tsnomask %snomask_ [ $+ [ %r ] ]
  4627.       if ($1 isincs %tsnomask) {
  4628.         sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %r : $+ $2-
  4629.       }
  4630.     }
  4631.     .fclose %file
  4632.   }
  4633. }
  4634.  
  4635. alias ggmt {
  4636.   set %gmt $asctime(zzz)
  4637.   set %ggmt $left(%gmt,3) $+ $chr(58) $+ 00
  4638.   return %ggmt
  4639. }
  4640.  
  4641. alias gdate {
  4642.   set %gdate $asctime
  4643.   set %gdate $convdate($gettok(%gdate,1,32)) $convdate($gettok(%gdate,2,32)) $gettok(%gdate,3,32) $gettok(%gdate,5,32)
  4644.   set %gdate %gdate -- $time(HH:nn) $ggmt
  4645.   return %gdate
  4646. }
  4647.  
  4648. alias convdate {
  4649.   if ($1 == mon) { return Monday }
  4650.   elseif ($1 == tue) { return Tuesday }
  4651.   elseif ($1 == wed) { return Wednesday }
  4652.   elseif ($1 == thu) { return Thursday }
  4653.   elseif ($1 == fri) { return Friday }
  4654.   elseif ($1 == sat) { return Saturday }
  4655.   elseif ($1 == sun) { return Sunday }
  4656.  
  4657.   elseif ($1 == jan) { return January }
  4658.   elseif ($1 == feb) { return February }
  4659.   elseif ($1 == mar) { return March }
  4660.   elseif ($1 == apr) { return April }
  4661.   elseif ($1 == may) { return May }
  4662.   elseif ($1 == jun) { return June }
  4663.   elseif ($1 == jul) { return Jully }
  4664.   elseif ($1 == aug} { return August }
  4665.   elseif ($1 == sep) { return September }
  4666.   elseif ($1 == oct) { return October }
  4667.   elseif ($1 == nov) { return November }
  4668.   elseif ($1 == dec) { return December }
  4669. }
  4670.  
  4671. alias positivewatch {
  4672.   if ($1) {
  4673.     var %i 1
  4674.     set %pwtok $gettok($1,0,32)
  4675.     unset %endpwlist
  4676.     while (%i <= %pwtok) {
  4677.       set %tpwnick $gettok($1,%i,32)
  4678.       if ($left(%tpwnick,1) == $chr(43)) {
  4679.         set %endpwlist %endpwlist $right(%tpwnick,$calc($len(%tpwnick) - 1))
  4680.       }
  4681.       inc %i
  4682.     }
  4683.     return %endpwlist
  4684.   }
  4685. }
  4686.  
  4687. alias chanlistfile {
  4688.   return $mircdir $+ System\chan.lst
  4689. }
  4690.  
  4691. alias addchannellist {
  4692.   ;addchannellist #chan
  4693.   if ($1) {
  4694.     echo @sr 4added $1 un chan list file
  4695.     write $chanlistfile $1
  4696.   }
  4697. }
  4698.  
  4699. alias delchannellist {
  4700.   ;delchannelist #chan
  4701.   if ($1) {
  4702.     set %dfile $chanlistfile
  4703.     unset %dline
  4704.     var %i 0
  4705.     var %file $gopen(%dfile)
  4706.     while ($fread(%file)) {
  4707.       inc %i
  4708.       set %r $ifmatch
  4709.       if (%r == $1) {
  4710.         set %dline %i
  4711.       }
  4712.     }
  4713.     .fclose %file
  4714.     if (%dline) {
  4715.       echo @sr 4deleted $1 (line %dline $+ ) in %dfile
  4716.       write -dl $+ %dline %dfile
  4717.     }
  4718.   }
  4719. }
  4720.  
  4721. alias negativewatch {
  4722.   if ($1) {
  4723.     var %i 1
  4724.     set %nwtok $gettok($1,0,32)
  4725.     unset %endnwlist
  4726.     while (%i <= %nwtok) {
  4727.       set %tnwnick $gettok($1,%i,32)
  4728.       if ($left(%tnwnick,1) == $chr(45)) {
  4729.         set %endnwlist %endnwlist $right(%tnwnick,$calc($len(%tnwnick) - 1))
  4730.       }
  4731.       inc %i
  4732.     }
  4733.     return %endnwlist
  4734.   }
  4735. }
  4736.  
  4737. alias addwatchedlist {
  4738.   if ($2) {
  4739.     set %watchedby_ [ $+ [ $1 ] ] $replace(%watchedby_ [ $+ [ $1 ] ],$2,)
  4740.     set %watchedby_ [ $+ [ $1 ] ] $addtok(%watchedby_ [ $+ [ $1 ] ],$2,32)
  4741.   }
  4742. }
  4743.  
  4744. alias delwatchedlist {
  4745.   if ($2) {
  4746.     set %watchedby_ [ $+ [ $1 ] ] $replace(%watchedby_ [ $+ [ $1 ] ],$2,)
  4747.   }
  4748. }
  4749.  
  4750. alias signon {
  4751.   ;$signon(sockname) retourne le sign on time d'un user
  4752.   if ($1) {
  4753.     return %signon_ [ $+ [ $1 ] ]
  4754.   }
  4755. }
  4756.  
  4757. alias credits {
  4758.   if ($1) {
  4759.     set %cnick $socknick($sockname)
  4760.     var %file $gopen(credits.txt)
  4761.     while ($fread(%file)) {
  4762.       sw $1 : $+ %me 371 %cnick : $+ $ifmatch
  4763.     }
  4764.     .fclose %file
  4765.     sw $1 : $+ %me 371 %cnick :Birth Date: $readini(System\G-IRCD.dat,GlobalVars,creationtime)
  4766.     sw $1 : $+ %me 371 %cnick :On-line since $readini(System\G-IRCD.dat,GlobalVars,online)
  4767.     sw $1 : $+ %me 374 %cnick :End of /INFO list.
  4768.   }
  4769. }
  4770.  
  4771. alias info {
  4772.   if ($1) {
  4773.     sw $1 : $+ %me 371 $socknick($1) :######## G-IRCD 1.0 ########
  4774.     sw $1 : $+ %me 371 $socknick($1) :G-IRCD was entierly made by G-FACTION
  4775.     sw $1 : $+ %me 371 $socknick($1) :<administrateur@g-neration.com>
  4776.     sw $1 : $+ %me 371 $socknick($1) :-
  4777.     sw $1 : $+ %me 371 $socknick($1) :Credits - Type /Credits
  4778.     sw $1 : $+ %me 371 $socknick($1) :G-IRCD Homepage: http://www.g-neration.com/g-ircd/
  4779.     sw $1 : $+ %me 371 $socknick($1) :############################
  4780.     sw $1 : $+ %me 371 $socknick($1) :Birth Date: $readini(System\G-IRCD.dat,GlobalVars,creationtime)
  4781.     sw $1 : $+ %me 371 $socknick($1) :On-line since $readini(System\G-IRCD.dat,GlobalVars,online)
  4782.     sw $1 : $+ %me 374 $socknick($1) :End of /INFO list.
  4783.   }
  4784. }
  4785.  
  4786. alias isvhostlogin {
  4787.   if ($1) {
  4788.     if (%vhost_ [ $+ [ $1 ] ]) {
  4789.       return $true
  4790.     }
  4791.     else {
  4792.       return $false
  4793.     }
  4794.   }
  4795. }
  4796.  
  4797. alias vhostlogpass {
  4798.   ;$vhostlogpass(login,pass)
  4799.   if ($2) {
  4800.     if (%vhost_ [ $+ [ $1 ] ] [ $+ [ .password ] ] == $2) {
  4801.       return $true
  4802.     }
  4803.     else {
  4804.       return $false
  4805.     }
  4806.   }
  4807. }
  4808.  
  4809. alias gquit {
  4810.   ;gquit sockname raison
  4811.   if ($2) {
  4812.     set %qchans %quitchans
  4813.     set %qfh %qfullhost
  4814.     set %qn %qnick
  4815.     set %srv %qserv
  4816.     unset %ghosts
  4817.     var %i 0
  4818.     if (!$exists($userslistfile)) {
  4819.       goto gquitend
  4820.     }
  4821.     var %file $gopen($userslistfile)
  4822.     while ($fread(%file)) {
  4823.       ;;<- :Rockin`Squat!Rockin_Squ@EpiK-3A52AF76.ppp.tiscali.fr QUIT :Quit:
  4824.       inc %i
  4825.       set %r $ifmatch
  4826.       if ($comchans(%qchans,%chans_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ])) {
  4827.         if ((%sockname_ [ $+ [ %r ] ]) && (%server_ [ $+ [ %r ] ] == %me)) {
  4828.           if ($gettok($2-,$gettok($2-,0,32),32) == $1) {
  4829.             sw %sockname_ [ $+ [ %r ] ] : $+ %qfh QUIT : $+ $gettok($2-,1- $+ $calc($gettok($2-,0,32) - 1),32)
  4830.           }
  4831.           else {
  4832.             sw %sockname_ [ $+ [ %r ] ] : $+ %qfh QUIT : $+ $2-
  4833.           }
  4834.         }
  4835.         else {
  4836.           set %ghosts $addtok(%ghosts,%i,32)
  4837.         }
  4838.       }
  4839.     }
  4840.     .fclose %file
  4841.     :gquitendd
  4842.     var %y 1
  4843.     set %gtk $gettok(%ghosts,0,32)
  4844.     while (%y <= %gtk) {
  4845.       write -dl $+ $gettok(%ghosts,%y,32) $userslistfile
  4846.       inc %y
  4847.     }
  4848.     delservnick %qnick
  4849.     var %o 1
  4850.     set %nbdchans $gettok(%qchans,0,32)
  4851.     while (%o <= %nbdchans) {
  4852.       set %fuckchan $gettok(%qchans,%o,32)
  4853.       delchannick %qn %fuckchan
  4854.       delnick %fuckchan %qn on
  4855.       remini $nfochanfile(%fuckchan) STSM %qnick
  4856.       if (!$lines($chanfile(%fuckchan))) {
  4857.         .remove $chanfile(%fuckchan)
  4858.         .remove $nfochanfile(%fuckchan)
  4859.         delchannellist %fuckchan
  4860.         log [6CHAN] Channel %fuckchan deleted
  4861.       }
  4862.       inc %o
  4863.     }
  4864.     ;<- ERROR :Closing Link: huh[192.168.0.103] (Quit: !!)
  4865.     if ($sock($1)) {
  4866.       if ($gettok($2-,$gettok($2-,0,32),32) == $1) {
  4867.         sw $1 ERROR :Closing Link: %qn $+ $chr(91) $+ $sock($1).ip $+ $chr(93) ( $+ $gettok($2-,1- $+ $calc($gettok($2-,0,32) - 1),32) $+ )
  4868.         ;ERROR :Closing Link: Stuff[192.168.0.1] G-FACTION ([irc.g-neration.com] Local kill by G-FACTION (!))
  4869.       }
  4870.       else {
  4871.         sw $1 ERROR :Closing Link: %qn $+ $chr(91) $+ $sock($1).ip $+ $chr(93) (Quit: $2- $+ )
  4872.       }
  4873.     }
  4874.     sockclose $1
  4875.   }
  4876. }
  4877.  
  4878. on *:signal:G-DNS: {
  4879.   if ($left($2,5) != gserv) {
  4880.     ;Il s'agit de la résolution pour un user
  4881.     if ($1) {
  4882.       ;Ca a pu être résolu
  4883.       set %vraiehost_ [ $+ [ $2 ] ] $1
  4884.       set %host.bak_ [ $+ [ $2 ] ] %hprefix $+ $chr(45) $+ $huhu($md5($gettok($1,1,46))) $+ $chr(46) $+ $gettok($1,2-,46)
  4885.       set %host_ [ $+ [ $2 ] ] %hprefix $+ $chr(45) $+ $huhu($md5($gettok($1,1,46))) $+ $chr(46) $+ $gettok($1,2-,46)
  4886.       sw %dnssock : $+ %me NOTICE AUTH :*** Found your hostname ( $+ $1 $+ )
  4887.     }
  4888.     else {
  4889.       ;Ca a pas pu être résolu
  4890.       set %vraiehost_ [ $+ [ $2 ] ] %ip_ [ $+ [ $2 ] ]
  4891.       set %host.bak_ [ $+ [ $2 ] ] $upper($md5(%ip_ [ $+ [ $2 ] ])) $+ $chr(46) $+ %hprefix
  4892.       set %host_ [ $+ [ %dnssock ] ] $upper($md5(%ip_ [ $+ [ $2 ] ])) $+ $chr(46) $+ %hprefix
  4893.       sw %dnssock : $+ %me NOTICE AUTH :*** Couldn't resolve your hostname; using your IP address instead
  4894.     }
  4895.     verifylines KG $2
  4896.     usergiven $2
  4897.   }
  4898.   else {
  4899.     ;Il s'agit de la résolution pour un serveur
  4900.     if ($1) {
  4901.       set %serv_vraiehost [ $+ [ %serv_dns ] ] $raddress
  4902.       sw %serv_dns : $+ %me NOTICE AUTH :*** Found your hostname
  4903.     }
  4904.     else {
  4905.       set %serv_vraiehost [ $+ [ %serv_dns ] ] %serv_ip_ [ $+ [ %serv_dns ] ]
  4906.       sw %serv_dns : $+ %me NOTICE AUTH :*** Couldn't resolve your hostname; using your IP address instead
  4907.     }
  4908.   }
  4909. }
  4910.  
  4911. on 1:DNS: {
  4912.   ;### L'ancienne méthode de résolution ! Un monument historique =)
  4913.   ;On l'empêche de fonctionner volontairement
  4914.   if (0 == 1) {
  4915.   if (!%servdns) {
  4916.     echo -a dnssock: %dnssock iaddress: $iaddress
  4917.     if ($raddress) {
  4918.       set %vraiehost_ [ $+ [ %dnssock ] ] $raddress
  4919.       set %host.bak_ [ $+ [ %dnssock ] ] %hprefix $+ $chr(45) $+ $huhu($md5($gettok($raddress,1,46))) $+ $chr(46) $+ $gettok($raddress,2-,46)
  4920.       set %host_ [ $+ [ %dnssock ] ] %hprefix $+ $chr(45) $+ $huhu($md5($gettok($raddress,1,46))) $+ $chr(46) $+ $gettok($raddress,2-,46)
  4921.       sw %dnssock : $+ %me NOTICE AUTH :*** Found your hostname ( $+ $raddress $+ )
  4922.     }
  4923.     else {
  4924.       set %vraiehost_ [ $+ [ %dnssock ] ] %ip_ [ $+ [ %dnssock ] ]
  4925.       set %host.bak_ [ $+ [ %dnssock ] ] $upper($md5(%ip_ [ $+ [ %dnssock ] ])) $+ $chr(46) $+ %hprefix
  4926.       set %host_ [ $+ [ %dnssock ] ] $upper($md5(%ip_ [ $+ [ %dnssock ] ])) $+ $chr(46) $+ %hprefix
  4927.       sw %dnssock : $+ %me NOTICE AUTH :*** Couldn't resolve your hostname; using your IP address instead
  4928.     }
  4929.     set %servdns $false
  4930.     verifylines KG %dnssock
  4931.     usergiven %dnssock
  4932.   }
  4933.   else {
  4934.     if ($raddress) {
  4935.       set %serv_vraiehost [ $+ [ %serv_dns ] ] $raddress
  4936.       sw %serv_dns : $+ %me NOTICE AUTH :*** Found your hostname
  4937.     }
  4938.     else {
  4939.       ;*** Couldn't resolve your hostname; using your IP address instead
  4940.       set %serv_vraiehost [ $+ [ %serv_dns ] ] %serv_ip_ [ $+ [ %serv_dns ] ]
  4941.       sw %serv_dns : $+ %me NOTICE AUTH :*** Couldn't resolve your hostname; using your IP address instead
  4942.     }
  4943.     set %servdns $false
  4944.   }
  4945.   }
  4946. }
  4947.  
  4948. alias verifylines {
  4949.   if ($2) {
  4950.     if ($1 == KG) {
  4951.       set %vfhost *@ $+ %vraiehost_ [ $+ [ $2 ] ]
  4952.       set %vffile $linesfile
  4953.       if (!$exists(%vffile)) {
  4954.         goto verifylinesend
  4955.       }
  4956.       var %file $gopen(%vffile)
  4957.       while ($fread(%file)) {
  4958.         set %r $ifmatch
  4959.         if (($gettok(%r,1,32) == K) || ($gettok(%r,1,32) == G)) {
  4960.           if ($gettok(%r,2,32) iswm %vfhost) {
  4961.             set %quitchans %chans_ [ $+ [ $2 ] ]
  4962.             set %qfullhost $fullhost($2)
  4963.             set %qnick $socknick($2)
  4964.             set %qserv %server_ [ $+ [ $socknick($2) ] ]
  4965.             set %truc $2
  4966.             sockclose2 %truc
  4967.             ;ERROR :Closing Link: Stuff[192.168.0.1] G-FACTION ([irc.g-neration.com] Local kill by G-FACTION (!))
  4968.             sw $2 ERROR :Closing link: $socknick($2) $+ $chr(91) $+ $sock($2).ip $+ $chr(93) ([ $+ %me $+ $chr(93) You are banned from %network ( $+ $gettok(%r,6-,32) $+ ))
  4969.             .timersockclose $+ $2 -m 1 200 /sockclose $2
  4970.           }
  4971.         }
  4972.       }
  4973.       .fclose %file
  4974.       :verifylinesend
  4975.     }
  4976.   }
  4977. }
  4978.  
  4979. alias numlettre {
  4980.   if ($1 == 1) { return a }
  4981.   elseif ($1 == 2) { return b }
  4982.   elseif ($1 == 3) { return c }
  4983.   elseif ($1 == 4) { return d }
  4984.   elseif ($1 == 5) { return e }
  4985.   elseif ($1 == 6) { return f }
  4986.   elseif ($1 == 7) { return g }
  4987.   elseif ($1 == 8) { return h }
  4988.   elseif ($1 == 9) { return i }
  4989.   elseif ($1 == 10) { return j }
  4990.   elseif ($1 == 11) { return k }
  4991.   elseif ($1 == 12) { return l }
  4992.   elseif ($1 == 13) { return m }
  4993.   elseif ($1 == 14) { return n }
  4994.   elseif ($1 == 15) { return o }
  4995.   elseif ($1 == 16) { return p }
  4996.   elseif ($1 == 17) { return q }
  4997.   elseif ($1 == 18) { return r }
  4998.   elseif ($1 == 19) { return s }
  4999.   elseif ($1 == 20) { return t }
  5000.   elseif ($1 == 21) { return u }
  5001.   elseif ($1 == 22) { return v }
  5002.   elseif ($1 == 23) { return w }
  5003.   elseif ($1 == 24) { return x }
  5004.   elseif ($1 == 25) { return y }
  5005.   elseif ($1 == 26) { return z }
  5006.   elseif ($1 == a) { return 1 }
  5007.   elseif ($1 == b) { return 2 }
  5008.   elseif ($1 == c) { return 3 }
  5009.   elseif ($1 == d) { return 4 }
  5010.   elseif ($1 == e) { return 5 }
  5011.   elseif ($1 == f) { return 6 }
  5012.   elseif ($1 == g) { return 7 }
  5013.   elseif ($1 == h) { return 8 }
  5014.   elseif ($1 == i) { return 9 }
  5015.   elseif ($1 == j) { return 10 }
  5016.   elseif ($1 == k) { return 10 }
  5017.   elseif ($1 == l) { return 12 }
  5018.   elseif ($1 == m) { return 13 }
  5019.   elseif ($1 == n) { return 14 }
  5020.   elseif ($1 == o) { return 15 }
  5021.   elseif ($1 == p) { return 16 }
  5022.   elseif ($1 == q) { return 17 }
  5023.   elseif ($1 == r) { return 18 }
  5024.   elseif ($1 == s) { return 19 }
  5025.   elseif ($1 == t) { return 20 }
  5026.   elseif ($1 == u) { return 21 }
  5027.   elseif ($1 == v) { return 22 }
  5028.   elseif ($1 == w) { return 23 }
  5029.   elseif ($1 == x) { return 24 }
  5030.   elseif ($1 == y) { return 25 }
  5031.   elseif ($1 == z) { return 26 }
  5032. }
  5033.  
  5034. alias galpha {
  5035.   if ($1) {
  5036.     if ($1 isalpha) {
  5037.       return $numlettre($1)
  5038.     }
  5039.     else {
  5040.       return $1
  5041.     }
  5042.   }
  5043. }
  5044.  
  5045. alias admin {
  5046.   if ($1) {
  5047.     var %i 0
  5048.     if (!$exists(admin.nfo)) {
  5049.       sw $1 : $+ %me 256 $socknick($1) :Administrative info file not found !
  5050.       halt
  5051.     }
  5052.     sw $1 : $+ %me 256 $socknick($1) :Administrative info about %me
  5053.     var %file $gopen(admin.nfo)
  5054.     while ($fread(%file)) {
  5055.       inc %i
  5056.       set %r $ifmatch
  5057.       if (%i == 1) {
  5058.         sw $1 : $+ %me 257 $socknick($1) : $+ %r
  5059.       }
  5060.       else {
  5061.         sw $1 : $+ %me 258 $socknick($1) : $+ %r
  5062.       }
  5063.       inc %i
  5064.     }
  5065.     .fclose %file
  5066.   }
  5067. }
  5068.  
  5069. alias rules {
  5070.   if ($1) {
  5071.     if (!$exists(ircd.rules)) {
  5072.       sw $1 : $+ %me 256 $socknick($1) :Rules file not found !
  5073.       halt
  5074.     }
  5075.     set %rulesnick $socknick($sockname)
  5076.     var %file $gopen(ircd.rules)
  5077.     sw $1 : $+ %me 308 %rulesnick :- %me Server Rules -
  5078.     while ($fread(%file)) {
  5079.       set %r $ifmatch
  5080.       sw $1 : $+ %me 232 %rulesnick :- %r
  5081.     }
  5082.     .fclose %file
  5083.     sw $1 : $+ %me 309 %rulesnick :End of RULES command.
  5084.   }
  5085. }
  5086.  
  5087. alias huhu {
  5088.   if ($1) {
  5089.     unset %str
  5090.     var %i 1
  5091.     set %hlen $len($1-)
  5092.     while (%i <= %hlen) {
  5093.       set %hl $mid($1-,%i,1)
  5094.       set %str %str $+ $galpha(%hl)
  5095.       inc %i
  5096.     }
  5097.     set %str $calc(%str / 2)
  5098.     set %str $left(%str,$calc($len(%str) - 13))
  5099.     set %str $calc(%str / 3)
  5100.   }
  5101.   return $int(%str)
  5102. }
  5103.  
  5104. ;sw $1 ERROR :Closing Link: $login($1).login $+ $chr(91) $+ $login($1).ip $+ $chr(93) ( $+ $chr(91) $+ %me $+ $chr(93) Local kill by $2 ( $+ $3- $+ ))
  5105.  
  5106. alias isreginserver {
  5107.   if ($1) {
  5108.     if (%reginserver_ [ $+ [ $1 ] ]) {
  5109.       return $true
  5110.     }
  5111.     else {
  5112.       return $false
  5113.     }
  5114.   }
  5115. }
  5116.  
  5117. alias ghelp {
  5118.   ;ghelp command sockname
  5119.   if ($2) {
  5120.     if ($exists(help.cmd)) {
  5121.       unset %iscmd
  5122.       set %helpnick $socknick($sockname)
  5123.       var %file $gopen(help.cmd)
  5124.       while ($fread(%file)) {
  5125.         set %r $ifmatch
  5126.         if (%iscmd) {
  5127.           if ($left(%r,4) != cmd:) {
  5128.             sw $2 : $+ %me 292 %helpnick : $+ $replace(%r,$eval(%helpchan,0),%helpchan)
  5129.           }
  5130.           else {
  5131.             break
  5132.           }
  5133.         }
  5134.         if ($left(%r,4) == cmd:) {
  5135.           if ($gettok(%r,2,58) == $1) {
  5136.             set %iscmd $true
  5137.           }
  5138.         }
  5139.       }
  5140.       .fclose %file
  5141.       if (!%iscmd) {
  5142.         .timerhelp $+ $2 -m 1 1 ghelp error $2
  5143.       }
  5144.     }
  5145.     else {
  5146.       sw $2 : $+ %me 292 %helpnick :Commands file not found!
  5147.     }
  5148.   }
  5149.   if ($fopen(%file)) {
  5150.     .fclose %file
  5151.   }
  5152. }
  5153.  
  5154. alias comchans {
  5155.   ;$comchan(#chan1 #chan2,#chan3 #chan4) return $true ou $false si il y a des chans communs
  5156.   if ($2) {
  5157.     var %i 1
  5158.     set %comchan $false
  5159.     set %numtok1 $gettok($1,0,32)
  5160.     set %numtok2 $gettok($2,0,32)
  5161.     while (%i <= %numtok1) {
  5162.       set %ttok $gettok($1,%i,32)
  5163.       var %o 1
  5164.       while (%o <= %numtok2) {
  5165.         if (%ttok == $gettok($2,%o,32)) {
  5166.           set %comchan $true
  5167.         }
  5168.         inc %o
  5169.       }
  5170.       inc %i
  5171.     }
  5172.   }
  5173.   return %comchan
  5174. }
  5175.  
  5176. alias whoattr {
  5177.   if ($1) {
  5178.     unset %attr
  5179.     if ($isaway($1)) {
  5180.       set %attr %attr $+ G
  5181.     }
  5182.     else {
  5183.       set %attr %attr $+ H
  5184.     }
  5185.     if (r isincs %umodes_ [ $+ [ $1 ] ]) {
  5186.       set %attr %attr $+ r
  5187.     }
  5188.     if (%ircop_ [ $+ [ $1 ] ]) {
  5189.       set %attr %attr $+ $chr(42)
  5190.     }
  5191.   }
  5192.   return %attr
  5193. }
  5194.  
  5195. alias userslistfile {
  5196.   return $mircdir $+ System\users.lst
  5197. }
  5198. /*
  5199. <- :G-FACTION!~_G-FACTIO@EpiK-31F5DC38.fbx.proxad.net JOIN :#grenoble
  5200. -> besancon.fr.epiknet.org MODE #grenoble
  5201. <- :besancon.fr.epiknet.org 332 G-FACTION #grenoble :Bienvenue sur le chan de GRENOBLE et de l'isere. | http://www.geocities.com/~grenoble/ | Anniversaire de Le-Telepherique-Fou : 18 février, celui de G-FACTION : le 19, on est nés à un jour prêt !! ^^ | If you wanna be a G-FAN, jump to #G-FACTION | #Grenoble Meeting v2.0 en prép - Qnet rOx =)
  5202. <- :besancon.fr.epiknet.org 333 G-FACTION #grenoble Djoobstil 1081982761
  5203. <- :besancon.fr.epiknet.org 353 G-FACTION = #grenoble :G-FACTION @Clio @Le-Telepherique-fou
  5204. <- :besancon.fr.epiknet.org 366 G-FACTION #grenoble :End of /NAMES list.
  5205. <- :Clio!services@olympe.epiknet.org MODE #grenoble +q G-FACTION
  5206. <- :Clio!services@olympe.epiknet.org MODE #grenoble +o G-FACTION
  5207. <- :Clio!services@olympe.epiknet.org NOTICE G-FACTION :Projet en cours : The Ultimate G-BOT !
  5208. <- :Clio!services@olympe.epiknet.org PRIVMSG #grenoble :[G-FACTION] Putain, comme je dis toujours, dormir ça fatigue. C'est vrai quoi, quand on se lève à midi on a la tête dans le cul, alors que lorsqu'on se lève aux aurores, qu'est-ce qu'on pête la forme !
  5209. <- :besancon.fr.epiknet.org 324 G-FACTION #grenoble +r
  5210. <- :besancon.fr.epiknet.org 329 G-FACTION #grenoble 1086390135
  5211. */
  5212. alias join {
  5213.   ;"Sockname" "Le sockread su join"
  5214.   ;JOIN #chan[,#chan2,#chan3] [key]
  5215.   ;  1            2             3
  5216.   set %tsn $1
  5217.   set %tsr $2-
  5218.   tokenize 32 %tsr
  5219.   set %chnick $socknick(%tsn)
  5220.   if ($2) {
  5221.     ;On s'occupe du cas où la personne ferait un join #chan1,#chan2,#...
  5222.     ;Les ',' font chier en mIRC Script, alors on les remplace avec un ';' par exemple (de toute façon un caractère
  5223.     ;interdit dans les noms de channel).
  5224.     ;Et on gettok tout ça, avec une while...
  5225.     set %tempchans $replacecs($2,$chr(44),$chr(59))
  5226.     set %nbdchanstojoin $gettok(%tempchans,0,59)
  5227.     var %o 1
  5228.     while (%o <= %nbdchanstojoin) {
  5229.       set %tchan $gettok(%tempchans,%o,59)
  5230.       if ($left(%tchan,1) == $chr(35)) {
  5231.         if ($correctchanname(%tchan)) {
  5232.           set %chanfile $chanfile(%tchan)
  5233.           set %nfochanfile $nfochanfile(%tchan)
  5234.           set %tchmodes $replacecs($chmodes(%tchan),1,N,2,L,3,S,4,C,5,T)
  5235.           if (i isincs %tchmodes) {
  5236.             if (!%invited_ [ $+ [ %tchan ] ] [ $+ [ _ $+ [ %chnick ] ] ]) {
  5237.               sw %tsn : $+ %me 473 %chnick %tchan :Cannot join channel (+i)
  5238.               goto endofwhile
  5239.             }
  5240.             else {
  5241.               set %invited_ [ $+ [ %tchan ] ] [ $+ [ _ $+ [ %chnick ] ] ] $false
  5242.             }
  5243.           }
  5244.           if (k isincs %tchmodes) {
  5245.             if (%tchan == $gettok(%tempchans,1,59)) {
  5246.               if ($3 != $readini(%nfochanfile,DYNM,k.arg)) {
  5247.                 sw %tsn : $+ %me 475 %chnick %tchan :Cannot join channel (+k)
  5248.                 goto endofwhile
  5249.               }
  5250.             }
  5251.             else {
  5252.               sw %tsn : $+ %me 475 %chnick %tchan :Cannot join channel (+k)
  5253.               goto endofwhile
  5254.             }
  5255.           }
  5256.           if (O isincs %tchmodes) {
  5257.             if (o !isin %umodes_ [ $+ [ %chnick ] ]) {
  5258.               sw %tsn : $+ %me 520 %chnick :Cannot join channel (IRCops only)
  5259.               goto endofwhile
  5260.             }
  5261.           }
  5262.           if (A isincs %tchmodes) {
  5263.             if ((A !isincs %umodes_ [ $+ [ %chnick ] ]) || (N !isincs %umodes_ [ $+ [ %chnick ] ])) {
  5264.               sw %tsn : $+ %me 519 %chnick :Cannot join channel (Admin only)
  5265.               goto endofwhile
  5266.             }
  5267.           }
  5268.           if (R isincs %tchmodes) {
  5269.             if (r !isincs %umodes_ [ $+ [ %chnick ] ]) {
  5270.               sw %tsn : $+ %me 477 %chnick %tchan :You need a registered nick to join that channel.
  5271.               goto endofwhile
  5272.             }
  5273.           }
  5274.           if (l isincs %tchmodes) {
  5275.             if ($lines(%chanfile) >= $readini(%nfochanfile,DYNM,l.arg)) {
  5276.               sw %tsn : $+ %me 471 %chnick %tchan :Cannot join channel (+l)
  5277.               goto endofwhile
  5278.             }
  5279.           }
  5280.           if ($isbanned(%tchan,%tsn)) {
  5281.             sw %tsn : $+ %me 474 %chnick %tchan :Cannot join channel (+b)
  5282.             goto endofwhile
  5283.           }
  5284.           set %tlines $lines(%chanfile)
  5285.           set %theonlyone $false
  5286.           if (%tlines <= 0) {
  5287.             set %theonlyone $true
  5288.           }
  5289.          
  5290.           if (!$ison(%chnick,%tchan)) {
  5291.             ;Ajout de l'user au chan, et autres procédures
  5292.             addchannick %chnick %tchan
  5293.             addnick %tchan %chnick
  5294.             sw %tsn : $+ $fullhost(%sockname_ [ $+ [ %chnick ] ]) JOIN : $+ %tchan
  5295.             if ($ttopic(%tchan)) {
  5296.               topic %tchan %chnick
  5297.             }
  5298.             sendnicklist %tchan %chnick
  5299.             ;Signaler aux autres serveurs, qu'il a rejoint le canal
  5300.             ;:G-FACTION JOIN #test
  5301.             sendmultiserver : $+ %chnick JOIN %tchan
  5302.             if (%theonlyone) {
  5303.               if (%ntmode == on) {
  5304.                 chmodestxsrv $chr(43) %tchan n
  5305.                 chmodestxsrv $chr(43) %tchan t
  5306.                 sw %tsn : $+ %me MODE %tchan +nt
  5307.               }
  5308.               chmodestatussrv $chr(43) %tchan o %chnick
  5309.               sw %tsn : $+ %me MODE %tchan +o %chnick
  5310.               writeini -n $nfochanfile(%tchan) MISC ctime $ctime
  5311.               addchannellist %tchan
  5312.               log [6CHAN] Channel %tchan created
  5313.             }
  5314.           }
  5315.         }
  5316.         else {
  5317.           sw %tsn : $+ %me 403 %chnick %tchan :No such channel
  5318.           goto endofwhile
  5319.         }
  5320.       }
  5321.       else {
  5322.         sw %tsn : $+ %me 403 %chnick %tchan :No such channel
  5323.         goto endofwhile
  5324.       }
  5325.       :endofwhile
  5326.       inc %o
  5327.     }
  5328.   }
  5329. }
  5330.  
  5331. alias topic {
  5332.   ;topic #chan nick; sert à envoyer les informations de topic d'un chan à un user
  5333.   if ($2) {
  5334.     ;<- :besancon.fr.epiknet.org 332 G-FACTION #grenoble :Bienvenue sur le chan de GRENOBLE et de l'isere. | http://www.geocities.com/~grenoble/ | Anniversaire de Le-Telepherique-Fou : 18 février, celui de G-FACTION : le 19, on est nés à un jour prêt !! ^^ | If you wanna be a G-FAN, jump to #G-FACTION | #Grenoble Meeting v2.0 en prép - Qnet rOx =)
  5335.     ;<- :besancon.fr.epiknet.org 333 G-FACTION #grenoble Djoobstil 1081982761
  5336.     sw %sockname_ [ $+ [ $2 ] ] : $+ %me 332 $2 $1 : $+ $ttopic($1)
  5337.     sw %sockname_ [ $+ [ $2 ] ] : $+ %me 333 $2 $1 $readini($nfochanfile($1),MISC,tuser) $readini($nfochanfile($1),MISC,ttime)
  5338.   }
  5339. }
  5340.  
  5341. alias ttopic {
  5342.   if ($1) {
  5343.     return $readini($nfochanfile($1),MISC,topic)
  5344.   }
  5345. }
  5346.  
  5347. alias part {
  5348.   ;"sockname" "Le sockread du part"
  5349.   if ($2) {
  5350.     set %tsn $1
  5351.     set %tsr $2-
  5352.     tokenize 32 %tsr
  5353.     set %tchan $2
  5354.     set %chnick $socknick(%tsn)
  5355.     if ($ison(%chnick,%tchan)) {
  5356.       unset %partmsg
  5357.       delchannick %chnick %tchan
  5358.       ;Envoyer aux autres serveurs
  5359.       ;:G-FACTION PART #test
  5360.       set %partmsg $right($3-,$calc($len($3-) - 1))
  5361.       if (%partmsg) {
  5362.         sendchannel %tchan : $+ $fullhost(%tsn) PART %tchan : $+ %partmsg
  5363.         sendmultiserver : $+ %chnick PART %tchan : $+ %partmsg
  5364.       }
  5365.       else {
  5366.         sendchannel %tchan : $+ $fullhost(%tsn) PART %tchan
  5367.         sendmultiserver : $+ %chnick PART %tchan
  5368.       }
  5369.       delnick %tchan %chnick on
  5370.       remini $nfochanfile(%tchan) STSM %chnick
  5371.       set %invited_ [ $+ [ %tchan ] ] [ $+ [ _ $+ [ %chnick ] ] ] $false
  5372.       if (!$lines($chanfile(%tchan))) {
  5373.         .remove $chanfile(%tchan)
  5374.         .remove $nfochanfile(%tchan)
  5375.         delchannellist %tchan
  5376.         log [6CHAN] Channel %tchan deleted
  5377.       }
  5378.     }
  5379.   }
  5380. }
  5381.  
  5382. alias noticechannel {
  5383.   ;noticechannel %ichan @ Sender  Le message
  5384.   ;                 1   2    3         4-
  5385.   if ($3) {
  5386.     unset %nsigne
  5387.     if (!$exists($chanfile($1))) {
  5388.       halt
  5389.     }
  5390.     var %file $gopen($chanfile($1))
  5391.     unset %sender
  5392.     while ($fread(%file)) {
  5393.       set %r $ifmatch
  5394.       if (($left(%r,1) == $chr(64)) || ($left(%r,1) == $chr(37)) || ($left(%r,1) == $chr(43)) || ($left(%r,1) == $chr(38)) || ($left(%r,1) == $chr(126))) {
  5395.         set %tempnick $right(%r,$calc($len(%r) - 1))
  5396.         set %nsigne $left(%r,1)
  5397.       }
  5398.       else {
  5399.         set %tempnick %r
  5400.         set %nsigne NULL
  5401.       }
  5402.       if (%nsigne == $2) {
  5403.         if ($sock(%sockname_ [ $+ [ %tempnick ] ])) {
  5404.           set %sender $3
  5405.           if (%nsigne == NULL) {
  5406.             unset %tnsigne
  5407.           }
  5408.           else {
  5409.             set %tnsigne %nsigne
  5410.           }
  5411.           sw %sockname_ [ $+ [ %tempnick ] ] : $+ %sender NOTICE %tnsigne $+ $1 : $+ $4-
  5412.         }
  5413.       }
  5414.     }
  5415.     .fclose %file
  5416.     sendmultiserver : $+ $3 NOTICE $2 $+ $1 : $+ $4-
  5417.   }
  5418. }
  5419.  
  5420. alias kick {
  5421.   ;kick #chan Kicker Kicked Raison
  5422.   ;       1     2       3     4
  5423.   if ($3) {
  5424.     unset %operoverride
  5425.     if (%ircop_ [ $+ [ $2 ] ]) {
  5426.       set %tflags %oline. [ $+ [ %ircop_ [ $+ [ $2 ] ] ] ] [ $+ [ .flags ] ]
  5427.       if (v isincs %tflags) {
  5428.         set %operoverride $true
  5429.       }
  5430.     }
  5431.     if ($strongermode($readini($nfochanfile($1),STSM,$2)) === h) {
  5432.       if ($isatleast(h,$3,$1)) {
  5433.         if (!%operoverride) {
  5434.           sw %sockname_ [ $+ [ $2 ] ] : $+ %me 484 $2 $1 :Cannot kick protected user $3 $+ .
  5435.           goto kickend
  5436.         }
  5437.       }
  5438.     }
  5439.     elseif (($strongermode($readini($nfochanfile($1),STSM,$2)) !== h) && ($strongermode($readini($nfochanfile($1),STSM,$2)) !== o) && ($strongermode($readini($nfochanfile($1),STSM,$2)) !== a) && ($strongermode($readini($nfochanfile($1),STSM,$2)) !== q)) {
  5440.       if (!%operoverride) {
  5441.         sw %sockname_ [ $+ [ $2 ] ] : $+ %me 484 $2 $1 :Cannot kick protected user $3 $+ .
  5442.         goto kickend
  5443.       }
  5444.     }
  5445.     if ((a isincs $readini($nfochanfile($1),STSM,$3)) || (q isincs $readini($nfochanfile($1),STSM,$3))) {
  5446.       if (!%operoverride) {
  5447.         sw %sockname_ [ $+ [ $2 ] ] : $+ %me 484 $2 $1 :Cannot kick protected user $3 $+ .
  5448.         goto kickend
  5449.       }
  5450.     }
  5451.     set %tchmodes $replacecs($chmodes($1),1,N,2,L,3,S,4,C,5,T)
  5452.     if (Q isincs %tchmodes) {
  5453.       if (!%operoverride) {
  5454.         sw %sockname_ [ $+ [ $2 ] ] : $+ %me NOTICE $2 :*** You cannot kick people on $1
  5455.         goto kickend
  5456.       }
  5457.     }
  5458.     if (!$4) {
  5459.       set %kickraison $2
  5460.     }
  5461.     else {
  5462.       set %kickraison $4-
  5463.     }
  5464.     delchannick $3 $1
  5465.     sendchannel $1 : $+ $fullhost(%sockname_ [ $+ [ $2 ] ]) KICK $1 $3 : $+ $left(%kickraison,%kicklen)
  5466.     unset %delnick
  5467.     unset %delline
  5468.     var %i 0
  5469.     var %file $gopen($chanfile($1))
  5470.     while ($fread(%file)) {
  5471.       inc %i
  5472.       set %r $ifmatch
  5473.       if (($left(%r,1) == $chr(64)) || ($left(%r,1) == $chr(37)) || ($left(%r,1) == $chr(43)) || ($left(%r,1) == $chr(38)) || ($left(%r,1) == $chr(126))) {
  5474.         set %delnick $right(%r,$calc($len(%r) - 1))
  5475.       }
  5476.       else {
  5477.         set %delnick %r
  5478.       }
  5479.       if (%delnick == $3) {
  5480.         set %delline %i
  5481.       }
  5482.     }
  5483.     .fclose %file
  5484.     if (%delline) {
  5485.       echo @sr 12delete $3 from $1 (line %delline in $chanfile($1) $+ )
  5486.       write -dl $+ %delline $chanfile($1)
  5487.     }
  5488.     remini $nfochanfile($1) STSM $3
  5489.     set %invited_ [ $+ [ $1 ] ] [ $+ [ _ $+ [ $3 ] ] ] $false
  5490.     if (!$lines($chanfile($1))) {
  5491.       .remove $chanfile($1)
  5492.       .remove $nfochanfile($1)
  5493.       delchannellist $1
  5494.       log [6CHAN] Channel $1 deleted
  5495.     }
  5496.     :kickend
  5497.   }
  5498. }
  5499.  
  5500.  
  5501. alias delchannick {
  5502.   ;delchannick Nick Chan
  5503.   ;             1     2
  5504.   ;sert à supprimer un canal dans la liste des canaux d'une personne
  5505.   if ($2) {
  5506.     set %dcnsn %sockname_ [ $+ [ $1 ] ]
  5507.     set %dcnchans %chans_ [ $+ [ %dcnsn ] ]
  5508.     set %chans_ [ $+ [ %dcnsn ] ] $remtok(%chans_ [ $+ [ %dcnsn ] ],$2,32)
  5509.   }
  5510. }
  5511.  
  5512. alias addchannick {
  5513.   if ($2) {
  5514.     set %acnsn %sockname_ [ $+ [ $1 ] ]
  5515.     set %acnchans %chans_ [ $+ [ %acnsn ] ]
  5516.     set %chans_ [ $+ [ %acnsn ] ] $remtok(%chans_ [ $+ [ %acnsn ] ],$2,32)
  5517.     set %chans_ [ $+ [ %acnsn ] ] $addtok(%chans_ [ $+ [ %acnsn ] ],$2,32)
  5518.   }
  5519. }
  5520.  
  5521. alias ison {
  5522.   ;$ison(nick,chan)
  5523.   if ($2) {
  5524.     set %ison $false
  5525.     set %ison.sn %sockname_ [ $+ [ $1 ] ]
  5526.     set %ison.chans %chans_ [ $+ [ %ison.sn ] ]
  5527.     set %ison.nbdchans $gettok(%ison.chans,0,32)
  5528.     var %i 1
  5529.     while (%i <= %ison.nbdchans) {
  5530.       if ($gettok(%ison.chans,%i,32) == $2) {
  5531.         set %ison $true
  5532.       }
  5533.       inc %i
  5534.     }
  5535.     return %ison
  5536.   }
  5537. }
  5538.  
  5539. alias whoischanlist {
  5540.   ;Donne la liste des chans sur lequel est un user, préfixé des modes
  5541.   ;Ex: @#G-FACTION +#scripts
  5542.   if ($1) {
  5543.     unset %wcl
  5544.     set %wcl.nick $1
  5545.     set %wcl.sn %sockname_ [ $+ [ %wcl.nick ] ]
  5546.     set %wcl.chans %chans_ [ $+ [ %wcl.sn ] ]
  5547.     set %wcl.nbdchans $gettok(%wcl.chans,0,32)
  5548.     var %i 1
  5549.     while (%i <= %wcl.nbdchans) {
  5550.       set %wcl.chan $gettok(%wcl.chans,%i,32)
  5551.       if ($nickprefix(%wcl.nick,%wcl.chan) != NULL) {
  5552.         if ($2) {
  5553.           ;On a précisé un deuxième pseudo... donc il faut savoir si le chan est +s, et si le pseudo 2 est aussi sur le chan, ou est IRCop, pour afficher ou non le chan dans la liste
  5554.           if ((s isincs $chmodes(%wcl.chan)) || (p isincs $chmodes(%wcl.chan))) {
  5555.             if (($ison($2,%wcl.chan)) || (%ircop_ [ $+ [ $2 ] ]) || (o isin %umodes_ [ $+ [ $2 ] ])) {
  5556.               set %wcl $addtok(%wcl,$nickprefix(%wcl.nick,%wcl.chan) $+ %wcl.chan,32)
  5557.             }
  5558.           }
  5559.           else {
  5560.             set %wcl $addtok(%wcl,$nickprefix(%wcl.nick,%wcl.chan) $+ %wcl.chan,32)
  5561.           }
  5562.         }
  5563.         else {
  5564.           set %wcl $addtok(%wcl,$nickprefix(%wcl.nick,%wcl.chan) $+ %wcl.chan,32)
  5565.         }
  5566.       }
  5567.       else {
  5568.         if ($2) {
  5569.           if ((s isincs $chmodes(%wcl.chan)) || (p isincs $chmodes(%wcl.chan))) {
  5570.             if (($ison($2,%wcl.chan)) || (%ircop_ [ $+ [ $2 ] ]) || (o isin %umodes_ [ $+ [ $2 ] ])) {
  5571.               set %wcl $addtok(%wcl,%wcl.chan,32)
  5572.             }
  5573.           }
  5574.           else {
  5575.             set %wcl $addtok(%wcl,%wcl.chan,32)
  5576.           }
  5577.         }
  5578.         else {
  5579.           set %wcl $addtok(%wcl,%wcl.chan,32)
  5580.         }
  5581.       }
  5582.       inc %i
  5583.     }
  5584.     return %wcl
  5585.   }
  5586. }
  5587.  
  5588. alias nickprefix {
  5589.   ;$nickprefix(nick,chan)
  5590.   ;retourne +%@&~
  5591.   if ($2) {
  5592.     unset %is
  5593.     set %chanfile $chanfile($2)
  5594.     if (!$exists(%chanfile)) {
  5595.       halt
  5596.     }
  5597.     var %file $gopen(%chanfile)
  5598.     while ($fread(%file)) {
  5599.       set %r $ifmatch
  5600.       if (($left(%r,1) == $chr(64)) || ($left(%r,1) == $chr(37)) || ($left(%r,1) == $chr(43)) || ($left(%r,1) == $chr(38)) || ($left(%r,1) == $chr(126))) {
  5601.         set %is $left(%r,1)
  5602.         set %tnick $right(%r,$calc($len(%r) - 1))
  5603.       }
  5604.       else {
  5605.         set %is NULL
  5606.         set %tnick %r
  5607.       }
  5608.       if (%tnick == $1) {
  5609.         set %result %is
  5610.       }
  5611.     }
  5612.     .fclose %file
  5613.     return %result
  5614.   }
  5615. }
  5616.  
  5617. alias correctchanname {
  5618.   if ($1) {
  5619.     var %i 1
  5620.     set %tlen $len($1)
  5621.     if (%tlen <= %chanlen) {
  5622.       if ($left($1,1) == $chr(35)) {
  5623.         set %correctchanname $true
  5624.         while (%i <= %tlen) {
  5625.           set %tlettre $mid($1,%i,1)
  5626.           if (%tlettre !isin %G-NORME.chan) {
  5627.             set %correctchanname $false
  5628.           }
  5629.           inc %i
  5630.         }
  5631.       }
  5632.       else {
  5633.         set %correctchanname $false
  5634.       }
  5635.     }
  5636.     else {
  5637.       set %correctchanname $false
  5638.     }
  5639.   }
  5640.   return %correctchanname
  5641. }
  5642.  
  5643. alias correctnickname {
  5644.   if ($1) {
  5645.     var %i 1
  5646.     set %tlen $len($1)
  5647.     if (%tlen <= %nicklen) {
  5648.       set %correctnickname $true
  5649.       ;if ($left($1,1) !isin %G-NORME.nick.first) {
  5650.       ;  set %correctnickname $false
  5651.       ;}
  5652.       while (%i <= %tlen) {
  5653.         set %tlettre $mid($1,%i,1)
  5654.         if (%tlettre !isin %G-NORME.nick) {
  5655.           set %correctnickname $false
  5656.         }
  5657.         inc %i
  5658.       }
  5659.     }
  5660.     else {
  5661.       set %correctnickname $false
  5662.     }
  5663.   }
  5664.   return %correctnickname
  5665. }
  5666.  
  5667. alias isbanned {
  5668.   ;$isbanned(#chan,sockname)
  5669.   if ($2) {
  5670.     set %tfh $fullhost($2)
  5671.     set %isbanned $false
  5672.     set %tcf $banfile($1))
  5673.     if (!$exists(%tcf)) {
  5674.       goto isbannedend
  5675.     }
  5676.     var %file $gopen(%tcf)
  5677.     while ($fread(%file)) {
  5678.       set %r $gettok($ifmatch,1,32)
  5679.       if (%r iswm %tfh) {
  5680.         set %isbanned $true
  5681.       }
  5682.     }
  5683.     .fclose %file
  5684.   }
  5685.   :isbannedend
  5686.   return %isbanned
  5687. }
  5688.  
  5689. alias r {
  5690.   return $readini($1-)
  5691. }
  5692.  
  5693. alias chmodes {
  5694.   ;$chmodes(#chan) == mntrop
  5695.   if ($1) {
  5696.     set %t $nfochanfile($1)
  5697.     set %len.stxm $len(%stxm)
  5698.     set %len.dynm $len(%dynm)
  5699.     unset %e
  5700.     var %i 1
  5701.     var %o 1
  5702.     while (%i <= %len.stxm) {
  5703.       if ($readini(%t,STXM,$replacecs($mid(%stxm,%i,1),N,1,L,2,S,3,C,4,T,5)) == on) {
  5704.         if ($mid(%stxm,%i,1) !isincs %e) {
  5705.           set %e %e $+ $mid(%stxm,%i,1)
  5706.         }
  5707.       }
  5708.       inc %i
  5709.     }
  5710.     while (%o <= %len.dynm) {
  5711.       if ($readini(%t,DYNM,$replacecs($mid(%dynm,%o,1),N,1,L,2,S,3,C,4,T,5)) == on) {
  5712.         if ($mid(%dynm,%o,1) !isincs %e) {
  5713.           set %e %e $+ $mid(%dynm,%o,1)
  5714.         }
  5715.       }
  5716.       inc %o
  5717.     }
  5718.     return $replacecs(%e,1,N,2,L,3,S,4,C,5,T)
  5719.   }
  5720. }
  5721.  
  5722. alias chanfile {
  5723.   if ($1) {
  5724.     return $mircdir $+ System\ $+ $1 $+ .chn
  5725.   }
  5726. }
  5727.  
  5728. alias creationtime {
  5729.   if ($1) {
  5730.     return $readini($nfochanfile($1),MISC,ctime)
  5731.   }
  5732. }
  5733.  
  5734. alias addnick {
  5735.   ;addnick chan nick
  5736.   ;          1    2
  5737.   echo @sr 7Entering ADDNICK function
  5738.   echo @sr 71: $1 22: $2
  5739.   if ($2) {
  5740.     set %tfullhost $fullhost(%sockname_ [ $+ [ $2 ] ])
  5741.     unset %addnick
  5742.     unset %addline
  5743.     unset %listnick
  5744.     if (!$exists($chanfile($1))) {
  5745.       goto next
  5746.     }
  5747.     var %i 0
  5748.     var %file $gopen($chanfile($1))
  5749.     while ($fread(%file)) {
  5750.       inc %i
  5751.       set %r $ifmatch
  5752.       echo @sr 7Line read:12 %r
  5753.       if (($left(%r,1) == $chr(64)) || ($left(%r,1) == $chr(37)) || ($left(%r,1) == $chr(43)) || ($left(%r,1) == $chr(38)) || ($left(%r,1) == $chr(126))) {
  5754.         set %addnick $right(%r,$calc($len(%r) - 1))
  5755.       }
  5756.       else {
  5757.         set %addnick %r
  5758.       }
  5759.       ;echo -a 4Addnick:12 %addnick
  5760.       if (%addnick == $2) {
  5761.         ;echo -a 4Entered addnick if
  5762.         set %addline %i
  5763.         ;echo -a 4Set addline to:12 %i
  5764.       }
  5765.     }
  5766.     .fclose %file
  5767.     if (%addline) {
  5768.       echo @sr 7write -dl $+ %addline $chanfile($1) (12on supprime $2 de $1 $+ )
  5769.       write -dl $+ %addline $chanfile($1)
  5770.     }
  5771.     :next
  5772.     echo @sr 7write $chanfile($1) $2
  5773.     write $chanfile($1) $2
  5774.     var %file $gopen($chanfile($1))
  5775.     var %o 0
  5776.     while ($fread(%file)) {
  5777.       inc %o
  5778.       set %r $ifmatch
  5779.       if (($left(%r,1) == $chr(64)) || ($left(%r,1) == $chr(37)) || ($left(%r,1) == $chr(43)) || ($left(%r,1) == $chr(38)) || ($left(%r,1) == $chr(126))) {
  5780.         set %listnick $right(%r,$calc($len(%r) - 1))
  5781.       }
  5782.       else {
  5783.         set %listnick %r
  5784.       }
  5785.       if (%listnick != $2) {
  5786.         if ($sock(%sockname_ [ $+ [ %listnick ] ])) {
  5787.           echo @sr 7Sending JOIN to %listnick
  5788.           sw %sockname_ [ $+ [ %listnick ] ] : $+ %tfullhost JOIN : $+ $1
  5789.         }
  5790.         else {
  5791.           if (%server_ [ $+ [ %listnick ] ] == %me) {
  5792.             ;Un ghost est repéré dans la nicklist...
  5793.             echo @sr 7Ghost repéré ! ( $+ %listnick $+ ) write -dl $+ %o $chanfile($1)
  5794.             write -dl $+ %o $chanfile($1)
  5795.             ;dec %o
  5796.             ;fseek -l %file %o
  5797.           }
  5798.         }
  5799.       }
  5800.     }
  5801.     .fclose %file
  5802.   }
  5803. }
  5804.  
  5805. alias delservnick {
  5806.   if ($1) {
  5807.     var %i 0
  5808.     set %dline 0
  5809.     set %ucf $userslistfile
  5810.     if (!$exists(%ucf)) {
  5811.       goto delservnickend
  5812.     }
  5813.     var %file $gopen(%ucf)
  5814.     while ($fread(%file)) {
  5815.       inc %i
  5816.       var %r $ifmatch
  5817.       if (%r == $1) {
  5818.         set %dline %i
  5819.       }
  5820.     }
  5821.     .fclose %file
  5822.     if (%dline > 0) {
  5823.       write -dl $+ %dline %ucf
  5824.     }
  5825.     :delservnickend
  5826.   }
  5827. }
  5828.  
  5829. alias addservnick {
  5830.   if ($1) {
  5831.     if ($lines($userslistfile) <= 500) {
  5832.       delservnick $1
  5833.     }
  5834.     write $userslistfile $1
  5835.   }
  5836. }
  5837.  
  5838. alias delnick {
  5839.   ;delnick chan nick ifquit
  5840.   ;          1    2    3
  5841.   if ($3) {
  5842.     set %tfullhost $fullhost(%sockname_ [ $+ [ $2 ] ])
  5843.     unset %delnick
  5844.     unset %delline
  5845.     var %i 0
  5846.     if (!$exists($chanfile($1))) {
  5847.       echo @G-IRCD 4PROBLEME SERIEUX DANS DELNICK
  5848.       goto halt
  5849.     }
  5850.     var %file $gopen($chanfile($1))
  5851.     while ($fread(%file)) {
  5852.       inc %i
  5853.       set %r $ifmatch
  5854.       if (($left(%r,1) == $chr(64)) || ($left(%r,1) == $chr(37)) || ($left(%r,1) == $chr(43)) || ($left(%r,1) == $chr(38)) || ($left(%r,1) == $chr(126))) {
  5855.         set %delnick $right(%r,$calc($len(%r) - 1))
  5856.       }
  5857.       else {
  5858.         set %delnick %r
  5859.       }
  5860.       if (%delnick == $2) {
  5861.         set %delline %i
  5862.       }
  5863.     }
  5864.     .fclose %file
  5865.     if (%delline) {
  5866.       echo @sr 12write -dl $+ %delline $chanfile($1) (on supprime $2 de $1 $+ )
  5867.       write -dl $+ %delline $chanfile($1)
  5868.     }
  5869.     if ($3 != on) {
  5870.       var %file $gopen($chanfile($1))
  5871.       while ($fread(%file)) {
  5872.         set %r $ifmatch
  5873.         if (($left(%r,1) == $chr(64)) || ($left(%r,1) == $chr(37)) || ($left(%r,1) == $chr(43)) || ($left(%r,1) == $chr(38)) || ($left(%r,1) == $chr(126))) {
  5874.           set %listnick $right(%r,$calc($len(%r) - 1))
  5875.         }
  5876.         else {
  5877.           set %listnick %r
  5878.         }
  5879.         if (%listnick != $2) {
  5880.           sw %sockname_ [ $+ [ %listnick ] ] : $+ %tfullhost PART : $+ $1
  5881.         }
  5882.       }
  5883.       .fclose %file
  5884.     }
  5885.   }
  5886. }
  5887.  
  5888. alias sendnicklist {
  5889.   ;sendnicklist chan nick
  5890.   ;               1    2
  5891.   if ($2) {
  5892.     if (!$exists($chanfile($1))) {
  5893.       goto sendnicklistend
  5894.     }
  5895.     var %file $gopen($chanfile($1))
  5896.     unset %nicklist
  5897.     unset %nr
  5898.     while ($fread(%file)) {
  5899.       set %nr $ifmatch
  5900.       set %nicklist $addtok(%nicklist,%nr,32)
  5901.       if ($gettok(%nicklist,0,32) >= 30) {
  5902.         sw %sockname_ [ $+ [ $2 ] ] : $+ %me 353 $2 = $1 : $+ %nicklist
  5903.         unset %nicklist
  5904.       }
  5905.     }
  5906.     .fclose %file
  5907.     if (%nicklist) {
  5908.       sw %sockname_ [ $+ [ $2 ] ] : $+ %me 353 $2 = $1 : $+ %nicklist
  5909.     }
  5910.     :sendnicklistend
  5911.     sw %sockname_ [ $+ [ $2 ] ] : $+ %me 366 $2 $1 :End of /NAMES list.
  5912.   }
  5913. }
  5914.  
  5915. alias privmsg {
  5916.   ;privmsg chan nick message
  5917.   ;          1    2     3-
  5918.   if ($3) {
  5919.     set %tchmodes $replacecs($chmodes($1),1,N,2,L,3,S,4,C,5,T)
  5920.     if (!$ison($2,$1)) {
  5921.       if (n isincs %tchmodes) {
  5922.         sw %sockname_ [ $+ [ $2 ] ] : $+ %me 404 $2 $1 :No external channel messages ( $+ $1 $+ )
  5923.         goto privmsgend
  5924.       }
  5925.     }
  5926.     set %pfullhost $fullhost(%sockname_ [ $+ [ $2 ] ])
  5927.     set %message $3-
  5928.     if (S isincs %tchmodes) {
  5929.       set %message $strip($3-)
  5930.     }
  5931.     if (c isincs %tchmodes) {
  5932.       if ($3- != $strip($3-)) {
  5933.         ;Donc y'a des codes couleurs
  5934.         sw %sockname_ [ $+ [ $2 ] ] : $+ %me 404 $2 $1 :Color is not permitted is this channel ( $+ $1 $+ )
  5935.         goto privmsgend
  5936.       }
  5937.     }
  5938.     if (m isincs %tchmodes) {
  5939.       if (!$isatleast(v,$2,$1)) {
  5940.         sw %sockname_ [ $+ [ $2 ] ] : $+ %me 404 $1 $1 :You need voice (+v) ( $+ $1 $+ )
  5941.         goto privmsgend
  5942.       }
  5943.     }
  5944.     if (!$exists($chanfile($1))) {
  5945.       goto privmsgend
  5946.     }
  5947.     var %o 0
  5948.     var %file $gopen($chanfile($1))
  5949.     while ($fread(%file)) {
  5950.       inc %o
  5951.       set %r $ifmatch
  5952.       if (($left(%r,1) == $chr(64)) || ($left(%r,1) == $chr(37)) || ($left(%r,1) == $chr(43)) || ($left(%r,1) == $chr(38)) || ($left(%r,1) == $chr(126))) {
  5953.         set %tempnick $right(%r,$calc($len(%r) - 1))
  5954.       }
  5955.       else {
  5956.         set %tempnick %r
  5957.       }
  5958.       if (%tempnick != $2) {
  5959.         if ($sock(%sockname_ [ $+ [ %tempnick ] ])) {
  5960.           ;echo -a 7sw %sockname_ [ $+ [ %tempnick ] ] $2-
  5961.           sw %sockname_ [ $+ [ %tempnick ] ] : $+ %pfullhost PRIVMSG $1 : $+ %message
  5962.         }
  5963.         else {
  5964.           if (%server_ [ $+ [ %tempnick ] ] == %me) {
  5965.             ;Ghost repéré...
  5966.             write -dl $+ %o $chanfile($1)
  5967.           }
  5968.         }
  5969.       }
  5970.     }
  5971.     .fclose %file
  5972.     :privmsgend
  5973.     ;Envoyer le message dans tout le réseau...
  5974.     ;:G-FACTION PRIVMSG #G-FACTION :haha
  5975.     sendmultiserver : $+ $2 PRIVMSG $1 : $+ $3-
  5976.   }
  5977. }
  5978.  
  5979. alias gline.add {
  5980.   ;gline.add host $ctime timetoexpire host_glineur raison
  5981.   ;           1      2         3           4         5
  5982.   if ($5) {
  5983.     write $linesfile G $1-
  5984.   }
  5985. }
  5986.  
  5987. alias gline.del {
  5988.   if ($1) {
  5989.     var %i 0
  5990.     set %gfile $linesfile
  5991.     if (!$exists(%gfile)) {
  5992.       halt
  5993.     }
  5994.     unset %gline
  5995.     unset %r
  5996.     var %file $gopen(%gfile)
  5997.     while ($fread(%file)) {
  5998.       inc %i
  5999.       set %r $ifmatch
  6000.       if ($gettok(%r,1,32) == G) {
  6001.         if ($gettok(%r,2,32) == $1) {
  6002.           write -dl $+ %i %gfile
  6003.           break
  6004.         }
  6005.       }
  6006.     }
  6007.     .fclose %file
  6008.   }
  6009. }
  6010.  
  6011. alias gline.infos {
  6012.   if ($1) {
  6013.     set %gfile $linesfile
  6014.     if (!$exists(%gfile)) {
  6015.       goto glineinfosend
  6016.     }
  6017.     unset %gline
  6018.     unset %ginfos
  6019.     var %file $gopen(%gfile)
  6020.     while ($fread(%file)) {
  6021.       set %r $ifmatch
  6022.       if ($gettok(%r,1,32) == G) {
  6023.         if ($gettok(%r,2,32) == $1) {
  6024.           set %ginfos $gettok(%r,3-,32)
  6025.         }
  6026.       }
  6027.     }
  6028.     .fclose %file
  6029.     if (%ginfos) {
  6030.       return %ginfos
  6031.     }
  6032.   }
  6033.   :glineinfosend
  6034. }
  6035.  
  6036. alias shun.add {
  6037.   ;gline.add host $ctime timetoexpire host_glineur raison
  6038.   ;           1      2         3           4         5
  6039.   if ($5) {
  6040.     write $linesfile s $1-
  6041.   }
  6042. }
  6043.  
  6044. alias shun.del {
  6045.   if ($1) {
  6046.     var %i 0
  6047.     set %gfile $linesfile
  6048.     if (!$exists(%gfile)) {
  6049.       halt
  6050.     }
  6051.     unset %gline
  6052.     unset %r
  6053.     var %file $gopen(%gfile)
  6054.     while ($fread(%file)) {
  6055.       inc %i
  6056.       set %r $ifmatch
  6057.       if ($gettok(%r,1,32) == s) {
  6058.         if ($gettok(%r,2,32) == $1) {
  6059.           write -dl $+ %i %gfile
  6060.           .fclose %file
  6061.           break
  6062.         }
  6063.       }
  6064.     }
  6065.     if ($fopen(%file)) {
  6066.       .fclose %file
  6067.     }
  6068.   }
  6069. }
  6070.  
  6071. alias shun.infos {
  6072.   if ($1) {
  6073.     set %gfile $linesfile
  6074.     if (!$exists(%gfile)) {
  6075.       goto shuninfosend
  6076.     }
  6077.     unset %gline
  6078.     unset %ginfos
  6079.     var %file $gopen(%gfile)
  6080.     while ($fread(%file)) {
  6081.       set %r $ifmatch
  6082.       if ($gettok(%r,1,32) == s) {
  6083.         if ($gettok(%r,2,32) == $1) {
  6084.           set %ginfos $gettok(%r,3-,32)
  6085.         }
  6086.       }
  6087.     }
  6088.     .fclose %file
  6089.     if (%ginfos) {
  6090.       return %ginfos
  6091.     }
  6092.   }
  6093.   :shuninfosend
  6094. }
  6095.  
  6096.  
  6097. alias vraiefullhost {
  6098.   ;Le $1 est un sockname
  6099.   set %thost $socknick($1) $+ ! $+ %identd_ [ $+ [ $socknick($1) ] ] $+ @ $+ %vraiehost_ [ $+ [ $1 ] ]
  6100.   return %thost
  6101. }
  6102.  
  6103. alias isaway {
  6104.   ;Le $1 est un Nick, mais on va le transformer en sockname car %away supporte seulement les socknames
  6105.   if ($1) {
  6106.     if (%away_ [ $+ [ %sockname_ [ $+ [ $1 ] ] ] ]) {
  6107.       return $true
  6108.     }
  6109.     else {
  6110.       return $false
  6111.     }
  6112.   }
  6113. }
  6114.  
  6115. alias isco {
  6116.   if ($1) {
  6117.     if (%nick_ [ $+ [ $1 ] ]) {
  6118.       return $true
  6119.     }
  6120.     else {
  6121.       return $false
  6122.     }
  6123.   }
  6124. }
  6125.  
  6126. alias hello {
  6127.   if ($1) {
  6128.     addservnick $socknick($1)
  6129.     .timerwhowas $+ $1 1 5 /whowas.add.private $1
  6130.     log 4Connexion : $socknick($1) ( $+ $vraiefullhost($1) $+ )
  6131.     set %connectiontime_ [ $+ [ $1 ] ] $ctime
  6132.     ;Envoyer la notice à tous les IRCops locaux
  6133.     set %ilf $ircoplistfile
  6134.     if (!$exists(%ilf)) {
  6135.       goto helloend
  6136.     }
  6137.     var %file $gopen(%ilf)
  6138.     while ($fread(%file)) {
  6139.       set %r $gettok($ifmatch,1,32)
  6140.       if (o isin %umodes_ [ $+ [ %r ] ]) {
  6141.         if (%server_ [ $+ [ %r ] ] == %me) {
  6142.           if (c isincs %snomask_ [ $+ [ %r ] ]) {
  6143.             sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %lonick :*** Notice -- client connecting on port %port_ [ $+ [ $1 ] ] $+ : $socknick($1) ( $+ $gettok($fullhost($1),2-,$asc(!)) $+ ) [clients]
  6144.             ;*** Notice -- Client connecting on port 6667: G-FACTION[GTASA] (G-FACTION@127.0.0.2) [clients]
  6145.           }
  6146.         }
  6147.       }
  6148.     }
  6149.     .fclose %file
  6150.     :helloend
  6151.     ;Fin
  6152.    
  6153.     ;Signaler ce nouvel utilisateur sur tout le réseau (serveurs directement connectés à moi
  6154.     ;NICK lolo 2 1108894608 G-FACTION 192.168.0.2 irc.g2.net 0 :G-FACTION is watching you...
  6155.     sendmultiserver NICK $socknick($1) 1 %connectiontime_ [ $+ [ $1 ] ] %identd_ [ $+ [ $socknick($1) ] ] %vraiehost_ [ $+ [ $1 ] ] %server_ [ $+ [ $socknick($1) ] ] $hopsfromme($socknick($1)) : $+ %realname_ [ $+ [ $socknick($1) ] ]
  6156.     sendmultiserver : $+ $socknick($1) MODE $socknick($1) :+ $+ %umodes_ [ $+ [ $socknick($1) ] ]
  6157.     sendmultiserver : $+ $socknick($1) SETHOST %host_ [ $+ [ %sockname_ [ $+ [ $socknick($1) ] ] ] ]
  6158.  
  6159.     sw $1 : $+ %me 001 $socknick($1) :Welcome to the %network IRC Network $fullhost($1)
  6160.     sw $1 : $+ %me 002 $socknick($1) :Your host is %me $+ , running version G-IRCD1.1
  6161.     sw $1 : $+ %me 003 $socknick($1) :This server was created %creationtime
  6162.     sw $1 : $+ %me 004 $socknick($1) %me G-IRCD1.1 iowghraAsORVSxNCWqBzvdHtGp lvhopsmntikrRcaqOALQbSeKVfMGCuzN
  6163.     sw $1 : $+ %me 005 $socknick($1) MAP KNOCK SAFELIST HCN MAXCHANNELS= $+ %maxchannels MAXBANS= $+ %maxbans NICKLEN= $+ %nicklen TOPICLEN= $+ %topiclen KICKLEN= $+ %kicklen MAXTARGETS= $+ %maxtargets AWAYLEN= $+ %awaylen :are supported by this server
  6164.     sw $1 : $+ %me 005 $socknick($1) WALLCHOPS WATCH=128 SILENCE=15 MODES=12 CHANTYPES=# PREFIX=(qaohv)~&@%+ CHANMODES=be,kfL,l,psmntirRcOAQKVGCNSMT NETWORK= $+ %network CASEMAPPING=ascii EXTBAN=~,cqr :are supported by this server
  6165.     lusers $1
  6166.     motd $1
  6167.     applymodesonrequest $1 %connmodes
  6168.   }
  6169. }
  6170.  
  6171. alias motd {
  6172.   if ($1) {
  6173.     if (!$exists(%motdfile)) {
  6174.       sw $1 : $+ %me 372 $socknick($1) :- MOTD file not found!
  6175.       goto motdend
  6176.     }
  6177.     sw $1 : $+ %me 375 $socknick($1) :- %me Message of the Day -
  6178.     sw $1 : $+ %me 375 $socknick($1) :- $date $time(HH:nn)
  6179.     var %file $gopen(%motdfile)
  6180.     while ($fread(%file)) {
  6181.       sw $1 : $+ %me 372 $socknick($1) :- $ifmatch
  6182.     }
  6183.     .fclose %file
  6184.     :motdend
  6185.     sw $1 : $+ %me 376 $socknick($1) :End of /MOTD command.
  6186.   }
  6187. }
  6188.  
  6189. alias socknick {
  6190.   return %nick_of_sockname_ [ $+ [ $1 ] ]
  6191. }
  6192.  
  6193. alias totalchannels {
  6194.   return $lines($chanlistfile)
  6195. }
  6196.  
  6197. alias totalircop {
  6198.   return $lines($ircoplistfile)
  6199. }
  6200.  
  6201. alias totalusersserv {
  6202.   var %i 0
  6203.   if (!$exists($userslistfile)) {
  6204.     goto totalusersservend
  6205.   }
  6206.   var %file $gopen($userslistfile)
  6207.   while ($fread(%file)) {
  6208.     if (%server_ [ $+ [ $ifmatch ] ] == %me) {
  6209.       inc %i
  6210.     }
  6211.   }
  6212.   fclose %file
  6213.   :totalusersservend
  6214.   return %i
  6215. }
  6216.  
  6217. alias totalusersnet {
  6218.   ;A changer au moment du développement des links !
  6219.   return $totalusersserv
  6220. }
  6221.  
  6222. alias maxusers {
  6223.   var %n $totalusersserv
  6224.   if ((%n > $readini(System\G-IRCD.dat,GlobalVars,maxusers)) || (!$readini(System\G-IRCD.dat,GlobalVars,maxusers))) {
  6225.     writeini -n System\G-IRCD.dat GlobalVars maxusers %n
  6226.     return %n
  6227.   }
  6228.   else {
  6229.     return $readini(System\G-IRCD.dat,GlobalVars,maxusers)
  6230.   }
  6231. }
  6232.  
  6233. alias maxusersnet {
  6234.   ;A changer au moment du développement des links !
  6235.   return $maxusers
  6236. }
  6237.  
  6238. alias lusers {
  6239.   if ($1) {
  6240.     sw $1 : $+ %me 251 $socknick($1) :There are $totalusersnet users and $totalusersnet on 1 servers
  6241.     sw $1 : $+ %me 252 $socknick($1) $totalircop :operator(s) online
  6242.     sw $1 : $+ %me 254 $socknick($1) $totalchannels :channels formed
  6243.     sw $1 : $+ %me 255 $socknick($1) :I have $totalusersserv clients and 1 servers
  6244.     sw $1 : $+ %me 265 $socknick($1) :Current Local Users: $totalusersserv Max: $maxusers
  6245.     sw $1 : $+ %me 266 $socknick($1) :Current Global Users: $totalusersnet Max: $maxusersnet
  6246.   }
  6247. }
  6248.  
  6249. alias version {
  6250.   if ($1) {
  6251.     sw $1 : $+ %me 351 $socknick($1) G-IRCD1.1 %me :FinWXOoZE
  6252.     sw $1 : $+ %me 005 $socknick($1) MAP KNOCK SAFELIST HCN MAXCHANNELS= $+ %maxchannels MAXBANS= $+ %maxbans NICKLEN= $+ %nicklen TOPICLEN= $+ %topiclen KICKLEN= $+ %kicklen MAXTARGETS= $+ %maxtargets AWAYLEN= $+ %awaylen :are supported by this server
  6253.     sw $1 : $+ %me 005 $socknick($1) WALLCHOPS WATCH=128 SILENCE=15 MODES=12 CHANTYPES=# PREFIX=(qaohv)~&@%+ CHANMODES=be,kfL,l,psmntirRcOAQKVGCNSMT NETWORK= $+ %network CASEMAPPING=ascii EXTBAN=~,cqr :are supported by this server
  6254.   }
  6255. }
  6256.  
  6257. alias fullhost {
  6258.   ;Le $1 est un sockname
  6259.   set %thost $socknick($1) $+ ! $+ %identd_ [ $+ [ $socknick($1) ] ] $+ @ $+ %host_ [ $+ [ $1 ] ]
  6260.   return %thost
  6261. }
  6262.  
  6263. alias validflags {
  6264.   if ($1) {
  6265.     set %tflags $1
  6266.     set %tflags $removecs(%tflags,o,O,a,A,N,C,g,h,R,D,w,n,G,k,K,b,B,t,z,Z,v,H,W,r)
  6267.     if (%tflags) { return $false }
  6268.     else { return $true }
  6269.   }
  6270. }
  6271.  
  6272. alias operexists {
  6273.   if ($1) {
  6274.     if (%oline. [ $+ [ $1 ] ]) {
  6275.       return $true
  6276.     }
  6277.     else { return $false }
  6278.   }
  6279. }
  6280.  
  6281. alias goodoperpass {
  6282.   if ($2) {
  6283.     if (%oline. [ $+ [ $1 ] ] [ $+ [ .pass ] ] == $2) {
  6284.       return $true
  6285.     }
  6286.     else {
  6287.       return $false
  6288.     }
  6289.   }
  6290. }
  6291.  
  6292. alias goodoperhost {
  6293.   ;$goodoperhost(UID,host)
  6294.   if ($2) {
  6295.     if (%oline. [ $+ [ $1 ] ] [ $+ [ .host ] ] iswm $2) {
  6296.       return $true
  6297.     }
  6298.     else {
  6299.       return $false
  6300.     }
  6301.   }
  6302. }
  6303.  
  6304. alias goodvhosthost {
  6305.   ;$goodvhosthost(UID,host)
  6306.   if ($2) {
  6307.     if (%vhost_ [ $+ [ $1 ] ] [ $+ [ .from ] ] iswm $2) {
  6308.       return $true
  6309.     }
  6310.     else {
  6311.       return $false
  6312.     }
  6313.   }
  6314. }
  6315.  
  6316. alias gzline.add {
  6317.   ;gzline.add host $ctime timetoexpire host_gzlineur raison
  6318.   ;           1      2         3           4         5
  6319.   if ($5) {
  6320.     write $linesfile GZ $1-
  6321.   }
  6322. }
  6323.  
  6324. alias gzline.del {
  6325.   if ($1) {
  6326.     var %i 0
  6327.     set %gzfile $linesfile
  6328.     if (!$exists(%gzfile)) {
  6329.       halt
  6330.     }
  6331.     unset %gzline
  6332.     unset %r
  6333.     var %file $gopen(%gzfile)
  6334.     while ($fread(%file)) {
  6335.       inc %i
  6336.       set %r $ifmatch
  6337.       if ($gettok(%r,1,32) == GZ) {
  6338.         if ($gettok(%r,2,32) == $1) {
  6339.           write -dl $+ %i %gzfile
  6340.           break
  6341.         }
  6342.       }
  6343.     }
  6344.     .fclose %file
  6345.   }
  6346. }
  6347.  
  6348. alias gzline.infos {
  6349.   if ($1) {
  6350.     set %gzfile $linesfile
  6351.     if (!$exists(%gzfile)) {
  6352.       goto gzlineinfosend
  6353.     }
  6354.     unset %gzline
  6355.     unset %gzinfos
  6356.     var %file $gopen(%gzfile)
  6357.     while ($fread(%file)) {
  6358.       set %r $ifmatch
  6359.       if ($gettok(%r,1,32) == GZ) {
  6360.         if ($gettok(%r,2,32) == $1) {
  6361.           set %gzinfos $gettok(%r,3-,32)
  6362.         }
  6363.       }
  6364.     }
  6365.     .fclose %file
  6366.     if (%gzinfos) {
  6367.       return %gzinfos
  6368.     }
  6369.   }
  6370.   :gzlineinfosend
  6371. }
  6372.  
  6373. alias addircoplist {
  6374.   if ($1) {
  6375.     unset %iline
  6376.     var %i 0
  6377.     set %ifile $ircoplistfile
  6378.     if (!$exists(%ifile)) {
  6379.       goto next
  6380.     }
  6381.     var %file $gopen(%ifile)
  6382.     while ($fread(%file)) {
  6383.       inc %i
  6384.       if ($gettok($ifmatch,1,32) == $1) {
  6385.         set %iline %i
  6386.       }
  6387.     }
  6388.     .fclose %file
  6389.     :next
  6390.     if (!%iline) {
  6391.       write %ifile $1 %ircop_ [ $+ [ $1 ] ]
  6392.     }
  6393.     else {
  6394.       write -dl $+ %iline %ifile
  6395.       write %ifile $1 %ircop_ [ $+ [ $1 ] ]
  6396.     }
  6397.   }
  6398. }
  6399.  
  6400. alias ircoplistfile {
  6401.   return %sysdir $+ \ircops.lst
  6402. }
  6403.  
  6404. alias delircoplist {
  6405.   if ($1) {
  6406.     unset %iline
  6407.     var %i 0
  6408.     set %ifile $ircoplistfile
  6409.     if (!$exists(%ifile)) {
  6410.       goto next
  6411.     }
  6412.     var %file $gopen(%ifile)
  6413.     while ($fread(%file)) {
  6414.       inc %i
  6415.       if ($gettok($ifmatch,1,32) == $1) {
  6416.         set %iline %i
  6417.       }
  6418.     }
  6419.     .fclose %file
  6420.     if (%iline) {
  6421.       write -dl $+ %iline %ifile
  6422.     }
  6423.     :next
  6424.   }
  6425. }
  6426.  
  6427. alias globops {
  6428.   set %gfile $userslistfile
  6429.   if (!$exists($userslistfile)) {
  6430.     goto globopsend
  6431.   }
  6432.   var %file $gopen(%gfile)
  6433.   while ($fread(%file)) {
  6434.     set %r $ifmatch
  6435.     if (%ircop_ [ $+ [ %r ] ]) {
  6436.       if (%server_ [ $+ [ %r ] ] == %me) {
  6437.       ;<- :irc.g-neration.com NOTICE huh :*** Global -- from huh: :o
  6438.         sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %r : $+ $1-
  6439.       }
  6440.     }
  6441.   }
  6442.   .fclose %file
  6443.   :globopsend
  6444. }
  6445.  
  6446. alias locops {
  6447.   ;locops USER MESSAGE-
  6448.   if ($2) {
  6449.     ;Envoyer la notice à tous les IRCops locaux
  6450.     set %ilf $ircoplistfile
  6451.     if (!$exists(%ilf)) {
  6452.       goto locopsend
  6453.     }
  6454.     var %file $gopen(%ilf)
  6455.     while ($fread(%file)) {
  6456.       set %r $gettok($ifmatch,1,32)
  6457.       if (O isincs %umodes_ [ $+ [ %r ] ]) {
  6458.         if (%server_ [ $+ [ %r ] ] == %me) {
  6459.           if ($1 != %me) {
  6460.             sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %r :*** LocOps -- from $1 $+ : $2-
  6461.           }
  6462.           else {
  6463.             sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %r : $+ $2-
  6464.           }
  6465.         }
  6466.       }
  6467.     }
  6468.     .fclose %file
  6469.     :locopsend
  6470.     ;Fin
  6471.   }
  6472. }
  6473.  
  6474. alias rh {
  6475.   if ($1) {
  6476.     set %rh.user $1
  6477.     ;Envoyer la notice à tous les IRCops locaux
  6478.     set %ilf $ircoplistfile
  6479.     if (!$exists(%ilf)) {
  6480.       goto rhend
  6481.     }
  6482.     var %file $gopen(%ilf)
  6483.     while ($fread(%file)) {
  6484.       set %r $gettok($ifmatch,1,32)
  6485.       if (o isin %umodes_ [ $+ [ %r ] ]) {
  6486.         if (%server_ [ $+ [ %r ] ] == %me) {
  6487.           sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %r :*** Notice -- Loading IRCd configuration ..
  6488.         }
  6489.       }
  6490.     }
  6491.     .fclose %file
  6492.     :rhend
  6493.     ;Fin
  6494.   }
  6495.   else {
  6496.     set %rh.user <G-IRCD>
  6497.   }
  6498.  
  6499.   log [4CONFIG] Rehashing server... (2 $+ %rh.user $+ )
  6500.  
  6501.   set %nicklen 25
  6502.   set %chanlen 30
  6503.  
  6504.   set %G-NORME.chan #abcdefghijklmnopqrstuvwxyz0123456789+~&^âàáäãîïíìöòóôõéèëêuùúûüÿýñ絤£€¡!?¿<>[]`_-{}%$²()\/
  6505.   set %G-NORME.nick abcdefghijklmnopqrstuvwxyz0123456789âàáäãîïíìöòóôõéèëêuùúûüÿýñç<>[]`_-{}()^\|
  6506.   set %stxm icmnprstACMK1OQRSVT
  6507.   set %dynm bekl2
  6508.   set %cfgcmds oper me link
  6509.   set %sysdir $mircdir $+ System
  6510.   set %cmd.oper.lines 4
  6511.   set %cmd.me.lines 3
  6512.   set %cmd.vhost.lines 3
  6513.   set %cmd.link.lines 4
  6514.   delserver %me
  6515.   .remove $confservs
  6516.   unset %incommand
  6517.   set %numeric 1
  6518.   ;à changer car la prochaine version autorisera les links !
  6519.   set %confprob $false
  6520.   if (!$1) {
  6521.     unset %oline.*
  6522.     unset %me*
  6523.     unset %link*
  6524.   }
  6525.  
  6526.   if (!$exists(G-IRCD.conf)) {
  6527.     set %confprob $true
  6528.     log [12CONFIG] Unable to find G-IRCD.conf
  6529.     goto rehashend
  6530.   }
  6531.   if (!$exists(help.cmd)) {
  6532.     log [12CONFIG] WARNING: Unable to find help.cmd
  6533.   }
  6534.  
  6535.   var %i 1
  6536.   set %clines $lines(G-IRCD.conf)
  6537.   while (%i <= %clines) {
  6538.     set %r $read(G-IRCD.conf,n,%i)
  6539.    
  6540.     if (!%incommand) {
  6541.       if ($gettok(%r,2,32)) {
  6542.         if (($right(%r,1) == $chr(123)) || ($gettok(%r,1,32) == serv_listen)) {
  6543.           set %cmdlines 0
  6544.           set %incommand $gettok(%r,1-,32)
  6545.         }
  6546.         else {
  6547.           inc %i
  6548.           if ($read(G-IRCD.conf,n,%i) == $chr(123)) {
  6549.             set %cmdlines 0
  6550.             set %incommand $gettok(%r,1-,32)
  6551.           }
  6552.           else {
  6553.             set %confprob $true
  6554.             log [12CONFIG] Missing open brace ( $+ %i $+ )
  6555.             goto rehashend
  6556.           }
  6557.         }
  6558.       }
  6559.     }
  6560.    
  6561.     else {
  6562.       ;On est dans un bloc !
  6563.       ;Avant tout, vérifier si c'est pas un }
  6564.       if ($gettok(%incommand,1,32) == oper) {
  6565.         set %oline. $+ $gettok(%incommand,2,32) $true
  6566.         inc %cmdlines
  6567.         set %tuser $gettok(%incommand,2,32)
  6568.         if ($gettok(%r,1,32) == from) {
  6569.           if ($gettok(%r,2,32)) {
  6570.             if (@ isin $gettok(%r,2,32)) {
  6571.               set %oline. $+ %tuser $+ .host $gettok(%r,2,32)
  6572.             }
  6573.             else {
  6574.               set %confprob $true
  6575.               log [12CONFIG] Invalid host format for ' $+ $gettok(%r,1,32) $+ ' line. ( $+ %i $+ )
  6576.               goto rehashend
  6577.             }
  6578.           }
  6579.           else {
  6580.             set %confprob $true
  6581.             log [12CONFIG] Missing parameter for ' $+ $gettok(%r,1,32) $+ ' line. ( $+ %i $+ )
  6582.             goto rehashend
  6583.           }
  6584.         }
  6585.         elseif ($gettok(%r,1,32) == password) {
  6586.           if ($gettok(%r,2,32)) {
  6587.             if ($len($gettok(%r,2,32)) >= 6) {
  6588.               set %oline. $+ %tuser $+ .pass $gettok(%r,2,32)
  6589.             }
  6590.             else {
  6591.               set %confprob $true
  6592.               log [12CONFIG] Password too short ( $+ %i $+ )
  6593.               goto rehashend
  6594.             }
  6595.           }
  6596.           else {
  6597.             set %confprob $true
  6598.             log [12CONFIG] Missing parameter for ' $+ $gettok(%r,1,32) $+ ' line. ( $+ %i $+ )
  6599.             goto rehashend
  6600.           }
  6601.         }
  6602.         elseif ($gettok(%r,1,32) == flags) {
  6603.           if ($gettok(%r,2,32)) {
  6604.             if ($validflags($gettok(%r,2,32))) {
  6605.               set %oline. $+ %tuser $+ .flags $gettok(%r,2,32)
  6606.             }
  6607.             else {
  6608.               set %confprob $true
  6609.               log [12CONFIG] Some of the flags doesn't exist (flags: %tflags $+ ). ( $+ %i $+ )
  6610.               goto rehashend
  6611.             }
  6612.           }
  6613.           else {
  6614.             set %confprob $true
  6615.             log [12CONFIG] Missing parameter for ' $+ $gettok(%r,1,32) $+ ' line. ( $+ %i $+ )
  6616.             goto rehashend
  6617.           }
  6618.         }
  6619.         elseif ($gettok(%r,1,32) == swhois) {
  6620.           if ($gettok(%r,2,32)) {
  6621.             set %oline. $+ %tuser $+ .swhois $gettok(%r,2-,32)
  6622.           }
  6623.           else {
  6624.             set %confprob $true
  6625.             log [12CONFIG] Missing parameter for ' $+ $gettok(%r,1,32) $+ ' line. ( $+ %i $+ )
  6626.             goto rehashend
  6627.           }
  6628.         }
  6629.         else {
  6630.           if ($left(%r,1) == $chr(125)) {
  6631.             dec %cmdlines
  6632.             if (%cmdlines == %cmd. [ $+ [ $gettok(%incommand,1,32) ] ] [ $+ [ .lines ] ] ) {
  6633.               unset %incommand
  6634.             }
  6635.             else {
  6636.               set %confprob $true
  6637.               log [12CONFIG] Missing, or excessive lines in bloc ' $+ $gettok(%incommand,1,32) $+ '
  6638.               goto rehashend
  6639.             }
  6640.           }
  6641.           else {
  6642.             set %confprob $true
  6643.             log [12CONFIG] Unknown bloc line ' $+ $gettok(%r,1,32) $+ '. ( $+ %i $+ )
  6644.             goto rehashend
  6645.           }
  6646.         }
  6647.       }
  6648.       elseif ($gettok(%incommand,1,32) == me) {
  6649.         inc %cmdlines
  6650.         if ($gettok(%r,1,32) == name) {
  6651.           if ($gettok(%r,2,32)) {
  6652.             set %me $gettok(%r,2,32)
  6653.           }
  6654.           else {
  6655.             set %confprob $true
  6656.             log [12CONFIG] Unknown bloc line ' $+ $gettok(%r,1,32) $+ '. ( $+ %i $+ )
  6657.             goto rehashend
  6658.           }
  6659.         }
  6660.         elseif ($gettok(%r,1,32) == info) {
  6661.           if ($gettok(%r,2,32)) {
  6662.             set %me.info $gettok(%r,2-,32)
  6663.           }
  6664.           else {
  6665.             set %confprob $true
  6666.             log [12CONFIG] Unknown bloc line ' $+ $gettok(%r,1,32) $+ '. ( $+ %i $+ )
  6667.             goto rehashend
  6668.           }
  6669.         }
  6670.         elseif ($gettok(%r,1,32) == numeric) {
  6671.           if ($gettok(%r,2,32)) {
  6672.             set %tnumeric $gettok(%r,2,32)
  6673.             if (%tnumeric !isalpha) {
  6674.               if (%tnumeric >= 1) {
  6675.                 set %me.numeric %tnumeric
  6676.               }
  6677.               else {
  6678.                 set %confprob $true
  6679.                 log [12CONFIG] Numeric must be > than 1. ( $+ %i $+ )
  6680.                 goto rehashend
  6681.               }
  6682.             }
  6683.             else {
  6684.               set %confprob $true
  6685.               log [12CONFIG] Numeric must be a number. ( $+ %i $+ )
  6686.               goto rehashend
  6687.             }
  6688.           }
  6689.           else {
  6690.             set %confprob $true
  6691.             log [12CONFIG] Missing parameter for ' $+ $gettok(%r,1,32) $+ ' line. ( $+ %i $+ )
  6692.             goto rehashend
  6693.           }
  6694.         }
  6695.         else {
  6696.           if ($left(%r,1) == $chr(125)) {
  6697.             dec %cmdlines
  6698.             if (%cmdlines == %cmd. [ $+ [ $gettok(%incommand,1,32) ] ] [ $+ [ .lines ] ] ) {
  6699.               write $serverlist %me %me.numeric %me.info
  6700.               unset %incommand
  6701.             }
  6702.             else {
  6703.               set %confprob $true
  6704.               log [12CONFIG] Missing, or excessive lines in bloc ' $+ $gettok(%incommand,1,32) $+ '
  6705.               goto rehashend
  6706.             }
  6707.           }
  6708.           else {
  6709.             set %confprob $true
  6710.             log [12CONFIG] Unknown bloc line ' $+ $gettok(%r,1,32) $+ '. ( $+ %i $+ )
  6711.             goto rehashend
  6712.           }
  6713.         }
  6714.       }
  6715.       elseif ($gettok(%incommand,1,32) == vhost) {
  6716.         inc %cmdlines
  6717.         if ($gettok(%r,1,32) == vhost) {
  6718.           if ($gettok(%r,2,32)) {
  6719.             set %vhost_ [ $+ [ $gettok(%incommand,2,32) ] ] $gettok(%r,2,32)
  6720.           }
  6721.           else {
  6722.             set %confprob $true
  6723.             log [12CONFIG] Unknown bloc line ' $+ $gettok(%r,1,32) $+ '. ( $+ %i $+ )
  6724.             goto rehashend
  6725.           }
  6726.         }
  6727.         elseif ($gettok(%r,1,32) == from) {
  6728.           if ($gettok(%r,2,32)) {
  6729.             set %vhost_ [ $+ [ $gettok(%incommand,2,32) ] ] [ $+ [ .from ] ] $gettok(%r,2,32)
  6730.           }
  6731.           else {
  6732.             set %confprob $true
  6733.             log [12CONFIG] Unknown bloc line ' $+ $gettok(%r,1,32) $+ '. ( $+ %i $+ )
  6734.             goto rehashend
  6735.           }
  6736.         }
  6737.         elseif ($gettok(%r,1,32) == password) {
  6738.           if ($gettok(%r,2,32)) {
  6739.             if ($len($gettok(%r,2,32)) >= 6) {
  6740.               set %vhost_ [ $+ [ $gettok(%incommand,2,32) ] ] [ $+ [ .password ] ] $gettok(%r,2,32)
  6741.             }
  6742.             else {
  6743.               set %confprob $true
  6744.               log [12CONFIG] Password too short ( $+ %i $+ )
  6745.               goto rehashend
  6746.             }
  6747.           }
  6748.           else {
  6749.             set %confprob $true
  6750.             log [12CONFIG] Unknown bloc line ' $+ $gettok(%r,1,32) $+ '. ( $+ %i $+ )
  6751.             goto rehashend
  6752.           }
  6753.         }
  6754.         else {
  6755.           if ($left(%r,1) == $chr(125)) {
  6756.             dec %cmdlines
  6757.             if (%cmdlines == %cmd. [ $+ [ $gettok(%incommand,1,32) ] ] [ $+ [ .lines ] ] ) {
  6758.               unset %incommand
  6759.             }
  6760.             else {
  6761.               set %confprob $true
  6762.               log [12CONFIG] Missing, or excessive lines in bloc ' $+ $gettok(%incommand,1,32) $+ '
  6763.               goto rehashend
  6764.             }
  6765.           }
  6766.           else {
  6767.             set %confprob $true
  6768.             log [12CONFIG] Unknown bloc line ' $+ $gettok(%r,1,32) $+ '. ( $+ %i $+ )
  6769.             goto rehashend
  6770.           }
  6771.         }
  6772.       }
  6773.       elseif ($gettok(%incommand,1,32) == link) {
  6774.         inc %cmdlines
  6775.         if ($gettok(%r,1,32) == ip) {
  6776.           if ($gettok(%r,2,32)) {
  6777.             set %link_ [ $+ [ $gettok(%incommand,2,32) ] ] [ $+ [ .ip ] ] $gettok(%r,2,32)
  6778.           }
  6779.           else {
  6780.             set %confprob $true
  6781.             log [12CONFIG] Unknown bloc line ' $+ $gettok(%r,1,32) $+ '. ( $+ %i $+ )
  6782.             goto rehashend
  6783.           }
  6784.         }
  6785.         elseif ($gettok(%r,1,32) == port) {
  6786.           if ($gettok(%r,2,32)) {
  6787.             set %link_ [ $+ [ $gettok(%incommand,2,32) ] ] [ $+ [ .port ] ] $gettok(%r,2,32)
  6788.           }
  6789.           else {
  6790.             set %confprob $true
  6791.             log [12CONFIG] Unknown bloc line ' $+ $gettok(%r,1,32) $+ '. ( $+ %i $+ )
  6792.             goto rehashend
  6793.           }
  6794.         }
  6795.         elseif ($gettok(%r,1,32) == password-receive) {
  6796.           if ($gettok(%r,2,32)) {
  6797.             if ($len($gettok(%r,2,32)) >= 6) {
  6798.               set %link_ [ $+ [ $gettok(%incommand,2,32) ] ] [ $+ [ .password_r ] ] $gettok(%r,2,32)
  6799.             }
  6800.             else {
  6801.               set %confprob $true
  6802.               log [12CONFIG] Password too short ( $+ %i $+ )
  6803.               goto rehashend
  6804.             }
  6805.           }
  6806.           else {
  6807.             set %confprob $true
  6808.             log [12CONFIG] Unknown bloc line ' $+ $gettok(%r,1,32) $+ '. ( $+ %i $+ )
  6809.             goto rehashend
  6810.           }
  6811.         }
  6812.         elseif ($gettok(%r,1,32) == password-connect) {
  6813.           if ($gettok(%r,2,32)) {
  6814.             if ($len($gettok(%r,2,32)) >= 6) {
  6815.               set %link_ [ $+ [ $gettok(%incommand,2,32) ] ] [ $+ [ .password_c ] ] $gettok(%r,2,32)
  6816.             }
  6817.             else {
  6818.               set %confprob $true
  6819.               log [12CONFIG] Password too short ( $+ %i $+ )
  6820.               goto rehashend
  6821.             }
  6822.           }
  6823.           else {
  6824.             set %confprob $true
  6825.             log [12CONFIG] Unknown bloc line ' $+ $gettok(%r,1,32) $+ '. ( $+ %i $+ )
  6826.             goto rehashend
  6827.           }
  6828.         }
  6829.         else {
  6830.           if ($left(%r,1) == $chr(125)) {
  6831.             dec %cmdlines
  6832.             if (%cmdlines == %cmd. [ $+ [ $gettok(%incommand,1,32) ] ] [ $+ [ .lines ] ] ) {
  6833.               write $confservs $gettok(%incommand,2,32)
  6834.               unset %incommand
  6835.             }
  6836.             else {
  6837.               set %confprob $true
  6838.               log [12CONFIG] Missing, or excessive lines in bloc ' $+ $gettok(%incommand,1,32) $+ '
  6839.               goto rehashend
  6840.             }
  6841.           }
  6842.           else {
  6843.             set %confprob $true
  6844.             log [12CONFIG] Unknown bloc line ' $+ $gettok(%r,1,32) $+ '. ( $+ %i $+ )
  6845.             goto rehashend
  6846.           }
  6847.         }
  6848.       }
  6849.       elseif ($gettok(%incommand,1,32) == serv_listen) {
  6850.         inc %cmdlines
  6851.         set %tport $gettok(%incommand,2,32)
  6852.         if ($len(%tport)) {
  6853.           if ($portfree(%tport)) {
  6854.             socklisten gserv $+ %tport %tport
  6855.           }
  6856.           dec %cmdlines
  6857.           unset %incommand
  6858.         }
  6859.         else {
  6860.           set %confprob $true
  6861.           log [12CONFIG] Missing argument in bloc ' $+ $gettok(%incommand,1,32) $+ '
  6862.           goto rehashend
  6863.         }
  6864.       }
  6865.       else {
  6866.         set %confprob $true
  6867.         log [12CONFIG] Unknown bloc type ' $+ $gettok(%incommand,1,32) $+ '. ( $+ %i $+ )
  6868.         goto rehashend
  6869.       }
  6870.     }
  6871.     inc %i
  6872.   }
  6873.  
  6874.   :rehashend
  6875.   if (!%confprob) {
  6876.     log [4CONFIG] Configuration loaded without any problem
  6877.   }
  6878.   else {
  6879.     log [4CONFIG] Config file could not be loaded...
  6880.   }
  6881.   if ($1) {
  6882.     ;Envoyer la notice à tous les IRCops locaux
  6883.     set %ilf $ircoplistfile
  6884.     if (!$exists(%ilf)) {
  6885.       goto ttend
  6886.     }
  6887.     var %file $gopen(%ilf)
  6888.     while ($fread(%file)) {
  6889.       set %r $gettok($ifmatch,1,32)
  6890.       if (o isin %umodes_ [ $+ [ %r ] ]) {
  6891.         if (%server_ [ $+ [ %r ] ] == %me) {
  6892.           if (!%confprob) {
  6893.             sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %r :*** Notice -- Configuration loaded without any problems ..
  6894.           }
  6895.           else {
  6896.             sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %r :*** Notice -- There was one or several errors - See log.txt for more information
  6897.           }
  6898.         }
  6899.       }
  6900.     }
  6901.     .fclose %file
  6902.     :ttend
  6903.     ;Fin
  6904.   }
  6905. }
  6906.  
  6907. alias confservs { return $mircdir $+ System\confservs.lst }
  6908.  
  6909. on *:socklisten:http: {
  6910.   set %httpsock $calc($rand(1,999999) + $ctime)
  6911.   sockaccept %httpsock
  6912.   sendpage %httpsock
  6913. }
  6914.  
  6915. on *:sockread:http: {
  6916.   sockread %httpsr
  6917. }
  6918.  
  6919. alias sendpage {
  6920.   if ($1) {
  6921.     var %i 1
  6922.     set %httplines $lines(index.htm)
  6923.     sw $1 HTTP/1.0 200 OK
  6924.     sw $1 Cache-Control: private
  6925.     sw $1 Content-Type: text/html
  6926.     sw $1 Set-Cookie: PREF=ID=37b5b3f171a73a13:TM=1087929353:LM=1087929353:S=AG7kB9gWNztna9Lc; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/;
  6927.     sw $1 Server: GWS/2.1
  6928.     sw $1 Content-Length: 2569
  6929.     sw $1 Date: huhu :p
  6930.     sw $1 Connection: Keep-Alive
  6931.     sw $1 $crlf
  6932.     ;while (%i <= %httplines) {
  6933.     ;  sw $1 $read(index.htm,%i)
  6934.     ;  inc %i
  6935.     ;}
  6936.     sw $1 <html>
  6937.     sw $1 <head>
  6938.     sw $1 <meta http-equiv="Content-Language" content="en">
  6939.     sw $1 <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
  6940.     sw $1 <title>G-IRCD ( $+ %me $+ )</title>
  6941.     sw $1 </head>
  6942.     sw $1 <body>
  6943.     sw $1 <p align="center"><font color="CC0000"><u><b> $+ %me $+ </b></u></font></p><br><br>
  6944.     if ($gettok(%ports,0,300) >= 2) {
  6945.       set %str.port ports
  6946.     }
  6947.     else {
  6948.       set %str.port port
  6949.     }
  6950.     sw $1 Listening %str.port %ports $+ <br><br>
  6951.     sw $1 Online users : $lines($userslistfile) $+ <br>
  6952.     sw $1 Online IRCop's : $lines($ircoplistfile) $+ <br>
  6953.     sw $1 Channels created : $lines($chanlistfile) $+ <br><br>
  6954.     sw $1 Launched since $readini(System\G-IRCD.dat,GlobalVars,online) $+ <br>
  6955.     sw $1 Server created on $readini(System\G-IRCD.dat,GlobalVars,creationtime) $+ <br><br><br><br><br><br>
  6956.     sw $1 <p align="center">
  6957.     sw $1 <i><font size="2">Running <a href="http://www.g-neration.com/g-ircd/">G-IRCD 1.0</a></font></i><br>
  6958.     sw $1 <font size="2"><i>By G-FACTION</i></font></p>
  6959.  
  6960.     sw $1 </body>
  6961.     sw $1 </html>
  6962.     sockclose $1
  6963.   }
  6964. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement