All pastes #106798 Raw Edit

Miscellany

public text v1 · immutable
#106798 ·published 2006-07-30 16:09 UTC
rendered paste body
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."