and which are clones, the tcl works well when the channel has only 40 users online;
Code: Select all
[15:09] <@sedition> .clones
[15:09] <@Kantuta> Starting clonescan for #Beni...
[15:09] <@Kantuta> (scz-181-114-110-00033.wimaxtigo.bo) Nicklist: Mster, sedition - Clones: 1
[15:09] <@Kantuta> Clones: 1 (25.0%) Realusers: 3 (75.0%) - Took: 0.894ms.
when the channel has more than 50 users including clones and real
then give this ruling
Code: Select all
[15:12] <@sedition> .clones
[15:12] <Kantuta> Starting clonescan for #ReQuesT...
Code: Select all
Tcl error [::clonescan::commands]: can't read "clonescan::clones(#ReQuesT:2604)": no such element in array
is where the error causes and the tcl does not work well
Code: Select all
namespace eval clonescan {
variable copyright "[lindex [split [info script] /] end] - v1.0.0.0 - r0t3n"
variable clones
array set clones {}
variable trigger "."
bind pub m|o "${trigger}clone" [namespace current]::commands
bind pub m|o "${trigger}clones" [namespace current]::commands
}
proc clonescan::commands {nickname hostname handle channel text} {
putquick "PRIVMSG $channel :Starting clonescan for $channel..."
set start [clock clicks]
foreach user [chanlist $channel] {
if {[clonescan::checknick $user]} { continue }
foreach user1 [chanlist $channel] {
if {[clonescan::checknick $user1]} { continue }
set host [lindex [split [getchanhost $user $channel] @] 1]
set host1 [lindex [split [getchanhost $user1 $channel] @] 1]
if {![string equal -nocase $user1 $user]} {
if {[string equal -nocase $host $host1]} {
if {[info exists clonescan::clones($channel:$host)]} {
set list $clonescan::clones($channel:$host)
set add ""
if {[lsearch -exact "$list" $user] == "-1"} {
if {$add == ""} {
set add "$user"
} else {
set add "$add $user"
}
}
if {([lsearch -exact "$list" $user1] == "-1") && ([lsearch -exact "$add" $user1] == "-1")} {
if {$add == ""} {
set add "$user1"
} else {
set add "$add $user1"
}
}
if {$add != ""} {
set clonescan::clones($channel:$host) "$list $add"
}
} else {
set clonescan::clones($channel:$host) "$user $user1"
}
}
}
}
}
set end [clock clicks]
set count "0"
foreach clone [array names clonescan::clones $channel:*] {
if {$clone == ""} { return }
set host [lindex [split $clone :] 1]
set nicklist [join "[lsort -unique $clonescan::clones($channel:$host)]" ", "]
set i [expr {[clonescan::string2llength $nicklist] - 1}]
putserv "PRIVMSG $channel :\($host\) Nicklist: $nicklist - Clones: $i"
incr count $i
}
foreach variable [array names clonescan::clones $channel:*] {
unset clonescan::clones($variable)
}
putserv "PRIVMSG $channel :Clones: $count ([set p [format %.1f [expr ($count.0 * 100.0) / [set c [llength [chanlist $channel]]].0]]]%) Realusers: [expr ($c - $count)] ([expr (100.0 - $p)]%) - Took: [expr ($end-$start)/1000.0]ms."
}
proc clonescan::checknick {nickname} {
global botnick
if {[string equal -nocase $botnick $nickname] || $nickname == "Q" || $nickname == "S"} {
return 1
} else {
return 0
}
}
proc clonescan::string2llength {str} {
set i "0"
foreach x $str {
incr i 1
}
return "$i"
}
putlog "$clonescan::copyright - loaded!"