Please help me fix !top10 TCL

Help for those learning Tcl or writing their own scripts.
Post Reply
User avatar
Fahad
Op
Posts: 127
Joined: Mon Aug 29, 2016 9:40 am

Please help me fix !top10 TCL

Post by Fahad »

Please help me fix this TCL I am getting this error
<StatsBot> [10:12:01] Tcl error [stats_top10]: invalid command name "*pub:!top10"
And there is the TCL Script.

Code: Select all

#################### stats-public.tcl ############################
## Ein schönes TCL was dazu dient um das Stats.mod über
## Channelbefehle zu steuern.
##
## Diese Befehle stehen allen Moderatoren und Operatoren
## zu verfügung.
##
## Settings:
## Statistik Befehle
## ein: !stats +cmd <top10|ttop10|top20|ttop20|stat|tstat|place|tplace|all>
## aus: !stats -cmd <top10|ttop10|top20|ttop20|stat|tstat|place|tplace|all>
##
## User ausschließen von der Channel-Statistik
## ein: !stats +user <nick>
## aus: !stats -user <nick>
##
## User zurücksetzen (resetuser)
## reset: !stats reset <nick>
##
##
## viel spaß damit
## ©2002-2003 by  BlackDeath
################### stats-public.tcl ##############################

catch "unbind pub - !top10 *pub:!top10"
catch "unbind pub - !ttop10 *pub:!ttop10"
catch "unbind pub - !top20 *pub:!top20"
catch "unbind pub - !ttop20 *pub:!ttop20"
catch "unbind pub - !stat *pub:!stat"
catch "unbind pub - !tstat *pub:!tstat"
catch "unbind pub - !place *pub:!place"
catch "unbind pub - !tplace *pub:!tplace"
catch "unbind pub - !wordstats *pub:!wordstats"
catch "unbind pub - !topwords *pub:!topwords"



bind pub - !top10 stats_top10
bind pub - !ttop10 stats_ttop10
bind pub - !top20 stats_top20
bind pub - !ttop20 stats_ttop20
bind pub - !stat stats_stat
bind pub - !tstat stats_tstat
bind pub - !place stats_place
bind pub - !tplace stats_tplace
bind pub - !wordstats stats_wordstats
bind pub - !topwords stats_topwords



proc stats_top10 {nick uhost hand chan rest} {
if {[stats_cmd "top10" $chan]} {
*pub:!top10 $nick $uhost $hand $chan $rest
}
}

proc stats_ttop10 {nick uhost hand chan rest} {
if {[stats_cmd "ttop10" $chan]} {
*pub:!ttop10 $nick $uhost $hand $chan $rest
}
}

proc stats_top20 {nick uhost hand chan rest} {
if {[stats_cmd "top20" $chan]} {
*pub:!top20 $nick $uhost $hand $chan $rest
}
}

proc stats_ttop20 {nick uhost hand chan rest} {
if {[stats_cmd "ttop20" $chan]} {
*pub:!ttop20 $nick $uhost $hand $chan $rest
}
}

proc stats_stat {nick uhost hand chan rest} {
if {[stats_cmd "stat" $chan]} {
*pub:!stat $nick $uhost $hand $chan $rest
}
}

proc stats_tstat {nick uhost hand chan rest} {
if {[stats_cmd "tstat" $chan]} {
*pub:!tstat $nick $uhost $hand $chan $rest
}
}

proc stats_place {nick uhost hand chan rest} {
if {[stats_cmd "place" $chan]} {
*pub:!place $nick $uhost $hand $chan $rest
}
}

proc stats_tplace {nick uhost hand chan rest} {
if {[stats_cmd "tplace" $chan]} {
*pub:!tplace $nick $uhost $hand $chan $rest
}
}

proc stats_wordstats {nick uhost hand chan rest} {
if {[stats_cmd "wordstats" $chan]} {
*pub:!wordstats $nick $uhost $hand $chan $rest
}
}

proc stats_topwords {nick uhost hand chan rest} {
if {[stats_cmd "topwords" $chan]} {
*pub:!topwords $nick $uhost $hand $chan $rest
}
}

set stats_commands {top10 ttop10 top20 ttop20 stat tstat place tplace wordstats topwords}

proc stats_cmd {cmd chan} {
global stats_cmd
stats_cmd_load $chan
set cmd [string tolower $cmd]
if {[info exists stats_cmd($chan,$cmd)]} {
return $stats_cmd($chan,$cmd)
} else {
return true
}
}

proc stats_cmd_load {chan} {
global stats_cmd
global stats_commands
if {[info exists stats_cmd($chan,-loaded-)]} { return }
set filename [string tolower $chan]
set filename "statscom.cmd"
catch {
set f [open $filename r]
while {[gets $f line] >= 0} {
set switch [string range $line 0 0]
set cmd [string tolower [string range $line 1 end]]
set idx [lsearch $stats_commands $cmd]
if {$idx >= 0} {
switch -- $switch {
"+" {set stats_cmd($chan,$cmd) true}
"-" {set stats_cmd($chan,$cmd) false}
}
}
}
close $f
} resp
set stats_cmd($chan,-loaded-) ""
}

proc stats_cmd_save {chan} {
global stats_cmd
global stats_commands
set filename [string tolower $chan]
set filename "statscom.cmd"
catch {
set f [open $filename w]
foreach cmd [split $stats_commands] {
set cmd [string tolower $cmd]
set opt "+"
if {[info exists stats_cmd($chan,$cmd)]} {
if {$stats_cmd($chan,$cmd)} {
set opt "+"
} else {
set opt "-"
}
}
puts $f "${opt}${cmd}"
}
close $f
}
}

bind pub - !stats stats_switch
bind bot - "stats-user" stats_bot_user

proc stats_schattr {nick user opt} {
if {$opt} {
set opt "+list"
set opt_str "ein"
} else {
set opt "-list"
set opt_str "aus"
}

catch {
set dcclist [dcclist TELNET]
set dcc [lindex $dcclist 0]
set xtra [lindex $dcc 4]
set port [lindex $xtra 1]
set idx [connect localhost $port]
set hdl [idx2hand $idx]
catch { *dcc:schattr $hdl $idx "$user $opt" } result
after 1
killdcc $idx
if {$result != "0"} {
return $result
}
} result
if {$result == ""} {
puthelp "NOTICE $nick :Anzeigen der Statistiken für Benutzer $user in allen Räumen ${opt_str}geschaltet"
putlog "modpub.tcl: $nick changes $user to $opt"
} else {
puthelp "NOTICE $nick :Fehler beim Umschalten des Statistiken: $result"
}
return
}


proc stats_switch_cmd {nick chan cmd opt} {
global stats_cmd
global stats_commands
stats_cmd_load $chan
if {$opt} {
set opt_str "ein"
} else {
set opt_str "aus"
}
if {[string tolower $cmd] == "all"} {
foreach cmd [split $stats_commands] {
set cmd [string tolower $cmd ]
set stats_cmd($chan,$cmd) $opt
}

puthelp "NOTICE $nick :Alle Befehle im Raum $chan ${opt_str}geschaltet"
stats_cmd_save $chan
return
}

set cmd [string tolower $cmd]
set idx [lsearch $stats_commands $cmd]
if {$idx == -1} {
puthelp "NOTICE $nick :Falscher Befehl \"$cmd\""
return
}

set stats_cmd($chan,$cmd) $opt
puthelp "NOTICE $nick :Der Befehl \"$cmd\" im Raum $chan ${opt_str}geschaltet"
stats_cmd_save $chan
return
}



proc stats_bot_user {from command arg} {
# what are the parameters
set cmd [split $arg]
set nick [lindex $cmd 0]
set user [lindex $cmd 1]
set opt [lindex $cmd 2]
# do the work
stats_schattr $nick $user $opt
}

proc stats_switch_user {nick user opt} {
# inform other bots
# do it yourselt, too
stats_schattr $nick $user $opt
return 0
}



proc stats_reset_user {nick chan opt} {
resetuser $opt $chan
puthelp "NOTICE $nick :Statistiken des Benutzers $opt wurden im Raum $chan zurückgesetzt"
}



proc stats_switch {nick uhost hand chan rest} {
if {![isvoice $nick $chan] && ![isop $nick $chan]} {
puthelp "NOTICE $nick :Dieser Befehl ist nur für Moderatoren"
return 0
}

set lrest [split $rest]
set cmd [lindex $lrest 0]
set arg [lindex $lrest 1]
switch -exact -- $cmd {
+cmd { stats_switch_cmd $nick $chan $arg true }
-cmd { stats_switch_cmd $nick $chan $arg false }
reset { stats_reset_user $nick $chan $arg }
+user { stats_switch_user $nick $arg true }
-user { stats_switch_user $nick $arg false }
}
}

putlog "stats-public.tcl by BlackDeath loaded..."
Post Reply