set cmdsfile "scripts/cmds.txt" if {![file exists $cmdsfile]} { set fileid [open $cmdsfile w] close $fileid } { source $cmdsfile } set allcommands [list] foreach donecmd [split [read [set fileid [open $cmdsfile]]][close $fileid] \n][unset fileid] { if {[string match -nocase "bind pub - *" $donecmd]} { lappend allcommands [lindex [split $donecmd] 3] } } bind pub n .bind add:command bind pub -|- .binds count:command bind pub n .unbind del:command proc add:command {n u h c a} { global addedcommands set command [string tolower [lindex [split $a] 0]] set action [join [lrange [split $a] 1 end]] if {[info command added:$command] == ""} { set addedcommands($command) $action proc added:$command {n u h c a} { global addedcommands puthelp "privmsg $c : [string map [list %nick [lindex [split $a] 0]] $addedcommands($::lastbind)]" } bind pub - $command added:$command save:command $command $action puthelp "notice $n :Added add:$command command." } { puthelp "notice $n :Command added:$command already exists." } } proc count:command {n u h c a} { global allcommands if {[llength $allcommands]} { puthelp "privmsg $c :Available commands: [join $allcommands]" } { puthelp "privmsg $c :No commands available." } } proc del:command {n u h c a} { global allcommands set cmd [string tolower [lindex [split $a] 0]] if {![catch {unbind pub - $cmd added:$cmd}]} { if {[set i [lsearch $allcommands -exact $cmd]] != -1} { set allcommands [lreplace $allcommands $i $i] } puthelp "notice $n :Successfully remove \002$cmd\002 PUB command." } { puthelp "notice $n :Command \002$cmd\002 does not exist." } } proc save:command {c act} { global cmdsfile set c [string map {\[ \\\[ \] \\\] \\ \\\\} $c] set cmdlist [split [read [set f [open $cmdsfile]]] \n][close $f] lappend cmdlist "bind pub - $c added:$c" lappend cmdlist "" lappend cmdlist "set addedcommands($c) [list $act]" lappend cmdlist "" set f [open $cmdsfile w] foreach cmd $cmdlist { puts $f $cmd } puts $f [printproc added:$c] close $f } # user's proc from the Tcl faq forum proc printproc proc { set args {} foreach arg [info args $proc] { if {[info default $proc $arg val]} { lappend args [list $arg $val] } { lappend args [list $arg] } } list proc $proc $args [info body $proc] } putlog "Commands.tcl has loaded successfully."