namespace eval ::ModeD:: { # # ModeD.tcl startet 21.09.2003 by CyBex, last updated 17.03.2004 # # any problems or suggestions? write to Script-ModeD@CyBex.has.nolife.org # # This Script is written for one channel only and its only for the # www.QuakeNET.org channel mode +D .. it scan for new joining users # and give them +v (do visible without talk) .. or kick user that # found in the banlist or have the +k flag. Ant an auto-limit is included # to see, how many user are at moment online :-) # # You can see this script work in #berlin and #news.de @ QuakeNet # # Feel free to change this script, but please submit me your changes :-) # # Version 0.3.x is testet with Eggdrop 1.6.15 and 1.6.16 on TCL 8.3 # # Changes in 0.3.81 # + added delay and change a little the random # + improved autolimiter # Release 0.3.47 # # config #how much higher set ::ModeD::userandom 0 set ::ModeD::usedelay 0 set ::ModeD::random 1 set ::ModeD::delay 1 set ::ModeD::raiselimit 5 #time in minutes to change the limit set ::ModeD::uplimitticks 8 set ::ModeD::downlimitticks 16 #save stats 0/1 and path to data dir, or create "data" in your eggdrop folder set ::ModeD::savestats 1 set ::ModeD::datadir data set ::ModeD::uselimiter 0 set ::ModeD::minlimiter 0 # switch debug by default on/off if {![info exists ::ModeD::debug]} { set ::ModeD::debug 0 } #my special settings ;) set ::ModeD::channel #berlin if {$::username=="Newsflash"} { set ::ModeD::savestats 1 set ::ModeD::raiselimit 3 set ::ModeD::uplimitticks 6 set ::ModeD::downlimitticks 60 set ::ModeD::channel #news.de set ::ModeD::uselimiter 1 } if {$::username=="b0rkBerlin"} { set ::ModeD::userandom 0 set ::ModeD::usedelay 1 set ::ModeD::random 1 set ::ModeD::delay 35 set ::ModeD::uplimitticks 16 set ::ModeD::downlimitticks 32 set ::ModeD::uselimiter 1 set ::ModeD::minlimiter 101 } if {$::username=="Berlin"} { set ::ModeD::userandom 0 set ::ModeD::usedelay 1 set ::ModeD::random 1 set ::ModeD::delay 5 set ::ModeD::uplimitticks 16 set ::ModeD::downlimitticks 32 set ::ModeD::uselimiter 1 set ::ModeD::minlimiter 101 } if {$::username=="20mark"} { set ::ModeD::userandom 1 set ::ModeD::random 59 set ::ModeD::savestats 0 set ::ModeD::raiselimit 3 set ::ModeD::uplimitticks 15 set ::ModeD::downlimitticks 120 set ::ModeD::channel #news.de } if {$::username=="plain"} { set ::ModeD::channel #tcl set ::ModeD::uplimitticks 10 set ::ModeD::downlimitticks 10 } if {$::username=="Chatter"} { set ::ModeD::DoExtStats 1 } { set ::ModeD::DoExtStats 1 } # data ## helper ## main ### vars set ::ModeD::develop 0 #if {$::username=="b0rkBerlin" || $::username=="Berlin"} { set ::ModeD::develop 1 } set ::ModeD::major 0 set ::ModeD::minor 3 if {![info exist ::ModeD::build] || !$::ModeD::develop} { set ::ModeD::build 81 } { incr ::ModeD::build } if {![info exist ::ModeD::run]} { set ::ModeD::run 1 } { incr run } set ::lateststable 0.3.81 #first edit: #last edit: ### helper if {$debug} { putcmdlog "Warning! Debug Mode ist \002ON\002!" } if {$::lateststable!="$major.$minor.$build"} { if $develop { putcmdlog "Warning! Developer Mode \002ON\002! Latest stable: $::lateststable" } { putcmdlog "Warning! Unstable Version! Latest stable: $::lateststable" } } ### binds bind raw - 311 ::ModeD::raw311 bind raw - 355 ::ModeD::raw355 bind pubm - "$::ModeD::channel *" ::ModeD::countwords; bind splt - * ::ModeD::netsplit:splitsomewhere bind splt - "$::ModeD::channel *" ::ModeD::netsplit:split bind rejn - "$::ModeD::channel *" ::ModeD::netsplit:rejoin bind mode - "$::ModeD::channel +l" ::ModeD::ModeL bind mode - "$::ModeD::channel -l" ::ModeD::ModeL2 bind time - "*" ::ModeD::time:check ### procs proc onchan {nick {chan ""}} { if {$chan!=""} { #putcmdlog "onchan ModeD: [expr [lsearch -exact [string tolower $::ModeD::onlinelist] [string tolower $nick]]!=-1 || [::onchan $nick $chan]]" return [expr [lsearch -exact [string tolower $::ModeD::onlinelist] [string tolower $nick]]!=-1 || [::onchan $nick $chan]] } { #putcmdlog "onchan ModeD: [expr [lsearch -exact [string tolower $::ModeD::onlinelist] [string tolower $nick]]!=-1 || [::onchan $nick]]" return [expr [lsearch -exact [string tolower $::ModeD::onlinelist] [string tolower $nick]]!=-1 || [::onchan $nick]] } } #### helper proc loadfile {name args} { if {$::ModeD::debug} { putcmdlog "load $name" } if [info exists name] { set fh [open $name r] set gets [gets $fh] close $fh return $gets } } proc savefile {name data} { if {$::ModeD::debug} { putcmdlog "save $name" } set fh [open $name w] puts $fh $data close $fh } proc appendfile {name data} { if [info exists name] { if {$::ModeD::debug} { putcmdlog "append $name" } set fh [open $name a] puts $fh $data close $fh } { save $name $data } } proc debug:makedummy {} { proc adddebug {args} {} proc putdebug {args} {} } if ![info exists ::ModeD::Statistik(Init)] {set ::ModeD::Statistik(Init) 0} {incr ::ModeD::Statistik(Init)} if ![info exists ::ModeD::Statistik(Netsplit)] {set ::ModeD::Statistik(Netsplit) 0} if ![info exists ::ModeD::Statistik(Rejoin)] {set ::ModeD::Statistik(Rejoin) 0} if ![info exists ::ModeD::Statistik(WPM)] {set ::ModeD::Statistik(WPM) 0} if ![info exists ::ModeD::Statistik(LPM)] {set ::ModeD::Statistik(LPM) 0} if [info exist ::ModeD::debug] { if $::ModeD::debug { if [info exist debug:buffer] { set debug:buffer [list] } proc adddebug {args} { if {[lindex $args 0]=="-newline"} { lappend ::ModeD::debug:buffer [lrange $args 1 end] } { set ::ModeD::debug:buffer [lreplace $::ModeD::debug:buffer end end [set args "[lindex $::ModeD::debug:bufer end]${args}"]] } } proc putdebug {args} { putcmdlog "putdebug $args!=[list]" if {$args!=[list]} { putcmdlog [join $args] } { foreach line $::ModeD:buffer { putcmdlog $line } set debug:buffer [list] } } } { debug:makedummy } } { debug:makedummy } if {![info exists ::ModeD::onlinelist]} { set ::ModeD::onlinelist [list] } if {![info exists ::ModeD::userlist]} { set ::ModeD::userlist [list] } if {![info exists ::ModeD::voicelist]} { set ::ModeD::voicelist [list] } if {![info exists ::ModeD::kicklist]} { set ::ModeD::kicklist [list] } if {![info exists ::ModeD::authlist]} { set ::ModeD::authlist [list] } proc user:add {mask} { if $::ModeD::debug { putcmdlog " u:a start : $mask" } set found 0 if ![info exist ::ModeD::userlist] {set ::ModeD::userlist [list]} set num 0; foreach {name last} $::ModeD::userlist { set time [expr [unixtime]-$last] if {$time>895 && !$::ModeD::develop || $time>895 && $::ModeD::develop} { if $::ModeD::debug { putcmdlog "user:add: nick $name last [duration $time] deleted" } set ::ModeD::userlist [lreplace $ModeD::userlist $num [expr $num+1]] } { incr num 2 } } set found 0; foreach {name time} $::ModeD::userlist { if {$name==$mask || [string equal $mask $name]} { set found 1; break} } if !$found { lappend ::ModeD::userlist $mask lappend ::ModeD::userlist [expr [unixtime]+20-[rand 60]] } return $found } #### main proc raw311 {args} { if $::ModeD::debug { putcmdlog " r311 start : $args" } if ![info exist ::ModeD::voicelist] {set ::ModeD::voicelist [list]} if ![info exist ::ModeD::kicklist] {set ::ModeD::kicklist [list]} set nick [lindex [split [lindex $args 2]] 1] set ident [lindex [split [lindex $args 2]] 2] set host [lindex [split [lindex $args 2]] 3] set mask $nick!$ident@$host set hand [finduser $mask] set chattr [chattr $hand $::ModeD::channel] set banlist [list] if {![info exist ::ModeD::users($nick)]} {set ::ModeD::users($nick) $mask} if {[banlist]!=[list]} { lappend banlist [banlist] } if {[banlist $::ModeD::channel]!=[list]} { lappend banlist [banlist $::ModeD::channel] } set num 0; foreach item $banlist { foreach ban $item { incr num if {[string match -nocase [list [lindex $ban 0]] $mask]} { if {[lsearch -exact $::ModeD::kicklist $mask] == -1} { putcmdlog "add $nick to kicklist / match banlist $num / string match [list [lindex $ban 0]] $mask [string match [list [lindex $ban 0]] $mask]" lappend ::ModeD::kicklist $mask lappend ::ModeD::kicklist [lindex $ban 1] } { putcmdlog "$nick is allready on kicklist 1" } } } } if {$hand!="*"} { if {[matchattr $hand v|gv $::ModeD::channel] && ![isop $nick $::ModeD::channel] && ![isvoice $nick $::ModeD::channel] } { if {[lsearch -exact $::ModeD::voicelist $nick] == -1} { putcmdlog "add $nick to voicelist" lappend ::ModeD::voicelist $nick #pushmode $::ModeD::channel +v $nick } } if {[matchattr $hand k|k $::ModeD::channel]} { if {[lsearch -exact $::ModeD::kicklist $mask] == -1} { putcmdlog "add $nick to kicklist / match +k flag" lappend ::ModeD::kicklist $mask lappend ::ModeD::kicklist "banned" #pushmode $::ModeD::channel +v $nick } { putcmdlog "$nick is allready on kicklist 2" } } } } proc raw355 {args} { if $::ModeD::debug { putcmdlog " r355 start : $args" } if ![info exist ::ModeD::raw355:timestamp] {set ::ModeD::raw355:timestamp [clock sec]} if {[expr [clock sec]-${::ModeD::raw355:timestamp}]<=3} { set onlyadd 1 } { set onlyadd 0; set ::ModeD::raw355:timestamp [clock sec] } set whois ""; set skip ""; set users [lindex [split [lindex $args 2] :] 1] if !$onlyadd { set ::ModeD::onlinelist [list] foreach user [array names ::ModeD::users] { unset ::ModeD::users($user) } } foreach user [split $users] { set found [user:add $user] ### if $found { lappend skip $user } { lappend whois $user; utimer [expr 9+[rand 20]+[rand 20]] [list puthelp [subst -nocommands -nobackslashes {WHOIS $user}]] } if {[lsearch -exact $::ModeD::onlinelist $user]==-1} { lappend ::ModeD::onlinelist $user } } if ![info exist ::ModeD::statuscounter] { set ::ModeD::statuscounter 0 } { incr ::ModeD::statuscounter } set text "\002whois:\002$whois \002skip:\002$skip" set text [string map -nocase {{cybex} {C*B*x} {never} {n*v*r} {securetohopethatneverthiswordcomes} {andthisonetwoorbettertoorevenbettertoo} {die} {d**}} $text] set ::ModeD::checktext $::ModeD::onlinelist if ![info exist ::ModeD::lastwhoistext] { set ::ModeD::lastwhoistext "" } if { ( $::ModeD::statuscounter>="15" && ( $whois!="" || $skip!="" ) ) && [string length $::ModeD::checktext] != [string length $::ModeD::lastwhoistext]} { set ::ModeD::statuscounter 0; set ::ModeD::lastwhoistext $::ModeD::checktext } { if {$whois!="" || $skip!=""} { if $::ModeD::debug { putcmdlog "$text" } } } } proc countwords {nick host hand chan text} { if ![info exists ::ModeD::Statistik(WPM)] {set ::ModeD::Statistik(WPM) 0} {incr ::ModeD::Statistik(WPM) [llength [split $text]]} if ![info exists ::ModeD::Statistik(LPM)] {set ::ModeD::Statistik(LPM) 0} {incr ::ModeD::Statistik(LPM)} } proc netsplit:splitsomewhere {nick args} { putserv "MODE $::ModeD::channel -l ( ll:$::ModeD::lastlimit )" ; if {$::ModeD::develop && $::lmdmsg!="cs"} {set ::lmdmsg "cl"; putcmdlog "Clear Limit somewhere"} set ::ModeD::lastlimit 150 set ::ModeD::lastlimittick 0 } proc netsplit:split {nick args} { #putserv "MODE $::ModeD::channel -l" ; if {$::ModeD::develop} {putcmdlog "Clear Limit"} if {$::ModeD::develop && $::lmdmsg!="cb"} {set ::lmdmsg "cl"; putcmdlog "Clear Limit berlin ( ll:$::ModeD::lastlimit ul:[expr [llength [chanlist $::ModeD::channel]]+[llength $::ModeD::userlist]/2+$::ModeD::raiselimit] ol:[expr [llength [chanlist $::ModeD::channel]]+[llength $::ModeD::onlinelist]+$::ModeD::raiselimit] )"} set ::ModeD::lastlimit 150 set ::ModeD::lastlimittick 0 set found [user:add $nick] if ![info exists ::ModeD::Statistik(Netsplit)] {set ::ModeD::Statistik(Netsplit) 0} {incr ::ModeD::Statistik(Netsplit)} } proc netsplit:rejoin {nick args} { if ![info exists ::ModeD::Statistik(Rejoin)] {set ::ModeD::Statistik(Rejoin) 0} {incr ::ModeD::Statistik(Rejoin)} if ![info exist ::ModeD::userlist] {set ::ModeD::userlist [list]} set num [lsearch -exact $::ModeD::userlist $nick] if {$num!="-1"} { set ::ModeD::userlist [lreplace $::ModeD::userlist $num [expr $num+1]] } set ::ModeD::lastlimit 101 } proc ModeL {nick host hand chan mc victim} { if {![string equal -no $chan $::ModeD::channel]} {return} if {$nick!=$::botnick && $::ModeD::develop} {set ::lmdmsg "ms"; putcmdlog "MODE Change $chan $mc $victim by $nick ( set ll:$::ModeD::lastlimit ul:[expr [llength [chanlist $::ModeD::channel]]+[llength $::ModeD::userlist]/2+$::ModeD::raiselimit] ol:[expr [llength [chanlist $::ModeD::channel]]+[llength $::ModeD::onlinelist]+$::ModeD::raiselimit] ) "} set ::ModeD::lastlimit $victim set ::ModeD::lastlimittick 0 utimer 5 [list puthelp "NAMES -d $::ModeD::channel"] } proc ModeL2 {nick host hand chan mc victim} { if {![string equal -no $chan $::ModeD::channel]} {return} if {$nick!=$::botnick && $::ModeD::develop} {set ::lmdmsg "mc"; putcmdlog "MODE Change $chan $mc by $nick (clear ll:$::ModeD::lastlimit ul:[expr [llength [chanlist $::ModeD::channel]]+[llength $::ModeD::userlist]/2+$::ModeD::raiselimit] ol:[expr [llength [chanlist $::ModeD::channel]]+[llength $::ModeD::onlinelist]+$::ModeD::raiselimit] )"} set ::ModeD::lastlimittick 0 utimer 5 [list puthelp "NAMES -d $::ModeD::channel"] set ::ModeD::lastlimit 150 } proc time:doit {args} { utimer 5 [list puthelp "NAMES -d $::ModeD::channel"] if {[lindex $args 0]=="23" && [lindex $args 1]=="59"} { set ::ModeD::kicklist [list] set ::ModeD::voicelist [list] } if ![info exist ::ModeD::userlist] {set ::ModeD::userlist [list]} if ![info exist ::ModeD::kicklist] {set ::ModeD::kicklist [list]} if ![info exist ::ModeD::voicelist] {set ::ModeD::voicelist [list]} set limit [expr [llength [chanlist $::ModeD::channel]]+[llength $::ModeD::userlist]/2+$::ModeD::raiselimit] if {$limit<$::ModeD::minlimiter} {set limit $::ModeD::minlimiter} if ![info exist ::ModeD::lastlimit] {set ::ModeD::lastlimit 0} if ![info exist ::ModeD::lastlimittick] {set ::ModeD::lastlimittick 0} #remove dead nicks foreach checknick $::ModeD::voicelist { if {[lsearch -exact $::ModeD::onlinelist $checknick]==-1} { set removenum [lsearch -exact $::ModeD::voicelist $checknick] set ::ModeD::voicelist [lreplace $::ModeD::voicelist $removenum $removenum] set removenum [lsearch -exact $::ModeD::voicelist $checknick] putcmdlog "remove $checknick from voicelist" } } if ![info exists ::ModeD::LastKickNick] {set ::ModeD::LastKickNick [list]} foreach {checkmask checktype} $::ModeD::kicklist { putcmdlog "DEBUG: Check Mask $checkmask Type $checktype" set cknick [lindex [split $checkmask !] 0] set ckhand [nick2hand $cknick] if {[string match -nocase *@b0rk.de $checkmask] || [string match -nocase *@217.160.128.86 $checkmask] || [matchattr $ckhand bnm] } { set removenum [lsearch -exact $::ModeD::kicklist $checkmask] set ::ModeD::kicklist [lreplace $::ModeD::kicklist $removenum [expr 1+$removenum]] continue } if {[lsearch -exact [split [string tolower [join $::ModeD::onlinelist]]] [string tolower $cknick]]==-1} { set removenum [lsearch -exact $::ModeD::kicklist $checkmask] set ::ModeD::kicklist [lreplace $::ModeD::kicklist $removenum [expr 1+$removenum]] putcmdlog "REMOVE $removenum $cknick from kicklist" } if {[lsearch -exact [split [string tolower [join $::ModeD::LastKickNick]]] [string tolower $cknick]]!=-1} { set removenum2 [lsearch -exact [split [string tolower [join $::ModeD::LastKickNick]]] [string tolower $cknick]] if {[expr [unixtime]-[lindex $::ModeD::LastKickNick [expr 1+$removenum2]]]>598} { set removenum [lsearch -exact $::ModeD::kicklist $checkmask] putcmdlog "remove $removenum [lindex $::ModeD::kicklist $removenum]" set ::ModeD::kicklist [lreplace $::ModeD::kicklist $removenum [expr 1+$removenum]] } } } foreach {checkmask checktype} $::ModeD::kicklist { set cknick [lindex [split $checkmask !] 0]; set ckhand [nick2hand $cknick] if {[string match -nocase *@b0rk.de $checkmask] || [string match -nocase *@217.160.128.86 $checkmask] || [matchattr $ckhand bnm] } { continue } if {[lsearch -exact [split [string tolower [join $::ModeD::onlinelist]]] [string tolower $cknick]]!=-1} { if {[lsearch -exact [split [string tolower [join $::ModeD::LastKickNick]]] [string tolower $cknick]]!=-1} { if [string match -nocase *.users.quakenet.org $checkmask] { set banmask *!*@[lindex [split $checkmask @] 1] } { set banmask [maskhost $checkmask] } putlog "BAN $::ModeD::channel +b $banmask // $checkmask" puthelp "MODE $::ModeD::channel +b $banmask" } putlog "KICK $cknick $::ModeD::channel :$checktype" puthelp "KICK $::ModeD::channel $cknick :$checktype" lappend ::ModeD::LastKickNick $cknick lappend ::ModeD::LastKickNick [unixtime] } } foreach {cknick dtime} $::ModeD::LastKickNick { if {[expr [unixtime]-$dtime]>600} { set Num [lsearch -exact [split [string tolower [join $::ModeD::LastKickNick]]] [string tolower $cknick]] if {$Num!=-1} { set ::ModeD::LastKickNick [lreplace $::ModeD::LastKickNick $Num [expr $Num+1]] } putcmdlog "Remove $cknick from LastKickNicks $Num - LastKickNicks ([llength $::ModeD::LastKickNick])" } } if {$::ModeD::voicelist != [list] && ( [llength $::ModeD::voicelist] >= 4 || [lindex $args 0]=="00" || [lindex $args 0]=="15" || [lindex $args 0]=="30" || [lindex $args 0]=="45") || ( $::ModeD::voicelist != [list] && ( ( $::ModeD::lastlimit<$limit && $::ModeD::lastlimittick>=$::ModeD::uplimitticks ) || ( $::ModeD::lastlimit>$limit && $::ModeD::lastlimittick>=$::ModeD::downlimitticks ) ) ) || ($::ModeD::voicelist != [list] && ($::ModeD::lastlimit<[expr $limit-($::ModeD::raiselimit-2)] || $::ModeD::lastlimit>[expr $limit+($::ModeD::raiselimit+2)])) } { if {$::ModeD::lastlimit!=$limit && $::ModeD::lastlimittick!=0} { putcmdlog "VOICELIST-LIMIT: $limit $::ModeD::voicelist" foreach {a b c d e} $::ModeD::voicelist { set ::lmdmsg "lv"; puthelp "MODE $::ModeD::channel +lvvvvv $limit $a $b $c $d $e" putcmdlog "MODE $::ModeD::channel +lvvvvv $limit $a $b $c $d $e ( ll:$::ModeD::lastlimit ul:[expr [llength [chanlist $::ModeD::channel]]+[llength $::ModeD::userlist]/2+$::ModeD::raiselimit] ol:[expr [llength [chanlist $::ModeD::channel]]+[llength $::ModeD::onlinelist]+$::ModeD::raiselimit] )" } set ::ModeD::voicelist [list] set ::ModeD::lastlimit $limit set ::ModeD::lastlimittick 0 if $::ModeD::debug { putcmdlog "set ::ModeD::lastlimittick to 0 - $limit/$::ModeD::lastlimit - $args" } } { putcmdlog "VOICELIST: $::ModeD::voicelist" foreach {a b c d e f} $::ModeD::voicelist { puthelp "MODE $::ModeD::channel +vvvvvv $a $b $c $d $e $f" putcmdlog "MODE $::ModeD::channel +vvvvvv $a $b $c $d $e $f" } set ::ModeD::voicelist [list] } } if { ( ( $::ModeD::lastlimit<$limit && $::ModeD::lastlimittick>=$::ModeD::uplimitticks ) || ( $::ModeD::lastlimit>$limit && $::ModeD::lastlimittick>=$::ModeD::downlimitticks ) ) || (($::ModeD::lastlimit<[expr $limit-($::ModeD::raiselimit-2)] || $::ModeD::lastlimit>[expr $limit+($::ModeD::raiselimit+2)])) } { putcmdlog "set limit from $::ModeD::lastlimit to $limit after [duration [expr $::ModeD::lastlimittick*60]]" set ::ModeD::lastlimit $limit set ::lmdmsg "pm"; putcmdlog "set Limit in time:doit (pushmode ll:$::ModeD::lastlimit l:$limit ul:[expr [llength [chanlist $::ModeD::channel]]+[llength $::ModeD::userlist]/2+$::ModeD::raiselimit] ol:[expr [llength [chanlist $::ModeD::channel]]+[llength $::ModeD::onlinelist]+$::ModeD::raiselimit] )" pushmode $::ModeD::channel +l $limit set ::ModeD::lastlimittick 0 if $::ModeD::debug { putcmdlog "set ::ModeD::lastlimittick to 0 - $limit/$::ModeD::lastlimit - $args" } } { incr ::ModeD::lastlimittick if $::ModeD::debug { putcmdlog "incr ::ModeD::lastlimittick to $::ModeD::lastlimittick - $limit/$::ModeD::lastlimit - $args" } } #später ersetzen durch if ::ModeD::savestat if {$::ModeD::savestats} { if {[llength $args]==5} { set fname $::ModeD::datadir/day.$::nick.[lindex $args 4].[lindex $args 3].[lindex $args 2] set op 0; set voice 0; set visit 0; foreach user [chanlist $::ModeD::channel] { if [isop $user $::ModeD::channel] { incr op } elseif [isvoice $user $::ModeD::channel] { incr voice } { incr visit } } set data [list] lappend data [lindex $args 1] lappend data [lindex $args 0] lappend data [expr [llength [chanlist $::ModeD::channel]]+[llength $::ModeD::onlinelist]] lappend data $op lappend data $voice lappend data $visit lappend data [llength $::ModeD::onlinelist] lappend data [expr [llength $::ModeD::userlist]/2] lappend data $::ModeD::lastlimittick lappend data $limit lappend data $::ModeD::lastlimit lappend data [expr [llength $::ModeD::kicklist]/2] lappend data [expr [llength $::ModeD::voicelist]] if {$::ModeD::DoExtStats} { lappend data $::ModeD::Statistik(Netsplit) lappend data $::ModeD::Statistik(Rejoin) set WPM $::ModeD::Statistik(WPM); lappend data $::ModeD::Statistik(WPM); set ::ModeD::Statistik(WPM) 0 set LPM $::ModeD::Statistik(LPM); lappend data $::ModeD::Statistik(LPM); set ::ModeD::Statistik(LPM) 0 } appendfile $fname $data } } set num 0; foreach {name last} $::ModeD::userlist { set time [expr [unixtime]-$last] if {$time>895} { #set num [lsearch $::ModeD::userlist $name]; if $::ModeD::debug { putcmdlog "time:doit: nick $name last [duration $time] deleted" } set ::ModeD::userlist [lreplace $ModeD::userlist $num [expr $num+1]] } { incr num 2 } } } proc time:check {arg1 arg2 arg3 arg4 args} { if {$::ModeD::userandom} {set time [expr [rand $::ModeD::random]+1]} \ elseif {$::ModeD::usedelay} {set time $::ModeD::delay} {set time 1} set cmd [list ::ModeD::time:doit $arg1 $arg2 $arg3 $arg4 $args] if {$::ModeD::userandom || $::ModeD::usedelay && $::ModeD::debug} {putcmdlog "utimer $time $cmd"} if {$::ModeD::userandom || $::ModeD::usedelay} {utimer $time $cmd} {eval $cmd} } proc main {args} { } ### init proc init {args} { set err [catch {main $args} msg] return [list $err $msg] } set init [init] } # proc fixes for me proc lol_whois_reply {args} {} proc lol_whois_unknow {args} {} namespace eval ::ModeD:: { #set ::ModeD::develop 0 putlog "ModeD.tcl loaded version $major.$minor.$build.$run" return "$major.$minor.$build.$run" } set ::lmdmsg ""