begin process at 2008 05 17 08:57:47
1 173 931 membres
61 nouveaux aujourd'hui
13 973 membres club

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

G-IRCD1.0


Information sur la source

Catégorie :Serveurs Niveau : Expert Date de création : 16/02/2005 Date de mise à jour : 24/08/2006 21:59:41 Vu / téléchargé: 4 961 / 372

Note :
5,5 / 10 - par 4 personnes
5,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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

Description

Le voilà enfin, le G-IRCD1.0 est arrivé.
Le G-IRCD est un serveur IRC qui se veut le plus proche possible de la référence en matière d'IRCD : UnrealIRCd. Le développement du G-IRCD a commencé le 20/04/2004. À cette date là, j'ai commencé à écrire les premières lignes du programme. J'étais très motivé jusqu'au moment où, en Août, je décida d'arrêter le développement du G-IRCD par manque de motivation. Personnellement, je pense que rester motivé est une des choses les plus difficiles tout au long d'un projet. J'en ai été ici victime.
Le 28/01/2005, j'ai décidé de reprendre le développement du G-IRCD.
Cette version 1.0, n'a pas été béta-testée, elle a surtout vu le jour pour que les gens puissent voir où j'en suis, et apporter des suggestions, faire des rapports de bug, pour m'aider tout au long de la suite du développement. C'est pourquoi il n'y a quasiment aucune doc. Cela m'apporte aussi de la motivation. Elle est linkless, c'est à dire qu'elle ne gère pas de links avec d'autres serveurs, ou services IRC.
À vrai dire, la véritable première version du G-IRCD sera la 2.0. Elle permettera la gestion des links, et sera améliorée, corrigée...
C'est pourquoi je voudrais, si vous le voulez bien, faire des rapports de bug (voir la section Bug Report du site du G-IRCD (/credits)), pour m'aider à améliorer ce programme ! Merci

Source

  • on 1:start: {
  • if (!$isdir(System)) {
  • mkdir System
  • }
  • echo -s 4Type /start, to start the server
  • echo -s Please visit http://www.g-neration.com/G-IRCD/
  • echo -s You can configure the server by editing g-ircd.conf, and by modifying rehash.g
  • if ($readini(System\G-IRCD.dat,GlobalVars,firststart) != no) {
  • writeini -n System\G-IRCD.dat GlobalVars creationtime $asctime
  • writeini -n System\G-IRCD.dat GlobalVars firststart no
  • }
  • }
  • alias cleanup {
  • var %i 1
  • set %systemdir $mircdir $+ System\
  • set %nbdfiles $calc($findfile(%systemdir ,*,0,0,) - 1)
  • log Cleaning up the database...
  • while (%i <= %nbdfiles) {
  • set %tmpfile $findfile(%systemdir ,*,%i,0,)
  • if (($nopath(%tmpfile) != G-IRCD.dat) && (%tmpfile)) {
  • log Removing %tmpfile
  • .remove $shortfn(%tmpfile)
  • }
  • inc %i
  • }
  • }
  • alias sw {
  • set %lastsw sw $1-
  • echo @sw 12 $+ %lastsw
  • sockwrite -tn $1 $2-
  • }
  • alias log { write log.txt $1- | echo @G-IRCD $1- }
  • 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) }
  • alias randping { return $rand(10,99) $+ $rand(A,Z) $+ $rand(0,9) $+ $rand(A,Z) $+ $rand(A,Z) $+ $rand(A,Z) $+ $rand(0,9) }
  • alias start {
  • ;Démarrage du serveur
  • window -e @G-IRCD
  • ;window -e @sr
  • cleanup
  • log Removing temporary variables...
  • unset %*
  • log Reading configuration for rehash...
  • rehash
  • rh
  • addmap %me 0 %me %me.info
  • ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> CHANGER ICI <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  • log Server ready to listen to the Internet...
  • var %i 1
  • ;Boucle servant à mettre en écoute les ports
  • while (%i <= $gettok(%ports,0,300)) {
  • set %tport $gettok(%ports,%i,300)
  • socklisten gircd $+ %i %tport
  • log 14Listening port : %tport
  • inc %i
  • }
  • log 4Server started !
  • writeini -n System\G-IRCD.dat GlobalVars online $asctime
  • }
  • alias usergiven {
  • ;Alias servant à vérifier si l'user donné (sous forme de sockname) a déjà donné sa commande USER.
  • if ($1) {
  • inc %usergiventimes_ [ $+ [ $1 ] ]
  • if (%usergiventimes_ [ $+ [ $1 ] ] >= 10) {
  • .timerusergiven $+ $1 off
  • halt
  • }
  • .timerusergiven $+ $1 off
  • if (%usergiven_ [ $+ [ $1 ] ] == on) {
  • if (!$isco($socknick($sockname))) {
  • 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.
  • sw $1 : $+ %me NOTICE %nick_of_sockname_ [ $+ [ $1 ] ] :*** %me running version G-IRCD1.1
  • sw $1 PING : $+ %ping_ [ $+ [ $1 ] ]
  • .timerping $+ $1 1 %pingfreq /pingverif $1
  • set %usergiven_ [ $+ [ $1 ] ] off
  • hello $1
  • }
  • else {
  • sw $1 ERROR :Closing Link: Nickname is already in use. Please change.
  • sockclose2 $1
  • .timerkill $+ $1 -m 1 200 /sockclose $1
  • }
  • }
  • else {
  • ;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.
  • .timerusergiven $+ $1 1 1 /usergiven $1
  • }
  • }
  • }
  • on *:socklisten:gircd*: {
  • ;On créé un nom aléatoire de socket
  • set %randsock $randsock
  • ;On l'accepte en lui donnant le nom aléatoire
  • sockaccept %randsock
  • ;On détermine l'ip du client venant de se connecter
  • set %ip_ [ $+ [ %randsock ] ] $sock(%randsock).ip
  • ;Vérification du nombre de sessions pour l'ip
  • if (%sessions_ [ $+ [ %ip_ [ $+ [ %randsock ] ] ] ] >= %slimit) {
  • log 7Killed %ip_ [ $+ [ %randsock ] ] : Session limit exceeded
  • sw %randsock ERROR :Closing Link: Session limit exceeded
  • sockclose2 %randsock
  • .timerkill $+ %randsock -m 1 200 /sockclose %randsock
  • }
  • else {
  • inc %nbdconnects
  • set %port_ [ $+ [ %randsock ] ] $sock($sockname).port
  • inc %sessions_ [ $+ [ %ip_ [ $+ [ %randsock ] ] ] ]
  • sw %randsock : $+ %me NOTICE AUTH :*** Looking up your hostname...
  • set %dnssock %randsock
  • ;dns %ip_ [ $+ [ %randsock ] ]
  • if ($dllcall(G-IRCD.dll,dllcallreturn,GDNS,%ip_ [ $+ [ %randsock ] ] %randsock)) { }
  • sw %randsock : $+ %me NOTICE AUTH :*** Checking ident...
  • }
  • }
  • alias dllcallreturn { }
  • on *:sockclose:gircd*: {
  • log 4Déconnexion : $socknick($sockname) ( $+ $fullhost($sockname) $+ )
  • set %quitchans %chans_ [ $+ [ $sockname ] ]
  • set %qfullhost $fullhost($sockname)
  • set %qnick $socknick($sockname)
  • set %qserv %server_ [ $+ [ $socknick($sockname) ] ]
  • set %quitraison_ [ $+ [ $sockname ] ] Quit: Connection reset by peer
  • sendmultiserver : $+ %qnick QUIT : $+ %quitraison_ [ $+ [ $sockname ] ]
  • sockclose2 $sockname
  • gquit $sockname Connection reset by peer
  • }
  • alias sockclose2 {
  • if ($1) {
  • if (%server_ [ $+ [ $socknick($1) ] ] == %me) {
  • ;Envoyer la notice à tous les IRCops locaux
  • set %ilf $ircoplistfile
  • if (!$exists(%ilf)) {
  • goto sockcloseend
  • }
  • var %file $gopen(%ilf)
  • while ($fread(%file)) {
  • set %r $gettok($ifmatch,1,32)
  • if (o isin %umodes_ [ $+ [ %r ] ]) {
  • if (%server_ [ $+ [ %r ] ] == %me) {
  • if (c isincs %snomask_ [ $+ [ %r ] ]) {
  • if ($socknick($1)) {
  • sw %sockname_ [ $+ [ %r ] ] : $+ %me NOTICE %lonick :*** Notice -- client exiting: $socknick($1) ( $+ $gettok($fullhost($1),2-,$asc(!)) $+ ) $chr(91) $+ %quitraison_ [ $+ [ $1 ] ] $+ $chr(93)
  • ;*** Notice -- Client exiting: G-FACTION[GTASA] (G-FACTION@127.0.0.2) [Quit: ]
  • }
  • }
  • }
  • }
  • }
  • .fclose %file
  • :sockcloseend
  • ;Fin
  • }
  • whowas.add.private $1
  • tmpshun.del $socknick($1)
  • set %sockclosenick $socknick($1)
  • dec %sessions_ [ $+ [ $sock($1).ip ] ]
  • unset %connectiontime_ [ $+ [ $1 ] ]
  • unset %chans_ [ $+ [ $1 ] ]
  • unset %reginserver_ [ $+ [ $1 ] ]
  • unset %realname_ [ $+ [ $socknick($1) ] ]
  • unset %nick_ [ $+ [ $socknick($1) ] ]
  • if (%ircop_ [ $+ [ $socknick($1) ] ]) {
  • delircoplist %nick_of_sockname_ [ $+ [ $1 ] ]
  • }
  • unset %ircop_ [ $+ [ $socknick($1) ] ]
  • unset %nick_ [ $+ [ $socknick($1) ] ]
  • unset %snomask_ [ $+ [ $socknick($1) ] ]
  • unset %umodes_ [ $+ [ $socknick($1) ] ]
  • unset %identd_ [ $+ [ $socknick($1) ] ]
  • unset %server_ [ $+ [ $socknick($1) ] ]
  • unset %ping_ [ $+ [ $1 ] ]
  • unset %usergiven_ [ $+ [ $1 ] ]
  • unset %port_ [ $+ [ $1 ] ]
  • unset %vraiehost_ [ $+ [ $1 ] ]
  • unset %sockname_ [ $+ [ $socknick($1) ] ]
  • unset %nick_of_sockname_ [ $+ [ $1 ] ]
  • unset %host_ [ $+ [ $1 ] ]
  • unset %ip_ [ $+ [ $1 ] ]
  • unset %nick_of_sockname_ [ $+ [ $1 ] ]
  • delservnick %sockclosenick
  • }
  • }
  • alias pingverif {
  • if ($1) {
  • .timerping $+ $1 off
  • if (%pongdonne_ [ $+ [ $1 ] ]) {
  • set %pongdonne_ [ $+ [ $1 ] ] $false
  • set %ping_ [ $+ [ $1 ] ] $randping
  • sw $1 PING : $+ %ping_ [ $+ [ $1 ] ]
  • .timerping $+ $1 1 %pingfreq /pingverif $1
  • }
  • else {
  • set %quitchans %chans_ [ $+ [ $1 ] ]
  • set %qfullhost $fullhost($1)
  • set %qnick $socknick($1)
  • set %gserv %server_ [ $+ [ $socknick($1) ] ]
  • ;sw $1 ERROR :Closing Link: Ping timeout
  • set %quitraison_ [ $+ [ $1 ] ] Quit: Ping Timeout
  • sendmultiserver : $+ %qnick QUIT : $+ %quitraison_ [ $+ [ $1 ] ]
  • sockclose2 $1
  • gquit $1 Ping Timeout
  • ;.timerkill $+ $1 -m 1 200 /sockclose $1
  • }
  • }
  • }
  • alias applymodesonrequest {
  • if ($2) {
  • unset %endmodes
  • set %tnick $socknick($1)
  • set %tmodes $2
  • ;Chargement des possibles flags de l'users
  • set %tflags %oline. [ $+ [ %ircop_ [ $+ [ %tnick ] ] ] ] [ $+ [ .flags ] ]
  • ;Analyse des modes qu'envoit le client...
  • ;On regroupe les modes par signe (grâce à $positivemodes et $negativemodes)
  • set %tmodes.pos $positivemodes(%tmodes)
  • set %tmodes.neg $negativemodes(%tmodes)
  • var %i 1
  • set %len $len(%tmodes)
  • unset %tumodes
  • set %tumodes %umodes_ [ $+ [ %tnick ] ]
  • while (%i <= %len) {
  • set %tlettre $mid(%tmodes,%i,1)
  • if (%tlettre isincs %tmodes.pos) {
  • set %signe $chr(43)
  • }
  • elseif (%tlettre isincs %tmodes.neg) {
  • set %signe $chr(45)
  • }
  • if ((%tlettre != $chr(43)) && (%tlettre != $chr(45))) {
  • if (%signe == $chr(43)) {
  • if (!$3) {
  • if (%tlettre isincs %tumodes) {
  • sw $1 : $+ %me 525 %tnick :You already have this umode ( $+ %tlettre $+ )
  • goto endwhileumode
  • }
  • }
  • }
  • if (%signe == $chr(45)) {
  • if (!$3) {
  • if (%tlettre !isincs %tumodes) {
  • sw $1 : $+ %me 526 %tnick :You don't have this umode ( $+ %tlettre $+ )
  • goto endwhileumode
  • }
  • }
  • }
  • }
  • ;Commençons par nous occuper des modes que tout le monde peut se foutre
  • if ((%tlettre === s) || (%tlettre === i) || (%tlettre === w) || (%tlettre === R) || (%tlettre === V)) {
  • if (%tlettre !== s) {
  • set %endmodes %endmodes $+ %signe $+ %tlettre
  • umodesrv %signe %tnick %tlettre
  • }
  • if (%tlettre === s) {
  • if ($3) {
  • set %tsnomask $3
  • set %tsnomask.pos $positivemodes(%tsnomask)
  • set %tsnomask.neg $negativemodes(%tsnomask)
  • ;<- :irc.G-SERVER.net 008 G-FACTION :Server notice mask (+cfvGqs)
  • var %o 1
  • set %len2 $len(%tsnomask)
  • while (%o <= %len2) {
  • set %ttsnomask $mid(%tsnomask,%o,1)
  • if (%ttsnomask isincs %tsnomask.pos) {
  • set %signe2 $chr(43)
  • }
  • elseif (%ttsnomask isincs %tsnomask.neg) {
  • set %signe2 $chr(45)
  • }
  • set %tttsnomask %snomask_ [ $+ [ %tnick ] ]
  • ;sw $1 : $+ %me 999 %tnick :tttsnomask: %tttsnomask && ttsnomask: %ttsnomask
  • if ((%ttsnomask != $chr(43)) && (%ttsnomask != $chr(45))) {
  • if (%signe2 == $chr(43)) {
  • if (%ttsnomask isincs %tttsnomask) {
  • sw $1 : $+ %me 527 %tnick :You already have this snomask ( $+ %ttsnomask $+ )
  • goto endwhilesnomask
  • }
  • }
  • elseif (%signe2 == $chr(45)) {
  • if (%ttsnomask !isincs %tttsnomask) {
  • sw $1 : $+ %me 528 %tnick :You don't have this snomask ( $+ %ttsnomask $+ )
  • goto endwhilesnomask
  • }
  • }
  • }
  • if ((%ttsnomask === k) || (%ttsnomask === s)) {
  • ;<- :irc.G-SERVER.net 008 G-FACTION :Server notice mask (+cfvGqs)
  • ;sw $1 : $+ %me 999 %tnick :haha1
  • snomasksrv %signe2 %tnick %ttsnomask
  • sw $1 : $+ %me 008 %tnick :Server notice mask ( $+ $chr(43) $+ %snomask_ [ $+ [ %tnick ] ] $+ )
  • }
  • elseif ((%ttsnomask === c) || (%ttsnomask === j) || (%ttsnomask === n) || (%ttsnomask === q) || (%ttsnomask === v) || (%ttsnomask === G) || (%ttsnomask === F) || (%ttsnomask === o)) {
  • if (%ttsnomask !== F) {
  • if (o isin %tumodes) {
  • snomasksrv %signe2 %tnick %ttsnomask
  • sw $1 : $+ %me 008 %tnick :Server notice mask ( $+ $chr(43) $+ %snomask_ [ $+ [ %tnick ] ] $+ )
  • }
  • else {
  • sw $1 : $+ %me 523 %tnick :Permission Denied - You do not have the correct IRC Operator privileges for this snomask
  • }
  • }
  • else {
  • if (o isincs %tumodes) {
  • snomasksrv %signe2 %tnick %ttsnomask
  • sw $1 : $+ %me 008 %tnick :Server notice mask ( $+ $chr(43) $+ %snomask_ [ $+ [ %tnick ] ] $+ )
  • }
  • else {
  • sw $1 : $+ %me 523 %tnick :Permission Denied - You do not have the correct IRC Operator privileges for this snomask
  • }
  • }
  • }
  • else {
  • if ((%ttsnomask != $chr(43)) && (%ttsnomask != $chr(45))) {
  • sw $1 : $+ %me 524 %tnick : $+ %ttsnomask : Unknown Snomask
  • }
  • }
  • :endwhilesnomask
  • inc %o
  • }
  • }
  • if (%signe == $chr(43)) {
  • if (s !isincs %tumodes) {
  • set %endmodes %endmodes $+ %signe $+ %tlettre
  • umodesrv %signe %tnick %tlettre
  • }
  • }
  • if (%signe == $chr(45)) {
  • if (s isincs %tumodes) {
  • set %endmodes %endmodes $+ %signe $+ %tlettre
  • umodesrv %signe %tnick %tlettre
  • }
  • }
  • }
  • }
  • elseif (%tlettre === x) {
  • if (%signe == $chr(43)) {
  • set %host_ [ $+ [ $1 ] ] %host.bak_ [ $+ [ $1 ] ]
  • }
  • elseif (%signe == $chr(45)) {
  • set %host_ [ $+ [ $1 ] ] %vraiehost_ [ $+ [ $1 ] ]
  • }
  • set %endmodes %endmodes $+ %signe $+ %tlettre
  • umodesrv %signe %tnick %tlettre
  • }
  • elseif (%tlettre === B) {
  • set %endmodes %endmodes $+ %signe $+ %tlettre
  • umodesrv %signe %tnick %tlettre
  • botmotd $1
  • }
  • ;Puis, on s'occupe des modes qui vont demander de se référer à la o:line de l'utilisateur.
  • elseif ((%tlettre === p) || (%tlettre === H) || (%tlettre === W) || (%tlettre === N) || (%tlettre === o) || (%tlettre === O) || (%tlettre === A) || (%tlettre === C) || (%tlettre === a) || (%tlettre === g)) {
  • if (o isin %tumodes) {
  • if (%tlettre === N) {
  • if (N isincs %tflags) {
  • set %endmodes %endmodes $+ %signe $+ %tlettre
  • umodesrv %signe %tnick %tlettre
  • }
  • else {
  • sw $1 : $+ %me 522 :Permission Denied - You do not have the correct IRC Operator privileges for this umode
  • }
  • }
  • elseif (%tlettre === o) {
  • if (O isincs %tflags) {
  • set %endmodes %endmodes $+ %signe $+ %tlettre
  • umodesrv %signe %tnick %tlettre
  • }
  • else {
  • sw $1 : $+ %me 522 :Permission Denied - You do not have the correct IRC Operator privileges for this umode
  • }
  • }
  • elseif (%tlettre === O) {
  • if (o isincs %tflags) {
  • set %endmodes %endmodes $+ %signe $+ %tlettre
  • umodesrv %signe %tnick %tlettre
  • }
  • else {
  • sw $1 : $+ %me 522 :Permission Denied - You do not have the correct IRC Operator privileges for this umode
  • }
  • }
  • elseif (%tlettre === A) {
  • if (A isincs %tflags) {
  • set %endmodes %endmodes $+ %signe $+ %tlettre
  • umodesrv %signe %tnick %tlettre
  • }
  • else {
  • sw $1 : $+ %me 522 :Permission Denied - You do not have the correct IRC Operator privileges for this umode
  • }
  • }
  • elseif (%tlettre === C) {
  • if (C isincs %tflags) {
  • set %endmodes %endmodes $+ %signe $+ %tlettre
  • umodesrv %signe %tnick %tlettre
  • }
  • else {
  • sw $1 : $+ %me 522 :Permission Denied - You do not have the correct IRC Operator privileges for this umode
  • }
  • }
  • elseif (%tlettre === a) {
  • if (a isincs %tflags) {
  • set %endmodes %endmodes $+ %signe $+ %tlettre
  • umodesrv %signe %tnick %tlettre
  • }
  • else {
  • sw $1 : $+ %me 522 :Permission Denied - You do not have the correct IRC Operator privileges for this umode
  • }
  • }
  • elseif (%tlettre === g) {
  • if (g isincs %tflags) {
  • set %endmodes %endmodes $+ %signe $+ %tlettre
  • umodesrv %signe %tnick %tlettre
  • }
  • else {
  • sw $1 : $+ %me 522 :Permission Denied - You do not have the correct IRC Operator privileges for this umode
  • }
  • }
  • }
  • else {
  • ;Note : +raw.txt
  • sw $1 : $+ %me 522 :Permission Denied - You do not have the correct IRC Operator privileges for this umode
  • }
  • }
  • elseif (%tlettre === h) {
  • if (h isincs %tflags) {
  • set %endmodes %endmodes $+ %signe $+ %tlettre
  • umodesrv %signe %tnick %tlettre
  • }
  • else {
  • sw $1 : $+ %me 522 :Permission Denied - You do not have the correct IRC Operator privileges for this umode
  • }
  • }
  • /*Memo :
  • Faire //mode $me -o
  • Revient à faire : -oOhaANW
  • Ca n'enleve naturellement pas ceux-ci : +wgsx
  • */
  • else {
  • if ((%tlettre != $chr(45)) && (%tlettre != $chr(43))) {
  • sw $1 : $+ %me 501 %tnick : $+ %tlettre : Unknown MODE flag
  • }
  • }
  • :endwhileumode
  • inc %i
  • }
  • if (%endmodes) {
  • sw $1 : $+ %tnick MODE %tnick : $+ $reconvmodes(%endmodes)
  • sendmultiserver : $+ %tnick MODE %tnick : $+ $reconvmodes(%endmodes)
  • }
  • }
  • }
  • alias applyumodesoline {
  • set %tnick $socknick($1)
  • unset %ttumodes
  • set %tumodes %oline. [ $+ [ %ircop_ [ $+ [ %tnick ] ] ] ] [ $+ [ .flags ] ]
  • if (o isincs %tumodes) {
  • set %ttumodes %ttumodes $+ O
  • }
  • if (O isincs %tumodes) {
  • set %ttumodes %ttumodes $+ o
  • }
  • 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,)
  • umodesrv $chr(43) %tnick %ttumodes
  • sw $1 : $+ %tnick MODE %tnick : $+ $chr(43) $+ %ttumodes
  • }
  • alias gopen {
  • ;made by G-FACTION
  • var %handle $+(FILE::,$rand($calc($ticks/4*2/5),$ticks))
  • .fopen %handle $1
  • if ($fopen(%handle).err) { .fclose %handle | return 0 }
  • else { return %handle }
  • }
  • alias botmotd {
  • if ($1) {
  • if ($exists(%botmotdfile)) {
  • set %botmotdnick $socknick($1)
  • sw $1 : $+ %me NOTICE %botmotdnick :- %me Bot Message Of The Day -
  • var %file $gopen(%botmotdfile)
  • while ($fread(%file)) {
  • sw $1 : $+ %me NOTICE %botmotdnick :- $+ $ifmatch
  • }
  • .fclose %file
  • sw $1: $+ %me NOTICE %botmotdnick :End of /BOTMOTD command.
  • }
  • else {
  • sw $1 : $+ %me NOTICE %botmotdnick :BOTMOTD File not found
  • }
  • }
  • .fclose %file
  • }
  • alias umodesrv {
  • if ($2) {
  • if ($1 == $chr(43)) {
  • set %tumodes $removecs(%umodes_ [ $+ [ $2 ] ],$3)
  • set %umodes_ [ $+ [ $2 ] ] %tumodes $+ $3
  • }
  • elseif ($1 == $chr(45)) {
  • set %umodes_ [ $+ [ $2 ] ] $removecs(%umodes_ [ $+ [ $2 ] ],$3)
  • }
  • }
  • }
  • alias snomasksrv {
  • ;signe nick snomask
  • if ($2) {
  • if ($1 == $chr(43)) {
  • set %tsnomask2 $removecs(%snomask_ [ $+ [ $2 ] ],$3)
  • set %snomask_ [ $+ [ $2 ] ] %tsnomask2 $+ $3
  • }
  • elseif ($1 == $chr(45)) {
  • set %snomask_ [ $+ [ $2 ] ] $removecs(%snomask_ [ $+ [ $2 ] ],$3)
  • }
  • }
  • }
  • alias positivemodes {
  • unset %positivemodes
  • if (($left($1,1) != $chr(45)) && ($left($1,1) != $chr(43))) {
  • set %tmodes + $+ $1-
  • }
  • else { set %tmodes $1- }
  • set %tmodes - $+ %tmodes
  • if ($1) {
  • var %i 1
  • set %len $len($1-)
  • set %tokenmodes $gettok(%tmodes,0,43)
  • while ($calc(%i + 1) <= %tokenmodes) {
  • set %positivemodes %positivemodes $+ $deltok($gettok(%tmodes,$calc(%i + 1),43),2-,45)
  • inc %i
  • }
  • }
  • return %positivemodes
  • }
  • alias negativemodes {
  • unset %negativemodes
  • if (($left($1,1) != $chr(45)) && ($left($1,1) != $chr(43))) {
  • set %tmodes + $+ $1-
  • }
  • else { set %tmodes $1- }
  • set %tmodes + $+ %tmodes
  • if ($1) {
  • var %i 1
  • set %len $len($1-)
  • set %tokenmodes $gettok(%tmodes,0,45)
  • while ($calc(%i + 1) <= %tokenmodes) {
  • set %negativemodes %negativemodes $+ $deltok($gettok(%tmodes,$calc(%i + 1),45),2-,43)
  • inc %i
  • }
  • }
  • return %negativemodes
  • }
  • alias isatleast {
  • ;$isatleast(mode,nick,chan)
  • ; 1 2 3
  • ;Exemple : $isatleast(h,G-FACTION,#scripts) va retourner $true si je suis op, halfop, ou owner :p
  • if ($3) {
  • set %chanfile $chanfile($3)
  • if (!$exists(%chanfile)) {
  • goto isatleastend
  • }
  • var %file $gopen(%chanfile)
  • while ($fread(%file)) {
  • set %r $ifmatch
  • 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))) {
  • set %is $left(%r,1)
  • set %tnick $right(%r,$calc($len(%r) - 1))
  • }
  • else {
  • set %is rien
  • set %tnick %r
  • }
  • if (%tnick == $2) {
  • set %iss %is
  • }
  • }
  • .fclose %file
  • :isatleastend
  • if ($1 === o) {
  • if ((%iss == $chr(64)) || (%iss == $chr(126)) || (%iss == $chr(38))) {
  • set %isatleast yes
  • }
  • else {
  • set %isatleast no
  • }
  • }
  • elseif ($1 == h) {
  • if ((%iss == $chr(64)) || (%iss == $chr(126)) || (%iss == $chr(37)) || (%iss == $chr(38))) {
  • set %isatleast yes
  • }
  • else {
  • set %isatleast no
  • }
  • }
  • elseif ($1 == v) {
  • if ((%iss == $chr(64)) || (%iss == $chr(126)) || (%iss == $chr(37)) || (%iss == $chr(43)) || (%iss == $chr(38))) {
  • set %isatleast yes
  • }
  • else {
  • set %isatleast no
  • }
  • }
  • elseif ($1 == q) {
  • if (%iss == $chr(126)) {
  • set %isatleast yes
  • }
  • else {
  • set %isatleast no
  • }
  • }
  • elseif ($1 == a) {
  • if ((%iss == $chr(38)) |- (%iss == $chr(126))) {
  • set %isatleast yes
  • }
  • else {
  • set %isatleast no
  • }
  • }
  • if (%isatleast == yes) {
  • return $true
  • }
  • else {
  • return $false
  • }
  • }
  • }
  • alias strongerthan {
  • ;$strongerthan(a,q) = $false (a pas plus fort que q)
  • if ($2) {
  • if ($1 == q) {
  • return $true
  • }
  • elseif ($1 == a) {
  • if ($2 == q) {
  • return $false
  • }
  • else {
  • return $true
  • }
  • }
  • elseif ($1 == o) {
  • if (($2 == a) || ($2 == q)) {
  • return $false
  • }
  • else {
  • return $true
  • }
  • }
  • elseif ($1 == h) {
  • if (($2 == o) || ($2 == a) || ($2 == q)) {
  • return $false
  • }
  • else {
  • return $true
  • }
  • }
  • elseif ($1 == v) {
  • if (($2 == h) || ($2 == o) || ($2 == a) || ($2 == q)) {
  • return $false
  • }
  • else {
  • return $true
  • }
  • }
  • elseif ($1 == NULL) {
  • if ($2 == NULL) {
  • return $true
  • }
  • else {
  • return $false
  • }
  • }
  • }
  • }
  • alias nfochanfile {
  • if ($1) {
  • return $mircdir $+ System\ $+ $1 $+ .nfo
  • }
  • }
  • alias chmodestxsrv {
  • ;chmodesrv +- Chan Mode
  • if ($3) {
  • if ($1 == $chr(43)) {
  • set %m $replacecs($3,N,1,S,3,C,4,T,5)
  • writeini -n $nfochanfile($2) STXM %m on
  • }
  • elseif ($1 == $chr(45)) {
  • set %m $replacecs($3,N,1,S,3,C,4,T,5)
  • writeini -n $nfochanfile($2) STXM %m off
  • }
  • }
  • }
  • alias chmodedynsrv {
  • ;chmodedynsrv +- #chan k lepass
  • ; 1 2 3 4
  • echo -a 10chmodedynsrv $1-
  • if ($3) {
  • if ($1 == $chr(43)) {
  • set %m $replacecs($3,L,2)
  • writeini -n $nfochanfile($2) DYNM %m on
  • writeini -n $nfochanfile($2) DYNM %m $+ .arg $4
  • }
  • elseif ($1 == $chr(45)) {
  • set %m $replacecs($3,L,2)
  • writeini -n $nfochanfile($2) DYNM %m off
  • }
  • }
  • }
  • alias sendchannel {
  • ;sendchannel #chan Le message... ^^
  • if ($2) {
  • var %o 0
  • if (!$exists($chanfile($1))) {
  • goto sendchannelend
  • }
  • var %file $gopen($chanfile($1))
  • while ($fread(%file)) {
  • inc %o
  • set %r $ifmatch
  • 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))) {
  • set %tempnick $right(%r,$calc($len(%r) - 1))
  • }
  • else {
  • set %tempnick %r
  • }
  • if (($sock(%sockname_ [ $+ [ %tempnick ] ])) && (%server_ [ $+ [ %tempnick ] ] == %me)) {
  • ;echo -a 7sw %sockname_ [ $+ [ %tempnick ] ] $2-
  • sw %sockname_ [ $+ [ %tempnick ] ] $2-
  • }
  • else {
  • if (!$sock($+(gserv.,$passerelle(%server_ [ $+ [ %tempnick ] ])))) {
  • ;Ghost repéré...
  • echo @sr 3Ghost repéré, ligne %o de $chanfile($1) supprimée ( $+ $read($chanfile($1),%o) $+ )
  • write -dl $+ %o $chanfile($1)
  • }
  • }
  • }
  • .fclose %file
  • :sendchannelend
  • }
  • }
  • alias chmodestatussrv {
  • ;chmodestatussrv +- Chan Mode Personne
  • ; 1 2 3 4
  • echo @sr 13Entering chmodestatussrv function
  • echo @sr 131: $1 2: $2 3: $3 4: $4
  • if ($4) {
  • unset %laligne
  • var %i 0
  • var %file $gopen($chanfile($2))
  • while ($fread(%file)) {
  • inc %i
  • set %r $ifmatch
  • ;echo -a 2 $+ %r
  • 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))) {
  • set %tempnick $right(%r,$calc($len(%r) - 1))
  • }
  • else {
  • set %tempnick %r
  • }
  • if (%tempnick == $4) {
  • ;echo -a 4Personne repérée...
  • set %laligne %i
  • echo @sr 13Laligne: %laligne
  • echo @sr 13Personne: %tempnick
  • }
  • }
  • .fclose %file
  • if (%laligne) {
  • echo @sr 13chmodestatussrv : delete line : %laligne in $chanfile($2)
  • write -dl $+ %laligne $chanfile($2)
  • }
  • if ($1 == $chr(43)) {
  • set %tempstsm $readini($nfochanfile($2),STSM,$4)
  • set %tempstsm $removecs(%tempstsm,$3)
  • set %tempstsm %tempstsm $+ $3
  • writeini -n $nfochanfile($2) STSM $4 %tempstsm
  • echo @sr 13write $chanfile($2) $replace($strongermode(%tempstsm),v,$chr(43),h,$chr(37),o,$chr(64),q,$chr(126),a,$chr(38)) $+ $4
  • write $chanfile($2) $replace($strongermode(%tempstsm),v,$chr(43),h,$chr(37),o,$chr(64),q,$chr(126),a,$chr(38)) $+ $4
  • }
  • elseif ($1 == $chr(45)) {
  • set %tempstsm $readini($nfochanfile($2),STSM,$4)
  • set %tempstsm $removecs(%tempstsm,$3)
  • if (!%tempstsm) { set %tempstsm z }
  • writeini -n $nfochanfile($2) STSM $4 %tempstsm
  • set %tstrongermode $strongermode(%tempstsm)
  • if (%tstrongermode != NULL) {
  • echo @sr 13write $chanfile($2) $replace(%tstrongermode,v,$chr(43),h,$chr(37),o,$chr(64),q,$chr(126),a,$chr(38),z,) $+ $4
  • write $chanfile($2) $replace(%tstrongermode,v,$chr(43),h,$chr(37),o,$chr(64),q,$chr(126),a,$chr(38),z,) $+ $4
  • }
  • else {
  • echo @sr 13write $chanfile($2) $4
  • write $chanfile($2) $4
  • }
  • }
  • }
  • }
  • alias strongermode {
  • ;Alias définissant le plus fort mode de ceux proposés, sans l'ordre 'qaohv'
  • if ($1) {
  • unset %sm
  • if ((v isincs $1) && (h !isincs $1) && (o !isincs $1) && (a !isincs $1) && (q !isincs $1)) {
  • set %sm v
  • }
  • elseif ((h isincs $1) && (o !isincs $1) && (a !isincs $1) && (q !isincs $1)) {
  • set %sm h
  • }
  • elseif ((o isincs $1) && (a !isincs $1) && (q !isincs $1)) {
  • set %sm o
  • }
  • elseif ((a isincs $1) && (q !isincs $1)) {
  • set %sm a
  • }
  • elseif (q isincs $1) {
  • set %sm q
  • }
  • else {
  • set %sm NULL
  • }
  • return %sm
  • }
  • }
  • alias reconvmodes {
  • if ($1) {
  • var %i 1
  • unset %endstr
  • unset %derniersigne
  • while (%i <= $len($1)) {
  • set %rmode $mid($1,%i,1)
  • if ((%rmode == $chr(43)) || (%rmode == $chr(45))) {
  • if (%rmode != %derniersigne) {
  • set %derniersigne %rmode
  • set %endstr %endstr $+ %rmode
  • }
  • goto finwhile
  • }
  • else {
  • set %endstr %endstr $+ %rmode
  • }
  • :finwhile
  • inc %i
  • }
  • return %endstr
  • }
  • }
  • alias chbanlist {
  • ;chbanlist %chsigne %chchan $quelargument(%i,%chmodes) %chnick $ctime extension(bl par exemple)
  • ;chbanlist + #G-FACTION *lol*!*@* G-FACTION 1108716436 bl
  • ; 1 2 3 4 5 6
  • echo -a 13 $+ $1-
  • if ($6) {
  • echo -a haha
  • unset %laligne
  • set %banfile $mirc $+ System\ $+ $2 $+ $chr(46) $+ $6
  • echo -a 3 $+ %banfile
  • if (!$exists(%banfile)) {
  • echo -a mwahaa
  • goto chbanlistend
  • }
  • echo -a 4KJHBZRF
  • var %i 0
  • if (($3 == $chr(42)) || ($3 == $chr(33)) || ($3 == $chr(64))) {
  • echo -a !!!1
  • set %bmask *!*@*
  • }
  • elseif (($chr(64) !isin $3) && ($chr(33) !isin $3) && ($chr(42) !isin $3)) {
  • echo -a !!!2
  • set %bmask $3 $+ !*@*
  • echo -a %bmask :)
  • }
  • elseif (($chr(64) !isin $3) && ($chr(33) !isin $3)) {
  • echo -a !!!5
  • set %bmask $3 $+ !*@*
  • }
  • else {
  • echo -a !!!4
  • set %bmask $3
  • }
  • var %file $gopen(%banfile)
  • while ($fread(%file)) {
  • inc %i
  • ;set %r $read(%banfile,n,%i)
  • set %r $ifmatch
  • echo -a $gettok(%r,1,32) == %bmask
  • if ($gettok(%r,1,32) == %bmask) {
  • set %laligne %i
  • }
  • }
  • .fclose %file
  • :chbanlistend
  • if (%laligne) {
  • if ($1 == $chr(43)) {
  • goto chbanlistend2
  • }
  • else {
  • write -dl $+ %laligne %banfile
  • }
  • }
  • if ($1 == $chr(43)) {
  • if (%bmask != ERROR) {
  • write %banfile %bmask $4 $5
  • ;<- :G-FACTION!~G-FACTION@EpiK-5A393E5B.fbx.proxad.net MODE #g-faction +b pa!*@*
  • echo -a sendchannel $2 : $+ $fullhost(%sockname_ [ $+ [ $4 ] ]) MODE $2 $1 $+ $iif($6 == bl,b,e) %bmask
  • sendchannel $2 : $+ $fullhost(%sockname_ [ $+ [ $4 ] ]) MODE $2 $1 $+ $iif($6 == bl,b,e) %bmask
  • }
  • else {
  • if ($6 == bl) {
  • set %mot ban
  • }
  • elseif ($6 == el) {
  • set %mot exception
  • }
  • sw %sockname_ [ $+ [ $4 ] ] : $+ %me 531 $4 :Invalid %mot mask ( $+ $3 $+ )
  • halt
  • }
  • }
  • else {
  • if (%laligne) {
  • sendchannel $2 : $+ $fullhost(%sockname_ [ $+ [ $4 ] ]) MODE $2 $1 $+ $iif($6 == bl,b,e) %bmask
  • }
  • }
  • :chbanlistend2
  • }
  • else { echo -a 4!!!!!!!!!!!!!!!!!!!!!!!!!!! }
  • }
  • alias banfile {
  • if ($1) {
  • return $mircdir $+ System\ $+ $1 $+ .bl
  • }
  • }
  • alias exceptfile {
  • if ($1) {
  • return $mircdir $+ System\ $+ $1 $+ .el
  • }
  • }
  • alias zline.add {
  • ;zline.add host $ctime timetoexpire host_zlineur raison
  • ; 1 2 3 4 5
  • if ($5) {
  • write $linesfile Z $1-
  • }
  • }
  • alias zline.del {
  • if ($1) {
  • var %i 0
  • set %zfile $linesfile
  • if (!$exists(%zfile)) {
  • halt
  • }
  • unset %zline
  • unset %r
  • var %file $gopen(%zfile)
  • while ($fread(%file)) {
  • inc %i
  • set %r $ifmatch
  • if ($gettok(%r,1,32) == Z) {
  • if ($gettok(%r,2,32) == $1) {
  • write -dl $+ %i %zfile
  • break
  • }
  • }
  • inc %i
  • }
  • .fclose %file
  • }
  • }
  • alias zline.infos {
  • if ($1) {
  • set %zfile $linesfile
  • if (!$exists(%zfile)) {
  • goto zlineinfosend
  • }
  • unset %zline
  • unset %zinfos
  • var %file $gopen(%zfile)
  • while ($fread(%file)) {
  • set %r $ifmatch
  • if ($gettok(%r,1,32) == Z) {
  • if ($gettok(%r,2,32) == $1) {
  • set %zinfos $gettok(%r,3-,32)
  • }
  • }
  • }
  • .fclose %file
  • if (%zinfos) {
  • return %zinfos
  • }
  • }
  • :zlineinfosend
  • }
  • alias quelargument {
  • ;$quelargument(numero,modes)
  • ; 1 2
  • ;+oooo Nick1 Nick2 Nick3 Nick4
  • ;On veut savoir quel est l'argument du 3ème 'o' par exemple. Ici : Nick3
  • var %i 1
  • set %qlen $len($2)
  • unset %args
  • unset %quelargument
  • while (%i <= %qlen) {
  • set %qmode $mid($2,%i,1)
  • if (%qmode isincs aqhovbeklL) {
  • ;Si le mode doit comporter un argument
  • ;On incrémente la variable qui compte le nombre d'args
  • inc %args
  • }
  • if (%i == $1) {
  • set %quelargument $gettok($2,$calc(%args + 1),32)
  • }
  • inc %i
  • }
  • return %quelargument
  • }
  • alias sendbanlist {
  • ;sendbanlist sockname chan
  • ; 1 2
  • if ($2) {
  • set %blnick $socknick($1)
  • set %banfile $banfile($2)
  • if (!$exists(%banfile)) {
  • goto sendbanlistend
  • }
  • var %file $gopen(%banfile)
  • while ($fread(%file)) {
  • set %r $ifmatch
  • sw $1 : $+ %me 367 %blnick $2 $gettok(%r,1-3,32)
  • }
  • .fclose %file
  • :sendbanlistend
  • sw $1 : $+ %me 368 %blnick $2 :End of Channel Ban List
  • }
  • }
  • alias sendexceptlist {
  • ;sendbanlist sockname chan
  • ; 1 2
  • if ($2) {
  • set %exnick $socknick($1)
  • set %exceptfile $exceptfile($2)
  • if (!$exists(%exceptfile)) {
  • goto sendexceptlistend
  • }
  • set %file $gopen(%exceptfile)
  • while ($fread(%file)) {
  • set %r $ifmatch
  • sw $1 : $+ %me 348 %exnick $2 $gettok(%r,1-3,32)
  • }
  • .fclose %file
  • :sendexceptlistend
  • sw $1 : $+ %me 349 %exnick $2 :End of Channel Exception List
  • }
  • }
  • alias banalreadyexists {
  • if ($3) {
  • set %banfile $mircdir $+ System\ $+ $1 $+ . $+ $3
  • set %bae $false
  • if (!$exists(%banfile)) {
  • goto banalreadyexistsend
  • }
  • set %file $gopen(%banfile)
  • while ($fread(%file)) {
  • set %read $ifmatch
  • if ($gettok(%read,1,32) == $2) {
  • set %bae $true
  • }
  • }
  • .fclose %file
  • :banalreadyexistsend
  • return %bae
  • }
  • }
  • alias applychmodesonrequest {
  • ;applychmodesonrequest Sockname Chan Modes-
  • ;
  • ; 1 2 3-
  • if ($3) {
  • ;$sockname $+ $chr(96) $+ %me $2-
  • set %tsock $gettok($1,1,96)
  • set %samode $false
  • if ($gettok($1,2,96)) {
  • set %chnick $ifmatch
  • set %samode $true
  • }
  • else {
  • set %chnick $socknick(%tsock)
  • }
  • set %chchan $2
  • set %chmodes $3-
  • set %chmodes.pos $positivemodes($gettok(%chmodes,1,32))
  • set %chmodes.neg $negativemodes($gettok(%chmodes,1,32))
  • var %i 1
  • unset %endchmodes
  • unset %endstatusmodes
  • unset %enddynmodes
  • unset %chargs
  • set %chlen $len($3)
  • set %operoverride $false
  • if (%ircop_ [ $+ [ %chnick ] ]) {
  • set %tflags %oline. [ $+ [ %ircop_ [ $+ [ %chnick ] ] ] ] [ $+ [ .flags ] ]
  • if (v isincs %tflags) {
  • set %operoverride $true
  • }
  • }
  • while (%i <= %chlen) {
  • set %chlettre $mid(%chmodes,%i,1)
  • set %chlettre2 $replacecs($mid(%chmodes,%i,1),N,1,L,2,S,3,C,4,T,5)
  • if ((%chlettre == $chr(43)) || (%chlettre == $chr(45))) {
  • ;Alors il s'agit d'un + ou -
  • goto endofchlettrewhile
  • }
  • if (%chlettre isincs %chmodes.pos) {
  • set %chsigne $chr(43)
  • }
  • elseif (%chlettre isincs %chmodes.neg) {
  • set %chsigne $chr(45)
  • }
  • ;Regroupons par type de mode
  • if (%chlettre isincs icmnprstACMKNOQRSVT) {
  • ;Ce sont des static modes
  • ;Regroupons par ordre de privileges requis
  • if (%chsigne == $chr(43)) {
  • if ($readini($nfochanfile(%chchan),STXM,%chlettre2) == on) {
  • goto endofchlettrewhile
  • }
  • }
  • elseif (%chsigne == $chr(45)) {
  • if ($readini($nfochanfile(%chchan),STXM,%chlettre2) != on) {
  • goto endofchlettrewhile
  • }
  • }
  • if (%chlettre isincs imnt) {
  • ;Ce sont les modes où il faut au moins être halfop pour pouvoir les mettre
  • if (($isatleast(h,%chnick,%chchan)) || (%operoverride) || (%samode)) {
  • set %endchmodes %endchmodes $+ %chsigne $+ %chlettre
  • chmodestxsrv %chsigne %chchan %chlettre
  • }
  • else {
  • sw %tsock : $+ %me 482 %chnick %chchan :You're not channel operator
  • }
  • }
  • elseif (%chlettre isincs scpoCMKNQRSVT) {
  • ;Modes où il faut être au moins op
  • if (($isatleast(o,%chnick,%chchan)) || (%operoverride) || (%samode)) {
  • if (%chsigne == $chr(43)) {
  • if (%chlettre === s) {
  • if (p isincs $chmodes(%chchan)) {
  • chmodestxsrv $chr(45) %chchan p
  • set %endchmodes %endchmodes $+ $chr(45) $+ p
  • }
  • }
  • elseif (%chlettre === p) {
  • if (s isincs $chmodes(%chchan)) {
  • chmodestxsrv $chr(45) %chchan s
  • set %endchmodes %endchmodes $+ $chr(45) $+ s
  • }
  • }
  • }
  • set %endchmodes %endchmodes $+ %chsigne $+ %chlettre
  • chmodestxsrv %chsigne %chchan %chlettre
  • }
  • else {
  • sw %tsock : $+ %me 482 %chnick %chchan :You're not channel operator
  • }
  • }
  • elseif (%chlettre === O) {
  • ;Mode uniquement appliquable par les IRCops
  • if ((o isin %umodes_ [ $+ [ %chnick ] ]) || (%samode)) {
  • set %endchmodes %endchmodes $+ %chsigne $+ %chlettre
  • chmodestxsrv %chsigne %chchan %chlettre
  • }
  • else {
  • sw %tsock : $+ %me 529 %chnick %chchan :Opers Only mode (+O) can only be set by IRC Operators.
  • }
  • }
  • elseif (%chlettre === A) {
  • if ((a isin %umodes_ [ $+ [ %chnick ] ]) || (N isincs %umodes_ [ $+ [ %chnick ] ]) || (%samode)) {
  • set %endchmodes %endchmodes $+ %chsigne $+ %chlettre
  • chmodestxsrv %chsigne %chchan %chlettre
  • }
  • else {
  • sw %tsock : $+ %me 530 %chnick %chchan :Admins Only mode (+A) can only be set by Administrators.
  • }
  • }
  • }
  • elseif (%chlettre isincs vhoaq) {
  • ;Ce sont des status modes
  • if ($quelargument(%i,%chmodes)) {
  • if (%chsigne == $chr(43)) {
  • if (%chlettre isincs $readini($nfochanfile(%chchan),STSM,$quelargument(%i,%chmodes))) {
  • goto endofchlettrewhile
  • }
  • }
  • elseif (%chsigne == $chr(45)) {
  • if (%chlettre !isincs $readini($nfochanfile(%chchan),STSM,$quelargument(%i,%chmodes))) {
  • goto endofchlettrewhile
  • }
  • }
  • write haha.txt juste avant le $eval($ison,0)
  • if (($ison(%chnick,%chchan)) || (%samode)) {
  • write haha.txt juste avant le $eval($ison,0) 2
  • if (!$ison($quelargument(%i,%chmodes),%chchan)) {
  • write haha.txt dans le ison 2 !
  • ;<- :besancon3.fr.epiknet.org 401 G-FACTION mdr :No such nick/channel
  • if (!%samode) {
  • sw %tsock : $+ %me 401 %chnick $quelargument(%i,%chmodes) :No such nick/channel
  • }
  • goto hahaha
  • }
  • }
  • else {
  • ;<- :besancon3.fr.epiknet.org 482 G-FACTION #lol :You're not channel operator
  • if (!%samode) {
  • sw %tsock : $+ %me 482 %chnick %chchan :You're not channel operator
  • }
  • goto hahaha
  • }
  • else {
  • }
  • if (%chlettre === v) {
  • if (($isatleast(h,%chnick,%chchan)) || (%operoverride) || (%samode)) {
  • set %endstatusmodes %endstatusmodes $+ %chsigne $+ %chlettre
  • chmodestatussrv %chsigne %chchan %chlettre $quelargument(%i,%chmodes)
  • set %chargs %chargs $quelargument(%i,%chmodes)
  • }
  • else {
  • sw %tsock : $+ %me 482 %chnick %chchan :You're not channel operator
  • }
  • }
  • elseif (%chlettre === h) {
  • if (($isatleast(o,%chnick,%chchan)) || (%operoverride) || (%samode)) {
  • set %endstatusmodes %endstatusmodes $+ %chsigne $+ %chlettre
  • chmodestatussrv %chsigne %chchan %chlettre $quelargument(%i,%chmodes)
  • set %chargs %chargs $quelargument(%i,%chmodes)
  • }
  • else {
  • sw %tsock : $+ %me 482 %chnick %chchan :You're not channel operator
  • }
  • }
  • elseif (%chlettre === o) {
  • if (($isatleast(o,%chnick,%chchan)) || (%operoverride) || (%samode)) {
  • set %endstatusmodes %endstatusmodes $+ %chsigne $+ %chlettre
  • chmodestatussrv %chsigne %chchan %chlettre $quelargument(%i,%chmodes)
  • set %chargs %chargs $quelargument(%i,%chmodes)
  • }
  • else {
  • sw %tsock : $+ %me 482 %chnick %chchan :You're not channel operator
  • }
  • }
  • elseif ((%chlettre === a) || (%chlettre === q)) {
  • if (($isatleast(q,%chnick,%chchan)) || (%operoverride) || (%samode)) {
  • set %endstatusmodes %endstatusmodes $+ %chsigne $+ %chlettre
  • chmodestatussrv %chsigne %chchan %chlettre $quelargument(%i,%chmodes)
  • set %chargs %chargs $quelargument(%i,%chmodes)
  • }
  • else {
  • sw %tsock : $+ %me 482 %chnick %chchan :You're not channel operator
  • }
  • }
  • :hahaha
  • }
  • }
  • elseif (%chlettre isincs beklL) {
  • ;Alors ce sont des dynamic modes
  • if (%chlettre === e) {
  • set %format el
  • }
  • elseif (%chlettre === b) {
  • set %format bl
  • }
  • if (%chlettre !isincs eb) {
  • if (%chsigne == $chr(43)) {
  • if ($readini($nfochanfile(%chchan),DYNM,%chlettre2) == on) {
  • if ($readini($nfochanfile(%chchan),DYNM,%chlettre2 $+ .arg) == $quelargument(%i,%chmodes)) {
  • goto endofchlettrewhile
  • }
  • }
  • }
  • elseif (%chsigne == $chr(45)) {
  • if ($readini($nfochanfile(%chchan),DYNM,%chlettre2) != on) {
  • goto endofchlettrewhile
  • }
  • }
  • }
  • if ((%chlettre === b) || (%chlettre === e)) {
  • ;Le fichier de banlist d'un canal est #canal.bl
  • ;Le format dans le fichier : Mask Banner ctime
  • if (!$len($quelargument(%i,%chmodes))) {
  • if (%chlettre === b) {
  • sendbanlist %tsock %chchan
  • goto endofchlettrewhile
  • }
  • elseif (%chlettre === e) {
  • sendexceptlist %tsock %chchan
  • goto endofchlettrewhile
  • }
  • }
  • if (($isatleast(h,%chnick,%chchan)) || (%operoverride) || (%samode)) {
  • if ($len($quelargument(%i,%chmodes))) {
  • ;set %enddynmodes %enddynmodes $+ %chsigne $+ %chlettre
  • chbanlist %chsigne %chchan $quelargument(%i,%chmodes) %chnick $ctime %format
  • ;set %chargs %chargs $quelargument(%i,%chmodes)
  • }
  • }
  • else {
  • sw %tsock : $+ %me 482 %chnick %chchan :You're not channel operator
  • }
  • }
  • elseif ((%chlettre === k) || (%chlettre === l) || (%chlettre === L)) {
  • if (%chsigne == $chr(43)) {
  • if (!$quelargument(%i,%chmodes)) {
  • goto endofchlettrewhile
  • }
  • }
  • if (%chsigne == $chr(43)) {
  • if (%chlettre === L) {
  • if (l isincs $chmodes(%chchan)) {
  • ;974 G-FACTION L :+l must be set
  • if (!$correctchanname($quelargument(%i,%chmodes))) {
  • ;403 G-FACTION l :No such channel
  • sw $1 : $+ %me 403 %chnick $quelargument(%i,%chmodes) :No such channel
  • goto endofchlettrewhile
  • }
  • }
  • else {
  • sw $1 : $+ %me 974 %chnick L :+l must be set
  • goto endofchlettrewhile
  • }
  • }
  • }
  • if (%chlettre === k) {
  • if (($isatleast(h,%chnick,%chchan)) || (%operoverride) || (%samode)) {
  • set %enddynmodes %enddynmodes $+ %chsigne $+ %chlettre
  • chmodedynsrv %chsigne %chchan %chlettre $quelargument(%i,%chmodes)
  • set %chargs %chargs $quelargument(%i,%chmodes)
  • }
  • else {
  • sw %tsock : $+ %me 482 %chnick %chchan :You're not channel operator
  • }
  • }
  • elseif (%chlettre === l) {
  • if (($isatleast(o,%chnick,%chchan)) || (%operoverride) || (%samode)) {
  • set %enddynmodes %enddynmodes $+ %chsigne $+ %chlettre
  • chmodedynsrv %chsigne %chchan %chlettre $quelargument(%i,%chmodes)
  • set %chargs %chargs $quelargument(%i,%chmodes)
  • }
  • else {
  • sw %tsock : $+ %me 482 %chnick %chchan :You're not channel operator
  • }
  • }
  • elseif (%chlettre === L) {
  • if (($isatleast(q,%chnick,%chchan)) || (%operoverride) || (%samode)) {
  • set %enddynmodes %enddynmodes $+ %chsigne $+ %chlettre
  • chmodedynsrv %chsigne %chchan %chlettre $quelargument(%i,%chmodes)
  • set %chargs %chargs $quelargument(%i,%chmodes)
  • }
  • else {
  • sw %tsock : $+ %me 482 %chnick %chchan :You're not channel operator
  • }
  • }
  • }
  • }
  • else {
  • ;<- :besancon.fr.epiknet.org 472 G-FACTION ^ :is unknown mode char to me
  • sw %tsock : $+ %me 472 %chnick %chlettre :is unknown mode char to me
  • }
  • :endofchlettrewhile
  • inc %i
  • }
  • if (%endchmodes) {
  • ;<- :irc.G-SERVER.net MODE #G-FACTION +i
  • if (!%samode) {
  • sendchannel %chchan : $+ $fullhost(%sockname_ [ $+ [ %chnick ] ]) MODE %chchan $reconvmodes(%endchmodes)
  • sendmultiserver : $+ %chnick MODE %chchan $reconvmodes(%endchmodes)
  • }
  • else {
  • sendchannel %chchan : $+ %me MODE %chchan $reconvmodes(%endchmodes)
  • sendmultiserver : $+ %me MODE %chchan $reconvmodes(%endchmodes)
  • }
  • }
  • if (%endstatusmodes) {
  • if (!%samode) {
  • sendchannel %chchan : $+ $fullhost(%sockname_ [ $+ [ %chnick ] ]) MODE %chchan $reconvmodes(%endstatusmodes) %chargs
  • sendmultiserver : $+ %chnick MODE %chchan $reconvmodes(%endstatusmodes) %chargs
  • }
  • else {
  • sendchannel %chchan : $+ %me MODE %chchan $reconvmodes(%endstatusmodes) %chargs
  • sendmultiserver : $+ %me MODE %chchan $reconvmodes(%endstatusmodes) %chargs
  • }
  • }
  • if (%enddynmodes) {
  • if (!%samode) {
  • echo -a fonction modes
  • echo -a sendchannel %chchan : $+ $fullhost(%sockname_ [ $+ [ %chnick ] ]) MODE %chchan $reconvmodes(%enddynmodes) %chargs
  • sendchannel %chchan : $+ $fullhost(%sockname_ [ $+ [ %chnick ] ]) MODE %chchan $reconvmodes(%enddynmodes) %chargs
  • sendmultiserver : $+ %chnick MODE %chchan $reconvmodes(%enddynmodes) %chargs
  • }
  • else {
  • sendchannel %chchan : $+ %me MODE %chchan $reconvmodes(%enddynmodes) %chargs
  • sendmultiserver : $+ %me MODE %chchan $reconvmodes(%enddynmodes) %chargs
  • }
  • }
  • }
  • }
  • alias verifyshunlines {
  • if ($1) {
  • var %lol $gettok($vraiefullhost($1),2,33)
  • set %vffile $linesfile
  • if (!$exists(%vffile)) {
  • goto tend
  • }
  • var %file $gopen(%vffile)
  • while ($fread(%file)) {
  • set %r $ifmatch
  • if ($gettok(%r,1,32) == s) {
  • if ($gettok(%r,2,32) iswm %lol) {
  • return $true
  • }
  • }
  • }
  • .fclose %file
  • :tend
  • return $false
  • }
  • }
  • on *:sockread:gircd*: {
  • sockread %sr
  • echo @sr $sockname : %nick_of_sockname_ [ $+ [ $sockname ] ] :4 %sr
  • tokenize 32 %sr
  • if ($isreginserver($sockname)) {
  • ;Les commandes diverses lorsqu'on a déjà passé la phase auth.
  • if (($verifyshunlines($sockname)) || ($shunned($socknick($sockname)))) {
  • if ($1 == PONG) {
  • if ($2) {
  • set %tpong $remove($2,$chr(58))
  • if (%tpong == %ping_ [ $+ [ $sockname ] ]) {
  • set %pongdonne_ [ $+ [ $sockname ] ] $true
  • }
  • }
  • else {
  • ;<- :besancon.fr.epiknet.org 409 G-FACTION :No origin specified
  • sw $sockname : $+ %me 409 $socknick($sockname) :No origin specified
  • }
  • }
  • elseif ($1 == ADMIN) {
  • goto admin
  • }
  • goto toutefin
  • }
  • if ($1 == VERSION) {
  • version $sockname
  • }
  • elseif ($1 == LUSERS) {
  • lusers $sockname
  • }
  • elseif ($1 == MOTD) {
  • motd $sockname
  • }
  • elseif ($1 == G) {
  • if ($1 === G) {
  • sw $sockname : $+ %me 999 $socknick($sockname) :<G-FACTION> bouh :þ ! Y te plait mon ircd ? :]
  • }
  • else {
  • sw $sockname : $+ %me 371 $socknick($sockname) :Nan, pas /g, /G !!
  • }
  • }
  • elseif ($1 == BOTMOTD) {
  • botmotd $sockname
  • }
  • elseif ($1 == MODE) {
  • unset %destnick
  • set %tnick $socknick($sockname)
  • /*
  • MODE Nick +modes (+snomasks)
  • MODE #channel +modes
  • MODE #channel +modes Nick
  • 1 2 3 4
  • Ne pas se baser sur le nombre de tokens pour savoir de quel type de MODE il s'agit
  • Il peut en y avoir plus genre avec "+lLk 1 #chan lemotdepasse"
  • */
  • if ($left($2,1) != $chr(35)) {
  • /* On vérifie qu'il ne s'agit pas d'un channel, donc d'un usermode
  • $chr(35) = #
  • */
  • ;Nick auquel on va appliquer le mode (en théorie le même nick que celui qui envoit la commande)
  • set %destnick $2
  • ;Si le nick ne s'applique pas le mode à lui même
  • if (%destnick) {
  • if ($3) {
  • if (%tnick != %destnick) {
  • sw $sockname : $+ %me 502 $socknick($sockname) :Can't change mode for other users
  • }
  • else {
  • applymodesonrequest $sockname $3-
  • }
  • }
  • else {
  • sw $sockname : $+ %me 461 $socknick($sockname) MODE :Not enough parameters
  • }
  • }
  • else {
  • sw $sockname : $+ %me 461 $socknick($sockname) MODE :Not enough parameters
  • }
  • }
  • else {
  • if ($3) {
  • ;Ce sont des chmodes
  • ;applymodesonrequest sockname chan modes
  • applychmodesonrequest $sockname $2 $3-
  • }
  • else {
  • ;:besancon.fr.epiknet.org 324 G-FACTION #legoodies +ntr
  • ;:besancon.fr.epiknet.org 329 G-FACTION #legoodies 1085037574
  • sw $sockname : $+ %me 324 $socknick($sockname) $2 + $+ $chmodes($2)
  • sw $sockname : $+ %me 329 $socknick($sockname) $2 $creationtime($2)
  • }
  • }
  • }
  • elseif ($1 == OPER) {
  • if ($3) {
  • if ($operexists($2)) {
  • if ($goodoperhost($2,$fullhost($sockname))) {
  • if ($goodoperpass($2,$3)) {
  • set %ircop_ [ $+ [ $socknick($sockname) ] ] $2
  • addircoplist $socknick($sockname)
  • globops $socknick($sockname) $chr(91) $+ $2 $+ $chr(93) is now an IRCop
  • sw $sockname : $+ $$socknick($sockname) MODE $socknick($sockname) : $+ $chr(43) $+ %opermodes
  • umodesrv $chr(43) $socknick($sockname) %opermodes
  • ;+cjkqvFG
  • snomasksrv $chr(43) $socknick($sockname) %opersnomask
  • sw $sockname : $+ %me 008 $socknick($sockname) :Server notice mask ( $+ %snomask_ [ $+ [ $socknick($sockname) ] ] $+ )
  • sw $sockname : $+ %me 381 $socknick($sockname) :You are now an IRC Operator
  • applyumodesoline $sockname
  • }
  • else {
  • sw $sockname : $+ %me 464 $socknick($sockname) :Password incorrect
  • globops Failed OPER attempt by $socknick($sockname) ( $+ $fullhost($sockname) $+ ) using UID $2 [FAILEDAUTH]
  • }
  • }
  • else {
  • sw $sockname : $+ %me 491 $socknick($sockname) :No O-lines for your host
  • globops Failed OPER attempt by $socknick($sockname) ( $+ $fullhost($sockname) $+ ) [unknown oper]
  • }
  • }
  • else {
  • sw $sockname : $+ %me 491 $socknick($sockname) :No O-lines for your host
  • globops Failed OPER attempt by $socknick($sockname) ( $+ $fullhost($sockname) $+ ) [unknown oper]
  • }
  • }
  • else {
  • sw $sockname : $+ %me 461 $socknick($sockname) OPER :Not enough parameters
  • }
  • }
  • elseif ($1 == WHOIS) {
  • set %wtnick $socknick($sockname)
  • unset %haha
  • unset %tttt
  • if ($chr(44) !isin $2) {
  • if ($3) {
  • if (%server_ [ $+ [ $remove($3,$chr(58)) ] ] == %me) {
  • set %tttt $remove($3,$chr(58))
  • }
  • else {
  • set %haha $true
  • sw $+(gserv.,$passerelle(%server_ [ $+ [ $remove($3,$chr(58)) ] ])) : $+ %wtnick WHOIS $remove($3,$chr(58)) : $+ $remove($3,$chr(58))
  • }
  • }
  • else {
  • set %tttt $2
  • }
  • }
  • if ($2) {
  • set %nicks %tttt
  • set %nbdnicks $gettok(%nicks,0,44)
  • var %i 1
  • while (%i <= %nbdnicks) {
  • set %wnick $gettok(%nicks,%i,44)
  • if ($isco(%wnick)) {
  • sw $sockname : $+ %me 311 %tnick %wnick %identd_ [ $+ [ %wnick ] ] %host_ [ $+ [ %sockname_ [ $+ [ %wnick ] ] ] ] * : $+ %realname_ [ $+ [ %wnick ] ]
  • if ($whoischanlist(%wnick,%wtnick)) {
  • ;<- :la-defense.fr.epiknet.org 319 G-FACTION Fonix :#antiboulet #legoodies @#g-faction
  • sw $sockname : $+ %me 319 %wtnick %wnick : $+ $ifmatch
  • }
  • if ((%wnick == %wtnick) || (%ircop_ [ $+ [ %wtnick ] ])) {
  • sw $sockname : $+ %me 379 %wtnick %wnick :is using modes $chr(43) $+ %umodes_ [ $+ [ %wnick ] ] $iif(%snomask_ [ $+ [ %wnick ] ],$+($chr(43),$ifmatch),)
  • sw $sockname : $+ %me 378 %wtnick %wnick :is connecting from *@ $+ $iif($sock(%sockname_ [ $+ [ %wnick ] ]).ip,$ifmatch,%vraiehost_ [ $+ [ %sockname_ [ $+ [ %wnick ] ] ] ]) $iif($sock(%sockname_ [ $+ [ %wnick ] ]).ip,$ifmatch,)
  • }
  • if ((%wnick == %wtnick) || (%ircop_ [ $+ [ %wtnick ] ])) {
  • if ($sock(%sockname_ [ $+ [ %wnick ] ]).rcvd) {
  • sw $sockname : $+ %me 532 %wtnick %wnick :sent $sock(%sockname_ [ $+ [ %wnick ] ]).rcvd bytes
  • sw $sockname : $+ %me 533 %wtnick %wnick :received $sock(%sockname_ [ $+ [ %wnick ] ]).sent bytes
  • }
  • }
  • if (r isincs %umodes_ [ $+ [ %wnick ] ]) {
  • sw $sockname : $+ %me 307 %wtnick %wnick :is a registered nick
  • }
  • sw $sockname : $+ %me 312 %wtnick %wnick %server_ [ $+ [ %wnick ] ] : $+ $serv_sdesc(%server_ [ $+ [ %wnick ] ])
  • if ($isaway(%wnick)) {
  • sw $sockname : $+ %me 301 %wtnick %wnick : $+ %away_ [ $+ [ %sockname_ [ $+ [ %wnick ] ] ] ]
  • }
  • if ((%ircop_ [ $+ [ %wnick ] ]) || (o isin %umodes_ [ $+ [ %wnick ] ])) {
  • if ((o isin %umodes_ [ $+ [ %wnick ] ])) {
  • sw $sockname : $+ %me 313 %wtnick %wnick :is an IRC operator
  • }
  • if (h isincs %umodes_ [ $+ [ %wnick ] ]) {
  • sw $sockname : $+ %me 310 %wtnick %wnick :is available for help
  • }
  • if (%oline. [ $+ [ %ircop_ [ $+ [ %wnick ] ] $+ .swhois ] ]) {
  • echo -a 9:)
  • sw $sockname : $+ %me 320 %wtnick %wnick : $+ $ifmatch
  • }
  • else {
  • if (%swhois_ [ $+ [ %sockname_ [ $+ [ %wnick ] ] ] ]) {
  • sw $sockname : $+ %me 320 %wtnick %wnick : $+ $ifmatch
  • }
  • }
  • }
  • }
  • else {
  • ;<- :besancon.fr.epiknet.org 401 G-FACTION bidule :No such nick/channel
  • sw $sockname : $+ %me 401 %wtnick %wnick :No such nick
  • }
  • if (W isincs %umodes_ [ $+ [ %wnick ] ]) {
  • if (%wtnick != %wnick) {
  • if ($sock(%sockname_ [ $+ [ %wnick ] ])) {
  • ;*** lol (G-FACTION@127.0.0.2) did a /whois on you.
  • sw %sockname_ [ $+ [ %wnick ] ] : $+ %me NOTICE %wnick :*** %wtnick ( $+ $gettok($vraiefullhost($sockname),2,33) $+ ) did a /whois on you.
  • }
  • else {
  • ;Cet user est situé sur un autre serveur
  • sw $+(gserv.,$passerelle(%server_ [ $+ [ %wnick ] ])) : $+ %me NOTICE %wnick :*** %wtnick ( $+ $gettok($vraiefullhost($sockname),2,33) $+ ) did a /whois on you.
  • }
  • }
  • }
  • inc %i
  • }
  • }
  • else {
  • sw $sockname : $+ %me 431 %wtnick :No nickname given
  • }
  • if (!%haha) {
  • sw $sockname : $+ %me 318 %wtnick %wnick :End of /WHOIS list.
  • }
  • }
  • elseif ($1 == PRIVMSG) {
  • if (!$3) {
  • ;<- :besancon.fr.epiknet.org 411 G-FACTION :No recipient given (NOTICE)
  • sw $sockname : $+ %me 411 $socknick($sockname) :No recipient given (PRIVMSG)
  • halt
  • }
  • set %dest $2
  • set %tmess $right($3-,$calc($len($3-) - 1))
  • if ($left(%dest,1) == $chr(35)) {
  • ;Si le message est adressé à un chan...
  • if ($left(%tmess,1) == $chr(1)) {
  • ;Il envoit un ctcp au chan
  • if (C isincs $chmodes(%dest)) {
  • ;404 G-FACTION[GTASA] #G-FACTION :CTCPs are not permitted in this channel (#G-FACTION)
  • sw $sockname : $+ %me 404 $socknick($sockname) %dest :CTCPs are not permitted in this channel ( $+ %dest $+ )
  • halt
  • }
  • }
  • privmsg %dest $socknick($sockname) %tmess
  • }
  • else {
  • ;Si le message est adressé à un pseudo...
  • if ($isco(%dest)) {
  • set %tpvnick $socknick($sockname)
  • set %dest_umodes %umodes_ [ $+ [ %dest ] ]
  • set %nick_umodes %umodes_ [ $+ [ %tpvnick ] ]
  • if (R isincs %umodes_ [ $+ [ %dest ] ]) {
  • if (r !isincs %nick_umodes) {
  • ;<- :besancon.fr.epiknet.org 486 testR :You must identify to a registered nick to private message G-FACTION
  • sw $sockname : $+ %me 486 %tpvnick :You must identify to a registered nick to private message %dest
  • halt
  • }
  • }
  • if ($sock(%sockname_ [ $+ [ %dest ] ])) {
  • sw %sockname_ [ $+ [ %dest ] ] : $+ %tpvnick PRIVMSG %dest : $+ %tmess
  • }
  • else {
  • if ($sock($+(gserv.,%server_ [ $+ [ %dest ] ]))) {
  • sw $+(gserv.,%server_ [ $+ [ %dest ] ]) : $+ %tpvnick PRIVMSG %dest : $+ %tmess
  • }
  • else {
  • set %tsock $+(gserv.,$passerelle(%server_ [ $+ [ %dest ] ]))
  • if ($sock(%tsock)) {
  • sw %tsock : $+ %tpvnick PRIVMSG %dest : $+ %tmess
  • }
  • }
  • }
  • if ($isaway(%dest)) {
  • sw $sockname : $+ %me 301 %tpvnick %dest : $+ %away_ [ $+ [ %sockname_ [ $+ [ %dest ] ] ] ]
  • }
  • }
  • else {
  • sw $sockname : $+ %me 401 $socknick($sockname) %dest :No such nick/channel
  • }
  • }
  • }
  • elseif ($1 == AWAY) {
  • if ($2) {
  • if ($right($2-,$calc($len($2-) - 1)) != %away_ [ $+ [ $sockname ] ]) {
  • set %away_ [ $+ [ $sockname ] ] $left($right($2-,$calc($len($2-) - 1)),%awaylen)
  • sw $sockname : $+ %me 306 $socknick($sockname) :You have been marked as being away
  • }
  • }
  • else {
  • if (%away_ [ $+ [ $sockname ] ]) {
  • unset %away_ [ $+ [ $sockname ] ]
  • sw $sockname : $+ %me 305 $socknick($sockname) :You are no longer marked as being away
  • }
  • }
  • }
  • elseif ($1 == NOTICE) {
  • set %nnick $socknick($sockname)
  • set %ndest $2
  • if (!$3) {
  • sw $sockname : $+ %me 411 $socknick($sockname) :No recipient given (NOTICE)
  • halt
  • }
  • if ($chr(35) !isin %ndest) {
  • ;Il s'agit d'un envoi à un user
  • set %nmess $right($3-,$calc($len($3-) - 1))
  • set %ndest_umodes %umodes_ [ $+ [ %ndest ] ]
  • set %nnick_umodes %umodes_ [ $+ [ %nnick ] ]
  • if (V isincs %ndest_umodes) {
  • set %ncmd PRIVMSG
  • }
  • else {
  • set %ncmd NOTICE
  • }
  • if ($isco(%ndest)) {
  • sw %sockname_ [ $+ [ %ndest ] ] : $+ $fullhost($sockname) %ncmd %ndest : $+ %nmess
  • }
  • else {
  • sw $sockname : $+ %me 401 %nnick %ndest :No such nick/channel
  • }
  • }
  • else {
  • ;Il s'agit d'un envoi à un canal
  • set %nmess $right($3-,$calc($len($3-) - 1))
  • set %nd %ndest
  • set %nchans $gettok(%nd,0,44)
  • var %o 1
  • while (%o <= %nchans) {
  • set %ndest $gettok(%nd,%o,44)
  • if ($gettok(%ndest,0,35) > 1) {
  • ;Des modes ont été spécifiés
  • set %nmodes $gettok(%ndest,1,35)
  • set %nchan $chr(35) $+ $gettok(%ndest,2-,35)
  • }
  • else {
  • set %nmodes $false
  • set %nchan %ndest
  • }
  • if (T !isincs $chmodes(%nchan)) {
  • if ($remove(%nmodes,$chr(38),$chr(126))) {
  • var %i 1
  • set %nlen $len(%nmodes)
  • while (%i <= %nlen) {
  • set %nmode $mid(%nmodes,%i,1)
  • set %ncf $chanfile(%nchan)
  • if (!$exists(%ncf)) {
  • goto noticeend
  • }
  • var %file $gopen(%ncf)
  • while ($fread(%file)) {
  • set %r $ifmatch
  • 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))) {
  • 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))) {
  • set %n $right(%r,$calc($len(%r) - 1))
  • if ($sock(%sockname_ [ $+ [ %n ] ])) {
  • sw %sockname_ [ $+ [ %n ] ] : $+ $fullhost($sockname) NOTICE %nmodes $+ %nchan : $+ %nmess
  • }
  • else {
  • if (%server_ [ $+ [ %n ] ] != %me) {
  • sendmultiserver : $+ %nnick NOTICE %nmodes $+ %nchan : $+ %nmess
  • }
  • }
  • }
  • }
  • }
  • .fclose %file
  • :noticeend
  • inc %i
  • }
  • }
  • else {
  • sendchannel %nchan : $+ $fullhost($sockname) NOTICE %nchan : $+ %nmess
  • sendmultiserver : $+ %nnick NOTICE %nchan : $+ %nmess
  • }
  • }
  • else {
  • ;404 G-FACTION[GTASA] #G-FACTION :NOTICEs are not permitted in this channel (#G-FACTION)
  • sw $sockname : $+ %me 404 %nnick %nchan :NOTICEs are not permitted in this channel ( $+ %nchan $+ )
  • }
  • inc %o
  • }
  • }
  • }
  • elseif ($1 == JOIN) {
  • /*
  • Yeahhhh begining /join command ! ^^
  • Il faudra s'occuper des chanmodes i,L,k,s(whois),b
  • Prendre en compte le MAXCHANNELS
  • On va créer une base de données pour les canaux. #chan.nfo
  • Dedans, seront stockées les données des modes statics. (ceux qui sont pas +voqa etc...)
  • Puis on fera une banlist, protectlist, et exceptlist par canal (pas invites list car ça sert à rien).
  • Bien entendu, si l'user joint un canal vide, il doit se retrouver en +o
  • Et puis si l'option "apply +nt modes on channel creation" est activée, on l'fait :)
  • */
  • if ($2) {
  • ;maxchannels
  • set %tmpchans $whoischanlist($socknick($sockname))
  • set %nbdchans $gettok(%tmpchans,0,32)
  • if (!%nbdchans) { set %nbdchans 0 }
  • if (%nbdchans < %maxchannels) {
  • join $sockname $1-
  • }
  • else {
  • ;<- :besancon3.fr.epiknet.org 405 G-FACTION #test33 :You have joined too many channels
  • sw $sockname : $+ %me 405 $socknick($sockname) $2 :You have joined too many channels
  • }
  • }
  • else {
  • sw $sockname : $+ %me 461 $socknick($sockname) $1 :Not enough parameters
  • }
  • }
  • elseif ($1 == NAMES) {
  • if ($2) {
  • sendnicklist $2 $socknick($sockname)
  • }
  • else {
  • sw $sockname : $+ %me 366 $socknick($sockname) * :End of /NAMES list.
  • }
  • }
  • elseif ($1 == PONG) {
  • :ping
  • if ($2) {
  • set %tpong $remove($2,$chr(58))
  • if (%tpong == %ping_ [ $+ [ $sockname ] ]) {
  • set %pongdonne_ [ $+ [ $sockname ] ] $true
  • }
  • }
  • else {
  • ;<- :besancon.fr.epiknet.org 409 G-FACTION :No origin specified
  • sw $sockname : $+ %me 409 $socknick($sockname) :No origin specified
  • }
  • }
  • elseif ($1 == PART) {
  • if ($2) {
  • set %chans $2
  • set %nbdchans $gettok(%chans,0,44)
  • var %i 1
  • while (%i <= %nbdchans) {
  • part $sockname PART $gettok(%chans,%i,44) $3-
  • inc %i
  • }
  • }
  • else {
  • sw $sockname : $+ %me 461 $socknick($sockname) $1 :Not enough parameters
  • }
  • }
  • elseif ($1 == INVITE) {
  • ;INVITE Nick #chan
  • ; 1 2 3
  • if ($3) {
  • set %tnick $socknick($sockname)
  • set %inick $2
  • set %ichan $3
  • unset %operoverride
  • if (%ircop_ [ $+ [ %tnick ] ]) {
  • set %tflags %oline. [ $+ [ %ircop_ [ $+ [ %chnick ] ] ] ] [ $+ [ .flags ] ]
  • if (v isincs %tflags) {
  • set %operoverride $true
  • }
  • }
  • set %tchmodes $replacecs($chmodes(%ichan),1,N,2,L,3,S,4,C,5,T)
  • if ($isco(%inick)) {
  • if (($ison(%tnick,%ichan)) || (%operoverride)) {
  • if (!$ison(%inick,%ichan)) {
  • if ((V !isincs %tchmodes) || (%operoverride)) {
  • sw %sockname_ [ $+ [ %inick ] ] : $+ $fullhost($sockname) INVITE %inick : $+ %ichan
  • set %invited_ [ $+ [ %tchan ] ] [ $+ [ _ $+ [ %chnick ] ] ] $true
  • noticechannel %ichan @ %me %tnick invited %inick into the channel.
  • }
  • else {
  • sw $sockname : $+ %me 518 %tnick :Cannot invite (+V) at channel %ichan
  • }
  • }
  • else {
  • sw $sockname : $+ %me 443 %tnick %inick %ichan :is already on channel
  • }
  • }
  • else {
  • sw $sockname : $+ %me 442 %tnick %ichan :You're not on that channel
  • }
  • }
  • else {
  • sw $sockname : $+ %me 401 %tnick %inick :No such nick/channel
  • }
  • }
  • else {
  • sw $sockname : $+ %me 461 %tnick $1 :Not enough parameters
  • }
  • }
  • elseif ($1 == KNOCK) {
  • set %knocknick $socknick($sockname)
  • set %knockchan $2
  • if (!$3) {
  • set %knockreason no reason specified
  • }
  • else {
  • set %knockreason $3-
  • }
  • if ($2) {
  • if (!$ison(%knocknick,%knockchan)) {
  • set %knockchmodes $replacecs($chmodes(%knockchan),1,N,2,L,3,S,4,C,5,T)
  • if (i isincs %knockchmodes) {
  • if (K !isincs %knockchmodes) {
  • sw $sockname : $+ %me NOTICE %knocknick :Knocked on %knockchan
  • noticechannel %knockchan @ %me [Knock] by $fullhost($sockname) ( $+ %knockreason $+ )
  • }
  • else {
  • sw $sockname : $+ %me 480 %knocknick :Cannot knock on %knockchan (No knocks are allowed! (+K))
  • }
  • }
  • else {
  • sw $sockname : $+ %me 480 %knocknick :Cannot knock on %knockchan (Channel is not invite only!)
  • }
  • }
  • else {
  • sw $sockname : $+ %me 480 %knocknick :Cannot knock on %knockchan (You're already there!)
  • }
  • }
  • else {
  • sw $sockname : $+ %me 461 %knocknick $1 :Not enough parameters
  • }
  • }
  • elseif ($1 == KICK) {
  • if ($3) {
  • kick $2 $socknick($sockname) $3 $right($4-,$calc($len($4-) -1))
  • }
  • else {
  • sw $sockname : $+ %me 461 $socknick($sockname) $1 :Not enough parameters
  • }
  • }
  • elseif ($1 == WHO) {
  • unset %wdest
  • set %wnick $socknick($sockname)
  • if ($2) {
  • if ($left($2,1) == $chr(43)) {
  • ;Il entre un flag
  • set %wflag $mid($2,2,1)
  • if (%wflag === c) {
  • set %wdest $3
  • goto channel
  • }
  • elseif (%wflag === a) {
  • ;who +a, donne la liste des tous les users away du serveur
  • if ($3) {
  • ;La présence d'un nick après le flag annule le flag et fait comme si c'était un /who nick
  • set %wdest $3
  • goto nick
  • }
  • var %file $gopen($userslistfile)
  • while ($fread(%file)) {
  • set %r $ifmatch
  • if ($isaway(%r)) {
  • if (i !isincs %umodes_ [ $+ [ %r ] ]) {
  • sw $sockname : $+ %me 352 %wnick $gettok(%chans_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ],1,32) %identd_ [ $+ [ %r ] ] %host_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ] %server_ [ $+ [ %r ] ] %r $whoattr(%r) :0 %realname_ [ $+ [ %r ] ]
  • }
  • }
  • }
  • .fclose %file
  • }
  • elseif (%wflag === g) {
  • ;who +g <string> donne la liste de tous les users ayant <string> comme RealName
  • if ($3) {
  • ;Procédure normale.
  • set %wdest $3
  • if ($chr(42) isin %wdest) {
  • ;Alors l'user utilise les wildcards, ce qui est réservé aux IRCops.
  • if (%ircop_ [ $+ [ %wnick ] ]) {
  • var %file $gopen($userslistfile)
  • while ($fread(%file)) {
  • set %r $ifmatch
  • var %wrealname %realname_ [ $+ [ %r ] ]
  • if (%wdest iswm %wrealname) {
  • sw $sockname : $+ %me 352 %wnick $gettok(%chans_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ],1,32) %identd_ [ $+ [ %r ] ] %host_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ] %server_ [ $+ [ %r ] ] %r $whoattr(%r) :0 %realname_ [ $+ [ %r ] ]
  • }
  • }
  • .fclose %file
  • }
  • }
  • else {
  • ;Il a entré un string normal, pas un wildcard, donc pas de restriction
  • ;Recherche en tokens
  • var %file $gopen($userslistfile)
  • while ($fread(%file)) {
  • set %r $ifmatch
  • set %wrealname %realname_ [ $+ [ %r ] ]
  • if ($istok(%wrealname,%wdest,32)) {
  • sw $sockname : $+ %me 352 %wnick $gettok(%chans_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ],1,32) %identd_ [ $+ [ %r ] ] %host_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ] %server_ [ $+ [ %r ] ] %r $whoattr(%r) :0 %realname_ [ $+ [ %r ] ]
  • }
  • }
  • .fclose %file
  • }
  • }
  • else {
  • ghelp who $sockname
  • }
  • }
  • elseif (%wflag === h) {
  • ;who +h <host>, <host> en wildcard
  • if ($3) {
  • set %wdest $3
  • var %file $gopen($userslistfile)
  • while ($fread(%file)) {
  • set %r $ifmatch
  • set %whost %host_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ]
  • if (%wdest iswm %whost) {
  • sw $sockname : $+ %me 352 %wnick $gettok(%chans_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ],1,32) %identd_ [ $+ [ %r ] ] %host_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ] %server_ [ $+ [ %r ] ] %r $whoattr(%r) :0 %realname_ [ $+ [ %r ] ]
  • }
  • }
  • .fclose %file
  • }
  • else {
  • ghelp who $sockname
  • }
  • }
  • elseif (%wflag === m) {
  • ;who +m <mode>, a,A,o seulement, pour les non-ircop.
  • if ($3) {
  • set %wmode $left($3,1)
  • ;Le $left sert à éviter que certaines peronnes entrant plusieurs modes puissent feinter (faille)
  • if (%wmode isincs oOaANCghRDWnGkKbiBtzZvHWr) {
  • if (%wmode !isincs aAo) {
  • if (!%ircop_ [ $+ [ %wnick ] ]) {
  • goto wend
  • }
  • }
  • var %file $gopen($userslistfile)
  • while ($fread(%file)) {
  • set %r $ifmatch
  • set %wmodes %umodes_ [ $+ [ %r ] ]
  • if (%wmode isincs %wmodes) {
  • sw $sockname : $+ %me 352 %wnick $gettok(%chans_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ],1,32) %identd_ [ $+ [ %r ] ] %host_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ] %server_ [ $+ [ %r ] ] %r $whoattr(%r) :0 %realname_ [ $+ [ %r ] ]
  • }
  • }
  • .fclose %file
  • }
  • }
  • else {
  • ghelp who $sockname
  • }
  • }
  • elseif (%wflag === n) {
  • ;who +n <nick>, <nick> en wildcard
  • if ($3) {
  • set %wdest $3
  • var %file $gopen($userslistfile)
  • while ($fread(%file)) {
  • set %r $ifmatch
  • if (%wdest iswm %r) {
  • sw $sockname : $+ %me 352 %wnick $gettok(%chans_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ],1,32) %identd_ [ $+ [ %r ] ] %host_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ] %server_ [ $+ [ %r ] ] %r $whoattr(%r) :0 %realname_ [ $+ [ %r ] ]
  • }
  • }
  • .fclose %file
  • }
  • else {
  • ghelp who $sockname
  • }
  • }
  • elseif (%wflag === u) {
  • ;who +u <username>, donne la liste des users ayant <username> comme username (identd). Wildcards.
  • if ($3) {
  • set %wdest $3
  • var %file $gopen($userslistfile)
  • while ($fread(%file)) {
  • set %r $ifmatch
  • set %wusername %identd_ [ $+ [ %r ] ]
  • if (%wdest iswm %wusername) {
  • sw $sockname : $+ %me 352 %wnick $gettok(%chans_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ],1,32) %identd_ [ $+ [ %r ] ] %host_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ] %server_ [ $+ [ %r ] ] %r $whoattr(%r) :0 %realname_ [ $+ [ %r ] ]
  • }
  • }
  • .fclose %file
  • }
  • else {
  • ghelp who $sockname
  • }
  • }
  • elseif (%wflag === M) {
  • ;who +M, donne la liste de tous les users qui ont des chans communs avec soi
  • if ($3) {
  • set %wdest $3
  • goto nick
  • }
  • set %wchans1 %chans_ [ $+ [ $sockname ] ]
  • var %file $gopen($userslistfile)
  • while ($fread(%file)) {
  • set %r $ifmatch
  • set %wchans2 %chans_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ]
  • if ($comchans(%wchans1,%wchans2)) {
  • sw $sockname : $+ %me 352 %wnick $gettok(%chans_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ],1,32) %identd_ [ $+ [ %r ] ] %host_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ] %server_ [ $+ [ %r ] ] %r $whoattr(%r) :0 %realname_ [ $+ [ %r ] ]
  • }
  • }
  • .fclose %file
  • }
  • elseif (%wflag === R) {
  • ;who +R, donne la liste de tous les users du serveur, et avec leurs vraies hosts. IRCops only.
  • if (%ircop_ [ $+ [ %wnick ] ]) {
  • ;%vraiehost_ [ $+ [ $sockname ] ]
  • var %file $gopen($userslistfile)
  • while ($fread(%file)) {
  • set %r $ifmatch
  • sw $sockname : $+ %me 352 %wnick $gettok(%chans_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ],1,32) %identd_ [ $+ [ %r ] ] %vraiehost_ [ $+ [ %sockname_ [ $+ [ %r ] ] ] ] %server_ [ $+ [ %r ] ] %r $whoattr(%r) :0 %realname_ [ $+ [ %r ] ]
  • }
  • .fclose %file
  • }
  • }
  • else {
  • ghelp who $sockname
  • }
  • }
  • else {
  • set %wdest $2
  • if ($left(%wdest,1) == $chr(35)) {
  • ;Alors il /who #chan
  • ;<- :besancon.fr.epiknet.org 352 G-FACTION #my_world LoVeFF leon.epiknet.fr besancon.fr.epiknet.org LeOn Hr :0 LeOn :þ
  • :channel
  • var %file $gopen($chanfile(%wdest))
  • while ($fread(%file)) {
  • set %r $ifmatch
  • 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))) {
  • set %tempnick $right(%r,$calc($len(%r) - 1))
  • }
  • else {
  • set %tempnick %r
  • }
  • set %tsockname %sockname_ [ $+ [ %tempnick ] ]
  • sw $sockname : $+ %me 352 %wnick %wdest %identd_ [ $+ [ %tempnick ] ] %host_ [ $+ [ %tsockname ] ] %server_ [ $+ [ %tempnick ] ] %tempnick $whoattr(%tempnick) :0 %realname_ [ $+ [ %tempnick ] ]
  • }
  • .fclose %file
  • }
  • else {
  • ;Alors il /who nick
  • :nick
  • if ($isco(%wdest)) {
  • unset %attr
  • if ($isaway(%wdest)) {
  • set %attr %attr $+ G
  • }
  • else {
  • set %attr %attr $+ H
  • }
  • if (r isincs %umodes_ [ $+ [ %wdest ] ]) {
  • set %attr %attr $+ r
  • }
  • if (%ircop_ [ $+ [ %wdest ] ]) {
  • set %attr %attr $+ $chr(42)
  • }
  • sw $sockname : $+ %me 352 $socknick($sockname) $gettok(%chans_ [ $+ [ %sockname_ [ $+ [ %wdest ] ] ] ],1,32) %identd_ [ $+ [ %wdest ] ] %host_ [ $+ [ %sockname_ [ $+ [ %wdest ] ] ] ] %server_ [ $+ [ %wdest ] ] %wdest %attr :0 %realname_ [ $+ [ %wnick ] ]
  • }
  • }
  • }
  • ;<- :besancon.fr.epiknet.org 315 G-FACTION truc :End of /WHO list.
  • :wend
  • sw $sockname :