Comme le titre l'indique j'ai fait un petit mIRCd avec un ami, il est loin d'être fini mais je vous montre notre travail, nous travaillez à l'aide du forum
www.redpowa.com/scripts/forum si vous voulez nous rejoindre pour continuer le projet vous serez le bienvenu, vous pouvez aussi poster des question sur le scriptage du mIRCd j'éssairai de vous répondre. On a éssayer de le commentez pour qu'il sois comprit. Pour l'instant la cmd la plus compliquer est "mode" elle est quasi fini.
Ce script est en perpétuel évolution et il est pas fini.
Pour ouvrir le serv ( port 6667 par défault, le nom du serv aussi et par défault, on pourra le config après )
/OpenServIrc
Pour le fermer ( retire toutes les hash ) et ferme toutes les connections :
/CloseServIRC
Vous pouvez me retrouver sur
irc.jeux.fr
/query tiot
Source / Exemple :
alias OpenServIrc {
;Ouvre le serveur et cré les hash
socklisten IrcServeur 6667
.hmake -s Serv.Host 100
.hmake -s Serv.Mask 100
.hmake -s Serv.mode 100
.hmake -s Serv.Salon 100
.hmake -s Serv.Salon2 100
.hmake -s Serv.Suser 100
.hmake -s Serv.Diver 100
hadd Serv.Diver Cmd1 Nick User Mode Kick Quit Oper Version Admin Motd Lusers kick kill topic stats list whois invite pong
hadd Serv.Diver Cmd2 Join Part Privmsg Notice
hadd Serv.Mask Uworld Uworld!Uworld@Uworld
hadd Serv.Mode Uworld o
echo -a Serveur IRC ouvert
}
alias CloseServIRC {
sockclose IRCserveur
sockclose Serv*
hfree -w Serv.*
.timerServ* off
echo -a Serveur IRC fermer ( connection et htable libéré )
}
on 1:socklisten:IrcServeur:{
;Quand qqn ce connecte on cré la connection qui s'apellera Serv(IP)
sockaccept temp
sockrename temp Serv( $+ $sock(temp).ip $+ )
}
;Quand une connection est perdu on fait un quit
on 1:Sockclose:Serv*:Serv.Quit $right($sockname,-4) Client à fermer la connection
on 1:sockread:Serv*:{
if ($sockerr > 0) return
sockread %temp
tokenize 32 %temp
;echo -s $1- ( $sockname )
if ($istok($hget(Serv.Diver,Cmd2),$1,32)) {
var %boucle $numtok($2,44)
while (%boucle) {
Serv $+ $1 $right($sockname,-4) $gettok($2,%boucle,44) $3-
dec %boucle
}
}
elseif ($istok($hget(Serv.Diver,Cmd1),$1,32)) serv $+ $1 $right($sockname,-4) $2-
}
alias ServNick {
var %serv.Nick $SerNickBien($strip($left($2,15)))
if ($hget(Serv.mask,%serv.Nick)) ServSend $1 :Irc.Serv.Org 433 $1 $2 :Nickname est déjà utiliser
elseif (!$2) halt
elseif (!%Serv.Nick) {
ServSend $1 :Irc.Serv.Org 432 $1 $2 :Pseudonyme erroné
halt
}
;Bon là le if regarde si la personne n'a pas déjà défini son NICK
elseif (!$hget(Serv.Mask,$1)) {
;On renome le socket
sockrename serv $+ $1 Serv $+ %Serv.Nick
}
else {
if ($asc($left($1,1)) != 40 ) {
sockrename serv $+ $1 Serv $+ %Serv.Nick
Hadd Serv.Mask %Serv.Nick %Serv.Nick $+ ! $+ $gettok($hget(Serv.Host,$1),1,32) $+ @ $+ $gettok($hget(Serv.Host,$1),2,32)
var %Serv.Mask $hget(Serv.Mask,$1)
hdel Serv.Mask $1
hadd Serv.Suser @ $+ $1 %Serv.Nick
hadd Serv.Host %Serv.Nick $hget(Serv.Host,$1)
hdel Serv.Host $1
hadd Serv.Mode %Serv.Nick $hget(Serv.Mode,$1)
hdel Serv.Mode $1
hadd Serv.Suser %Serv.Nick $hget(Serv.Suser,$1)
hdel Serv.Suser $1
hadd Serv.Diver oper $reptok($hget(Serv.Diver,Oper),$1,%Serv.Nick,1,32)
var %Serv.Nick2
var %serv.Place
var %Serv.Chan2
var %Serv.Mode
var %Serv.Deja.Dit
;%Serv.Salon contient les salon où est le nick
Var %Serv.Salon
%Serv.Salon = $remove($hget(Serv.Suser,%Serv.Nick),@,+)
var %boucle $numtok(%Serv.Salon,32)
while (%boucle) {
%Serv.chan2 = $gettok(%Serv.Salon,%boucle,32)
%serv.place = $findtok($hget(Serv.Salon,%Serv.chan2),$1,1,32)
%Serv.Mode = $gettok($hget(Serv.Salon2,%Serv.chan2),%Serv.Place,32)
%Serv.Mode = $remove(%Serv.Mode,$1)
hadd Serv.Salon %Serv.Chan2 $reptok($hget(Serv.Salon,%Serv.Chan2),$1,%Serv.Nick,1,32)
hadd Serv.Salon2 %Serv.Chan2 $reptok($hget(Serv.Salon2,%Serv.Chan2),$(%Serv.Mode $+ $1),$(%Serv.Mode $+ %Serv.Nick),1,32)
%boucle2 = $numtok($hget(Serv.salon,%Serv.chan2),32)
while (%boucle2) {
%Serv.Nick2 = $gettok($hget(Serv.Salon,%Serv.chan2),%boucle2,32)
dec %boucle2
if ($istok(%Serv.Deja.Dit,%serv.nick2,32)) continue
ServSend %Serv.nick2 : $+ %Serv.Mask NICK : $+ %Serv.Nick
%Serv.Deja.Dit = $addtok(%Serv.Deja.Dit,%serv.nick2,32)
}
dec %boucle
}
alias Sserv.NICK $1 %serv.Nick
}
else {
hadd Serv.Host %Serv.Nick $hget(Serv.Host,$1)
hdel Serv.Host $1
Hadd Serv.Mask %Serv.Nick %Serv.Nick $+ ! $+ $gettok($hget(Serv.Mask,$1),2,33)
hdel Serv.Mask $1
sockrename serv $+ $1 Serv $+ %Serv.nick
ServSend %Serv.Nick :Irc.Serv.Org 001 %Serv.Nick :welcome nick!user@host
Serv.Chan #uworld :Uworld!Uworld@Uworld PRIVMSG #uworld : $+ $timestamp CONNECTION de $+ %Serv.Nick $+ $hget(Serv.Host,%Serv.Nick) $+ ( $+ $hfind(Serv.mask,*!*@ $+ $sock(Serv $+ %Serv.Nick).ip,0,w).data clones $+ ) $+
ServSend %serv.Nick :Irc.Serv.Org 002 %Serv.Nick :Vous êtes sur ...
ServSend %Serv.Nick :Irc.Serv.Org 003 %Serv.Nick :Le serveur à été cré ...
ServSend %Serv.Nick :Irc.Serv.Org 004 %Serv.Nick :info
ServSend %Serv.Nick :Irc.Serv.Org 005 %Serv.Nick :info
ServMotd %Serv.Nick
ServLusers %Serv.Nick
hadd Serv.Suser @ $+ %Serv.Nick $false
ServSend %Serv.Nick PING :Irc.Serv.Org
.timerServ $+ $ticks 1 90 Serv.Ping %Serv.Nick
Sserv.CONNECT $1
}
}
}
alias Serv.Ping {
if ($asc($hget(Serv.Suser,@ $+ $1)) != 36) {
if ($1 == @Quit) {
hdel Serv.Suser @ $+ $1
halt
}
hadd Serv.Suser @ $+ $hget(Serv.Suser,@ $+ $1) $false
ServSend $hget(Serv.Suser,@ $+ $1) PING :Irc.Serv.Org
.timerServ $+ $ticks 1 90 Serv.Ping $hget(Serv.Suser,@ $+ $1)
hdel Serv.Suser @ $+ $1
}
elseif ($hget(Serv.Suser,@ $+ $1)) {
hadd Serv.Suser @ $+ $1 $false
ServSend $1 PING :Irc.Serv.Org
.timerServ $+ $ticks 1 90 Serv.Ping $1
}
else Serv.Quit $1 Ping timeout
}
alias ServPong if ($asc($hget(Serv.Suser,@ $+ $1)) == 36) hadd Serv.Suser @ $+ $1 $true
Alias ServUser {
;Si le gars n'a pas déjà fait la commande USER
if (!$hget(Serv.Mask,$1)) {
;Rajoute quelque truc dans les hash ( surtout Serv.mask qui est important ) et accueil
hadd Serv.Host $1 $2 $sock(Serv $+ $1).ip * $5-
hadd Serv.Mask $1 $1 $+ ! $+ $2 $+ @ $+ $sock(Serv $+ $1).ip
if ($asc($right($1,1)) != 41) {
ServSend $1 :Irc.Serv.Org 001 $1 :welcome nick!user@host
Serv.Chan #uworld :Uworld!Uworld@Uworld PRIVMSG #uworld : $+ $timestamp CONNECTION de $+ $1 $+ $hget(Serv.Host,$1) $+ ( $+ $hfind(Serv.mask,*!*@ $+ $sock(Serv $+ $1).ip,0,w).data clones $+ ) $+
ServSend $1 :Irc.Serv.Org 002 $1 :Vous êtes sur ...
ServSend $1 :Irc.Serv.Org 003 $1 :Le serveur à été cré ...
ServSend $1 :Irc.Serv.Org 004 $1 :info
ServSend $1 :Irc.Serv.Org 005 $1 :info
ServMotd $1
ServLusers $1
hadd Serv.Suser @ $+ $1 $false
ServSend $1 PING :Irc.Serv.Org
.timerServ $+ $ticks 1 90 Serv.Ping $1
Sserv.CONNECT $1
}
}
}
;Sert à envoyer qqch au Nick ( simplifie la tache )
Alias ServSend {
if ($sock(Serv $+ $1)) sockwrite -nt serv $+ $1 $2-
elseif ($1 != Uworld) serv.quit $1 :Plus de connection vers l'user
}
;Alias qui enlève les movais caractère d'un nick
alias SerNickBien {
var %var 1
var %Serv.Nick
var %char
while (%var <= $len($1)) {
%char = $mid($1,%var,1)
if (($asc(%char) < 125) && ($asc(%char) > 64)) %serv.Nick = %serv.nick $+ %char
elseif (%char isnum) %serv.Nick = %serv.Nick $+ %char
inc %var
}
return %serv.nick
}
;Pour reconstruire le changement de mode. En effet on décompose "MODE -o+o tiot tiot"en
;"Mode -o tiot" ET "Mode +o tiot"
;Et donc à partir de çà il faut renvoyer à ts
;"Mode -o+o tiot"
;On défait tt pour tt remettre
;%Serv.P.M contient - si on enlève le mode et + si on le met.
;%Serv.P.F1 contient le "-o+o"
;%serv.P.F2 contient le "tiot tiot"
Alias Serv.C.Mode {
if ($1 == %Serv.P.M) {
set %Serv.P.F1 %Serv.P.F1 $+ $2
set %Serv.P.F2 %Serv.P.F2 $3
}
else {
set %Serv.P.M $1
set %Serv.P.F1 %Serv.P.F1 $+ $1 $+ $2
set %Serv.P.F2 %Serv.P.F2 $3
}
}
;La commande MODE, la plus compliquer
alias ServMode {
;Si c'est un /mode #salon
if ($asc($2) == 35 ) {
;Si ya pas de para alors arrêter dire les modes du salon
if (!$3) {
ServSend $1 :Irc.Serv.Org 324 $1 $2 + $+ $remove($hget(Serv.Mode,$2),$chr(32)) $hget(Serv.Mode,l $+ $2)
halt
}
;%Serv.Place est la place du nick dans $hget(Serv.salon,$2) et donc dans $hget(Serv.salon2,$2)
var %Serv.Place $findtok($hget(Serv.salon,$2),$1,32)
var %Serv.Nick
;%Serv.Nick contient donc Now le nick qui a fait l'action avec ces modes dans le salon
%serv.nick = $gettok($hget(Serv.salon2,$2),%Serv.Place,32)
;%Serv.Place2 contient la place du nick qui subit l'action
;%Serv.Nick2 contient le nick avec ces modes du subissant
;%Serv.X contient le nick du subissant
;%serv.para servira à déterminer qu'elle est le subissant dans MODE #tiot -oo Meenux Tiot
;C'est 4 par défault pour dire $4 donc Meenux le premier paramètre :)
;Si le gars n'est pas un chanop et qu'il n'est pas ircop alors lui dire et arrêter
;et que ce n'est pas pour demander la liste des chan.
if ((@ !isin %Serv.Nick) && (!$istok($hget(Serv.Mode,$1),o,32)) && ($2- != $2 +b)) {
ServSend $1 :Irc.Serveur.Org 482 $1 $2 :tu n'est pas opérateur
halt
}
var %Serv.Place2
var %Serv.Nick2
var %Serv.X
var %Serv.Para 4
var %Serv.Place3
var %Serv.Salon
;%var c'est le compteur de boucle
;%serv.mode pour savoir si on rajoute on enlève le mode
;%char est le caractère qui corespond à la %var lettre de $3 (ex: +oi-m tiot )
var %var 1
var %Serv.Mode
var %char
if ($left($3,1) !isin +-) %serv.mode = +
while (%var <= $len($3)) {
;%char contient la %var lettre de $3
%char = $mid($3,%var,1)
;On incrément la boucle
inc %var
;On sait si on doit enlever ou mettre pour les par exemple "-ooo"
if (%char == +) %Serv.Mode = +
elseif (%char == -) %Serv.Mode = -
;Donc le ban
elseif (%char == b) {
%Serv.X = $ $+ %Serv.para
%serv.X = [ [ %Serv.X ] ]
inc %Serv.para
if (%Serv.Mode == +) {
;Si on veux voir la liste des ban
if (!%Serv.X) {
var %Serv.Ban.Pl
var %boucle = $numtok($hget(Serv.salon,b $+ $2),32)
var %a = 1
while (%boucle >= %a) {
%Serv.Ban.Pl = %a $+ - $+ $calc(%a + 2)
ServSend $1 :Irc.Serv.Org 367 $1 $2 $gettok($hget(Serv.Salon,b $+ $2),%Serv.Ban.Pl,32)
inc %a 3
}
ServSend $1 :Irc.Serv.Org 368 $1 $2 :Fin de la banlist
continue
}
;Si ce qu'on fait n'est pas un ban arrêter
if (*!*@* !iswm %Serv.X) continue
;Si le ban éxiste déjà arreter
if ($istok($hget(Serv.Salon,b $+ $2),%Serv.X,32)) continue
;Si il y a pas eu d'érreur alors on rajoute le ban ( avec le l'heure où on la mit et le speudo du gars )
hadd Serv.Salon b $+ $2 $addtok($hget(Serv.salon,b $+ $2),%Serv.X $1 $ctime,32)
}
if (%Serv.Mode == -) {
;Si le ban n'existe pas : arrêter
if (!$istok($hget(Serv.Salon,b $+ $2),%Serv.X,32)) continue
var %Serv.Ban.Pl
;On cherche où est le ban dans la liste
%Serv.Ban.Pl = $findtok($hget(Serv.Salon,b $+ $2),%Serv.X,1,32)
;Et on efface le ban est les 2 truc après ( le speudo qui la mit et quand )
%Serv.Ban.Pl = %Serv.Ban.Pl $+ - $+ $calc(%Serv.Ban.Pl + 2)
hadd Serv.salon b $+ $2 $deltok($hget(Serv.Salon,b $+ $2),%Serv.Ban.Pl,32)
}
Serv.C.Mode %Serv.Mode %Char %Serv.X
}
;Si le mode est 'o'
elseif (%char == o ) {
;%Serv.X contiendra le Subissant
%Serv.X = $ $+ %Serv.para
%serv.X = [ [ %Serv.X ] ]
;On incrémente pour passer après au subissant suivant
inc %Serv.para
;Si le subissant n'est pas sur le salon ou si il est nul alors on vas à la boucle suivante
if (!%Serv.X) continue
if (!$istok($hget(Serv.salon,$2),%Serv.x,32)) { ServSend $1 :Irc.Serv.Org 441 $1 %Serv.X :Il n'est pas sur le chan | continue }
;Comme par magie %Serv.Nick2 contiendra le nick avec les modes sur le salon (ex: @+tiot)
%Serv.Place2 = $findtok($hget(Serv.salon,$2),%Serv.X,1,32)
%Serv.Nick2 = $gettok($hget(Serv.salon2,$2),%Serv.Place2,32)
;%Serv.Salon contient le salon avec les modes de l'user dessus
%serv.Place3 = $findtok($remove($hget(Serv.Suser,%Serv.X),@,+),$2,1,32)
%serv.Salon = $gettok($hget(Serv.Suser,%serv.X),%Serv.Place3,32)
;Si on rajoute le mode
if (%Serv.Mode == +) {
;On regarde si le subissant n'est pas OP déjà ( op un op c con comme même )
if ( @ !isin %Serv.Nick2 ) {
;On rajoute le mode au nick et on le dit à tout le monde
hadd Serv.Suser %serv.X $puttok($hget(Serv.Suser,%serv.X),@ $+ %Serv.Salon,%Serv.Place3,32)
hadd Serv.Salon2 $2 $puttok($hget(Serv.Salon2,$2),@ $+ %Serv.Nick2,%Serv.place2,32)
Sserv.OP $1 $2 %serv.X
}
}
;Ce else c pour dire si on enlève le mode
else {
;Il faut que le gars à qui on enlève sois OP
if (@ isin %Serv.Nick2) {
;Alors on l'enlève et le dit bien fort
hadd Serv.Suser %serv.X $puttok($hget(Serv.Suser,%serv.X),$remove(%Serv.Salon,@),%Serv.Place3,32)
hadd Serv.Salon2 $2 $puttok($hget(Serv.Salon2,$2),$remove(%Serv.Nick2,@),%Serv.place2,32)
Sserv.DEOP $1 $2 %serv.X
}
}
Serv.C.Mode %Serv.Mode %Char %Serv.X
}
;Pareil que pour o sof une tite diférence diff
elseif (%char == v ) {
%Serv.X = $ $+ %Serv.para
%serv.X = [ [ %Serv.X ] ]
inc %Serv.para
if (!%Serv.X) continue
if (!$istok($hget(Serv.salon,$2),%Serv.x,32)) { ServSend $1 :Irc.Serv.Org 441 $1 %Serv.X :Il n'est pas sur le chan | continue }
%Serv.Place2 = $findtok($hget(Serv.salon,$2),%Serv.X,32)
%Serv.Nick2 = $gettok($hget(Serv.salon2,$2),%Serv.Place2,32)
%serv.Place3 = $findtok($remove($hget(Serv.Suser,%Serv.X),@,+),$2,1,32)
%serv.Salon = $gettok($hget(Serv.Suser,%Serv.X),%Serv.Place3,32)
if (%Serv.Mode == +) {
if ( + !isin %Serv.Nick2 ) {
;Si dans la liste le gars est +@tiot çà bug donc je suis obliger de regarder si il est OP pour faire sois +tiot ou @+tiot
if (@ isin %Serv.Nick2) hadd Serv.Salon2 $2 $puttok($hget(Serv.Salon2,$2),@+ $+ %Serv.X,%Serv.place2,32)
else hadd Serv.Salon2 $2 $puttok($hget(Serv.Salon2,$2),+ $+ %Serv.Nick2,%Serv.place2,32)
hadd Serv.Suser %serv.X $puttok($hget(Serv.Suser,%serv.X),+ $+ %Serv.Salon,%Serv.Place3,32)
Sserv.VOICE $1 $2 %serv.X
}
}
else {
if (+ isin %Serv.Nick2) {
hadd Serv.Suser %serv.X $puttok($hget(Serv.Suser,%serv.X),$remove(%Serv.Salon,+),%Serv.Place3,32)
hadd Serv.Salon2 $2 $puttok($hget(Serv.Salon2,$2),$remove(%Serv.Nick2,+),%Serv.place2,32)
Sserv.DEVOICE $1 $2 %serv.X
}
}
Serv.C.Mode %Serv.Mode %Char %Serv.X
}
;Si on change les mode ntmi ( qui n'ont pas besoin de paramètre )
elseif (%char isin ntmi) {
if (%Serv.Mode == +) {
if ($istok($hget(Serv.Mode,$2),%Char,32)) continue
hadd Serv.Mode $2 $addtok($hget(serv.mode,$2),%char,32)
}
else {
if (!$istok($hget(Serv.Mode,$2),%Char,32)) continue
hadd Serv.Mode $2 $remtok($hget(serv.mode,$2),%char,1,32)
}
Serv.C.Mode %Serv.Mode %Char
}
elseif (%char == s) {
if (%Serv.Mode == +) {
if ($istok($hget(Serv.Mode,$2),s,32)) continue
if ($istok($hget(Serv.Mode,$2),p,32)) {
hdelt Serv.Mode $2 p
Serv.C.Mode - p
}
haddt Serv.Mode $2 s
Serv.C.Mode + s
}
else {
if (!$istok($hget(Serv.Mode,$2),s,32)) continue
hdelt Serv.Mode $2 s
Serv.C.Mode - s
}
}
elseif (%Char == p) {
if (%Serv.Mode == +) {
if ($istok($hget(Serv.Mode,$2),p,32)) continue
if ($istok($hget(Serv.Mode,$2),s,32)) {
hdelt Serv.Mode $2 s
Serv.C.Mode - s
}
haddt Serv.Mode $2 p
Serv.C.Mode + p
}
else {
if (!$istok($hget(Serv.Mode,$2),p,32)) continue
hdelt Serv.Mode $2 p
Serv.C.Mode - p
}
}
elseif (%char == l) {
if (%Serv.Mode == +) {
%Serv.X = $ $+ %Serv.para
%serv.X = [ [ %Serv.X ] ]
inc %serv.para
if (!%Serv.x) { ServSend $1 :Irc.serv.org 461 $1 Mode +l :Pas assez de paramètre | continue }
if ((%serv.X isalnum) && (%Serv.X > 0)) hadd Serv.Mode l $+ $2 %Serv.X
else continue
}
else {
if (!$hget(Serv.Mode,l $+ $2)) continue
hdel Serv.Mode l $+ $2
}
Serv.C.Mode %Serv.Mode %Char %Serv.X
}
elseif (%char == k) {
if (%Serv.Mode == +) {
%Serv.X = $ $+ %Serv.para
%serv.X = [ [ %Serv.X ] ]
inc %serv.para
if (%Serv.x == $null) { ServSend $1 :Irc.serv.org 461 $1 Mode +k :Pas assez de paramètre | continue }
if ($hget(Serv.Mode,k $+ $2) != $null) { ServSend $1 :Irc.Serv.org 467 $1 $2 :Clef du salon déjà mise | continue }
%serv.X = $SerNickBien(%Serv.X)
hadd Serv.Mode k $+ $2 %Serv.X
}
else {
%Serv.X = $ $+ %Serv.para
%serv.X = [ [ %Serv.X ] ]
inc %serv.para
if (%Serv.x == $null) { ServSend $1 :Irc.serv.org 461 $1 Mode -k :Pas assez de paramètre | continue }
if ($hget(Serv.Mode,k $+ $2) != %Serv.x) { ServSend $1 :Irc.Serv.org 467 $1 $2 :Clef du salon déjà mise | continue }
hdel Serv.Mode k $+ $2
}
Serv.C.Mode %Serv.Mode %Char %Serv.X
}
}
if (($2- != $2 +b) && (%Serv.P.F1)) {
Serv.Chan #uworld :Uworld!Uworld@Uworld PRIVMSG #uworld : $+ $timestamp MODE $2- par $1
Serv.Chan $2 : $+ $hget(Serv.Mask,$1) Mode $2 %Serv.P.F1 %Serv.P.F2
Sserv.MODE $1 $2 %Serv.P.F1 %Serv.P.F2
}
unset %Serv.P.*
}
;Si le mode s'applique à sois même (ex: //mode $me +i)
;La même boucle que pour les modes salons
if ($1 == $2) {
var %var 1
var %Serv.Mode
var %char
if ($left($3,1) !isin +-) %serv.mode = +
while (%var <= $len($3)) {
%char = $mid($3,%var,1)
if (%char == +) %Serv.Mode = +
elseif (%char == -) %Serv.Mode = -
;Si les modes sont du type iswg on change le mode et lui dit
elseif (%char isin iswg) {
if (%Serv.Mode == +) {
hadd Serv.Mode $1 $addtok($hget(Serv.Mode,$1),%char,32)
servsend $1 : $+ $1 MODE $1 :+ $+ %char
}
else {
hadd Serv.Mode $1 $remtok($hget(Serv.Mode,$1),%char,1,32)
servsend $1 : $+ $1 MODE $1 :- $+ %char
}
}
;Si le mode est o ( mode spécial comme même )
elseif (%char == o) {
;si on veux l'enlever alors çà l'enlève et previent
if (%Serv.Mode == -) {
if (!$istok($hget(Serv.mode,$1),o,32)) continue
servsend $1 : $+ $1 MODE $1 :-o
hadd Serv.Mode $1 $remtok($hget(Serv.Mode,$1),o,1,32)
hadd Serv.diver oper $remtok($hget(Serv.diver,oper),$1,1,32)
servsend $1 :Irc.Serv.Org NOTICE $1 :Vous n'êtes plus un ircopérateur
}
;Par conte si on essaie de le mettre ... ( çà marche pas )
else {
servsend $1 :Irc.Serv.Org NOTICE $1 :Ah ! ah ! tu croyais vraiment que çà allait marcher ?
}
}
inc %var
}
}
}
;Quand on quit, on apelle un autre alias ( comme çà pas besoin de tout refaire pour les kill etc )
alias ServQuit Serv.Quit $1 Quit: $2-
alias ServKill {
if ($istok($hget(Serv.Mode,$1),o,32)) {
if ($hget(Serv.Mask,$2) == $null) Servsend $1 :irc.serv.org 401 $1 $2 :Ce speudonyme n'existe pas
else Serv.Quit $2 :killed by $1 ( $+ $3- $+ )
}
else ServSend :irc.serv.org 481 $1 :Vous n'est pas ircop
}
Alias Serv.Quit {
sockclose serv $+ $1
var %serv.Place,%Serv.Chan2,%Serv.QUIT,%Serv.nick,%boucle2
;%Serv.Salon contient les salon où est le nick
var %Serv.salon $remove($hget(serv.Suser,$1),+,@)
var %boucle = $numtok(%Serv.Salon,32)
while (%boucle) {
;%Serv.Chan2 contient le nième chan où est le nick
;%Serv.Place contient où ce trouve le nick dans la liste des speudo du salon
;On enlève le nick des liste et dit à tout le monde le QUIT
%Serv.chan2 = $gettok(%Serv.Salon,%boucle,32)
%serv.place = $findtok($hget(Serv.Salon,%Serv.chan2),$1,1,32)
hadd Serv.Salon %Serv.chan2 $deltok($hget(Serv.Salon,%Serv.chan2),%Serv.Place,32)
hadd Serv.Salon2 %Serv.chan2 $deltok($hget(Serv.Salon2,%Serv.chan2),%Serv.Place,32)
%boucle2 = $numtok($hget(Serv.salon,%Serv.chan2),32)
Serv.Plus.Personne %Serv.Chan2
while (%boucle2) {
%serv.Nick = $gettok($hget(Serv.Salon,%Serv.chan2),%boucle2,32)
dec %boucle2
if ($istok(%Serv.QUIT,%serv.nick,32)) continue
ServSend %Serv.nick : $+ $hget(Serv.Mask,$1) Quit : $+ $2-
%serv.quit = $addtok(%serv.quit,%serv.nick,32)
}
dec %boucle
}
hadd serv.diver oper $remtok($hget(serv.diver,oper),$1,1,32)
hdel Serv.Host $1
hdel Serv.Mask $1
hdel Serv.Mode $1
hdel Serv.Suser $1
if (!$hget(Serv.Suser,@ $+ $1)) hadd Serv.Suser @ $+ $1 @Quit
Serv.Chan #uworld :Uworld!Uworld@Uworld PRIVMSG #uworld : $+ $timestamp $1 $2-
Sserv.QUIT $1-
}
Alias Serv.Addoper set %Serv.Oper. $+ $$1 $$2
Alias Serv.Deloper set %Serv.Oper. $+ $$1 $null
alias ServStats {
if ($2 == O) {
var %boucle $var(%Serv.Oper.*,0)
while (%boucle) {
servsend $1 :Irc.Serv.Org 225 :o *@* $right($var(%Serv.Oper.*,%boucle),-11)
dec %boucle
}
servsend $1 :Irc.Serv.Org 219 $1 O :Fin du /Stats
}
}
Alias Servinvite {
var %Serv.Place $findtok($hget(Serv.salon,$3),$1,32)
var %Serv.Nick
;%Serv.Nick contient donc Now le nick qui a fait l'action avec ces modes dans le salon
%serv.nick = $gettok($hget(Serv.salon2,$3),%Serv.Place,32)
if ((@ !isin %Serv.Nick) && (!$istok($hget(Serv.Mode,$1),o,32))) ServSend $1 :Irc.Serv.Org 482 $1 $2 :tu n'est pas un op du salon
elseif ($istok($hget(Serv.salon,$3),$2,32)) ServSend $1 :Irc.serv.Org 443 $1 $2 $3 :Est déjà sur le salon
elseif (!$hget(Serv.mask,$2)) ServSend $1 :IRC.Serv.Org 401 $1 $2 :Ce nick n'existe pas
else {
hadd Serv.Salon i $+ $3 $addtok($hget(Serv.Salon,i $+ $3),$2,32)
ServSend $2 : $+ $hget(Serv.Mask,$1) INVITE $2 $3
Sserv.INVITE $1 $3 $2
}
}
alias ServOper {
var %temp
%Temp = % $+ Serv.Oper. $+ $2
%Temp = [ [ %temp ] ]
if ((%temp) && (%temp == $3)) {
servsend $1 : $+ $1 MODE $1 :+o
hadd Serv.Mode $1 $addtok($hget(Serv.Mode,$1),o,32)
hadd Serv.diver oper $addtok($hget(Serv.diver,oper),$1,32)
servsend $1 :Irc.Serv.Org NOTICE $1 :Vous êtes maintenant un Ircopérateur
Sserv.OPER $1 1
}
else {
servsend $1 :Irc.Serv.Org NOTICE $1 :Vous n'avez pas utilisez les bon pass (ou pas de O-line)
Sserv.OPER $1 0
}
}
;Bon là le JOIN
alias ServJOIN {
;Si on éssai de joindre un truc qué pas un salon ... çà previent et arrête
if ($asc($2) != 35 ) {
servSend $1 :Irc.Serv.Org 403 $1 $2 :No such channel
return
}
;Si on veux rentrer dans #uworld et qu'on est pas Ircop alor arrêter
if (($2 == #uworld) && (!$istok($hget(Serv.Mode,$1),o,32))) return
;Si le le gars est déjà sur le salon on arrête tout
if ($istok($hget(Serv.Salon,$2),$1,32)) return
;Si il y a le mode +i et qu'on a inviter qqn ( l'invite et plus fort que le ban )
if ($istok($hget(Serv.Mode,$2),i,32)) {
if ((!$istok($hget(Serv.Salon,i $+ $2),$1,32)) && (!$istok($hget(Serv.Mode,$1),o,32))) { ServSend $1 :Irc.Serv.Org 473 $1 $2 :Tu n'est pas invité | return }
hadd Serv.Salon i $+ $2 $remtok($hget(Serv.Salon,i $+ $2),$1,1,32)
}
;Si on est pas ircop, on vas regarder si la personne est ban
elseif (!$istok($hget(Serv.Mode,$1),o,32)) {
;Mode +k et +l
if (($hget(Serv.Mode,k $+ $2)) && ($3 != $hget(Serv.Mode,k $+ $2))) { ServSend $1 :Irc.Serv.Org 475 $1 $2 :La key est mauvaise | return }
elseif (($hget(Serv.Mode,l $+ $2)) && ($numtok($hget(Serv.Salon,$2),32) >= $hget(Serv.Mode,l $+ $2))) { ServSend $1 :Irc.Serv.Org 471 $1 $2 :Le salon est plein | return }
;Pour le ban
var %boucle = $numtok($hget(Serv.salon,b $+ $2),32)
var %a = 1
while (%boucle >= %a) {
if ($gettok($hget(Serv.Salon,b $+ $2),%a,32) iswm $hget(Serv.Mask,$1)) {
ServSend $1 :Irc.Serv.Org 474 $1 $2 :Ne peut rejoindre le salon (+b)
halt
}
inc %a 3
}
}
;Si le salon est vide alors ont met le gars OP sinon on le rajoute à la fin de la liste
if (!$hget(Serv.Salon2,$2)) {
hadd Serv.Salon2 $2 @ $+ $1
hadd Serv.Suser $1 $addtok($hget(Serv.Suser,$1),@ $+ $2,32)
}
else {
hadd Serv.Salon2 $2 $addtok($hget(Serv.Salon2,$2),$1,32)
hadd Serv.Suser $1 $addtok($hget(Serv.Suser,$1),$2,32)
}
;On le rajoute à la fin de la liste des user du salon ( Serv.Salon ne comporte pas les mode )
hadd Serv.Salon $2 $addtok($hget(Serv.Salon,$2),$1,32)
;On previent tous ceux du salon
Serv.chan $2 : $+ $hget(Serv.mask,$1) JOIN : $+ $2
Serv.Chan #uworld :Uworld!Uworld@Uworld PRIVMSG #uworld : $+ $timestamp JOIN $2 par $1
;Si le topic éxiste on lui balance
if ($hget(Serv.salon,t $+ $2)) {
Servsend $1 :Irc.Serv.org 332 $1 $2 $gettok($hget(Serv.salon,t $+ $2),3-,32)
Servsend $1 :Irc.Serv.org 333 $1 $2 $gettok($hget(Serv.salon,t $+ $2),1-2,32)
}
;On lui balance la liste des users
var %boucle2 $numtok($hget(Serv.Salon2,$2),32)
var %i 1
var %o
;On vas lui balancer les nick par bloc de 32 nick. Pourquoi 32 ? Pour quoi pas :)
while (%boucle2 >= %i) {
%o = %i $+ - $+ $calc(%i + 28)
servSend $1 :Irc.Serv.Org 353 $1 = $2 : $+ $gettok($hget(Serv.Salon2,$2),%o,32)
inc %i 32
}
servSend $1 :Irc.Serv.Org 366 $1 $2 :Fin de la liste
Sserv.JOIN $1 $2
}
;Changement demande du topic
Alias ServTopic {
var %Serv.Place $findtok($hget(Serv.salon,$2),$1,32)
var %Serv.Nick
;%Serv.Nick contient donc Now le nick qui a fait l'action avec ces modes dans le salon
%serv.nick = $gettok($hget(Serv.salon2,$2),%Serv.Place,32)
;Si il n'est pas OP et qu'il y a le mode +t alors stop
if ((@ !isin %Serv.nick) && ($istok($hget(serv.mode,$2),t,32))) ServSend $1 :Irc.Serv.Org 482 $1 $2 :tu n'est pas un op du salon
;Si le salon n'existe pas
elseif (!$hget(Serv.salon,$2)) ServSend $1 :Irc.serv.Org 401 $2 $3 :chan/user inconnu
;Si il n'y a pas de paramètre alors balancer le topic
elseif (!$3) {
if (!$hget(Serv.salon,t $+ $2)) Servsend $1 :Irc.Serv.org 331 $1 $2 :Aucun topic.
else {
Servsend $1 :Irc.Serv.org 332 $1 $2 $gettok($hget(Serv.salon,t $+ $2),3-,32)
Servsend $1 :Irc.Serv.org 333 $1 $2 $gettok($hget(Serv.salon,t $+ $2),1-2,32)
}
}
;Si on éssai de mettre le topic.
else {
;Si il y a pas de topic défini çà revient à l'éffacer sinon on le rajoute et le dit à tt le monde
if ($3- == :) hdel Serv.Salon t $+ $2
else hadd Serv.Salon t $+ $2 $1 $ctime $3-
Serv.chan $2 : $+ $hget(Serv.mask,$1) TOPIC $2 $3-
Sserv.TOPIC $1 $2-
}
}
;Quand on fait un part
alias ServPart {
;SI on essai de partir de quelque chose qui n'est pas un chan
if ($asc($2) != 35 ) {
servSend $1 :Irc.Serv.Org 403 $1 $2 :No such channel
return
}
;Si on est pas sur le chan
if (!$istok($hget(Serv.Salon,$2),$1,32)) {
servSend $1 :Irc.Serv.Org 442 $1 $2 :Tu n'est pas sur le chan
return
}
;Previent tout ceux du chan du part
Serv.chan $2 : $+ $hget(Serv.mask,$1) PART $2 $3-
;On le retire de Serv.salon et Serv.salon2
var %Serv.Place $findtok($hget(Serv.salon,$2),$1,32)
hadd Serv.Salon $2 $deltok($hget(Serv.Salon,$2),%Serv.Place,32)
hadd Serv.Salon2 $2 $deltok($hget(Serv.Salon2,$2),%Serv.Place,32)
;On le retire de la liste des salon de l'user
%serv.Place = $findtok($remove($hget(Serv.Suser,$1),+,@),$2,1,32)
hadd Serv.Suser $1 $deltok($hget(Serv.Suser,$1),%Serv.place,32)
Serv.Chan #uworld :Uworld!Uworld@Uworld PRIVMSG #uworld : $+ $timestamp PART $2 par $1
Sserv.PART $1 $2
Serv.Plus.Personne $2
}
alias ServKick {
var %Serv.Place $findtok($hget(Serv.salon,$2),$1,32)
var %Serv.Nick
;%Serv.Nick contient donc Now le nick qui a fait l'action avec ces modes dans le salon
%serv.nick = $gettok($hget(Serv.salon2,$2),%Serv.Place,32)
if ((@ !isin %Serv.Nick) && (!$istok($hget(Serv.Mode,$1),o,32))) ServSend $1 :Irc.Serv.Org 482 $1 $2 :tu n'est pas un op du salon
elseif (!$istok($hget(Serv.salon,$2),$3,32)) ServSend $1 :Irc.serv.Org 401 $2 $3 :chan/user inconnu
else {
;Previent tout ceux du chan du part
Serv.chan $2 : $+ $hget(Serv.mask,$1) KICK $2 $3 $4-
;On le retire de Serv.salon et Serv.salon2
var %Serv.Place $findtok($hget(Serv.salon,$2),$3,32)
hadd Serv.Salon $2 $deltok($hget(Serv.Salon,$2),%Serv.Place,32)
hadd Serv.Salon2 $2 $deltok($hget(Serv.Salon2,$2),%Serv.Place,32)
;On le retire de la liste des salon de l'user
%serv.Place = $findtok($remove($hget(Serv.Suser,$3),+,@),$2,1,32)
hadd Serv.Suser $3 $deltok($hget(Serv.Suser,$3),%Serv.place,32)
Serv.Chan #uworld :Uworld!Uworld@Uworld PRIVMSG #uworld : $+ $timestamp KICK $3 par $1 sur $2 $4-
Sserv.KiCK $1 $2 $3 $4-
Serv.Plus.Personne $2
}
}
;Pour un privmsg
alias ServPrivmsg {
;Si c'est sur un salon
if ($asc($2) == 35) {
;On fait la liste des speudo mais on retire celui qui envoit le privmsg
var %serv.SalonNick
%serv.SalonNick = $remtok($hget(Serv.Salon,$2),$1,1,32)
;On initianalise la boucle
if (!$istok($hget(Serv.Salon,$2),$1,32)) {
if (($istok($hget(Serv.Mode,$2),n,32)) && (!$istok($hget(Serv.Mode,$1),o,32))) {
ServSend $1 :Irc.Serv.Org 404 $1 $2 :Ne peut envoyer sur le salon
return
}
}
if (!$hget(Serv.Salon,$2)) {
ServSend $1 :Irc.Serv.Org 403 $1 $2 :Ce salon n'existe pas
return
}
var %spv 1
;Boucle qui vas envoyer à tous ceux de %Serv.SalonNick le privmsg
while (%spv <= $numtok(%Serv.SalonNick,32)) {
Servsend $gettok(%serv.SalonNick,%spv,32) : $+ $hget(Serv.mask,$1) PRIVMSG $2 $3-
inc %spv
}
if ($2 == #uworld) {
if (!$istok($hget(Serv.Mode,$1),o,32)) return
if ($3 == :.op) servmode uworld $4 + $+ $str(o,$numtok($5-,32)) $5-
elseif ($3 == :.deop) servmode uworld $4 - $+ $str(o,$numtok($5-,32)) $5-
elseif ($3 == :.kick) servkick uworld $4-
elseif ($3 == :.mode) servmode uworld $4-
elseif ($3 == :.topic) servtopic uworld $4-
elseif ($3 == :.kill) servkill uworld $4-
elseif ($3 == :.join) servjoin $4-
elseif ($3 == :.part) servpart $4-
}
Sserv.CMSG $1-
}
;Si on ésaie de parler sur qqch qué pas un salon
else {
if (!$hget(Serv.Mask,$2)) { ServSend $1 :Irc.Serv.Org 401 $1 $2 :Ce pseudonyme n'existe pas | return }
;On envoit le privmsg
servSend $2 : $+ $hget(Serv.mask,$1) PRIVMSG $2 $3-
Sserv.PMSG $1-
}
}
;Pour les notice pareil que PRIVMSG
alias ServNotice {
if ($asc($2) == 35) {
var %serv.SalonNick
%serv.SalonNick = $remtok($hget(Serv.Salon,$2),$1,1,32)
if (!$istok($hget(Serv.Salon,$2),$1,32)) {
if (($istok($hget(Serv.Mode,$2),n,32)) && (!$istok($hget(Serv.Mode,$1),o,32))) {
ServSend $1 :Irc.Serv.Org 404 $1 $2 :Ne peut envoyer sur le salon
return
}
}
if (!$hget(Serv.Salon,$2)) {
ServSend $1 :Irc.Serv.Org 403 $1 $2 :Ce salon n'existe pas
return
}
var %spn 1
Sserv.PNOTICE $1-
while (%spn <= $numtok(%Serv.SalonNick,32)) {
Servsend $gettok(%serv.SalonNick,%spn,32) : $+ $hget(Serv.mask,$1) NOTICE $2 $3-
inc %spn
}
}
else {
if (!$hget(Serv.Mask,$2)) { ServSend $1 :Irc.Serv.Org 401 $1 $2 :Ce pseudonyme n'existe pas | return }
servSend $2 : $+ $hget(Serv.mask,$1) NOTICE $2 $3-
Sserv.PNOTICE $1-
}
}
;Envoit à la connection tous ceux d'un chan qqch ( ce que l'ont veux )
alias Serv.chan {
var %boucle $numtok($hget(Serv.Salon,$1),32)
while (%boucle > 0 ) {
Servsend $gettok($hget(Serv.Salon,$1),%boucle,32) $2-
dec %boucle
}
}
;La commande Lusers
alias ServLusers {
servsend $1 :Irc.Serv.Org 251 $1 :On trouve $sock(serv*,0) users
servsend $1 :Irc.Serv.Org 252 $1 :On trouve $numtok($hget(Serv.diver,oper),32) Ircopérateurs sur le réseau
servsend $1 :Irc.Serv.Org 254 $1 :Il y à $hget(Serv.salon2,0).item salons formés
}
;La commande Motd ( lit dans un fichier )
alias ServMotd {
servsend $1 :Irc.Serv.Org 375 $1 :Irc.Serv.Org Message of the day-
var %a = 1
while (%a <= $lines(motd.txt)) {
servsend $1 :Irc.Serv.Org 372 $1 : $+ $read(motd.txt,%a)
inc %a
}
servsend $1 :Irc.Serv.Org 376 $1 :Fin de la commande /MOTD
}
;Les info administrative ( lit dans un fichier )
alias ServAdmin {
servsend $1 :Irc.Serv.Org 256 $1 :Infos administratives
var %a = 1
while (%a <= $lines(admininfo.txt)) {
servsend $1 :Irc.Serv.Org 257 $1 : $+ $read(admininfo.txt,%a)
inc %a
}
}
alias ServList {
ServSend $1 :Irc.Serv.Org 321 $1 Channel :Users Name
var %salon,%boucle = $hget(Serv.Salon2,0).item
while (%boucle) {
%salon = $hget(Serv.Salon2,%boucle).item
dec %boucle
if ($istok($hget(Serv.mode,%salon),s,32)) if (!$istok($hget(Serv.Salon,%salon),$1,32)) continue
servSend $1 :Irc.Serv.Org 322 $1 %salon $numtok($hget(Serv.Salon2,%salon),32) $gettok($hget(Serv.Salon,t $+ %salon),3-,32)
}
ServSend $1 :Irc.Serv.Org 323 $1 :Fin de la comande /list
}
Alias ServWhois {
if (!$hget(Serv.Mask,$2)) {
servsend $1 :Irc.Serv.Org 401 $1 $2 :Ce pseudonyme n'existe pas
servsend $1 :Irv.Serv.org 318 $1 $2 :Fin de la commande /whois
halt
}
var %Suser = $hget(Serv.Suser,$2)
var %Suser2 = $remove(%Suser,+,@)
var %mode,%Suser3,%b = $numtok(%Suser2,32)
while (%b) {
%mode = $hget(Serv.Mode,$gettok(%Suser2,%b,32))
if (($istok(%mode,s,32)) || ($istok(%mode,p,32))) {
if (!$istok($hget(Serv.Salon,$gettok(%Suser2,%b,32)),$1,32)) {
dec %b
continue
}
}
%Suser3 = $addtok(%Suser3,$gettok(%Suser,%b,32),32)
dec %b
}
ServSend $1 :Irc.Serv.Org 311 $1 $2 $hget(Serv.Host,$2)
if (%Suser3) ServSend $1 :Irc.Serv.Org 319 $1 $2 : $+ %Suser3
ServSend $1 :Irc.Serv.Org 312 $1 $2 :Irc.Serv.Org
if ($istok($hget(Serv.Mode,$2),o,32)) ServSend $1 :Irc.Serv.Org 313 $1 $2 :est un IRC Opérateur
servsend $1 :Irv.Serv.org 318 $1 $2 :Fin de la commande /whois
}
;Cette alias ce déclanche lors d'un QUIT/KICK/PART pour détruire des truc quand ya plus personne sur le salon
Alias Serv.Plus.Personne {
if ($numtok($hget(Serv.Salon,$1),32) == 0) {
hdel Serv.Salon $1
hdel Serv.Salon2 $1
hdel Serv.Salon t $+ $1
hdel Serv.Mode $1
hdel Serv.Mode l $+ $1
hdel serv.mode k $+ $1
hdel serv.salon b $+ $1
hdel Serv.salon i $+ $1
}
}
;La version
alias ServVersion servsend $1 :Irc.Serv.Org 351 $1 :Version: Mircd v0.69 béta par tiot & MEENUX
alias haddt hadd $1 $2 $addtok($hget($1,$2),$3,32)
alias hdelt hadd $1 $2 $remtok($hget($1,$2),$3,1,32)
alias Sserv.NICK {
;$1 ancien nick
;$2 nouveau nick
}
alias Sserv.CONNECT {
;$1 nick qui se connect
}
alias Sserv.MODE {
;$1 nick qui chage le mode
;$2 chan où il y a le changement
;$3 les changement +mn-ob+c
;$4- les paramètre ( nick, key ... )
}
alias Sserv.OP {
;$1 nick qui fait l'action
;$2 salont où çà ce passe
;$3 celui qui subit
}
alias Sserv.DEOP {
;$1 nick qui fait l'action
;$2 salont où çà ce passe
;$3 celui qui subit
}
alias Sserv.VOICE {
;$1 nick qui fait l'action
;$2 salont où çà ce passe
;$3 celui qui subit
}
alias Sserv.DEVOICE {
;$1 nick qui fait l'action
;$2 salont où çà ce passe
;$3 celui qui subit
}
alias Sserv.QUIT {
;$1 nick qui quit
;$2- message du quit
}
alias Sserv.INVITE {
;$1 nick qui invite
;$2 salon où il invite
;$3 nick qui est invité
}
alias Sserv.OPER {
;$1 Nick de celui qui a taper /oper
;$2 : est "1" si oper réussi sinon il est "0"
}
alias Sserv.JOIN {
;$1 nick de celui qui join
;$2 salon qui est join
}
alias Sserv.TOPIC {
;$1 celui qui change le topic
;$2- le nouveau topic
}
alias Sserv.PART {
;$1 celui qui s'en vas d'un salon
;$2 le nom du salon
}
alias Sserv.KICK {
;$1 celui qui kick
;$2 salon du kick
;$3 celui qui est kické
;$4- raison du kick
}
alias Sserv.CMSG {
;MSG qui sont envoyé à un CHAN
;$1 nick qui tape le msg
;$2 salon
;$3- message envoyé ( commençant par ':')
}
alias Sserv.PMSG {
;MSG envoyé en PV
;$1 nick de celui qui envoit
;$2 nick de celui qui reçoit
;$3- message envoyé
}
alias Sserv.CNOTICE {
;notice qui sont envoyé à un CHAN
;$1 nick qui tape le msg
;$2 salon
;$3- message envoyé ( commençant par ':')
}
alias Sserv.PNOTICE {
;notice envoyé en PV
;$1 nick de celui qui envoit
;$2 nick de celui qui reçoit
;$3- message envoyé
}
Conclusion :
Débugage de certain truc, et possibilité de faire un cservice ( j'ai mit des alias à la fin )
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.